Struktury
Ostatnio zmodyfikowano 2011-07-04 20:32
jaupl Temat założony przez niniejszego użytkownika |
Struktury » 2011-07-04 12:20:52 Witam. W zasadzie nie wiem czy temat jest adekwatny ale nic innego nie mogłem wymyślić. W poniższym kodzie zastanawia mnie następujący błąd : Program prosi o podanie danych tylko z jednej tury zawodów i takie dane też wyświetla a założeniem było żeby tury były dwie. W tym celu napisałem warunek (wyszczególniony poniżej komentarzem) umieszczony w pętlach for który (jeśli jest spełniony ma zmienić zmienną t na jeden (czyli na drugą turę.) #include <string> #include <iostream> #include <conio.h> using namespace std;
struct zawodnicy { string imie; int czas; int wynik; };
int main() { int a; cout << "Podaj ilosc zawodnikow ktorzy brali udzial w zawodach:" << endl << endl; cin >> a; zawodnicy tablica[ a ][ 2 ]; int t = 0; for( int z = 0; z < a; z++ ) { if( t == 0 ) { cout << "podaj imie zawodnika " <<( z + 1 ) << " tury " <<( t + 1 ) << " :" << endl; cin >> tablica[ z ][ t ].imie; } else tablica[ z ][ t ].imie = tablica[ 0 ][ t ].imie; cout << "podaj czas zawodnika " <<( z + 1 ) << " tury " <<( t + 1 ) << " :" << endl; cin >> tablica[ z ][ t ].czas; cout << "podaj wynik zawodnika " <<( z + 1 ) << " tury " <<( t + 1 ) << " :" << endl; cin >> tablica[ z ][ t ].wynik; if( z ==( a - 1 ) && t != 1 ) { z = 0; t = 1; } } t = 0; for( int z = 0; z < a; z++ ) { cout << tablica[ z ][ t ].imie << " " << tablica[ z ][ t ].czas << " " << tablica[ z ][ t ].wynik << endl; if( z ==( a - 1 ) && t != 1 ) { z = 0; t = 1; } } return 0; }
teraz zauważyłem kilka nie potrzebnych zmiennych. wykomentuje je tutaj a w kodzie usunę. //program przechodzi do drugiej tury. ale nie da się wprowadzić danych z 2 tury dla 1 zawodnika. |
|
DejaVu |
» 2011-07-04 14:34:36 Program działa tak jak napisałeś. Umieść drugą pętlę jeżeli mają być kilka tur.
1. pętla wczytywania danych o użytkownikach
2. pętla wczytywania kolejnych tur * pętla wczytywania jednej tury zawodników
3. pętla wypisująca wyniki. |
|
jaupl Temat założony przez niniejszego użytkownika |
» 2011-07-04 18:07:19 Już poprawiłem, teraz mam jeszcze dwa pytania potrzebne do skończenia zadania. Tablice Struktur można przekazać do funkcji podobnie jak zwykłe tablice zmiennych ?? I czy przy sortowaniu tablicy struktur, tak żeby zawodnik o najniższym czasie był wyświetlany jako pierwszy, mogę zamienić elementy tej tablicy tak : int schowek; int y = z + 1; if( tablica[ z ][ t ].czas > tablica[ y ][ t ].czas ) { schowek = tablica[ z ][ t ]; tablica[ z ][ t ] = tablica[ y ][ t ]; tablica[ y ][ t ] = schowek; }
Czy muszę zmieniać każdy element struktury osobno ??(.czas, .wynik, .imie) chciał bym do tego użyć osobnej funkcji i sortowania bąbelkowego. |
|
DejaVu |
» 2011-07-04 18:41:15 1. Tak.
2. Tak, ale w kodzie masz błąd - zmienna schowek powinna być typu 'zawodnicy', a nie typu 'int'.
/edit:
Możesz też zrobić prościej:
std::swap( tablica[ z ][ t ], tablica[ y ][ t ] );
|
|
murek |
» 2011-07-04 18:46:52 zamiast schowka mozesz uzyc swap()
edit.
ohh nie odswiezylem ;] |
|
jaupl Temat założony przez niniejszego użytkownika |
» 2011-07-04 19:10:04 tablica w argumencie ma być typu zawodnicy ?? |
|
jaupl Temat założony przez niniejszego użytkownika |
» 2011-07-04 20:32:49 No cóż, ostatecznie program wygląda tak : #include <string> #include <iostream> #include <conio.h> using namespace std;
struct zawodnicy { string imie; int czas; int wynik; }; void sortowanie( zawodnicy tablica[][ 2 ], int ilosc_liczb, int t ) { zawodnicy schowek; for( int z = 0; z < ilosc_liczb; z++ ) { for( int z = 0; z <( ilosc_liczb - 1 ); z++ ) { int y = z + 1; if( tablica[ z ][ t ].czas > tablica[ y ][ t ].czas ) { schowek = tablica[ z ][ t ]; tablica[ z ][ t ] = tablica[ y ][ t ]; tablica[ y ][ t ] = schowek; } } } } int main() { int a; cout << "Podaj ilosc zawodnikow ktorzy brali udzial w zawodach:" << endl << endl; cin >> a; zawodnicy tablica[ a ][ 2 ]; for( int z = 0; z < a; z++ ) { for( int t = 0; t < 2; t++ ) { if( t == 0 ) { cout << "podaj imie zawodnika " <<( z + 1 ) << " :" << endl; cin >> tablica[ z ][ t ].imie; } if( t > 0 ) { tablica[ z ][ t ].imie = tablica[ z ][ 0 ].imie; } cout << "podaj czas zawodnika " <<( z + 1 ) << " podczas tury " <<( t + 1 ) << " :" << endl; cin >> tablica[ z ][ t ].czas; cout << "podaj wynik zawodnika " <<( z + 1 ) << " podczas tury " <<( t + 1 ) << " :" << endl; cin >> tablica[ z ][ t ].wynik; } } sortowanie( tablica, a, 2 ); for( int z = 0; z < a; z++ ) { for( int t = 0; t < 2; t++ ) { cout << " Tura " <<( t + 1 ) << " " << tablica[ z ][ t ].imie << " " << tablica[ z ][ t ].czas << " " << tablica[ z ][ t ].wynik << endl; } } return 0; }
Działa. Moim zdaniem poprawnie. poczekam jeszcze na ewentualne uwagi i zamknę temat :) Dzięki za pomoc !! ;)) // Wróć ... znowu coś skopałem . za 1 razem jak sprawdzałem kod wpisałem wszystkie dane tak że program nie miał czego ustawiać ... a po ponownym sprawdzeniu doszedłem do wniosku że w kodzie jest błąd ... |
|
« 1 » |