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

[C++]Struktury dynamiczne - dodawanie kolejnych osób do bazy danych

Ostatnio zmodyfikowano 2014-12-16 17:18
Autor Wiadomość
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 :

C/C++
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 ?>
P-122115
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ąć.
P-122116
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.
P-122119
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.
P-122122
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:

C/C++
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 ?
P-122125
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.
P-122127
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.
P-122128
Kaikso
» 2014-12-03 22:34:29
To prosta struktura więc można bez problemu napisać ją samemu. :)
P-122129
1 « 2 » 3 4 5
Poprzednia strona Strona 2 z 5 Następna strona