Polia v pascale

Programovacie jazyky, rady, poradňa...
Fata! ChaoS
Star
Star
Používateľov profilový obrázok
Príspevky: 650
Registrovaný: 12 apr 2006, 20:23
Bydlisko: Tvrdošovce
Kontaktovať používateľa:

Polia v pascale

Príspevok od používateľa Fata! ChaoS »

Ahojte potreboval by som vytvoriť N prvkové pole, lenže ako spravím v pascale to, že nie hneď na začiatku určím počet prvkov. Lebo normálne to je takto

Kód: Vybrať všetko

var
    n:word;
    retazec:array [1..3] of string;
lenže ja chcem v tele programu udať n, čiže počet prvkov polí. lenže pole už má 3 prvky, lebo som to tak udal, viem, že aj keď dám retazec[4]:='fsdfsdfs' tak sa vytvorí 4 prvok, ale chcem to mať validné a preto potrebujem vašu pomoc.
AKo by sa to dalo spraviť tak, aby osm na začiatku nemusel udať počet prvkov poľa a až následne v tele?
konyk87
King
King
Používateľov profilový obrázok
Príspevky: 1709
Registrovaný: 24 okt 2007, 15:56

Príspevok od používateľa konyk87 »

no ved skus to pole deklarovat niekde v tele programu a uvidis, ci to pojde..

Kód: Vybrať všetko

...
readln (i);
var retazec:array [1..i] of string;
...
ale pochybujem, ze to nepojde (pascal som nevidel takmer 3 roky), navyse sa to neodporuca..

v tom pripade si bud na zaciatku sprav dostatocne velke pole alebo si to pole vytvor dynamicky (pomocou pointrov)...
Fata! ChaoS
Star
Star
Používateľov profilový obrázok
Príspevky: 650
Registrovaný: 12 apr 2006, 20:23
Bydlisko: Tvrdošovce
Kontaktovať používateľa:

Príspevok od používateľa Fata! ChaoS »

Práve, že v poli programu sa nedá deklarovať nič, nato má pascal svoju deklaračnú časť, a chcem šetriť miestom, takže nechcem vytvárať žiadné zbytočné prvky.
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

pokial ma pamat neklame tak sa to tak neda

jedine si definovat konstantu este pred deklarovanim pola a tu konstantu pouzit v rozsahu pola ...

inak asi bez sance
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Fata! ChaoS napísal:Práve, že v poli programu sa nedá deklarovať nič, nato má pascal svoju deklaračnú časť, a chcem šetriť miestom, takže nechcem vytvárať žiadné zbytočné prvky.
Tak potom musíš použiť funkciu GetMem (alebo ako sa volá), prípadne v Delphi sú aj dynamické polia.
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

no ony su skor "dynamicke" ... princip spociva v tom ze sa alokuje nove pole a hodnoty zo stareho sa prekopiruju .... delphi to len zaobali do jednej funkcie

//edit: audiotrack ... presne tu som myslel :)

alebo teda ako podotkol chrono ... pouzit dynamicke premenne a vyhrat sa s pointrami
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

chrono napísal:Tak potom musíš použiť funkciu GetMem (alebo ako sa volá), prípadne v Delphi sú aj dynamické polia.
setlength(pole,rozsah);
mirak2
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6719
Registrovaný: 18 sep 2005, 13:44
Bydlisko: Prague, CZE / Kosice, SVK

Príspevok od používateľa mirak2 »

viem ze to nie je idealne riesenie problemu ale zadefinuj si pole obrovskych rozmerov, dajme tomu 1..1000 pre mna za mna....a potom v programe samotnom nacitas N a v cykle budes pchat do prvkov pola hadzat hodnoty len po N...
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

preboha, len to nie.
Fata! ChaoS
Star
Star
Používateľov profilový obrázok
Príspevky: 650
Registrovaný: 12 apr 2006, 20:23
Bydlisko: Tvrdošovce
Kontaktovať používateľa:

Príspevok od používateľa Fata! ChaoS »

Neboj to nie, ve´d práve, že potrebujem efektívny program bez zbytočného mrhania miesta a keď už tak to môžem dať aj od 1..3 a potom dám pripísať nech zapíše niečo do 5 prvku spraví to a sám vytvorí ďalšie prvky, ale zas to je trošku neelegatné, ale boli tu celkom dobré veci, takže skúsim tie. Ak sa nepodarí, tak ten program spravím v C++ tam to je lepšie s poľami :) Díky každému :wink:
johny_sk
Professional
Professional
Príspevky: 1343
Registrovaný: 15 máj 2008, 21:56

Príspevok od používateľa johny_sk »

myslim, ze to v PASCALe islo obist formou nejakej procedury/funkcie.

procedure blabla(integer n)
var pole : array [1..n] of ...

inak uz iba s pouzitim konstanty, alebo dynamicky si to skusit vyrobit (co je v pascale slusna prasarna, co sa kodu tyka)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

čo je prasárna na tom jednom riadku? :roll:
šak klasicky deklarujem pole: var pole:array of integer;
načítam si n (je jedno akým spôsobom) a potom setlength(pole,n);

fakt prasárna, máš pravdu. Asi budem aj ja v budúcnosti na to používať pole 1000x1000 a z toho bude 990x990 nevyužitého. To nie je vôbec prasárna (použil som dvojrozmerné aby som ešte viac podčiarkol ten nezmysel)
piton
King
King
Používateľov profilový obrázok
Príspevky: 1902
Registrovaný: 02 aug 2005, 0:31
Bydlisko: Hnojisko

Príspevok od používateľa piton »

audiotrack napísal:čo je prasárna na tom jednom riadku? :roll:
šak klasicky deklarujem pole: var pole:array of integer;
načítam si n (je jedno akým spôsobom) a potom setlength(pole,n);

fakt prasárna, máš pravdu. Asi budem aj ja v budúcnosti na to používať pole 1000x1000 a z toho bude 990x990 nevyužitého. To nie je vôbec prasárna (použil som dvojrozmerné aby som ešte viac podčiarkol ten nezmysel)
Funguje to aj v pascale?
johny_sk
Professional
Professional
Príspevky: 1343
Registrovaný: 15 máj 2008, 21:56

Príspevok od používateľa johny_sk »

freepascal nie je to iste co pascal... Na to pozor, lisia sa v niekolkych, nielen drobnostiach.

dynamickym polom som mal na mysli nejaky spojak, a to uz v pascale prasarna je. Tvoj priklad je pekny, ale v pascale mi nefungoval (radsej som si to overil, lebo by bolo krute, keby nieco taketo trivialne existovalo a nevedel by som o tom...).
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

na začiatku tej stránky je:
Free Pascal supports arrays as in Turbo Pascal.
z toho som vychádzal. Pascal (ten pradávny dosovský) nemám, konzolové aplikácie robím v delphi a tam sa to bežne používa.
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

SetLength is a Borland Delphi 2.0 extension.
klasicky pascal (skusil som to teraz v TP7) to nepozna ... a nie som si isty ci BP7 to poznal .. myslim ze az Delphi to malo ....
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Ani BP7 niečo také nepodporuje.
Elius
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 36
Registrovaný: 29 sep 2007, 12:38

Príspevok od používateľa Elius »

Pole v pascale je cisto staticka premenna, to znamena ze ma fixnu velkost, ktora je ista uz v deklaracii, vytvorit dalsie pamatove miesta pocas chodu programu a nemrhat miesto sa da jedine pomocou dinamickych premennych a vzajomnym zviazanim do linearnych zoznamov...aky tip zoznamu si vyberies je uz na tebe.
Napísať odpoveď