[ Príspevkov: 5 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 11.02.07
Prihlásený: 22.06.15
Príspevky: 90
Témy: 24 | 24
Bydlisko: Kosice

potreboval by som v programe pouzit pole, ktoreho pocet prvkov nebude dopredu znamy, nastava ale problem, a to taky ze nemozem napisat nieco v zmysle array[1..x] of daco, chce to odo mna presnu hodnotu uz v deklaracnej casti...
pravdaze mohol by som tam hodit maximalnu moznu hodnotu ktora by mohla byt v programe pouzita, ale radsej by som chcel nieco efektivnejsie, co sa tyka vyuzitia pamate :)

rozmyslal som na niecim takym, ale netusim ako si to adresuje pamat, neviem to odsledovat, je nieco co by mi s tym mohlo pomoct? (pouzivam Free Pascal IDE) Tak tu je ten moj napad:
Kód:
var ...
    pole:array[1..65536] of ^integer;
begin ...
        for i:=1 to max do begin
             new(pole[i]);
             pole[i]^:=daco;
        end;
        ...
end.


Podla toho co si myslim by to malo zabrat pamat az ked do danej pozicie v poli priradim hodnotu, tzn ked bude hodnota premennej max napr. 100, tak v pamati bude adresovanych len sto hodnot typu integer, a nie 65536... ale to je len taka domnienka, neviem ako to v skutocnosti funguje :roll:


Offline

Užívateľ
Užívateľ
pole s dynamickym poctom prvkov v pascale

Registrovaný: 02.09.05
Prihlásený: 17.11.10
Príspevky: 154
Témy: 1 | 1

Nie, pokial deklarujes pole pole:array[1..65536] of ^integer; , tak sa alokuje 65536 buniek typu ^integer.
Ak chces vytvorit dynamicke pole, deklaruje sa a pouziva nasledovne :
Kód:
type PPole = ^array [0..0] of integer;

var Pole : PPole;
      pocet_prvkov : integer;

begin
   pocet_prvkov := 1000;
   { alokovanie pola }
   GetMem(Pole, pocet_prvkov * SizeOf(integer));

   { priradenie hodnot }
   Pole^[0] := 10;
   Pole^[1] := 15;
   Pole^[999] := 15;

   { uvolnenie pamate pouzivanej dynamickym polom}
   FreeMem(Pole, pocet_prvkov * SizeOf(integer));
end.


_________________
Múdry nie je ten, čo veľa vie, ale ten, kto vie, čo je treba. (Thomas Alva Edison)
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 11.02.07
Prihlásený: 22.06.15
Príspevky: 90
Témy: 24 | 24
Bydlisko: Kosice
Napísal autor témyOffline : 20.03.2008 21:58 | pole s dynamickym poctom prvkov v pascale

no tak som to skusil, ale hned pri deklarovani toho typu mi vypise ze po "=" ocakava identifikator, takze mu pravdepodobne vadi ten "^" :(
robi to v Free Pascal IDE aj v TP 7.0...


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 11.02.07
Prihlásený: 22.06.15
Príspevky: 90
Témy: 24 | 24
Bydlisko: Kosice
Napísal autor témyOffline : 22.03.2008 17:35 | pole s dynamickym poctom prvkov v pascale

tak som trochu pozeral po strankach a na http://mircosoft.ic.cz/index2.htm som nasiel celkom podrobny clanok o dynamickych premennych a podobnych vecach, tu je to najdolzeitejsie, mozno sa to niekomu raz zide (skusal som to a vyzera to ze to funguje :)):

Dynamicka pole
Tyto datove struktury slouzi k ukladani datovych polozek, jejichz pocet sice
nezname pri psani programu, ale pozdeji ho za behu programu jeste pred
zacatkem ukladani dat nejakym zpusobem zjistime.
Oproti spojovemu seznamu se setri pameti (nepotrebujeme ukazatel v kazde
polozce) a dosahuje se rychlejsiho pristupu (prosty index pole misto
postupneho prochazeni spojoveho seznamu).
Dynamicka pole v podstate funguji jako obycejna staticka pole (var pole:
array[...] of ...), jenomze je alokujeme dynamicky (na hromade a ne v Data
segmentu) za chodu programu a pri pristupu k nim musime napsat znak ^ navic.

Jak na to:
1) Definujeme si "sablonu" pole:
type SablonaPole=array[Min..Max] of PozadovanyTypPrvku;
Je potreba, aby typ prvku odpovidal budoucimu dynamickemu poli. Cislo Min
(minimalni index pole) musi odpovidat skutecnemu pozadovanemu minimalnimu
indexu dynamickeho pole, cislo Max muze byt cokoli od Min vys.

2) Definujeme druhy pomocny typ - ukazatel na jiz definovanou sablonu:
type UkazatelNaSablonu=^SablonaPole;

3) Vypneme kontrolu rozsahu: bud direktivou {$R-} nebo nastavenim Options ->
-> Compiler -> Range checking. Bude to potreba, protoze prave to nam umozni
zapisovat do budouciho dynamickeho pole kamkoli, treba i za index Max, pokud
to SKUTECNA velikost alokovane pameti dovoli.

4) Deklarujeme prislusnou promennou - ukazatel:
var DynPole:UkazatelNaSablonu;
To mame zatim 4 "zbytecne zaplacane" byty (jeden ukazatel), ale vic uz jich,
na rozdil od spojovych seznamu, nebude.

5) Alokujeme pamet pro pole. Nejdriv si vypocitame, kolik ji budeme
potrebovat. Vezmeme velikost jednoho prvku (napr. pomoci sizeof(typ prvku))
a vynasobime ji pozadovanym poctem prvku (ktery uz v tomto okamziku znat
musime). Ted pomoci naseho ukazatele alokujeme dynamickou promennou prislusne
velikosti: Getmem(DynPole,velikost). Ukazatel DynPole sice je typovy, ale
procedura Getmem je univerzalni a jde pouzit i v tomto pripade. Kdybychom
pouzili New, alokovalo by se tak velke pole, jak jsme definovali v typu
SablonaPole, coz ale nechceme, ze jo, to by pak nebylo nic skutecne
dynamickeho.

6) A to je vsechno. Nyni mame pole, do ktereho muzeme ukladat prislusne
hodnoty jako do kazdeho jineho pole, jenom nesmime zapomenout na to, ze jdeme
pres ukazatel: DynPole^[index]:=hodnota apod.
Pozor na indexy. Je vypnuta kontrola rozsahu, takze ne abyste neco zapsali
mimo alokovane pole! Rozmery pole si musite celou dobu pamatovat.

7) Zruseni pole: Freemem(DynPole,velikost) (velikost stejna jako pri alokaci).


Offline

Užívateľ
Užívateľ
pole s dynamickym poctom prvkov v pascale

Registrovaný: 02.09.05
Prihlásený: 17.11.10
Príspevky: 154
Témy: 1 | 1

Trochu som to upravil + odladil v pascali (Predosly priklad som pisal z hlavy).......V tejto podobe by to malo byt funkcne :

Kód:
type TPole = array [0..0] of byte;
     PPole = ^TPole;

var Pole : PPole;
    pocet_prvkov : integer;
    i : integer;

begin
   { pomocou direktivy R- vypneme range checking. Inak by sposobovalo problemy }
   {$R-}

   pocet_prvkov := 100;
   { alokovanie pola }

   GetMem(Pole, pocet_prvkov * SizeOf(integer));

   { priradenie hodnot }
   i := 0;
   Pole^[i] := 10;

   i := 10;
   Pole^[i] := 15;

   i := 20;
   Pole^[i] := 100;

   { uvolnenie pamate pouzivanej dynamickym polom}

   FreeMem(Pole, SizeOf(Pole^));
end.


P.S.: Vidim , ze si si nastudoval, to je fajn ! :)


_________________
Múdry nie je ten, čo veľa vie, ale ten, kto vie, čo je treba. (Thomas Alva Edison)
 [ Príspevkov: 5 ] 


pole s dynamickym poctom prvkov v pascale



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

VPS s velkym poctom ip /24

v Webhosting a servery

2

423

18.03.2018 0:34

Chris

V tomto fóre nie sú ďalšie neprečítané témy.

neaka zvukovka s dynamickym zosilovacom

v Zvuk

0

550

11.10.2009 20:41

t-90

V tomto fóre nie sú ďalšie neprečítané témy.

Funkcie s premenlivým počtom parametrov v jazyku C

v Assembler, C, C++, Pascal, Java

2

544

11.05.2013 21:39

faraon

V tomto fóre nie sú ďalšie neprečítané témy.

Ako spraviť web s dynamickým menu?

v HTML, XHTML, XML, CSS

4

564

04.09.2014 13:56

walther

V tomto fóre nie sú ďalšie neprečítané témy.

Inštalácia Win8 problém s dynamickým diskom

v Operačné systémy Microsoft

6

509

07.11.2012 16:19

Fever

V tomto fóre nie sú ďalšie neprečítané témy.

Načítavanie prvkov

v JavaScript, VBScript, Ajax

8

511

31.05.2010 18:29

DARSON

V tomto fóre nie sú ďalšie neprečítané témy.

zoradenie prvkov databazy

v PHP, ASP

1

890

05.11.2007 16:04

GoodWill

V tomto fóre nie sú ďalšie neprečítané témy.

Presun prvkov pola

v Assembler, C, C++, Pascal, Java

2

393

18.10.2012 1:51

Gregi555

V tomto fóre nie sú ďalšie neprečítané témy.

Zlucenie prvkov pola

v PHP, ASP

3

439

23.03.2012 11:39

exoomer

V tomto fóre nie sú ďalšie neprečítané témy.

vyber prvkov - POLIA

v PHP, ASP

5

523

23.04.2010 10:48

stenley

V tomto fóre nie sú ďalšie neprečítané témy.

Pascal - posun prvkov pola

v Assembler, C, C++, Pascal, Java

17

1099

22.10.2012 17:40

Gregi555

V tomto fóre nie sú ďalšie neprečítané témy.

Problém s umiestnením prvkov

v HTML, XHTML, XML, CSS

6

408

17.04.2014 12:06

Snipo

V tomto fóre nie sú ďalšie neprečítané témy.

posuvanie prvkov v poli

v PHP, ASP

2

620

07.07.2009 12:23

tomast7

V tomto fóre nie sú ďalšie neprečítané témy.

Usporiadanie prvkov v poli

v Assembler, C, C++, Pascal, Java

4

536

13.04.2017 12:21

neutroN

V tomto fóre nie sú ďalšie neprečítané témy.

Problém pri načítaní prvkov cez ajax

v JavaScript, VBScript, Ajax

0

546

12.03.2012 13:31

blazej44800

V tomto fóre nie sú ďalšie neprečítané témy.

MAzanie prvkov z poľa v jave

v Assembler, C, C++, Pascal, Java

5

1068

22.12.2010 11:55

Forty-



© 2005 - 2024 PCforum, edited by JanoF