
Delphi pole
Zdravím.
Když mam pole.
pole: array[1..5] of integer;
begin
pole[1]:= 7;
pole[2]:= 0;
pole[3]:= 0;
pole[4]:= 0;
pole[5]:= 11;
Potřebují zjistit, jestli je ve všech polích stejné číslo.
Přečtu si do proměnné první pole[1] a pak pomocí smyčky for projedu zbytek a porovnám.
Je jednodušší řešení?
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:
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)
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á.