Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Tworzenie rankingu do pliku *.txt.

Ostatnio zmodyfikowano 2014-02-14 22:05
Autor Wiadomość
mikson
Temat założony przez niniejszego użytkownika
Tworzenie rankingu do pliku *.txt.
» 2014-02-14 16:04:28
Witam,

Ostatnio napisałem program, który ma wczytać plik "pomocniczy.txt", który zawiera taką sekwencję:

nick gościa
ilość zdobytych przez niego punktów
nick gościa
ilość pkt

i tak dla 55 gościów.

Więc program wczytuje tą sekwencję i ma z niej utworzyć ranking, który tak oto ustawi tych gości malejąco wg. zdobytych przez nich pkt. Tak ma on wyglądać:

1. Nick gościa = 150 pkt
2. Nick = 100 pkt
3. Nick = 50 pkt

itd...

Tak wygląda kod:

C/C++
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
   
    string tab[ 100 ]; // tablica przechowująca nicki już uwzględnione w rankingu
    int tabpos = 0; // zmienna przechowująca najbliższy wolny index tablicy wyżej
    bool zgoda;
   
    std::fstream ranking;
    std::fstream pomocniczy;
   
    ranking.open( "RANKING.TXT", std::ios::in | std::ios::out );
    pomocniczy.open( "pomocniczy.txt", std::ios::in | std::ios::out );
   
    double max, pkt;
    string nick, pom, maxNick;
   
    int i = 1; // zmienna określająca, które miejsce ma sprawdzany aktualnie gościu (najpierw program szuka największej liczby, dlatego pierwszy będzie pierwszy :D )
   
    for(;; )
    {
       
        max =- 1;
       
        while( !pomocniczy.eof() )
        {
            zgoda = true;
           
            getline( pomocniczy, nick );
            getline( pomocniczy, pom );
           
            pkt = atof( pom.c_str() ); // konwersja string do double
           
            if( pkt >= max && pkt != 0 ) // jeśli sprawdzana ilość pkt jest większa od dotychczasowej maksymalnej, zapisuje pkt jako aktualny "kandydat" do bycia największym. Jeśli ktoś ma 0 pkt nie wpisujemy go do rankingu (drugi warunek)
            {
                for( int buf = 0; buf < tabpos; buf++ )
                {
                    if( tab[ aha ] == lol )
                    {
                        zgoda = false; // ta pętla szuka czy ten nick nie był już wykorzystany. jeśli był, zmienia zmienną "zgoda" na false.
                        break;
                    }
                }
               
               
                if( zgoda == true ) // jeśli nie był wykorzystany a jest większy, wpisuje go do tablicy wykorzystanych i ustawia inne potrzebne zmienne
                {
                    maxNick = nick;
                    max = pkt;
                   
                    tab[ tabpos ] = maxNick;
                    tabpos++;
                   
                }
               
            }
        }
        if( max == 0 ) // jeśli sprawdzany gość ma 0 pkt (a zakładamy, że zawsze przynajmniej jeden ma i nie mamy wypisywać do rankingu gości którzy mają 0), przerywa pętlę.
        {
            break;
        }
       
        ranking << i;
        ranking << ". ";
        ranking << maxNick;
        ranking << " = ";
        ranking << max;
        ranking << endl;
       
        // ^ wypisuje do rankingu kolesia na miejscu i-tym.
       
        i++;
        cin.sync();
       
    }
   
   
    ranking.close();
    pomocniczy.close();
}

Program nie działa.
Albo plik rankingu jest pusty, albo zawiera dwóch gości zupełnie nie wiadomo skąd, ani najlepszych, ani z pierwszych z pliku pomocniczy.txt...
P-104635
alixir
» 2014-02-14 17:13:13
Nie bardzo widzę jakby ten program miał działać.
Masz jedną tablicę do przechowywania nicków, ale nie masz tablicy która przechowywałaby ich wynik.
 
Nie lepiej jest utworzyć tablicę struktur, wczytać do niej wszystkie rekordy, potem posortować według ilości punktów i na końcu wyświetlić według określonego kryterium.
P-104638
mikson
Temat założony przez niniejszego użytkownika
» 2014-02-14 22:05:42
Faktycznie, jest to o wiele prostsze rozwiązanie.
Dzięki za pomoc napisze jak zrobię ;)
P-104642
« 1 »
  Strona 1 z 1