Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

ifin811/ea1 C Programozás: Algoritmusok

Hasonló előadás


Az előadások a következő témára: "ifin811/ea1 C Programozás: Algoritmusok"— Előadás másolata:

1 ifin811/ea1 C Programozás: Algoritmusok

2 Vázlat Problémák megoldása Algoritmusok Változók és értékeik
Programvezérlés

3 A probléma megoldásának folyamata
Pontos meghatározás Algoritmus Program Futtatás -> megoldás Tervezés Implementáció Fordítás Analizálás Probléma

4 Algoritmus és program Algoritmus: a feladat végrehajtásához szükséges utasítások sorozata Probléma C Program

5 Algoritmusok - példák (Étel) recept IKEA bútor összeszerelési útmutató
Játékszabályok Video magnó használati utasítás Hogyan juthatsz el a házibulira Szabásminta Autó javítási kézikönyv manual Fizika : egyenletek Természeti törvények -> modellek

6 Az algoritmus összetevői
Változók és értékeik Műveletek Utasítások sorozata Részfeladatok, szubrutinok Elágazások Ismétlések Dokumentáció

7 Változók és értékeik Mennyiségek, mérési eredmények, a probléma kiinduló paraméterei Lehetnek számok, betűk, összetett objektumok Gyakran van mértékegységük: Recept: hozzávalók

8 Ananászos lepénykék Előmelegítem a sütőt 230° C-ra.
Gyenge lángon a vajat és belekeverem a mézet. A kiolvadt tésztát leheletvékonyra nyújtom, és 12 db körlapot vágok ki. Átteszem őket a sütőlappal kibélelt tepsibe. A lecsepegtetett ananászkarikákat ráteszem a tésztakarikákra. Egyenletesen megkenem őket a mézes vajjal. 15 percre betolom őket a forró sütőbe. Még forrón megszórom őket a fahéjas-szerecsendiós porcukorral. 3 deka vaj 1 ek. méz 1 doboz ananászkonzerv ½ csomag mirelit leveles tészta Kevés liszt a deszkára és kiszúráshoz 2 ek. porcukor ½ tk. őrölt fahéj 2 csipetnyi frissen reszelt szerecsendió Forrás: Stahl Judit: Gyorsan valami finomat, Park Kiadó, 2003

9 Ananászos lepénykék Előmelegítem a sütőt 230° C-ra.
Gyenge lángon a vajat és belekeverem a mézet. A kiolvadt tésztát leheletvékonyra nyújtom, és 12 db körlapot vágok ki. Átteszem őket a sütőlappal kibélelt tepsibe. A lecsepegtetett ananászkarikákat ráteszem a tésztakarikákra. Egyenletesen megkenem őket a mézes vajjal. 15 percre betolom őket a forró sütőbe. Még forrón megszórom őket a fahéjas-szerecsendiós porcukorral. 3 deka vaj 1 ek. méz 1 doboz ananászkonzerv ½ csomag mirelit leveles tészta Kevés liszt a deszkára és kiszúráshoz 2 ek. porcukor ½ tk. őrölt fahéj 2 csipetnyi frissen reszelt szerecsendió Forrás: Stahl Judit: Gyorsan valami finomat, Park Kiadó, 2003

10

11 Változók Értékek – tárolására szolgálnak Példa: Ez az üveg
tartalmazhat 10 gumicukorkát 50 gramm cukrot 3 szelet sütit stb. Érték Változó

12 A változók korlátai A változók csak bizonyos típusú értékeket tudnak tartalmazni

13 Az algoritmusok részei
Változók és értékeik Utasítások, műveletek (primitív) Utsasítások sorozata Részfeladatok, szubrutinok (utasításokból állnak) Elágazások (különböző utasítások felé) Ismétlések (részfeladat) Dokumentáció (független az utasításoktól)

14 Utasítások Vedd le a cipőd Számolj 10 -ig
Vágjuk fel a hagymát 1 sima, 1 fordított Húzuk meg szorosan a csavart Az utasítások egyértelműek, egyszerűek és végrehajthatóak Utasítások, hogy műveleteket hajtsunk végre értékeken és változókon.

15 Utasítások alkalmazása
Legtöbb műveletet csak bizonyos típusú változókon és értékeken lehet elvégezni Példa: Aprítsuk fel

16 Az algoritmusok részei
Változók és értékeik Utasítások, műveletek (primitív) Utsasítások sorozata Részfeladatok, szubrutinok (utasításokból állnak) Elágazások (különböző utasítások felé) Ismétlések (részfeladat) Dokumentáció (független az utasításoktól)

17 Utasítások sorozata 1. Nyisd ki a hűtőt 2. Tedd be az elefántot
3. Csukd be a hűtő ajtaját 1. Nyisd ki a hűtőt 2. Vedd ki az elefántot 3. Tedd be a zsiráfot 4. Csukd be a hűtő ajtaját

18 Az algoritmusok részei
Változók és értékeik Utasítások, műveletek (primitív) Utsasítások sorozata Részfeladatok, szubrutinok (utasításokból állnak) Elágazások (különböző utasítások felé) Ismétlések (részfeladat) Dokumentáció (független az utasításoktól)

19 Szubrutin Egy elnevezett részsorozata az utasításoknak Így:
Egyszerűen (nevével) lehet rá hivatkozni ...nem pedig külön-külön minden utasításra Különböző paraméterekkel hívható

20 Szubrutin: példa { 1. a kulcsot keresd meg 2. központi zárat nyisd ki
szubrutin Vezess_az_ELTÉre { 1. a kulcsot keresd meg 2. központi zárat nyisd ki 3. ajtót nyisd ki 4. szállj be 5. csukd be az ajtót 6. tedd be a kulcsot 7. indítsd el az autót 8. tolass ki a parkolóból 9. menj el az utca végéig 10. fordulj jobbra 11. menj el az utca végéig 12. fordulj balra ... stb. stb. stb… ...stb.stb.stb... 52. találj parkolót 53. parkolj be 54. állítsd le a motort 55. vedd ki a kulcsot 56. nyisd ki az ajtót 57. szállj ki 58. csukd be az ajtót 59. zárd be a kocsit }

21 Szubrutin hívása szubrutin Hétfő szubrutin 39_hét { { Kelj_fel Hétfő
Mosakodj_meg Egyél_reggelit Vezess_az_ELTÉre Ülj_be_C_programozásra ...stb...stb...stb... Vezess_haza } szubrutin 39_hét { Hétfő Kedd Szerda Csütörtök ...stb...stb...stb... }

22 Szubrutin A “szubrutin” helyett használható: Részfeladat Modul
szubrutin Hétfő { Kelj_fel Mosakodj_meg Egyél_reggelit Vezess_az_ELTÉre Ülj_be_C_programozásra ...stb...stb...stb... Vezess_haza } A “szubrutin” helyett használható: Részfeladat Modul Procedure Függvény

23 Szubrutin Kapcsos zárójelek jelzik a szubrutin elejét és végét.
szubrutin Hétfő { Kelj_fel Mosakodj_meg Egyél_reggelit Vezess_az_ELTÉre Ülj_be_C_programozásra ...stb...stb...stb... Vezess_haza } Kapcsos zárójelek jelzik a szubrutin elejét és végét.

24 Szubrutin hívása Speciális utasítás “szubrutin hívás” szubrutin Hétfő
{ Kelj_fel Mosakodj_meg Egyél_reggelit Vezess_az_ELTÉre Ülj_be_C_programozásra ...stb...stb...stb... Vezess_haza } Speciális utasítás “szubrutin hívás”

25 Szubrutin A szubrutinnak lehetnek paraméterei
szubrutin ügyfélszolgálat ( nevem ,napszak ) { mondd(“Jó napszakot”); mondd(“nevem vagyok”); mondd(“Miben segíthetek?”); } ügyfélszolgálat ( “Szebeni Anna”, “Reggel” ); ügyfélszolgálat (“Szebeni Anna”, “Nap” ); ügyfélszolgálat ( “Kriza Péter”, “Este” );

26 Az algoritmusok részei
Változók és értékeik Utasítások, műveletek (primitív) Utsasítások sorozata Részfeladatok, szubrutinok (utasításokból állnak) Elágazások (különböző utasítások felé) Ismétlések (részfeladat) Dokumentáció (független az utasításoktól)

27 Elágazások Olyan utasítás amelyik eldönti, hogy a következő lehetséges két sorozatból melyiket hajtsuk végre A döntés egy igaz/hamis állításon múlik Példák: Autójavítás Reciprok

28 Elágazások: autójavítás
ha (önindító megy) akkor { EllenőrizBenzin EllenőrizGyertya EllenőrizKarburátor } egyébként EllenőrizAkkumulátor EllenőrizGyujtófej

29 Elágazások: autójavítás
ha (önindító megy) akkor { EllenőrizBenzin EllenőrizGyertya EllenőrizKarburátor } egyébként EllenőrizAkkumulátor EllenőrizGyujtófej igaz vagy hamis állítás

30 Elágazások: autójavítás
ha (önindító megy) akkor { EllenőrizBenzin EllenőrizGyertya EllenőrizKarburátor } egyébként EllenőrizAkkumulátor EllenőrizGyujtófej Végrehajtódik, ha a feltétel igaz.

31 Elágazások: autójavítás
ha (önindító megy) akkor { EllenőrizBenzin EllenőrizGyertya EllenőrizKarburátor } egyébként EllenőrizAkkumulátor EllenőrizGyujtófej Végrehajtódik, ha a feltétel hamis.

32 Elágazások: reciprok Feladat. Adjuk meg egy szám reciprokát. Példák:
A 2 reciproka: /2 A -3/4 reciproka: /(-3/4) = -4/3 A 0 reciproka: “értelmetlen” Feladat. Adjuk meg egy szám reciprokát.

33 Elágazások: reciprok Feladat. Adjuk meg egy szám reciprokát.
Algoritmus: beolvas Szám; if (Szám nem egyenlő 0) then { kiír 1/Szám; } else kiír „végtelen”; Feladat. Adjuk meg egy szám reciprokát.

34 Elágazások: reciprok Algoritmus:
beolvas Szám; if (Szám nem egyenlő 0) then { kiír 1/Szám; } else kiír „végtelen”; A Szám egy változó amely értéke attól függ, hogy mit adnak be a program futásakor.

35 Elágazások: reciprok Algoritmus: Az elágazás függ Szám értékétől
beolvas Szám; if (Szám nem egyenlő 0) then { kiír 1/Szám; } else kiír „végtelen”; Az elágazás függ Szám értékétől

36 Elágazások: reciprok Algoritmus:
beolvas Szám; if (Szám nem egyenlő 0) then { kiír 1/Szám; } else kiír „végtelen”; Egy adott konkrét Szám esetén csak az egyik ág hajtódik végre

37 Elágazások: reciprok Algoritmus:
beolvas Szám; if (Szám nem egyenlő 0) then { kiír 1/Szám; } else kiír „végtelen”; Végrehajtódik, ha Szám nem egyenlő 0-val

38 Elágazások: reciprok Algoritmus: Végrehajtódik, ha Szám egyenlő 0-val
beolvas Szám; if (Szám nem egyenlő 0) then { kiír 1/Szám; } else kiír „végtelen”; Végrehajtódik, ha Szám egyenlő 0-val

39 Elágazások: feladat Algoritmus 1: Algoritmus 2:
Ugyanazt a kimentet adja a két alábbi algoritmus? Algoritmus 1: Algoritmus 2: input Num; if (Num != 0) then { output 1/Num; } else output „végtelen”; input Num; if (Num != 0) then { output 1/Num; } output „végtelen” ;

40 Elágazások: összetett feltétel
Mi van ha több feltételt kell kielégítteni? ha ( ma csütörtök van és 12:00 ) akkor { gyerünk az 160-as terembe } egyébként gyerünk moziba megoldás 1

41 Elágazások: összetett feltétel
ha ( ma csütörtök van ) akkor { ha ( 12:00 ) gyerünk a 160-as terembe } egyébként …stb... “egymásba ágyazott” feltételek megoldás 2

42 Elágazások: legalább egyfeltétel
Több feltétel közül elég ha egy teljesül ha ( éhes vagyok vagy elmúlt 11:00 óra vagy a padszomszédom szemet vetett az uzsonnámra ) akkor { Most megeszem az uzsonnát }

43 Az algoritmusok részei
Változók és értékeik Utasítások, műveletek (primitív) Utsasítások sorozata Részfeladatok, szubrutinok (utasításokból állnak) Elágazások (különböző utasítások felé) Ismétlések (részfeladat) Dokumentáció (független az utasításoktól)

44 Ismétlések Ismételj egy utasítást...
...addig amíg egy feltétel fennáll Más néven iteráció vagy ciklus Példa: Randira hívás

45 Ismétlések szubrutin RandiraHívás ( név, időpont , hely ) {
Felhív(név); Mond("Helló", név, „hogy vagy?"); Mond(„Eljössz velem", időpont, hely, "?"); VálasztHallgat( ); start könyörgések_száma nullától; amíg (a válasz "Nem" és könyörgések_száma < 100) { Mond(„Na, lécci!"); könyörgések_száma növelése 1-el; VálasztHallgat ( ); } }

46 Ismétlések A feltételt vizsgáljuk meg először
szubrutin RandiraHívás ( név, időpont , hely ) { Felhív(név); Mond("Helló", név, „hogy vagy?"); Mond(„Eljössz velem", időpont, hely, "?"); VálasztHallgat( ); start könyörgések_száma nullától; amíg (a válasz "Nem" és könyörgések_száma < 100) { Mond(„Na, lécci!"); könyörgések_száma növelése 1-el; VálasztHallgat ( ); } } A feltételt vizsgáljuk meg először

47 Ismétlések Lehet, hogy nem is hajtódik végre
szubrutin RandiraHívás ( név, időpont , hely ) { Felhív(név); Mond("Helló", név, „hogy vagy?"); Mond(„Eljössz velem", időpont, hely, "?"); VálasztHallgat( ); start könyörgések_száma nullától; amíg (a válasz "Nem" és könyörgések_száma < 100) { Mond(„Na, lécci!"); könyörgések_száma növelése 1-el; VálasztHallgat ( ); } } Lehet, hogy nem is hajtódik végre

48 Ismétlések A változók kezdteti értékét helyesen kell beállítani
szubrutin RandiraHívás ( név, időpont , hely ) { Felhív(név); Mond("Helló", név, „hogy vagy?"); Mond(„Eljössz velem", időpont, hely, "?"); VálasztHallgat( ); start könyörgések_száma nullától; amíg (a válasz "Nem" és könyörgések_száma < 100) { Mond(„Na, lécci!"); könyörgések_száma növelése 1-el; VálasztHallgat ( ); } }

49 Ismétlések A feltételben használt változót frissíteni kell
szubrutin RandiraHívás ( név, időpont , hely ) { Felhív(név); Mond("Helló", név, „hogy vagy?"); Mond(„Eljössz velem", időpont, hely, "?"); VálasztHallgat( ); start könyörgések_száma nullától; amíg (a válasz "Nem" és könyörgések_száma < 100) { Mond(„Na, lécci!"); könyörgések_száma növelése 1-el; VálasztHallgat ( ); } } A feltételben használt változót frissíteni kell

50 Ismétlések Végtelen ciklus Mi történik, ha nem frissítjük az értéket?
szubrutin RandiraHívás ( név, időpont , hely ) { Felhív(név); Mond("Helló", név, „hogy vagy?"); Mond(„Eljössz velem", időpont, hely, "?"); VálasztHallgat( ); start könyörgések_száma nullától; amíg (a válasz "Nem" és könyörgések_száma < 100) { Mond(„Na, lécci!"); VálasztHallgat ( ); } } Végtelen ciklus

51 Az algoritmusok részei
Változók és értékeik Utasítások, műveletek (primitív) Utsasítások sorozata Részfeladatok, szubrutinok (utasításokból állnak) Elágazások (különböző utasítások felé) Ismétlések (részfeladat) Dokumentáció (független az utasításoktól)

52 Dokumentáció Mi célt szolgál az algoritmus Hogyan csinálja meg
Milyen paramétereket vár és ad vissza Milyen részei vannak, mi azok feladata

53 Fölülről lefelé tervezés
Írjuk le a feladatot Osszuk fel 3-7 részre Minden részfeladatot osszunk 3-7 részre Addig osszuk tovább, amíg a részfeladat utasításai egyszerre jól átláthatóak, pl. elemi utasítások


Letölteni ppt "ifin811/ea1 C Programozás: Algoritmusok"

Hasonló előadás


Google Hirdetések