Jen taková připomínka, pokud se pole inicializuje hned za beginem, bylo by možná lepší ho inicializovat už v deklaraci zápisem typu:
var pole: array[1..5] of integer = (7, 0, 0, 0, 11);
přesnou syntaxi si ale zjistěte v dokumentaci, toto zrovna z hlavy nevim a taky to musím hledat, když to zrovna potřebuju.
Existuje řešení, které není jednodušší (teda jak se to vezme), ale vede na jednodušší (rychlejší) kód. Jde o to, že indexování pole znamená kombinaci násobení a sčítání (hodnota je uložená na adrese základ+číslo_prvku*velikost_prvku), pokud je potřeba přistupovat k prvkům pole sekvenčně (což tady je), neni potřeba pořád dokola násobit (chytrý kompilátor použije posun, ale stejně to při každém indexování musí dělat opakovaně) a sčítat (k tomu si přidejte cyklus for), ale stačí adresu (ukazatel) navyšovat o velikost prvku.
postup by vypadal asi takto (nemám to plně promyšlené, tak jen naznačím)
reference := pole [1]
ukazatel na pole := adresa pole[2]
while (nejsem na konci pole (tj. ukazatel na pole < adresa pole [poslední]))
begin
if (hodnota uložená na ukazateli <> reference) then
begin
nalezena neshoda
break //přerušení cyklu
end;
inc(ukazatel na pole, sizeof(integer)) //pokud to delphi dovoluje, jinak použít normální sčítání nebo
end
if ukazatel = konec pole then vše se shodovalo else
Lze to asi napsat na tucet dalších způsobů, ale snad jsem tu myšlenku vystihnul. Zrovna v delphi se s ukazateli pracuje trochu hůř (skoro mám pocit, že ani nejdou sčítat), alespoň co vím z verzí 3 a 7. Matně si vzpomínám, že inc(ukazatel) ho inkrementoval o velikost jeho typu, takže druhý parametr inc je zbytečný, ale to by opět bylo nutné ověřit v nápovědě. Tedy spousta zjišťování, kvůli drobné optimalizaci - to by mělo smysl, pokud by se to porovnávání dělalo v programu nějak často, nebo by ta pole byla hodně velká.