ifin811/ea1 c program ozás: algoritmusok

Post on 17-Jan-2016

31 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

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

TRANSCRIPT

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

4

Algoritmus és program

Probléma

C ProgramC Program

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

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é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

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

10

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:

12

A változók korlátai

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

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)

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:

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)

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

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)

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 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ő{ 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...

}

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

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

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

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é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)

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ásha (önindító megy) akkor {

EllenőrizBenzinEllenőrizGyertyaEllenőrizKarburátor

}egyébként{

EllenőrizAkkumulátorEllenőrizGyujtófej

}

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

}

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

}

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

}

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”

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.

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

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

}

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

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

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

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:

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

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

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é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)

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

}

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

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

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

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

}

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?

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)

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

top related