Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem pascal-typ ukazovatel a zoznamy

mam zdrojak v pascale, takmer vlastnorucne prepisany.
ide v nom o typ ukazovatel a vytvaranie zoznamov....
Problem ale je, ze velkost pamate pred spustenim a po spusteni sa nerovna(co by sa zevraj malo).
Nakolko tomuto zatial dost dobre nerozumiem(respektive vobec), bol by niekto taky dobry a povedal mi, kde mam chybu? dik.

zdrojak najdete tu:

http://stredoslovak.szm.sk/ZOZNAM.PAS

alebo:

http://stredoslovak.szm.sk/ZOZNAM.rar

Na zaciatku tvorby tohto programu som to skusal kadejako editovat a vsimol som si, ze ked som tam nepouzil prikaz premenna:=nil, tak potom sa velkost pamete pred a po rovnala. lenze prikaz nil tam pouzivam a neviem, ci sa to vobec da spravit bez neho.
dik za odpovede.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
uz to mam takmer hotove: http://stredoslovak.szm.sk/ZOZNAM.PAS este by ma zaujimalo-automaticky ta…
Pavol 17.04.2006 12:04
Pavol
Hezký. Čtení náhodně generovaných jmen mě pobavilo :-D Na první pohled se to zdá v pořádku (ale komu…
Rulda 17.04.2006 15:20
Rulda
- když už jsme u toho rozsahu, tak se mi vůbec zdá, že kódem nešetříš. Proč např. u zmiňovaného výpi…
Rulda 17.04.2006 15:27
Rulda
A ještě k té paměti. Msx. se bude zlobit, ale já mám jiný názor. Jedna položka v seznamu (v tomto př…
Rulda 17.04.2006 15:34
Rulda
Hnevať sa nebudem vlastne máš pravdu, totiž, ak bude voľné miesto na alokovanie dostatočnej pamäte,… poslední
msx. 17.04.2006 22:56
msx.

uz to mam takmer hotove:

http://stredoslovak.szm.sk/ZOZNAM.PAS

este by ma zaujimalo-automaticky tam generujem(najprv do suboru a potom to nacitam), a ked si tam niekto da velky pocet, ako to mam skontrolovat, ci sa to vojde do pamate?
myslim...-neviem ci mam pouzit funkciu maxavail(vrati velkost najvacsieho volneho bloku) alebo memavail(vrati velkost vsetkych volnych blokov), respektive, mam tam vobec pouzit zistovanie, ci je dost volneho miesta v pamati?

Hezký. Čtení náhodně generovaných jmen mě pobavilo :-D
Na první pohled se to zdá v pořádku (ale komu by se chtělo přemýšlet v neděli odpoledne, že). Nějaké kosmetické změny bych ti ale doporučil (i když na výslednou funkci nebudou mít vliv)

- proměnná kon je IMHO zbytečná. Alespoň jsem si nevšiml, že bys ji někde potřeboval. Jen ti komplikuje život, protože ji při editaci seznamu musíš aktualizovat.
- v hlavním programu je příliš mnoho kódu. Je zvykem rozsáhlejší části kódu dávat do samostatných procedur (podle významu). Např. pouze část pro výpis seznamu má 5 stran (obrazovek). Ta by se určitě lépe vyjímala v samostatné proceduře.

... to be continue ...

- když už jsme u toho rozsahu, tak se mi vůbec zdá, že kódem nešetříš. Proč např. u zmiňovaného výpisu vypisuješ zvlášť první stranu a ty další? Nestačilo by udělat takhle?

pom:=zac; {v I je pocet polozek seznamu}
for I := 1 to I do
begin
  writeln(I:5,':', pom^.meno:11,' ',pom^.priez:13,' ',pom^.rocnik,'. rocnik'); {vypis polozky}
  if I mod 24 = 0 then {24-pocet polozek na stranku, lze menit}
  begin
    write('Enter=dalsia strana/Esc=navrat do menu');
    repeat key:=readkey; until (key=#27) or (key=#13);
    if key = #27 then
    begin
      key := #0; break;  {prerus smycku}
    end;
    clrscr;
  end;
  pom:=pom^.dalsi;
end;
writeln('Koniec prezerania, pokracuj stlacenim klavesy');
readln;

A ještě k té paměti. Msx. se bude zlobit, ale já mám jiný názor. Jedna položka v seznamu (v tomto případě) má 516 Byte (2×string + pointer). Pokud bude veškerá zbývající paměť (řekněme 50kB) roztroušena v blocích < 516 Bytes, tak alokace další položky selže, přestože celková dostupná paměť (součet všech bloků) bude víc než dostatečná. Proto bych se přikláněl k MaxAvail.

Zpět do poradny Odpovědět na původní otázku Nahoru