Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Delphi - Wskaźniki-Pascal

Boshi 16 Mar 2014 17:47 1362 14
  • #1 16 Mar 2014 17:47
    Boshi
    Poziom 12  

    Cześć, znów muszę się zwrócić do was z pomocą, ponieważ dopadły mnie wskaźniki i kompletnie nie rozumiem treści jednego polecenia...

    Zarzymałem się ( chyba- o ile deklaracja tablicy jest ok) na zapamiętującą jego adres w ostatnim elemencie tablicy wskaźników
    (jeżeli jest wolne miejsce, tzn. ile < N);


    Jak mam to niby dodać do ostatniego pola w tablicy?

    Mianowicie:

    Cytat:
    Zdefiniować tablicę wskaźników na rekordy typu tosoba o rozmiarze N, gdzie N –
    stała, oraz zmienną ile typu word, w której pamiętana jest liczba utworzonych
    rekordów (wartość początkowa zmiennej ile = 0). Opracować następujące
    procedury:
    a)tworzącą dynamicznie element typu tosoba, inicjującą element losowymi
    danymi i zapamiętującą jego adres w ostatnim elemencie tablicy wskaźników
    (jeżeli jest wolne miejsce, tzn. ile < N); nagłówek procedury: procedure
    Dodaj(Var tab: tabwsk; Var ile: word);


    Kod:

    Kod: delphi
    Zaloguj się, aby zobaczyć kod

    0 14
  • #2 16 Mar 2014 18:27
    krru
    Poziom 32  

    Funkcja ma utworzyć _jeden_ element i dopisać go do tablicy a nie wypełnić cała tablicę.

    0
  • #3 16 Mar 2014 18:59
    Boshi
    Poziom 12  

    Skoro jeden element to bez petli ... ale o co chodzi z tym dopisaniem na ostatni element tablicy wskaźników? zawsze się zapisywało od 1 pola..

    0
  • #4 16 Mar 2014 21:19
    Dżyszla
    Poziom 42  

    Ile nie mówi Ci, ile masz stworzyć, ale ile zostało stworzonych. Dlatego po każdym dodaniu inkrementujesz. Ale w ramach funkcji dodajesz raz i tylko raz.

    BTW - złe przypisanie - to jest tablica wskaźników, a nie rekordów. Dwa - brak rezerwacji miejsca na rekord.

    0
  • #5 17 Mar 2014 01:47
    Boshi
    Poziom 12  

    Dżyszla: próbowałem to inaczej zapisać i przydzielić pamięć tablicy przez procedure new to kompilator się burzył.. i chyba jedynie tak jak wyżej udało się go uruchomić... choć pewnie masz racje i źle to jest.

    0
  • #7 19 Mar 2014 00:35
    Boshi
    Poziom 12  

    Tak to ma wyglądać?

    Kod: delphi
    Zaloguj się, aby zobaczyć kod

    0
  • #8 19 Mar 2014 13:36
    arnoldziq
    Moderator Programowanie

    Boshi napisał:
    Tak to ma wyglądać?

    Nie.
    Tworzysz deklarację rekordu, a potem tablicę złożoną z tych rekordów.
    Masz utworzyć tablicę złożoną z wskaźników do tych rekordów.
    A to olbrzymia różnica.
    Tak wygląda poprawna deklaracja zmiennych do twojego zadania:
    Kod: delphi
    Zaloguj się, aby zobaczyć kod

    0
  • #9 19 Mar 2014 14:30
    Boshi
    Poziom 12  

    No dobra. A jeżeli chodzi o zapamiętanie adresu w ostatnim elemencie. tablicy, to chodzi o to, że losowo wypełniony rekord (jego adres) zapisujemy na ostatnim miejscu w tablicy wskaźników? Przy normalnym zapisie do tablicy zawsze wpisuje się od pola pierwszego. A tu wychodzi, że trzeba od ostatniego. Dobrze kombinuję ?

    0
  • #10 19 Mar 2014 14:33
    arnoldziq
    Moderator Programowanie

    Boshi napisał:
    Dobrze kombinuję ?

    Nie.
    Chodzi o to, ze masz zmienną 'ile' która wskazuje ilość elementów w tablicy. Jeżeli nie masz w tablicy wolnego miejsca, to ta procedura ma nic nie robić.

    0
  • #11 19 Mar 2014 16:53
    Boshi
    Poziom 12  

    No tak, ale przecież procedura wypełnia tylko jeden element tablicy więc nigdy ile>N, bo raz wywołujemy procedurę, zwiększmy ile o 1 i zamykamy. Kolejny raz zeruje już Ile.

    0
  • #12 19 Mar 2014 17:50
    arnoldziq
    Moderator Programowanie

    Boshi napisał:
    Kolejny raz zeruje już Ile.
    I źle robisz.
    W zadaniu masz napisane jak ma się to odbywać.
    Nauczycie w zadaniu napisał:
    a)tworzącą dynamicznie element typu tosoba, inicjującą element losowymi
    danymi i zapamiętującą jego adres w ostatnim elemencie tablicy wskaźników
    (jeżeli jest wolne miejsce, tzn. ile < N); nagłówek procedury: procedure
    Dodaj(Var tab: tabwsk; Var ile: word);

    To nie po to masz var Ile, żeby cokolwiek zerować :/

    0
  • #13 19 Mar 2014 18:42
    Boshi
    Poziom 12  

    Zaczynam już gubić wszystko po kolei.

    Ile liczy ilość rekordów w tablicy.

    Co jest tutaj źle? Pomimo, że się kompiluje(kolejno wypisuje rekordy) , ale coś mi się zdaje, że to nie o to do końca chodzi.

    Kod: pascal
    Zaloguj się, aby zobaczyć kod

    0
  • #14 19 Mar 2014 22:45
    arnoldziq
    Moderator Programowanie

    Kod: pascal
    Zaloguj się, aby zobaczyć kod

    Prawie OK, tylko że:
    1. Tworzysz miejsce w pamięci. Jakieś, nie wiadomo ile i w bardzo dziwny sposób.
    2. Nie wiadomo po co alokujesz tę pamięć, skoro potem odwołujesz się do wcześniej stworzonej tablicy.
    3. Nie powtarzasz operacji wpisywania powyżej jednego razu, więc jakiekolwiek sprawdzanie zmiennej ile jest bez sensu.

    0
  • #15 19 Mar 2014 23:11
    Boshi
    Poziom 12  

    Nie, muszę na spokojnie poczytać o wskaźnikach, tablicach wskaźników i ogólnie ze wszystkim co jest z tym związane, bo na razie to mam koktajl w głowie i nic już z tego nie rozumiem.

    Jeżeli na dniach doczytam to zaktualizuje wpis.
    Dzieki za pomoc do tej pory.

    0