16

Kisokos: Informatika - C nyelv - Memoratoare Bacalaureat ... · PDF fileSorozatok egyesítése ... Általános rekurzív backrtacking ..... 33 Elhelyezni 8 királynőt a sakktáblán

  • Upload
    vodiep

  • View
    229

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Kisokos: Informatika - C nyelv - Memoratoare Bacalaureat ... · PDF fileSorozatok egyesítése ... Általános rekurzív backrtacking ..... 33 Elhelyezni 8 királynőt a sakktáblán
Page 2: Kisokos: Informatika - C nyelv - Memoratoare Bacalaureat ... · PDF fileSorozatok egyesítése ... Általános rekurzív backrtacking ..... 33 Elhelyezni 8 királynőt a sakktáblán

Tartalomjegyzék

Algoritmusok – pszeudókód ................................ 1 Abszolút érték ............................................................................ 1 Hányados ismételt kivonással.................................................... 1 Legnagyobb közös osztó ............................................................. 2 Páros számok szűrése ................................................................ 2 Palindrom számok ..................................................................... 2 Orosz szorzás ............................................................................. 3 Minimum keresés ...................................................................... 4 Maximum keresés ...................................................................... 4 Eukleidész algoritmusa .............................................................. 5 Prímszámok ............................................................................... 5 Fibonacci-számok ...................................................................... 6 Háromszög ................................................................................. 7 Fordított szám ........................................................................... 8 Törzstényezők ............................................................................ 9 Prímszámvizsgálat ..................................................................... 9 Konverzió – Számrendszer átalakítás ...................................... 10 Gyors hatványozás ................................................................... 12 Szekvenciális (lineáris) keresés................................................ 12 Megszámlálás ........................................................................... 13 Minimum- és maximumkiválasztás ......................................... 13 A Maximum helye .................................................................... 13 Kiválogatás ............................................................................... 14 Szétválogatás ............................................................................ 14 Sorozat halmazzá alakítása ...................................................... 15 Sorozatok keresztmetszete ....................................................... 15 Sorozatok egyesítése ................................................................ 17 Sorozatok összefésülése ........................................................... 17 Párok sorszáma egy sorozatban ............................................... 18 Arány ........................................................................................ 19 Teljes négyzet ........................................................................... 19 Osztályátlagok szétválasztása .................................................. 19 Bűvös négyzet .......................................................................... 21 Polinom értéke adott pontban ................................................. 22 Polinomok összege ................................................................... 22

Page 3: Kisokos: Informatika - C nyelv - Memoratoare Bacalaureat ... · PDF fileSorozatok egyesítése ... Általános rekurzív backrtacking ..... 33 Elhelyezni 8 királynőt a sakktáblán

Polinomok szorzata ................................................................. 23 Buborékrendezés (Bubble-sort) .............................................. 23 Egyszerű felcseréléses rendezés .............................................. 24 Válogatásos rendezés .............................................................. 25 Minimum/maximum kiválasztásra épülő rendezés ................ 25 Beszúró rendezés ..................................................................... 26 Leszámláló rendezés ................................................................ 26 Összefésülésen alapuló rendezés ............................................. 27 Gyorsrendezés (QuickSort) ..................................................... 28 Szavak sorrendjének megfordítása.......................................... 29 Faktoriális ............................................................................... 29 Számjegyösszeg ....................................................................... 29 k elemű részhalmazok ............................................................. 30 Konverzió ................................................................................ 30 Az {1, 2, ..., n} halmaz minden részhalmaza ............................. 31 Kamatos kamatok kiírása ......................................................... 31 Általános backtracking ............................................................ 32 Általános rekurzív backtracking .............................................. 33 Elhelyezni 8 királynőt a sakktáblán ........................................ 33 Zárójelek .................................................................................. 34 Játékok dobozva való elhelyezésének kiírása .......................... 35 X pénzösszeg kifizetése n bankjegy segítségével ..................... 36 X Összeg kifizetése, minimum számú bankjeggyel ................. 37 Általános Divide Et Impera ..................................................... 38 Szorzat (DivImp) ..................................................................... 38 Minimumszámolás (DivImp) .................................................. 39 Hatványozás (DivImp) ............................................................ 40 Bináris keresés (DivImp) ........................................................ 40 Általános mohó (Greedy) algoritmus ....................................... 41 Összeg (Greedy) ....................................................................... 41 Hátizsák probléma (Greedy) .................................................... 41 Összegkifizetés legkevesebb számú bankjeggyel (Greedy) ...... 42 A C nyelv elemei ................................................. 44 Azonosítók ............................................................................... 44 A programok felépítése ........................................................... 45 Az alapértelmezett egyszerű típusok ....................................... 46

Egész jellegű típusok ........................................................... 46 Valós típus ........................................................................... 47 A void típusnév .................................................................... 48

Változók ................................................................................... 49

Page 4: Kisokos: Informatika - C nyelv - Memoratoare Bacalaureat ... · PDF fileSorozatok egyesítése ... Általános rekurzív backrtacking ..... 33 Elhelyezni 8 királynőt a sakktáblán

Változók deklarálása ............................................................49 Egész jellegű változók deklarálása ...................................... 50 Valós típusú változók deklarálása ....................................... 50

Konstansok (állandók) ............................................................. 51 Egész konstansok ................................................................. 51 Karakter konstansok ............................................................ 51 Karakterlánc konstansok ..................................................... 51

Adatok beolvasása és kiírása .................................................... 52 Karakter beolvasása a standard bemenetről ........................ 52 Karakter kiírása a standard kimenetre ................................ 53 Egy karakter beolvasása közvetlenül .................................... 53 Formázott kiírás a standard kimenetre ................................ 54 Formázott beolvasás a standard bemenetről ....................... 55

Egyszerű programok készítése ........................... 56 Téglalap területe és kerülete .................................................... 57 Inkrementáló és dekrementáló operátorok ............................. 57 Bitműveletek ............................................................................ 58 A C nyelv utasításai ............................................ 60 A kifejezés utasítás .................................................................. 60 Az összetett utasítás ................................................................ 60 Feltételes utasítások ................................................................. 61

Az if utasítás ......................................................................... 61 Valós szám abszolút értéke .................................................. 61 Páros – páratlan számok megállapítása ............................... 62 Nagyobbik szám kiválasztása ............................................... 62 Nagybetű, kisbetű vagy szám ............................................... 63

A switch utasítás ......................................................................64 Aritmetikai műveletek .......................................................... 65 Az év hányadik napja ...........................................................66

Ciklus utasítások ..................................................................... 68 Az elöltesztelő ciklus ............................................................69 A hátultesztelő ciklus ...........................................................69 A számlálós ciklus ................................................................ 70 Szám számjegyeinek száma .................................................. 71 Törzstényezőkra való bontás ................................................ 71 Legnagyobb közös osztó (Eukleidész algoritmusa) .............. 72 P számrendszerből q számrendszerbe ................................. 73 Faktoriális ............................................................................ 75 Prímszám vizsgálat ............................................................... 75

Page 5: Kisokos: Informatika - C nyelv - Memoratoare Bacalaureat ... · PDF fileSorozatok egyesítése ... Általános rekurzív backrtacking ..... 33 Elhelyezni 8 királynőt a sakktáblán

Fibonacci sorozat n-dik eleme ............................................. 76 Polinom értéke egy x pontban (Horner-séma) .....................77

A tömbök............................................................. 78 A tömb fogalma ....................................................................... 78 Egydimenziós tömbök ............................................................. 78

Számsorozat fordított sorrendben ....................................... 79 Két polinom szorzata ........................................................... 80 Kezdőértekkel rendelkező egydimenziós tömbök................ 80 Többdimenziós tömbök ....................................................... 81 Tömb szimmetriája .............................................................. 82 Mátrix szorzata vektorral ..................................................... 83 Kát matrix szorzata .............................................................. 84 Mátrix inverze ...................................................................... 86

Karaktertömbök ...................................................................... 88 Karakterláncok beolvasása a standard bemenetről ............. 89 Karakterláncok kiírása a standard kimenetre ..................... 89

Karakterlánc konverziós műveletek ........................................ 90 Numerikus értékek karakterlánccá alakítása ...................... 90 Karakterlánc numerikus értékekké alakítása ...................... 90 Más konvertáló függvények ................................................. 90 Karakterlánc kezelő függvények ........................................... 91 Betük frekvenciája egy sorban ............................................. 93

Dinamikus tömbök .................................................................. 93 Vektor páros elemeinek összege .......................................... 94 Mátrix páratlan elemeinek összege ..................................... 95

Az előfeldolgozó parancsok ................................ 96 Állományok beillesztése .......................................................... 96 Makrók .................................................................................... 97 Feltételes fordítás makró létezéstől függően ........................... 97 Feltételes fordítás makró nem-létezéstől függően .................. 98 Feltételes fordítás .................................................................... 99 Fordítási hibaüzenet generálása .............................................. 99 Függvények ....................................................... 100 A függvény fogalma ............................................................... 100 Függvény deklarációja ........................................................... 100 Függvény definiciója .............................................................. 101 Paraméterátadás ................................................................... 102 Tömb paraméterek ................................................................ 103

Page 6: Kisokos: Informatika - C nyelv - Memoratoare Bacalaureat ... · PDF fileSorozatok egyesítése ... Általános rekurzív backrtacking ..... 33 Elhelyezni 8 királynőt a sakktáblán

Faktoriális .............................................................................. 104 Goldbach-feltétel ................................................................... 105 Legnagyobb közös osztó ......................................................... 106 Bonyolultabb adatszerkezetek ......................... 108 Struktúrák .............................................................................. 108 Kezdőértékkel rendelkező struktúrák .................................... 110 Tanuló adatai ......................................................................... 110 Saját típusok definiálása ........................................................ 112 Állományok ........................................................ 114 Állomány megnyitása ............................................................. 114 Állomány bezárása .................................................................. 115 Írás állományba ..................................................................... 116

Karakter írása állományba ................................................. 116 Karakterlánc írása állományba .......................................... 116 Formázott írás állományba ................................................. 117

Olvasás állományból ............................................................... 117 Karakter olvasása állományól ............................................. 117 Karakterlánc olvasása állományból .................................... 118 Formázott olvasás állományból ......................................... 118 Állomány végének az ellenőrzése ....................................... 119 Pozicionálás az állományban ............................................. 119 Szöveges állomány feldolgozása (feladat1) ......................... 120 Szöveges állomány feldolgozása (feladat2) ........................ 121 Szöveges állomány feldolgozása (feladat3) ........................ 122

Klasszikus algoritmusok .................................. 125 Kereső algoritmusok .............................................................. 125

Lineáris keresés .................................................................. 125 Bináris keresés ................................................................... 126

Rendező aloritmusok ............................................................. 127 Buborékrendezés ................................................................ 127 Minimumkiválasztásos rendezés ....................................... 128 Beszúrásos rendezés ........................................................... 129

Összefésülések ....................................................................... 130 Összefésülés strázsa (ütköző) nélkül .................................. 130 Összefésülés strázsával (ütközővel) ................................... 133

Rekurzió ............................................................ 135 Közvetlen rekurzió ................................................................. 135

Page 7: Kisokos: Informatika - C nyelv - Memoratoare Bacalaureat ... · PDF fileSorozatok egyesítése ... Általános rekurzív backrtacking ..... 33 Elhelyezni 8 királynőt a sakktáblán

Szó betűi fordított sorrendben............................................ 135 Faktoriális ...........................................................................136 Fibonacci sorozat n-edik eleme .......................................... 137 Legnagyobb közös osztó ..................................................... 137 Ackermann függvény ......................................................... 138 Xn-diken kiszámítása ..........................................................139 Tizes számrendszerből való átírás p számrendszerbe ....... 140 Az első n páratlan természetes szám összege ..................... 141 Természetes szám számjegyeinek összege .......................... 141 N természetes szám összege ...............................................142

Tömbök rekurzívan ................................................................ 143 Számsorozat negatív elemeinek száma ............................... 143 Szám előfordulása egy tömbben ........................................ 144 Páros elemek összege .......................................................... 145

Rekurzív szerkezetű eredményt igénylő feladatok ................ 146 N hosszúságú megadott karakterlánc ................................ 146 Természetes szám particiói................................................. 147

Az „Oszd meg és uralkodj” módszer ................ 149 Sorozat legnagyobb elem ................................................... 149 N szám szorzata .................................................................. 151 Bináris keresés .................................................................... 152 Hanoi tornyok ..................................................................... 153 QuickSort ............................................................................ 154 MergeSort ........................................................................... 156

Kombinatorikai feladatok ................................ 158 Permutációk ...........................................................................158 Variációk ................................................................................ 159 Kombinációk ......................................................................... 160 A dinamikus adatszerkezetek ........................... 162 Szimplán láncolt lista .............................................................162

Lista létrehozása .................................................................163 Lista elemeinek a kiírása ....................................................163 Egy új elem beszúrása a listába ......................................... 164 Egy elem törlése a listaból ................................................. 164 Megoldott listás feladat ..................................................... 164

Page 8: Kisokos: Informatika - C nyelv - Memoratoare Bacalaureat ... · PDF fileSorozatok egyesítése ... Általános rekurzív backrtacking ..... 33 Elhelyezni 8 királynőt a sakktáblán

1

Algoritmusok – pszeudókód

Abszolút érték

Határozzuk meg és írjuk ki adott valós szám abszolút értékét!

Algoritmus Abszolút_érték(x,mod): Ha x 0 akkor {bemeneti adat: x, kimeneti adat: mod} mod x különben mod -x vége(ha) Vége(algoritmus)

Hányados ismételt kivonással

Számítsuk ki két természetes szám egész hányadosát ismételt kivonásokkal!

Algoritmus Osztás(a,b,hányados): hányados 0 {bemeneti adatok:a, b, kimeneti

adat:hányados} Amíg a ≥ b végezd el: hányados hányados + 1 a a - b vége(amíg) Vége(algoritmus)

Page 9: Kisokos: Informatika - C nyelv - Memoratoare Bacalaureat ... · PDF fileSorozatok egyesítése ... Általános rekurzív backrtacking ..... 33 Elhelyezni 8 királynőt a sakktáblán

2

Legnagyobb közös osztó

Számítsuk ki két természetes szám legnagyobb közös osztóját!

Algoritmus Eukleidész(a,b,lnko): Ismételd {bemeneti adatok: a, b, kimeneti adat: lnko} r maradék[a/b] {kiszámítjuk az aktuális maradékot} a b {az osztandót felülírjuk az osztóval} b r {az osztót felülírjuk a maradékkal} ameddig r = 0 {amikor a maradék 0, véget ér az algoritmus} lnko a {lnko egyenlő az utolsó osztó értékével} Vége(algoritmus)

Páros számok szűrése

Számoljuk meg n beolvasott szám közül a páros számokat!

{bemeneti adat: n és a számok, kimeneti adat: db, a páros számok száma} Algoritmus Páros(n,db): db 0 Minden i=1,n végezd el: Be: szám Ha szám páros akkor db db + 1 vége(ha) vége(minden) Vége(algoritmus)

Page 10: Kisokos: Informatika - C nyelv - Memoratoare Bacalaureat ... · PDF fileSorozatok egyesítése ... Általános rekurzív backrtacking ..... 33 Elhelyezni 8 királynőt a sakktáblán

60

A C nyelv utasításai

A kifejezés utasítás

A kifejezés utasítás végrehajtása a kifejezésnek a megfelelő szabályok szerinti kiértékelését jelenti. Mielőtt a következő utasításra adódik a vezérlés, a teljes kiértékelés (a mellékhatásokkal együtt) végbemegy.

Példák:

kerulet = x + y + b; j++; a = b = c = 3; z = cos (alfa) + 1.35

Az összetett utasítás

Programjainkban nagyon gyakran használjuk az összetett utasítást. Az összetett utasítás a {és az} között megadott utasítások sorozatából áll. Ezt az utasítást olyan helyen használjuk, ahol egynél több utasítás végrehajtására van szükség, de a szintaxis csak egy utasítás használatát engedélyezi. Az összetett utasítás általános szintaxisa:

{ lokális definíciók és deklarációk; utasítás1; utasítás2; ... utasításn; }

Page 11: Kisokos: Informatika - C nyelv - Memoratoare Bacalaureat ... · PDF fileSorozatok egyesítése ... Általános rekurzív backrtacking ..... 33 Elhelyezni 8 királynőt a sakktáblán

61

Feltételes utasítások

A programok végrehajtása során sokszor szükségünk van arra, hogy bizonyos feltételektől függően a számítógép a program különböző részeit (ágait) hajtsa végre. Tehát ha a feltétel teljesül, a program egy bizonyos műveletsort végez, különben egy másikat. Ezt a feltételes vagy döntéshozó utasításokkal (válogatással, szelekcióval) valósítjuk meg.

Az if utasítás

A legegyszerűbb feltételes utasítás az if, amely a kétágú dön-tésnek felel meg. Az utasítás általános formája:

if (kifejezés) utasítás1; else utasítás2;

Az if utasítás végrehajtása a kifejezés kiértékelésével kezdődik. A kifejezés általában egy logikai kifejezés, amelynek ha értéke 1 vagy ennél nagyobb egész szám, az utasítás1 hajtódik végre, különben (ha a kifejezés értéke 0) az utasítás2 kerül végrehajtásra.

Valós szám abszolút értéke

#include <stdio.h> #include <conio.h> main() { int x, abs; printf("\n Kerem a szamot:"); scanf("%d", &x);

Page 12: Kisokos: Informatika - C nyelv - Memoratoare Bacalaureat ... · PDF fileSorozatok egyesítése ... Általános rekurzív backrtacking ..... 33 Elhelyezni 8 királynőt a sakktáblán

135

Rekurzió

Közvetlen rekurzió

A közvetlen rekurzió a leggyakoribb. Ebben az esetben az adott függvény blokkjában explicit módon meghívjuk az illető függvényt. Egy rekurzív függvény végrehajtása azonos módon történik, mint bármely nem rekurzív függvényé.

Egy rekurzív függvény a következőképpen hajtódik végre:

a függvény első aktiválása során végrehajtódnak az utasí-tások a folytatási / leállási feltételig;

kiértékelődik a feltétel és amíg ennek a logikai értéke azt jelenti, hogy a függvénynek meg kell hívja önmagát, akkor a függvény aktiválásainak sora következik, ami azt jelenti, hogy végre lesz hajtva a függvénynek a feltételig tartó része, valamint az újrahívás;

amikor a feltétel azt jelenti, hogy a függvénynek nem kell többé önmagát meghívja, akkor, ismételten, a hívásokhoz viszonyítva fordított sorrendben, végrehajtódik a függvény hívása / önmeghívása utáni rész.

Szó betűi fordított sorrendben

Írjuk ki egy szó betűit fordított sorrendben! A szó végét egy szóközzel jelöljük. Ne használjunk a megoldásban tömböt és karakterláncot!

#include <stdio.h> #include <conio.h> void fordit() { char betu;

Page 13: Kisokos: Informatika - C nyelv - Memoratoare Bacalaureat ... · PDF fileSorozatok egyesítése ... Általános rekurzív backrtacking ..... 33 Elhelyezni 8 királynőt a sakktáblán

136

scanf("%c", &betu); if (betu != ' ') fordit(); printf("%c", betu); } void main() { printf("A szo: "); fordit(); getch(); return; }

Faktoriális

Írjunk rekurzív függvényt, amely kiszámítja az n! -t!

#include <stdio.h> #include <conio.h> long int fakt(int n) { if (n == 0) return 1; else return n * fakt(n - 1); } void main() { int n; printf("n = "); scanf("%d", &n); printf("n != %ld", fakt(n)); getch(); return; }

Page 14: Kisokos: Informatika - C nyelv - Memoratoare Bacalaureat ... · PDF fileSorozatok egyesítése ... Általános rekurzív backrtacking ..... 33 Elhelyezni 8 királynőt a sakktáblán

149

Az „Oszd meg és uralkodj” módszer

Ezt a módszert sikeresen lehet alkalmazni az informatikában. A módszer lényege az, hogy a feladatot egymástól független részfeladatokra bontjuk, amelyeket az eredeti feladathoz hasonlóan oldunk meg, de kisebb méretű adatok esetében.

A módszer lépéseit a következőképpen foglalhatjuk össze:

A feladatot kettő vagy több, hasonló egymástól független jellegű részfeladatra bontjuk. A részfeladatok lehetnek elemi vagy nem elemi részfeladatok.

Az elemi részfeladatokat megoldjuk, a nem elemieket pedig újabb elemi, vagy nem elemi részfeladatokra bontjuk. Ezt a műveletet addig folytatjuk, ameddig elemi részfeladatokhoz jutunk.

Az eredményt úgy kapjuk, hogy az egyes részfeladatokat a felosztás fordított sorrendjében összerakjuk, összekombi-náljuk.

Sorozat legnagyobb elem

Határozzuk meg n egész szám közül a legnagyobbat az oszd meg és uralkodj módszerrel!

#include <stdio.h> #include <conio.h> int x[100], n, i; int maximum(int bal, int jobb) {

Page 15: Kisokos: Informatika - C nyelv - Memoratoare Bacalaureat ... · PDF fileSorozatok egyesítése ... Általános rekurzív backrtacking ..... 33 Elhelyezni 8 királynőt a sakktáblán

150

int max1, max2, kozepe; if (bal == jobb) return x[bal]; else if (jobb - bal == 1) if (x[bal] < x[jobb]) return x[jobb]; else return x[bal]; else { kozepe = (bal + jobb) / 2; max1 = maximum(bal, kozepe); max2 = maximum(kozepe + 1, jobb); if (max1 < max2) return max2; else return max1; } } void main() { printf("n = "); scanf("%d", &n); printf("Adjuk meg a szamokat!\n"); for (i = 0; i < n; i++) { printf("Az %d .elem: ", i); scanf("%d", &x[i]); } printf("A legnagyobb szam : %d", maximum(0, n - 1)); getch(); return; }

Page 16: Kisokos: Informatika - C nyelv - Memoratoare Bacalaureat ... · PDF fileSorozatok egyesítése ... Általános rekurzív backrtacking ..... 33 Elhelyezni 8 királynőt a sakktáblán

151

N szám szorzata

Számítsuk ki n valós szám szorzatát oszd meg és uralkodj módszerrel!

#include <stdio.h> #include <conio.h> int x[100], n, i; int szorzas(int bal, int jobb) { int sz1, sz2, kozepe; if (bal == jobb) return x[bal]; else if (jobb - bal == 1) return x[bal] * x[jobb]; else { kozepe = (bal + jobb) / 2; sz1 = szorzas(bal, kozepe); sz2 = szorzas(kozepe + 1, jobb); return sz1 * sz2; } } void main() { printf("n = "); scanf("%d", &n); printf("Adjuk meg a szamokat!\n"); for (i = 0; i < n; i++) { printf("Az %d .elem: ", i); scanf("%d", &x[i]); } printf("A szamok szorzata : %d", szorzas(0, n - 1)); getch(); return; }