53
1 ifin811/ea1 C Programozás: Algoritmusok

ifin811/ea1 C Program ozás: Algoritmusok

  • Upload
    anneke

  • View
    35

  • Download
    2

Embed Size (px)

DESCRIPTION

ifin811/ea1 C Program ozás: Algoritmusok. Vázlat. Problémák megoldása Algorit musok Változók és értékeik Programvezérlés. Anal izálás. P ontos meghatározás. Tervezés. Algorit mus. Probléma. Implem entáció. Program. Fordítás. Futtatás -> megoldás. A probléma megoldásának folyamata. - PowerPoint PPT Presentation

Citation preview

Page 1: ifin811/ea1 C Program ozás: Algoritmusok

1

ifin811/ea1 C Programozás:

Algoritmusok

Page 2: ifin811/ea1 C Program ozás: Algoritmusok

2

Vázlat

• Problémák megoldása

• Algoritmusok– Változók és értékeik– Programvezérlés

Page 3: ifin811/ea1 C Program ozás: Algoritmusok

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ásProbléma

Page 4: ifin811/ea1 C Program ozás: Algoritmusok

4

Algoritmus és program

Probléma

C ProgramC Program

AlgoritmAlgoritmusus: a feladat végrehajtásához szükséges utasítások sorozata

Page 5: ifin811/ea1 C Program ozás: Algoritmusok

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

Page 6: ifin811/ea1 C Program ozás: Algoritmusok

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ó

Page 7: ifin811/ea1 C Program ozás: Algoritmusok

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

Page 8: ifin811/ea1 C Program ozás: Algoritmusok

8

Ananászos lepénykék3 deka vaj1 ek. méz1 doboz ananászkonzerv½ csomag mirelit leveles

tésztaKevés liszt a deszkára és

kiszúráshoz2 ek. porcukor½ tk. őrölt fahéj2 csipetnyi frissen reszelt

szerecsendió

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.

Forrás: Stahl Judit: Gyorsan valami finomat, Park Kiadó, 2003

Page 9: ifin811/ea1 C Program ozás: Algoritmusok

9

Ananászos lepénykék3 deka vaj1 ek. méz1 doboz ananászkonzerv½ csomag mirelit leveles

tésztaKevés liszt a deszkára és

kiszúráshoz2 ek. porcukor½ tk. őrölt fahéj2 csipetnyi frissen reszelt

szerecsendió

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.

Forrás: Stahl Judit: Gyorsan valami finomat, Park Kiadó, 2003

Page 10: ifin811/ea1 C Program ozás: Algoritmusok

10

Page 11: ifin811/ea1 C Program ozás: Algoritmusok

11

Változók

Ez az üvegtartalmazhat

10 gumicukorkát

50 gramm cukrot

3 szelet sütit

stb.

ÉrtékVáltozó

• Értékek – tárolására szolgálnak

Példa:

Page 12: ifin811/ea1 C Program ozás: Algoritmusok

12

A változók korlátai

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

Page 13: ifin811/ea1 C Program ozás: Algoritmusok

13

Az algoritmusok részeiVá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)

Page 14: ifin811/ea1 C Program ozás: Algoritmusok

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.

Page 15: ifin811/ea1 C Program ozás: Algoritmusok

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:

Page 16: ifin811/ea1 C Program ozás: Algoritmusok

16

Az algoritmusok részeiVáltozók és értékeikUtasí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)

Page 17: ifin811/ea1 C Program ozás: Algoritmusok

17

Utasítások sorozata1. 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

Page 18: ifin811/ea1 C Program ozás: Algoritmusok

18

Az algoritmusok részeiVáltozók és értékeikUtasí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)

Page 19: ifin811/ea1 C Program ozás: Algoritmusok

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ó

Page 20: ifin811/ea1 C Program ozás: Algoritmusok

20

Szubrutin: példa 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

}

Page 21: ifin811/ea1 C Program ozás: Algoritmusok

21

Szubrutin hívása

szubrutin Hétfő{ Kelj_fel Mosakodj_meg Egyél_reggelit Vezess_az_ELTÉre Ülj_be_C_programozásra ...stb...stb...stb... Vezess_haza ...stb...stb...stb...}

szubrutin 39_hét

{

Hétfő

Kedd

Szerda

Csütörtök

...stb...stb...stb...

}

Page 22: ifin811/ea1 C Program ozás: Algoritmusok

22

Szubrutin

A “szubrutin” helyett használható:

• Részfeladat• Modul• Procedure• Függvény

szubrutin Hétfő{ Kelj_fel Mosakodj_meg Egyél_reggelit Vezess_az_ELTÉre Ülj_be_C_programozásra ...stb...stb...stb... Vezess_haza ...stb...stb...stb...}

Page 23: ifin811/ea1 C Program ozás: Algoritmusok

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 ...stb...stb...stb...}

Page 24: ifin811/ea1 C Program ozás: Algoritmusok

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 ...stb...stb...stb...}

Page 25: ifin811/ea1 C Program ozás: Algoritmusok

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” );

Page 26: ifin811/ea1 C Program ozás: Algoritmusok

26

Az algoritmusok részeiVáltozók és értékeikUtasítások, műveletek (primitív)Utsasítások sorozataRé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)

Page 27: ifin811/ea1 C Program ozás: Algoritmusok

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

Page 28: ifin811/ea1 C Program ozás: Algoritmusok

28

Elágazások: autójavításha (önindító megy) akkor {

EllenőrizBenzinEllenőrizGyertyaEllenőrizKarburátor

}egyébként{

EllenőrizAkkumulátorEllenőrizGyujtófej

}

Page 29: ifin811/ea1 C Program ozás: Algoritmusok

29

Elágazások: autójavítás

igaz vagy hamis állítás

ha (önindító megy) akkor {

EllenőrizBenzinEllenőrizGyertyaEllenőrizKarburátor

}egyébként{

EllenőrizAkkumulátorEllenőrizGyujtófej

}

Page 30: ifin811/ea1 C Program ozás: Algoritmusok

30

Elágazások: autójavítás

Végrehajtódik, ha a feltétel igaz.

ha (önindító megy) akkor {

EllenőrizBenzinEllenőrizGyertyaEllenőrizKarburátor

}egyébként{

EllenőrizAkkumulátorEllenőrizGyujtófej

}

Page 31: ifin811/ea1 C Program ozás: Algoritmusok

31

Elágazások: autójavítás

Végrehajtódik, ha a feltétel hamis.

ha (önindító megy) akkor {

EllenőrizBenzinEllenőrizGyertyaEllenőrizKarburátor

}egyébként{

EllenőrizAkkumulátorEllenőrizGyujtófej

}

Page 32: ifin811/ea1 C Program ozás: Algoritmusok

32

Elágazások: reciprok

Feladat. Adjuk meg egy szám reciprokát.

Példák:

A 2 reciproka: 1/2

A -3/4 reciproka: 1/(-3/4) = -4/3

A 0 reciproka: “értelmetlen”

Page 33: ifin811/ea1 C Program ozás: Algoritmusok

33

Elágazások: reciprokAlgoritmus: 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.

Page 34: ifin811/ea1 C Program ozás: Algoritmusok

34

Elágazások: reciprok

A Szám egy változó amely értéke attól függ, hogy mit adnak be a program futásakor.

Algoritmus: beolvas Szám; if (Szám nem egyenlő 0) then { kiír 1/Szám; } else {

kiír „végtelen”; }

Page 35: ifin811/ea1 C Program ozás: Algoritmusok

35

Elágazások: reciprok

Az elágazás függ Szám értékétől

Algoritmus: beolvas Szám; if (Szám nem egyenlő 0) then { kiír 1/Szám; } else { kiír „végtelen”;

}

Page 36: ifin811/ea1 C Program ozás: Algoritmusok

36

Elágazások: reciprok

Egy adott konkrét Szám esetén csak az egyik ág hajtódik végre

Algoritmus: beolvas Szám; if (Szám nem egyenlő 0) then { kiír 1/Szám; } else {

kiír „végtelen”; }

Page 37: ifin811/ea1 C Program ozás: Algoritmusok

37

Algoritmus: beolvas Szám; if (Szám nem egyenlő 0) then { kiír 1/Szám; } else {

kiír „végtelen”; }

Elágazások: reciprok

Végrehajtódik, ha Szám nem egyenlő 0-val

Page 38: ifin811/ea1 C Program ozás: Algoritmusok

38

Algoritmus: beolvas Szám; if (Szám nem egyenlő 0) then { kiír 1/Szám; } else {

kiír „végtelen”; }

Elágazások: reciprok

Végrehajtódik, ha Szám egyenlő 0-val

Page 39: ifin811/ea1 C Program ozás: Algoritmusok

39

Elágazások: feladat

input Num; if (Num != 0) then { output 1/Num; } else {

output „végtelen”; }

Ugyanazt a kimentet adja a két alábbi algoritmus?

Algoritmus 1: input Num;

if (Num != 0)

then

{

output 1/Num;

}

output „végtelen” ;

Algoritmus 2:

Page 40: ifin811/ea1 C Program ozás: Algoritmusok

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

Page 41: ifin811/ea1 C Program ozás: Algoritmusok

41

Elágazások: összetett feltétel

megoldás 2

“egymásba ágyazott” feltételek

ha ( ma csütörtök van ) akkor {

ha ( 12:00 ) akkor { gyerünk a 160-as terembe } } egyébként …stb...

Page 42: ifin811/ea1 C Program ozás: Algoritmusok

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

}

Page 43: ifin811/ea1 C Program ozás: Algoritmusok

43

Az algoritmusok részeiVáltozók és értékeikUtasítások, műveletek (primitív)Utsasítások sorozataRé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)

Page 44: ifin811/ea1 C Program ozás: Algoritmusok

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

Page 45: ifin811/ea1 C Program ozás: Algoritmusok

45

Ismétlésekszubrutin 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 ( );}

}

Page 46: ifin811/ea1 C Program ozás: Algoritmusok

46

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 ( );}

}

Ismétlések

A feltételt vizsgáljuk meg először

Page 47: ifin811/ea1 C Program ozás: Algoritmusok

47

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 ( );}

}

Ismétlések

Lehet, hogy nem is

hajtódik végre

Page 48: ifin811/ea1 C Program ozás: Algoritmusok

48

Ismétlésekszubrutin 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 változók kezdteti értékét helyesen kell beállítani

Page 49: ifin811/ea1 C Program ozás: Algoritmusok

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 ( );}

}

Page 50: ifin811/ea1 C Program ozás: Algoritmusok

50

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 ( );}

}

Ismétlések

Végtelen ciklus

• Mi történik, ha nem frissítjük az értéket?

Page 51: ifin811/ea1 C Program ozás: Algoritmusok

51

Az algoritmusok részeiVáltozók és értékeikUtasítások, műveletek (primitív)Utsasítások sorozataRé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)

Page 52: ifin811/ea1 C Program ozás: Algoritmusok

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

Page 53: ifin811/ea1 C Program ozás: Algoritmusok

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