A tömbök a paramétereket az eljárások és függvények
Tömbök, valamint más típusú adatok szolgálhatnak paramétereit eljárások és függvények. Itt van, mit kell keresni, hogy a funkció kiszámítja az átlagos értéke egy tömb a valós számok:
Átlagos függvény paraméterként egy sor ismert méretű. A követelmény egy fix méretű tömbparaméter gyakran túl elrettentő. Az eljárást találni az átlagértéket kell tudnia működni tömbök tetszőleges hosszúságú. bevezetett nyílt tömbparaméter erre a célra a Delphi nyelv. Az ilyen tömböket már kölcsönzött nyelven Delphi fejlesztők Modula-2.
1. Nyitott tömbparaméter leírt felhasználásával tömb kombinációk, a tömb határok elhagyjuk:
2. alprogram belsejében átlag alsó határa a nyitott tömb nulla (Low (A) = 0), de a felső (High (A)) nem ismert, és úgy tűnik, csak a végrehajtás szakaszában a program.
3. Már csak két módon lehet használni a nyílt tömb: a fellebbezést a tömb elemeit és átadása egy másik tömb szubrutin fogadó nyitott tömb. Nem lehet hozzárendelni egy tömb egy másik nyitott, mert a méretek nem ismertek.
Itt látható egy példa segítségével a Átlagos funkció:
4. A második állítás, nyitott tömb épül idején a hívás átlagos. nyitott tömb konstruktor egy zárójeles kifejezések listája. Kifejezéseket használni állandók, változók és függvények. Típusú kifejezés összeegyeztethetőnek kell lennie a típus a tömb elemeit. Építése nyílt tömb egyenértékű létrehozása és inicializálása átmeneti változó.
5. Nyissa tömbök csak át a szubrutin értelmesen paramétereket, konstansokat.
6. Néhány könyvtár nyelven Delphi rutin veszi paramétereit típusú tömb const - nyitott állandók tömbök. Array telt mivel ez a paraméter, gondosan felépített idején a szubrutinhívási és lehetnek elemek különböző (!). Fizikailag ez áll egy rekord típusú TVarRec, kódolási típusát és egy érték a tömb elemeinek (felvétel az alábbiakban tárgyaljuk). Nyílt tömb konstans lehetővé emulációs alprogramot változó számú paramétert különböző típusok és alkalmazás, például a Format funkciót format string.
Paraméterátadás értelmesen
Ez paraméterátadási mód az alapértelmezett. Ha a paraméter által elfogadott érték, helyi másolatot a változó, amely a rendelkezésre álló feldolgozási eljárás vagy függvény. Nézd meg a következő példát:
eljárás Test (s: string);
Amikor hívja ezt az eljárást egy másolatot készít az átvitt, mint egy sor paraméter s, ami működni fog eljárás Test. Ebben az esetben minden változás történt a vonal nem befolyásolja az eredeti változót s.
Ez azonban nem vonatkozik a tárgyakat. Például, ha egy változó vezetjük a funkciót (vagy inkább a tárgy például) a TStringList, ebben az esetben, a link fogja át (akkor is, ha nem adjuk meg külön).
Egydimenziós és kétdimenziós statikus tömbök. Leírás és a hozzáférés az elemet. Transfer tömböket a paramétereket az alprogram. Példák.
Ahhoz, hogy egy tömböt által használt tervezési:
ahol minden indexType - ebben a sorrendben típus, amely nem haladja meg a 2 GB-os méret. Ehhez tudjuk használni valamilyen típusú azonosítót (például logikai vagy ansichar), de a gyakorlatban általában kifejezetten meghatározott részsávhoz egészek. A számos eleme a tömb minden dimenzióban adják megfelelő soros típusú. A bejegyzések száma egyenlő a termék a elemeinek számát minden dimenzióban.
A kifejezés egy tömb zarezevirovannym. A szögletes zárójelek után a tömb szavakat igényes szintaxist, és miután a szót -, hogy milyen típusú a tömb elemeinek.
A legegyszerűbb esetben - egy egydimenziós tömböt:
Miután egy típusának leírása tudja mozgatni a változók meghatározása, gépelt állandók:
2. Kérjük, vegye figyelembe, hogy az inicializálás a tömb elemeinek fordul zárójelben, vesszővel elválasztva.
3. A tömb lehet meghatározni, és nem leíró jellege:
4. Ahhoz, hogy az egyén eleme a tömb, szükség van a zárójelben az index, például,
5. A tömbdeklaráció fent egydimenziós, mivel csak egy index. Méretezett tömbök gyakran használják képviselő lineáris szekvenciája elemek. Ha két index van beállítva a leírása a tömb, a tömb az úgynevezett egy kétdimenziós, ha az n index - n-dimenziós. Kétdimenziós tömbök használják, hogy képviselje a táblázatban, és az n-dimenziós -, hogy képviselje terek. Itt van egy példa nyilvánító táblázat, amely 5 oszlopok és 20 sorok:
Ugyanez lehet írni egy tömörebb formában:
Eléréséhez egyedi eleme egy többdimenziós tömb, meg kell adnia az érték az egyes index például,
vagy tömörebb felvétel
Ez a két módszer egyenértékű indexelés.
Egydimenziós és kétdimenziós dinamikus tömböket. Leírás és a hozzáférés az elemet. SetLength eljárás funkciók hossza, alacsony, magas. Példák.
Az egyik leghatékonyabb eszközöket Delphi nyelv dinamikus tömb. A fő különbség a hagyományos tömbök az, hogy tárolják a dinamikus memóriát. És ez annak köszönhető, hogy a nevüket. Ahhoz, hogy megértsük, miért van szükség, nézzünk egy példát:
Set értéke alapján a felhasználó által bevitt egy a tömb mérete lehetetlen, mert a tömb határait meg kell adnia állandó értékek. Az érték nem állítják, hogy egy állandó a felhasználó által megadott. Más szóval, a következő nyilatkozatot hiba lenne:
Szakaszában írásban a program lehetetlen megjósolni, hogy pontosan mely adatmennyiség feldolgozására a felhasználó akar. Mindazonáltal meg kell válaszolni két kérdést vet fel:
- Számos elemet egy tömböt?
- Mi van, ha a felhasználó továbbra is szükség van több elemet?
Akkor a következőképpen kell eljárni. A felső határt a tömb beállításához a lehető legnagyobb (?) Tételek száma, és valóban csak egy része a tömbben. Ha a felhasználói igények több elem, mint fenn, akkor egyszerűen megtagadja udvariasan. Például:
Ez a megoldás nem optimális. Ha a felhasználónak csak 10 tagja van, működik gond nélkül, de mindig használ az összeg tárolásához szükséges memória 100 elemet. Számára fenntartott memória a fennmaradó 90 tagja nem használhatják a programot, vagy mások. Most képzeljük el, hogy minden program teszi ugyanezt. A hatékonyság memóriakihasználás drasztikusan csökken.
Dinamikus tömbök tudja megoldani a problémát tekinthető a legjobb módon. Akkora, mint egy dinamikus tömb lehet változtatni futás közben.
A dinamikus tömb deklarált határok nélkül:
tömb baseType
A dinamikus tömbök:
1. Változtatható DynArray jelentése a linket kell elhelyezni a dinamikus memória tömb.
2. Kezdetben egy memória tömb nem fenntartva, az elemek száma a tömbben nullával egyenlő, és a változó értéke DynArray egyenlő nulla.
3. létrehozása dinamikus tömb (memóriafoglalási annak elemei) végzik SetLength eljárást.
4. Állítsa a dinamikus tömb végezzük ugyanazzal az eljárással:
Ha megváltoztatja a tömb méretét az értékek az összes elem tárolja. A sorozat cselekvések: egy új memória blokk van rendelve, a régi értékeket az elemek az egység másolja az új, a régi memória blokk felszabadul.
Amikor csökkenti a dinamikus tömb teryayutyasya szükségtelen elemek.
Méretének növelésével a tömb dinamikus hozzáadott elemek nem indítja be bármilyen értéket, és általában azok az értékek véletlenszerű. Azonban, ha a dinamikus tömb elemekből áll, amelynek típusa magában foglalja automatikus inicializálás üres érték (string, Variant, dinamikus tömb, stb), ezután hozzáadjuk a memóriaterületet alapállapotba nullákkal.
5. meghatározása a tételek száma gyártott segítségével funkció Hosszúság:
6. A elemei a dinamikus tömb mindig indexelve a nullától.
7. Hozzáférés a számukra nem különbözik a hozzáférést az elemek a hagyományos statikus tömbök:
8. dinamikus tömböket, valamint a hagyományos tömbök, a funkciók alacsony és magas, visszatér a minimális és maximális indexek a tömb, ill. Dinamikus tömbök funkció Alacsony mindig visszatér 0.
9. felszabadítja a memóriát elkülönített az elemek a dinamikus tömb végezzük beépítési hosszát értéke 0 vagy beállítunk változó tömb érték nil (mindkettő beállítások egyenértékűek):
Azonban nem feltétlenül használja a végén egy dinamikus tömb szabad memóriát, hiszen automatikusan kiold, amikor kilép a hatálya a tömb változó (kényelmes, nem igaz!). Ezt a lehetőséget a hivatkozási számot számláló mechanizmus.
10. Amikor hozzárendel egy dinamikus tömb egy másik, egy példányát egy meglévő tömb nem jön létre.
Ebben a példában, a B változó tárolja a dinamikus címét memóriaterület, amelyen tárolt tömbelem egy (más szavakkal, a B változó van hozzárendelve a referenciaérték a referencia változó A).
Mivel ez a helyzet a vonalak, a memória szabadul fel, amikor a referencia száma nulla lesz.
11. Együttműködik a dinamikus tömböket, akkor az ismerős sorok másolása funkciót. Ez visszaad egy részét a tömb formájában egy új, dinamikus tömb.
12. többdimenziós dinamikus tömböket:
Ez azt jelenti, memóriát minden dimenzióban.
12. készletek. Leírás, referencia, meg működését. Példák.
Sok - ez egy komplex típusú adatok egy halmazát ábrázolja néhány elemet egészére. Mezőértékeket A típus - egy sor minden lehetséges részhalmazainak tagjai annak elemeit, így az üres halmaz. Minden halmaz elemeit tartozik egy bizonyos sorrendben típus, amely az úgynevezett alap típus a készlet. Az alaptípus nem lehet több mint 256 lehetséges értékeit. Ezért, mint alapvető típusú kiválasztott byte vagy szekvencia típusokat (AnsiChar, Byte, ShortInt, logikai, WordBool), vagy annak egy részét megvalósítani azokat.
Ahhoz, hogy leírják a többes sor használt típusú kifejezést, majd több bázis típus van rögzítve.
Most, akkor állapítsa több típusú változó:
Akkor nyilvánítja a szettet, és nincs típus leírása:
· A kifejezések értékeit a halmaz elemeit vannak írva szögletes zárójelben [2, 3, 5, 7], [1..9], [ 'A', 'B', 'C'].
·, Azt mondják, hogy üres, és jelöljük [] Ha a beállított nincs elemekkel.
· Példa inicializálás készletek:
set Operations
Amikor a használata relációs operátorok engedélyezettek a készletek (= <>,> =, <=), объединения, пересечения, разности множеств и операции in.
összehasonlítási műveletben (= <>). Két egyenlő, ha ők állnak az azonos elemeket. A sorrend a készlet összehasonlított nem számít. Két A és B minősülnek egyenlőtlen, ha azok eltérnek a hatalom, vagy az értéke legalább egy elem.