Hirdetés

Új hozzászólás Aktív témák

  • Fire/SOUL/CD

    félisten

    válasz Csucsy1991 #2331 üzenetére

    Hali!

    Úgy látom ezek szerint az alapokkal is gondod van, de nem baj, ezért van ez a fórum, hogy lehessen kérdezni... :DDD
    Egy kis elmélet az elején(tényleg nagyon dióhéjban):
    A DINAMIKUS VÁLTOZÓK=MUTATÓK vagy angolul POINTEREK
    Turbo Pascalban a dinamikus változók az ugynevezett HEAP-ben tárolódnak, magyarul ha jól emlékszem HALOM vagy HALOMTERÜLET néven említik a szakkönyvek.

    MAXAVAIL függvény: a legnagyobb összefüggő blokk méretét adja vissza a HEAP-ben.
    NEW függvény: létrehoz a HEAP-ben egy dinamikus változót és a címét elhelyezi benne
    DISPOSE függvény: felszabadítja a dinamikus változót a HEAP-ben

    Mindezek után a program, ami egy 4 integer tárolására alkalmas tömböt tölt fel ill. ír ki, dinamikus változó(POINTER) segítségével.(persze a TOMB_MERETE konstans módosításával más méretű tömb is kezelhető)

    program pointer1;

    uses
    Crt;

    const
    TOMB_MERETE=4;

    Type
    tomb = array[1..TOMB_MERETE] of Integer;
    tombptr = ^tomb;

    var
    i:integer;
    MyTombPtr:tombptr;

    begin
    ClrScr;
    Writeln('Dinamikus valtozo(POINTER) hasznalata. 1 pelda');Writeln;
    Writeln('A tomb elemeinek szama: ',TOMB_MERETE,' db integer');
    Writeln('A tomb merete byte-ban: ',sizeof(tomb));
    Writeln('A tomb meretenek megfelelo hely lefoglalas a HEAP-ben');
    {ellenőrizzük, hogy van-e elég szabad hely a HEAP-ben a tömb számára}

    if maxavail<sizeof(tomb) then
    begin
    Writeln('Nincs elegendo hely a tomb szamara a HEAP-ben, a program ENTER-re kilep...');
    Readln;
    Halt;
    end;

    {helyet foglalunk a tömb számára}
    New(MyTombPtr);

    Writeln;
    Writeln('A tomb elemeinek beolvasasa');
    for i:=1 to TOMB_MERETE do
    begin
    Write('Kerem a tomb ',i,'. elemet: ');
    Readln(MyTombPtr^[i]);
    end;

    Writeln;
    Writeln('A tomb elemeinek kirasa');
    for i:=1 to TOMB_MERETE do
    begin
    Writeln('A tomb ',i,'. eleme: ',MyTombPtr^[i]);
    end;

    {felszabadítjuk a korábban lefoglalt helyet}
    Dispose(MyTombPtr);

    Writeln;
    Write('A program ENTER-re kilep...');
    Readln;
    end.

    Remélem, ez a példa segít megérteni a MUTATÓK vagy POINTER fontosságát, illetve azok használatának egyszerűségét...

    Fire.

Új hozzászólás Aktív témák