jedrula.pogo Temat założony przez niniejszego użytkownika |
» 2014-12-03 21:36:50 Dzięki za odpowiedź. Popełniłem takie zmiany w mainie : int main() { lekarz * LK; int liczba_spec = 50; int * wsk_spec = & liczba_spec; LK = new lekarz[ liczba_spec ]; menu( LK, liczba_spec ); delete[] LK; }
Czy to wystarcza ? Co do zmian w funkcjach, czy jeśli rozpisałem już inne na przykład: kasuj_lekarza Czy tutaj również mam zrobić taką zmianę: Z void kasuj_lekarza( lekarz LK[], int & liczba_spec ); na void kasuj_lekarza( lekarz * LK, int & liczba_spec ); I analogicznie na przykład funkcje od menu : menu( lekarz LK[], int liczba_spec ); mam zamienić na : menu( lekarz * LK, int liczba_spec ); Dobrze Ciebie zrozumiałem ?> |
|
Tomek_z_W11 |
» 2014-12-03 21:40:39 Tak, bardzo dobrze.
W tym momencie, zdaje się, nie potrzebujesz już wskaźnika wsk_spec, nie? To możesz usunąć. |
|
jedrula.pogo Temat założony przez niniejszego użytkownika |
» 2014-12-03 21:53:44 Wiem, że może dopytuję o głupie rzeczy. Ale chcę to dobrze zrozumieć. W mainie: Usuwam: int * wsk_spec = & liczba_spec; Natomiast funkcję: void dodaj_lekarza( lekarz * LK, int & liczba_spec, int * wsk_spec ); Zmiana na : void dodaj_lekarza( lekarz * LK, int & liczba_spec ); I to samo w : void powieksz_pamiec( lekarz * LK, int * wsk_spec ); Zmiana na : void powieksz_pamiec( lekarz * LK ); W ten sposób to rozwiązać ? Dzięki za wsparcie. |
|
Tomek_z_W11 |
» 2014-12-03 22:03:36 Nie ma problemu, najwyraźniej czegoś nie dopatrzyłem, bo widzę parę błędów. Mianowicie. Apropos usuwania - tak, nie potrzebujesz wskaźnika wks_spec, a ilość specjalistów przechowujesz w zmiennej liczba_spec. Z tym że jeżeli w mainie tworzysz zmienną int liczba_spec. to konsekwentnie w funkcji przechwytujesz te zmienną: void dodaj_lekarza( lekarz * LK, int liczba_spec ); Bez ampersandu. A tak właściwie, to po co Ci liczba_specjalistów w funkcji? Zdaje się, że tam oddzielnie pobierasz ilość lekarzy jaka ma zostać dodana? Argumenty funkcji powiesz_pamiec() są w porządku. Będziesz musiał zmienić jej ciało, bo z tego co pamiętam, to w momencie alokowania pamięci używałeś *wsk_spec, a teraz nie masz takiego argumentu. |
|
jedrula.pogo Temat założony przez niniejszego użytkownika |
» 2014-12-03 22:22:55 Czyli funkcja dodaj_lekarz wygląda teraz tak : void dodaj_lekarza( lekarz * LK, int liczba_spec ); Natomiast powieksz_pamiec tak: void powieksz_pamiec( lekarz * LK, int liczba_spec ) { lekarz * temp = new lekarz[ liczba_spec * 2 ]; for( int i = 0; i < liczba_spec; i++ ) { temp[ i ].ID = LK[ i ].ID; temp[ i ].imie = LK[ i ].imie; temp[ i ].nazwisko = LK[ i ].nazwisko; temp[ i ].osrodek = LK[ i ].osrodek; temp[ i ].specjalnosc = LK[ i ].specjalnosc; temp[ i ].ilpacj = LK[ i ].ilpacj; } delete[] LK; LK = temp; liczba_spec *= 2; }
Teraz się może zgadzać? Mógłbym przesłać cały kod, by się upewnić, że się wszystko zgadza ? |
|
Kaikso |
» 2014-12-03 22:27:00 Proponuje zrobić to na zasadzie listy jedno albo dwukierunkowej, obędzie się bez nadmiaru operacji alokacji, kopiowania i dealokacji pamięci. Jeśli nie wiesz co to jest to na Google będzie wszystko. |
|
jedrula.pogo Temat założony przez niniejszego użytkownika |
» 2014-12-03 22:30:30 Tylko, że niestety prowadzący nie pozwala na użycie listy jednokierunkowej. |
|
Kaikso |
» 2014-12-03 22:34:29 To prosta struktura więc można bez problemu napisać ją samemu. :) |
|
1 « 2 » 3 4 5 |