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.

Hnevať sa nebudem vlastne máš pravdu, totiž, ak bude voľné miesto na alokovanie dostatočnej pamäte, tak maxavail() dá vždy nejaké vysoké číslo, ak to číslo bude menšie ako potrebuje, tak to znamená, že tú pamäť má už plnú.

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