[pascal] dynamicka velkost array

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod aberez11 5. 4. 2009 21:09

ide len o 1rozmerne pole (array of char) pri ktorom potrebujem mat hornu hranicu variabilnu [0..FileSize()] ale nejak s tym neviem pohnut.
este taka podotazka: aky je maximalny pocet prvkov v takomto poli?(alebo teda max velkost v bytes)
dakujem za odpovede (ak by sem niekto k tej deklaracii hodil aj nazornu ukazku budem len rad :-) )
dedukcia: "Tí čo s tým nemajú problémy, s tým nemajú až také problémy. Ale tí čo s tým problémy majú, s tým majú problémy.." (prednasajuci vysvetluje studentom ako sa veci maju)
aberez11
Junior
Uživatelský avatar

Odeslat příspěvekod Intex 6. 4. 2009 07:13

V pascale som sice uz davno nerobil, ale nieco taketo by mohlo fungovat:

Kód: Vybrat vše
var pole: array of char;
begin
  SetLength(pole, 10);
  pole[9] := 'a';
  SetLength(pole, 20);
  pole[19] := 'z';
end.


Indexovane vzdy od 0 po pocet -1
Појавила се системска грешка. Молим контактирајте службу помоћи.
Intex
Junior
Uživatelský avatar

Odeslat příspěvekod srobowak 6. 4. 2009 07:58

No to asi v Pascale fungovať nebude, lebo pri deklaracii pola treba presne urcit jeho dlzku. No jedina moznost asi je, ze si nadeklarujes konstantu napr, DlzkaPola a zadefinujes pole ako
array [ 1..DlzkaPola ] of char; Ale ak chces aby to pole bolo presne take velke ako potrebujes ( podla toho suboru ) tak to budes musiet riesit pomocou ukazovatelov a linearne zretazeneho zoznamu.

A co sa tyka velkosti toho pola tak mne tusim Pascal nechcel zobrat viac ako 160 kB.
srobowak
Junior

Odeslat příspěvekod IPs 6. 4. 2009 08:21

Dynamickou alokaci lze v pascalu provest pouze pomoci ukazatelu a alokovani pameti pomocibud New a nebo GetMem, jinak to nejde. Maximalni velikost pole je 65536 bytu tedy Array[0..65535] of Byte. Kazde pole muze mit maximalne tuto velikost, takze kdyz budes chtit mit pole Wordu tak to muze byt maximalne [0..32767]. Cisty pascal je na tohle dost neohrabany a omezujici, zkus delphi.
IPs
Kolemjdoucí

Odeslat příspěvekod aberez11 6. 4. 2009 09:29

no to ano treba ist na to cez pointre ale to je asi tak vsetko co zatial viem
dedukcia: "Tí čo s tým nemajú problémy, s tým nemajú až také problémy. Ale tí čo s tým problémy majú, s tým majú problémy.." (prednasajuci vysvetluje studentom ako sa veci maju)
aberez11
Junior
Uživatelský avatar

Odeslat příspěvekod IgnorStoupa 6. 4. 2009 11:01

Priklad na dynamicke pole pres struktury s pointry? Ten uz je popsany snad v kazde prirucce zakladu programovani na pascalu. Dulezite je ovsem vedet, co bud nasledovat jako dalsi uloha.....
Pokud je ucelem jen soubor precist a zjistit pocet znaku a nic dalsiho, tak je nejlepsi to udelat jako zasobnik rekurzivnim volanim procedury, co precte jeden znak, inkrementuje globalni citac a zavola sama sebe.
Neni dano vubec nic. Sestrojte parabolu.
IgnorStoupa
Mírně pokročilý
Uživatelský avatar

Odeslat příspěvekod kohutisko 6. 4. 2009 11:39

s tou rekurziou to nemyslis vazne....
kohutisko
Junior
Uživatelský avatar

Odeslat příspěvekod gandor 6. 4. 2009 13:14

toto by som riesil jednym obicajnym while cyklom... Preco si skriabat lave ucho pravou rukou....
gandor
Mírně pokročilý

Odeslat příspěvekod aberez11 6. 4. 2009 13:27

2ignorStoupa-tak ano je to zaklad.. uz som si to checkol takze uloha vyriesena
dik za odpovede
dedukcia: "Tí čo s tým nemajú problémy, s tým nemajú až také problémy. Ale tí čo s tým problémy majú, s tým majú problémy.." (prednasajuci vysvetluje studentom ako sa veci maju)
aberez11
Junior
Uživatelský avatar

Odeslat příspěvekod IgnorStoupa 6. 4. 2009 16:06

kohutisko píše:s tou rekurziou to nemyslis vazne....

proc ne? ... navazna uloha je obvykle vytisknou ten text pozpatku. :shock: Zatimco ostatni smoli do seznamu pruchod smerem zpet, tady staci pridat prikaz tisku a jde se na pivo. 8-)
Neni dano vubec nic. Sestrojte parabolu.
IgnorStoupa
Mírně pokročilý
Uživatelský avatar

Odeslat příspěvekod Intex 6. 4. 2009 16:23

No pokial by si chcel rekurzivne citat/vypisat znak po znaku z 10MB suboru... ufff... stack overflow error minimalne... a to uz nehovorim o tom, ze je to maximalne neefektivne...
Појавила се системска грешка. Молим контактирајте службу помоћи.
Intex
Junior
Uživatelský avatar

Odeslat příspěvekod HiroSK 6. 4. 2009 16:37

Ach jaj. Dynamicke polia podporuje Delphi, FreePascal. Borland/Turbo Pascal len preddefinovane a len do 65k.
Pouzi FreePascal (mas tam uplne rovnake prostredie ako v TP/BP a aj kod mozes pisat/pouzit uplne rovnaky) a pouzi navod z druheho prispevku od Intexa.

Obrázek

http://sourceforge.net/project/download ... a=51378836
AMD Athlon 64 X2 4200+, 4x1GB DDR II 800MHz, Asus M2N-E 570Ultra, Creative X-Fi Fatality, Asus 8600GT, Seagate 750+320+200+120GB
Thermaltake MatrixVX VD3000BWA, Asus A-45GA 450W, Scythe SCKM-1000, Noctua NH-U12F
Samsung 226BW, Logitech G15 + G5
HiroSK
Junior
Uživatelský avatar

Odeslat příspěvekod aberez11 6. 4. 2009 19:34

jasne pouzivam len fpc a na klikacky delphi
dedukcia: "Tí čo s tým nemajú problémy, s tým nemajú až také problémy. Ale tí čo s tým problémy majú, s tým majú problémy.." (prednasajuci vysvetluje studentom ako sa veci maju)
aberez11
Junior
Uživatelský avatar

Odeslat příspěvekod HiroSK 6. 4. 2009 19:39

A toto http://wiki.lazarus.freepascal.org/Screenshots na klikacky si uz videl? ;)
AMD Athlon 64 X2 4200+, 4x1GB DDR II 800MHz, Asus M2N-E 570Ultra, Creative X-Fi Fatality, Asus 8600GT, Seagate 750+320+200+120GB
Thermaltake MatrixVX VD3000BWA, Asus A-45GA 450W, Scythe SCKM-1000, Noctua NH-U12F
Samsung 226BW, Logitech G15 + G5
HiroSK
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků