Wojteky2000 Temat założony przez niniejszego użytkownika |
Sortowanie bąbelkowe wyników » 2016-04-17 12:19:30 Witam! Chciałem stworzyć program, który posortowałby mi wyniki (które zostałyby pobrane z pliku tekstowego) i potem zapisał je w nowym pliku tekstowym. Póki co skleiłem coś takiego:
#include <iostream> #include <fstream> #include <cstdlib> using namespace std; string imie[100], nazwisko[100]; void sortowanie_babelkowe(int *tab, int n) { for(int i=1; i<n; i++) { for(int j=n-1; j>=1; j--) { if(tab[j]<tab[j-1]) { int bufor; bufor=tab[j-1]; tab[j-1]=tab[j]; tab[j]=bufor; } } } } int wynik[100]; int main() { fstream plik; plik.open("wynik.txt",ios::in); if(plik.good()==false) { cout << "plik nie istnieje"; exit(0); } string linia; int nr_linii=1; int liczba=0; while(getline(plik, linia)) {
liczba=liczba+1; nr_linii=nr_linii+1; switch(nr_linii) { case nr_linii: imie[liczba] = linia; break; case nr_linii: nazwisko[liczba] = linia; break; case nr_linii: wynik[liczba]=atoi(linia.c_str()); break;
}
nr_linii++; } }
Jednak kompilator nie przyjmuje mi "case nr_linii", ponieważ nr_linii nie może pojawić się w stałem eksprecjii czy coś w tym stylu. Pomoglibyście? Oczywiście zastrzegam nie jest to praca domowa - robię to dla siebie na przyszłość gdyby się coś takiego przydało. |
|
carlosmay |
» 2016-04-17 12:31:10 case nr_linii: imie[ liczba ] = linia; break; |
Tutaj musi być wartość, np: case 1: { } break; |
|
Wojteky2000 Temat założony przez niniejszego użytkownika |
» 2016-04-17 12:46:41 No dobra ale ja nie mam określonej ilości wyników - program ma pobierać wyniki aż się linie skończą |
|
mateczek |
» 2016-04-17 12:47:48 int main() { string imie[ 100 ], nazwisko[ 100 ]; int wynik[ 100 ]; fstream plik; plik.open( "test.txt", ios::in ); if( plik.good() == false ) { cout << "plik nie istnieje"; exit( 0 ); } string linia; int nr_linii = 0; while( getline( plik, linia ) ) { int typTablicy = nr_linii % 3; int indexTablicy = nr_linii / 3; switch( typTablicy ) { case 0: imie[ indexTablicy ] = linia; break; case 1: nazwisko[ indexTablicy ] = linia; break; case 2: wynik[ indexTablicy ] = stoi( linia ); break; } nr_linii++; } } |
|
Wojteky2000 Temat założony przez niniejszego użytkownika |
» 2016-04-17 13:34:34 a żeby można było użyć "stoi" to jaką bibliotekę trzeba zaimplementować, ponieważ kompilator mi nie przyjmuje tego i sygnalizuje, że stoi nie zostało zdeklarowane? |
|
mateczek |
» 2016-04-17 13:44:01 std::stoi (C++11 only) //włączyć c++11 w opcjach kompilatora
napisałem stoi bo mi wygodnie to zapamiętać String TO Int. możesz inną funkcję użyć !!! |
|
Wojteky2000 Temat założony przez niniejszego użytkownika |
» 2016-04-17 14:16:12 Okej dobra udało się już działa (użyłem funkcji atoi(linia.c tyle, że jest jeden problem - imiona i nazwiska z pliku pobiera prawidłowo, ale wyniku już nie. Gdy w pliku mam zapisane jako wynik 2 i 18 to program wyświetla mi 0 i 0. czym to może być spowodowane? A i jeszcze jedna sprawa - Jak mogę zobaczyć wynik mojego sortowania? udało mi się je zaimplementować (i widzę po czasie wykonywania programu, że rzeczywiście coś się sortuje, bo jest o 0,1 s więcej gdy wsadzę mu, że ma sortować) ale nie mam zielonego pojęcia jak wyświetlić ten wynik (może niekoniecznie musi być to gotowy kod ale chociaż pomysł na to (nie chce, żebyście robili wszystko za mnie)). |
|
mateczek |
» 2016-04-17 16:25:51 jak chcesz sortować to lepiej zmienić ideę programu napisz sobie klasę zawodnik z trzema polami oraz operatorem mniejszy a do sortowania użyj algorytmu sort ze standardowej biblioteki #include <iostream> #include <fstream> #include<vector> #include<algorithm> using namespace std; class zawodnik { string imie; string nazwisko; int wynik; public: zawodnik( string im, string naz, int wyn ) { imie = im; nazwisko = naz; wynik = wyn; } bool operator <( zawodnik & z ) { return imie < z.imie; } void przedstawSie() { cout << imie << " " << nazwisko << " " << wynik << endl; } };
int main() { vector < zawodnik > tablicaZawodnikow; fstream plik; plik.open( "test.txt", ios::in ); if( plik.good() == false ) { cout << "plik nie istnieje"; exit( 0 ); } while( 1 ) { string im, naz, swyn; if( !getline( plik, im ) ) break; if( !getline( plik, naz ) ) break; if( !getline( plik, swyn ) ) break; tablicaZawodnikow.push_back( zawodnik( im, naz, stoi( swyn ) ) ); } sort( tablicaZawodnikow.begin(), tablicaZawodnikow.end() ); for( zawodnik & z: tablicaZawodnikow ) { z.przedstawSie(); } } |
|
« 1 » 2 |