jedrula.pogo Temat założony przez niniejszego użytkownika |
» 2014-12-05 19:38:21 Prawdopodobnie jeszcze potrzebuję małej pomocy z wyszukiwaniem po nazwisku, bo już głupieję przy tym zadaniu . Chodzi mi o wyszukanie w bazie człowieka o wpisanym na wejście nazwisku. Napisałem coś takiego : { char nazw[ D_NAZ ]; cout << "Podaj nazwisko poszukiwanego lekarza : "; cin >> nazw; for( int i = 0; i < indeks; i++ ) { if( LK[ i ].nazwisko = nazw ) nazw = LK[ i ].nazwisko; else { cout << "Nie odnaleziono lekarza o podanym nazwisku " << endl; system( "pause" ); } } lista_naglowek(); for( int i = 0; i < indeks; i++ ) { if( LK[ i ].nazwisko == nazw ) lista_lekarz( LK + i ); } }
Co robię w tym przypadku źle ? |
|
darko202 |
» 2014-12-05 22:18:37 na pewno w if( LK[ i ].nazwisko = nazw ) bo = to przypisanie == porównanie a oto chyba chodzi w if najczęsciej
|
|
Kaikso |
» 2014-12-05 22:29:29 { char nazw[ D_NAZ ]; cout << "Podaj nazwisko poszukiwanego lekarza : "; cin >> nazw; for( int i = 0; i < indeks; i++ ) { if( strcmp( LK[ i ].nazwisko, nazw ) != NULL ) { } } lista_naglowek(); for( int i = 0; i < indeks; i++ ) { if( strcmp( LK[ i ].nazwisko, nazw ) != NULL ) lista_lekarz( LK + i ); } }
Z tego kawałka kodu nie wiele da się dowiedzieć podaj najlepiej całą funkcje. ;) A jeśli nie masz jej jeszcze to napisz: 1. Czy ma zwracać jednego lekarza po kolei, czy wszystkich na raz w jednej tablicy? 2. Jeśli funkcja pobiera dane wewnątrz to jak ma się zachować, gdzie przekazać dane? |
|
Tomek_z_W11 |
» 2014-12-06 00:19:34 Nie było mnie na forum parę dni - dlatego nie odpisywałem. Myślę, że główne problemy zostały napisane: -operator przypisania '=' zamiast porównania '==' w ifie, -else w pętli oznaczający, że jeżeli nie wejdziemy do ifa ( LK[ 0 ]!=nazw, bo i zaczyna się od 0 ), to od razu wychodzimy z pętli. Zamień '=' na '==' i wywal else'a, jak zaznaczyć, że nie znalazłeś szukanego nazwiska możesz zrobić w ten sposób: bool a = true;
for( int i = 0; i < indeks; i++ ) { if( LK[ i ].nazwisko == nazw ) { nazw = LK[ i ].nazw; a = false; } } if( a )
Możesz, tak jak pisał kolega wyżej, nie nadpisywać zmiennej nazw, czyli jeżeli wejdziesz do ifa porównującego nazwiska, przerywasz pętle (break), zapamiętując jednocześnie indeks, który będzie przechowywać zmienna i. |
|
jedrula.pogo Temat założony przez niniejszego użytkownika |
» 2014-12-06 13:21:59 Coś mi nie wychodzi. Najdalej doszedłem w inny sposób : Podzieliłem wyszukiwanie na dwa etapy. int szukaj_wg_nazw1 int ile = 0; for( int i = 0; i < indeks; i++ ) if( strcmp( LK[ i ].nazwisko, nazw ) == 0 ) Ind[ ile++ ] = i;
return( ile );
Sprawdzam wśród osób czy istnieje osoba o zadanym nazwisku, jeśli tak to zwracam tablicę zawierającą indeksy tych osób. Następnie funkcja : void szukaj_wg_nazw2 char nazw[ D_NAZ ]; int Ind[ indeks ]; int ile_ind;
cout << "Podaj nazwisko: "; cin >> nazw; if(( ile_ind = szukaj_wg_nazw1( LK, indeks, Ind, nazw ) ) != 0 ) { lista_naglowek(); lista_lekarz( LK + ile_ind ); } else { cout << "Nie odnaleziono osoby o nazwisku " << nazw << endl; system( "pause" ); } }
Czy jest to dobre rozumowanie ? Wyszukiwanie nie działa w odpowiedni sposób. |
|
Kaikso |
» 2014-12-06 13:23:54 @Tomek_z_W11 Pamiętaj że zmienne tablic to wskaźniki używając operatora porównania == porównujemy jedynie wartości wskaźników, a nie zawartość tablic. W takim wypadku należy użyć do porównania tablic char funkcji strcmp( const char * str1, const char * str2 ) , a do porównania tablic pozostałych typów funkcji memcmp( const void * tab1, const void * tab2, size_t size ) z #include <string.h>. |
|
jedrula.pogo Temat założony przez niniejszego użytkownika |
» 2014-12-06 13:25:41 A możesz się odwołać do mojego rozumowania, które przesłałem chwilę przed Tobą : ) |
|
Kaikso |
» 2014-12-06 13:43:31 Może spróbuj tak: int szukaj_wg_nazw( lekarz * LK, int index, const char * nazw, int start = 0 ) { for( int i = start; i < index; i++ ) if( strcmp( LK[ i ].nazwisko, nazw ) == 0 ) return i; return - 1; }
A używa się tak: char nazw[ D_NAZ ];
cout << "Podaj nazwisko: "; cin >> nazw;
int idx = szukaj_wg_nazw( LK, index, nazw ); if( idx != - 1 ) { do { } while(( idx = szukaj_wg_nazw( LK, index, nazw, ++idx ) ) != - 1 ); } else { cout << "Nie znaleziono lekarza o nazwisku: " << nazw << endl; }
Chyba jedno z najlepszych rozwiązań. Powodzenia :) |
|
1 2 3 « 4 » 5 |