Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

PASCAL Tablica dynamiczna 1..N gdzie Const N=10;

giedymin33 10 Jun 2018 19:12 696 10
  • #1
    giedymin33
    Level 4  
    Witam.

    Quote:
    3. Napisz program, w którym utworzona zostaje tablica dynamiczna
    rekordów typu "tosoba", z polami "identyfikator" i "PESEL" , o rozmiarze "n",
    gdzie "n" to stała. Wskaźnik "ostab" do początku tablicy określają następujące deklaracje:
    const N = 10;
    type osttab = array[1..N] of tosoba;
    var ostab:^osttab;
    Opracuj procedurę inicjującą tablicę danymi wprowadzonymi z
    klawiatury i procedurę zapisującą elementy tablicy do pliku tekstowego.
    Procedura ma zapisywać elementy tablicy, których identyfikator (nie indeks tablicy)
    będzie z zakresu podanego przez użytkownika. Przed zakończeniem programu należy zwolnić pamięć.


    Taka jest treść zadania, zastanawiam się jak tablica z Const N=10; może być dynamiczna.

    Czy po prostu wypełnianie robić w pętli for:=1 to N ?

    Jak przekazać ten wskaźnik do procedury?
  • #2
    trol.six
    Level 31  
    giedymin33 wrote:
    Taka jest treść zadania, zastanawiam się jak tablica z Const N=10; może być dynamiczna.

    Dynamiczna, czyli taka której rozmiar może ulec zmianie.

    http://wiki.freepascal.org/Dynamic_array
    http://www.tutorialspoint.com/pascal/pascal_memory.htm
    .
  • #3
    kinggustav
    Level 25  
    Niezupełnie, to jest przecież stary dobry nieużywany już Pascal. Tablicą dynamiczną nazywano tablicę utworzoną poprzez New. Jej rozmiar teoretycznie może się zmieniać, ale jeżeli jest użyta stała to zmienia się tylko na etapie kompilacji. Czyli zwykła tablica wskaźnikowa o rozmiarze N elementów (moim zdaniem). W Pascalu Borlanda miało to nawet pewien sens, bo tablice dynamiczne były w innym segmencie niż dane, dawało się w ten sposób obejść ograniczenie na 64k segment danych.
  • #4
    User removed account
    User removed account  
  • #5
    kinggustav
    Level 25  
    U Borlanda było coś a la malloc, GetMem. Jednak jeżeli mówi,u o standardzie Pascala. to chyba nic takiego nie było (też nie wszystko pamiętam), więc chyba nie o to chodzi. Zresztą po co wtedy by była ta stała oznaczająca liczbę elementów tablicy?
    Co do uczenia Pascala, to miał on jedną zaletę, o ile nauczyciel sam ją rozumiał: Pascal uczył dobrego stylu programowania. Jest tam wszystko z czego przez lata wywiedziono wszystkie standardy i dobre praktyki dla programowania w różnych językach. Nawet wady Pascala (bo miał i wady) się do tego świetnie nadawały.
  • #6
    trol.six
    Level 31  
    kinggustav wrote:
    Niezupełnie, to jest przecież stary dobry nieużywany już Pascal.

    Wcale się nie dziwie że Pascal się za bardzo nie przyjął. Bo jest troche niedoprecyzowany. Tak jak w zadanym temacie. Niby dynamiczny ale tworzony przez new nie ma możliwości zmiany tablicy. Więc dynamiczny w sensie dynamicznie zarządzany.

    Ten przykład, napisany do tematu (notabne mój pierwszy program w Pascalu) działa i kompiluje się we free pascalu:
    Można zmienić rozmiar tablicy, ale zmiana następuje poprzez przeindeksowanie tablicy

    Code: vbnet
    Log in, to see the code

    I jak znalazłem w necie:
    https://stackoverflow.com/questions/30410064/pascal-pointer-to-an-array-of-unknown-size

    Nie da się inaczej, ponieważ jak sobie zrobie typ
    Code:
    osttab = packes array of tosoba;


    to mi się kompiluje ale program się wykszacza z informacją
    Quote:
    Runtime error

    .
  • #7
    kinggustav
    Level 25  
    Pascal niedoprecyzowany? Można i tak. :-)
    A z tą tablicą dynamiczną to całkiem dynamiczna była raczej lista albo drzewo. Tam z kolei nie było dobrej kontroli nad rozmiarem, a segment DOSa obowiązywał:
    "Algotytmy + struktury danych=programy". Nie zapominaj w którym roku to wymyślili.
  • #8
    PDT
    Level 24  
    kinggustav wrote:
    Pascal niedoprecyzowany? Można i tak. :-)
    A z tą tablicą dynamiczną to całkiem dynamiczna była raczej lista albo drzewo. Tam z kolei nie było dobrej kontroli nad rozmiarem, a segment DOSa obowiązywał:
    "Algotytmy + struktury danych=programy". Nie zapominaj w którym roku to wymyślili.

    Zanim zbudowano pierwszego PC-ta, PASCAL był już szeroko używany na komputerach:
    CDC6000/7000 (CYBER)
    UNIVAC
    IBM S360/370 i wszystkich radzieckich i innych podróbach (RIADy, BASF etc.)
    ICL1900 w tym na polskim klonie Odra1305
    Pierwsze linie historycznego kompilatora PASCALA:
    Code: PASCAL
    Log in, to see the code

    A ograniczenie segmentu pamięci do 64KB dotyczyło mikrokomputerów 8-bitowych i wczesnego PC-ta z DOS-em (modele pamięci SMALL, COMPACT, MEDIUM, LARGE ...) :)

    Pzdr

    PS Książkę "Algorytmy + struktury danych = programy" napisał prof. Niklaus Wirth, ETH Zuerich,
    pierwszy kompilator Urs Ammann, ETH Zuerich
  • #9
    kinggustav
    Level 25  
    Brawo. To dokładnie miałem na myśli. To prehistoria, więc na tamte czasy więcej niż dopracowany. To co napisałem nie miało dotyczyć jednak wcześniejszych maszyn niż PC (swoją drogą 8086 był 16-bitowy), dlatego napisałem o tym ograniczeniu. Na ICL1900/1305 też było ograniczenie pamięci (musiało być), ale całkiem inaczej robione. Najpopularniejszy chyba był Borland. Później pojawiło się Delphi i inne pomysły na ulepszanie Pascala. Słowem język istnieje do dziś, ale niewielu go używa.
  • #10
    PDT
    Level 24  
    kinggustav wrote:
    Brawo. To dokładnie miałem na myśli. To prehistoria, więc na tamte czasy więcej niż dopracowany. To co napisałem nie miało dotyczyć jednak wcześniejszych maszyn niż PC (swoją drogą 8086 był 16-bitowy), dlatego napisałem o tym ograniczeniu. Na ICL1900/1305 też było ograniczenie pamięci (musiało być), ale całkiem inaczej robione. Najpopularniejszy chyba był Borland. Później pojawiło się Delphi i inne pomysły na ulepszanie Pascala. Słowem język istnieje do dziś, ale niewielu go używa.

    @kinggustav 1. Masz rację że 8086 to procesor formalnie 16-bitowy (z 16-bitowymi rejestrami adresującymi/indeksami), ale ... wczesne PC nazywane wówczas IBM PC/XT były wyposażone w CPU Intel 8088 (wersja 8086 ze skróconą z 16 do 8 bitów magistralą dostępu do pamięci operacyjnej).
    2. ICL1900/1305 miały ograniczenie pamięci ponieważ było jej zwykle bardzo malo (koszty), adresowalne słowo w pamięci miało 24-bity (więc maszyna 24-bitowa bo rejestry to były pierwsze komórki pamięci programu). W takim słowie mogły być spakowane cztery 6-bitowe znaki (kod ASCII to też późniejszy standard).
    3. Borland to była nazwa firmy, przebojowym jej produktem był "Turbo Pascal", pierwsze połączenie edytora/kompilatora/debuggera w jedno czyli tzw. IDE. Była cała rodzina "Turbo coś" np. Turbo C, Turbo Basic, Turbo Prolog itp. A "Turbo Pascal" przekształcił się w "Delphi".
    4. Czy się Pascal-a używa? Zapewne tak, podobnie jak COBOL-u, FORTRAN-u.
  • #11
    kinggustav
    Level 25  
    A jednak 8088 też był 16 bitowy. Miał takie same 16 bitowe rejestry i dokładnie te same rozkazy co 8086 tylko trochę dłużej się wykonywały.
    Sprawdziłem i rzeczywiście pierwszy PC był na 8088, choć historycznie wcześniej powstał procesor 8086. Taki model PC miałem kiedyś na biurku 8086/4,77MHz, bez dysku.
    Na 1305 rzeczywiście było mniej pamięci, ale Pascal miał taką dziwną właściwość (np. Fortran czy Plan tak nie miały), że brał ile było, więc operatorzy musieli przydzielać, bo inni też potrzebowali. Do operowania na znakach były nawet specjalne rozkazy (może ekstrakody- nie pamiętam już), a słowo "packed" rzeczywiście miało spory sens.
    Nie napisałem że nikt nie używa Pascala, ale że niewielu i prawdę mówiąc nie rozumiem po co, oprócz dydaktyki oczywiście.