Tömbök c gyakorlatban

Mint látható, az elején jeladók sok kérdést, amikor a döntés a témában „tömbök” feladatokat. Ez a cikk megérintett kapcsolatos kérdésekben csak a tömböket a klasszikus értelemben. Munka a STL konténerek - egy külön kérdés.

Általános szabály, hogy a feladatok a következők: töltse ki a tömböt, hogy bizonyos műveleteket a tömb elemeit, az eredmény nyomtatható. Már a megfogalmazása a probléma felismerni a logikai blokkok megoldani. Következő megpróbálom megmutatni tipikus „téglák”, amely lehet hajtani a megoldás - .. Azaz, a program.

array szervezet

Memória a tömb automatikusan kiválasztható, vagy dinamikusan.

Automatikus memória kiosztás használható, ha a tömb mérete ismert fordítási időben (t. E. írásakor kód).

A memória dinamikus használható, ha a tömb mérete nem ismert fordítási időben (például kért a felhasználó).

Mindkét típusú tömbök lehetnek a globális (bizonyos funkciók) és a helyi (bizonyos funkció vagy egység). Itt az automatikus tömbök, van egy finomságot. Memória automatikus helyi lefoglalt tömb verem. Ezért az a tömb méretét kicsinek kell lennie. Ellenkező esetben, akkor kap egy halom túlcsordulás, és ennek eredményeként, egy abnormális programkilépés. Veremtúlcsordulás is kapott kis méretben és helyi automatikus elrendezés során több rekurzív függvény hívások. Ezért, ha meg egy funkció automatikus tömb, akkor pontosan tudja, mit csinál.

Tömbök a memória dinamikus, memóriát az „kupac» (heap). Egy csomó - a lefoglalt memória az operációs rendszer program használja ezt a programot. Heap mérete általában jóval nagyobb stack mérete, és az operációs rendszer, amely támogatja a virtuális memória paradigma kupacmérete elméletileg korlátozni csak bites alkalmazásokat.

Az automatikus tömbök

Automatikus tömbök használni, ha a tömb mérete ismert fordításkor.

a tömb méretét a kódot erősen ajánlott, hogy jelezze a nevesített konstans. Ez több okból is hasznos:

  1. konstans neve kell mutatnia, hogy a terület az alkalmazás - öndokumentáló kód;
  2. Ha szükséges, változtassa meg a kódot tömb méretét kell változtatni egy helyen;
  3. tömbméret, általában használt ciklusokban a folyosón tömb határ ellenőrzését, és így tovább. Ezért használja szimbolikus nevet szükségtelenné teszi az alapos ellenőrzés és kiegyenesítése a teljes kódot, ha változik a méret a tömb.

Típus állandó kifejezés méretének meghatározására (elemek száma) a tömb automatikusan integer: char. int. unsigned int. hosszú. stb

Memory kijelölt alatt automatikus tömbök szabadul a kilépés hatálya változó tömb. A helyi tömb egy olyan funkció, vagy egy blokk. Globális tömbök elpusztult, amikor a program kilép.

Példa meghatározzuk a globális auto-hosszúságú tömb 10 elemek típusa int:

Példa automatikus meghatározását a helyi tömb hossza 10 elemek típusa int:

Használata tömbök memória dinamikus

Tömbök memória dinamikus használható, ha a tömb mérete nem ismert fordításkor. A tényleges méret a tömb lehet számítani a programban, vagy a felhasználó által megadott - ez nem számít.

A memória tömb által kiosztott az új üzemeltető formájában új típusú [elemek száma].

expresszió típusát meghatározó mérete (elemek száma) a tömb egész számnak kell lennie. Továbbá, ez a kifejezés lehet egy konstans.

Amikor dolgozik egy sor befejeződött, a memória mennyiségét a tömb fel kell szabadítani. Ezt használja a törlés szereplő formájában delete [] variable_name. Miután a memória felszabadul, nem tud működni egy sor.

Példa a tömb a memória dinamikus:

Tömb feltöltése értékek

Megoldásában a nevelési problémák általában kért, hogy a teljes tömb az értékek, vagy be a billentyűzetről, vagy véletlen értékek egy adott tartományban. Kezdjük a második esetben, mint egy egyszerű (paradoxon? Nem, az igazság az élet).

Tömb feltöltése véletlen számok

Ahhoz, hogy indítsa el a véletlenszám-generátor van szükség. Az alábbiakban a kódot az egyik legegyszerűbb megvalósítások:

Azonban anélkül, hogy további mozgások beépített függvény rand () lesz minden alkalommal futtatja a program generál ugyanabban a sorrendben a véletlen számok (mellesleg ez nagyon hasznos hibakeresés!). Annak érdekében, hogy minden alkalommal, amikor elindítja a programot kap egy egyedi szekvencia véletlen számok, a rand () függvény szükség van a „drive” a kezdeti véletlen érték. Ezt használja srand () és a time ().

Tömb feltöltése értékek természetesen teszünk a gyűrűben. Vegye figyelembe, hogy tömb elemei a C / C ++ vannak számozva 0. Ezért utolsó tömb elem egy index egység kisebb, mint a méret a tömb.

A példa azt mutatja, hogy egy globális automatikus tömb 10 elemek int típusú véletlenszerű értékeket a -100 és 100, beleértve:

Megjegyzés felvétele a header fájlokat!

Tömb feltöltése számok a felhasználó által bevitt

Furcsa módon, ez egy bonyolultabb eset. A tény az, hogy az első helyen, az ember jelenléte mindig vezet helytelen adatbevitel (hiba), másrészt az a személy van szükség, hogy egy nem felület, és harmadszor, a rendszer STL streaming IO létesítő kellemetlen jellemzői .

Tehát ha az előző példa, nézzük levelet fragmentum, amely felelős az üzembe tömb értékeket a billentyűzeten. Add kódot a tetején a header file #include . és ehelyett inicializálja a tömböt véletlen értékeket írunk valamit, mint például:

Úgy tűnik, hogy működik, de ha megpróbálja, ahány (véletlenül persze!) Beviteléhez 1111111111111111111111111111111111 vagy 11q. majd attól függően, a fordító, akkor képes lesz arra, hogy néhány érdekes hatást a program.

Tehát meg kell írni bonyolultabb kód:

A részletes elemzés a töredék túlmutat ezt a cikket. De érdekel szétszedni, felfegyverkezve, például a jól ismert könyve Shildt.

Konzol kiadási értékeket egy tömbben

Nyomtató tömb értékeit a konzol eladott agy. A fentiek fényében, már nem sok kell hozzá:

Munka értékeket egy tömbben

Mindaz, amit a fent leírt, olyan volt, amennyiben a kiegészítő eleme a programnak. További Nézzük néhány példát array.

Keresés maximális / maximum értékek a tömbben

Az alábbiakban a teljes kutatási program kódot minimális érték a tömbben és az indexével. A program a globális automatikus tömb. Array értékeket kapunk egy véletlenszám-generátor.

Ez a kód lehet optimalizálni, de nem tettem, hogy azok jobban látható azoknak a „tégla”, amelyből összegyűjtjük.

Határozza meg a két változó, amelyek közül az egyik tartalmazza a minimális értéket, és a második - az index a legkisebb érték. Ezek a változók inicializálása az első (nulla) elem a tömbben és nulla volt. Továbbá, minden egyes ciklusban, a következő érték a tömb elem képest már találtak a legalacsonyabb értéket, és ha az aktuális érték kisebb, mint a tárolt, a tárolt aktuális értéket és annak index.

Egyértelmű, hogy a keresést a maximális érték azt teljesen analóg, akár a jeleket „több” / „kisebb”, a kimeneti karakterlánc a felhasználó és a nevét a változókat.

Keressen egy bizonyos érték a tömbben

Keresés egy bizonyos értéket a rendezetlen tömb végezzük lineáris keresési algoritmust. Ez a legegyszerűbb algoritmus iterációjával soros elrendezés és összehasonlítjuk őket a kívánt értéket.

Feladata, hogy megtalálja a tömb lehet két formája van:

  1. megtalálja az első (utolsó) előfordulása az értéket
  2. megtalálni az összes előfordulás

Keresés az első előfordulás:

utolsó bejegyzés keresése:

Ügyeljen arra, hogy a következő pontokat.

A hurok i változó leírt, mielőtt a ciklus. Így, ez a változó továbbra is létezik lezárása után ciklust, és az értéke lehet használni.

Ha a kívánt elem található, akkor a ciklus idő előtt befejezték szünet nyilatkozatot. megtekintheti a többi tömb nincs értelme - a feladat kész.

Keresés az összes előfordulását:

Itt a ciklus nem szakad meg. A tömb teljes egészében látható.

A összege / termék a negatív elemeket a tömb

Összege tömb elemeinek páros / páratlan indexek

Munka tömbök függvények segítségével

Szinte az összes darab kódot a fent megadott, lehet elhelyezni, mint egy funkciót, és egy sor paraméterek, hogy áthaladjon. Példaként egy olyan program, hogy megtalálja az összeg a tömb elemeinek még indexek, amely felhasználja (sokféleség) dinamikus tömb.

Megjegyezzük, hogy a memória kiosztás a tömb és a felszabadulás megy végbe egy funkciót (ebben az esetben a main ()). A memóriát egy funkciót, hogy felszabadítsa a másik - egy rossz ötlet, tele hibákkal.

következtetés

Ez a cikk ismerteti csak a legalapvetőbb technikákat dolgoznak tömbök lesz (remélhetőleg!) Kezdők jeladó megérteni, hogyan kell dolgozni tömböket.

Hogy veletek legyen szent apostolainak és Bjarne meg! ;-)