540 likes | 705 Views
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.
E N D
Vázlat • Problémák megoldása • Algoritmusok • Változók és értékeik • Programvezérlés
Analizálás Pontos meghatározás Tervezés Algoritmus Probléma Implementáció Program Fordítás Futtatás -> megoldás A probléma megoldásánakfolyamata
Algoritmus: a feladat végrehajtásához szükséges utasítások sorozata Probléma C Program Algoritmus és program
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önyvmanual • Fizika : egyenletek • Természeti törvények -> modellek
Azalgoritmus ö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ó
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 vanmértékegységük: • Recept: hozzávalók
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ó 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. Ananászos lepénykék Forrás:Stahl Judit: Gyorsan valami finomat, Park Kiadó, 2003
Ananászos lepénykék Előmelegítem a sütőt230° 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
Változó Érték 10 gumicukorkát 50 gramm cukrot 3 szelet sütit stb. Ez az üveg tartalmazhat Változók • Értékek– tárolására szolgálnak Példa:
A változók korlátai • A változók csakbizonyos típusúértékeket tudnak tartalmazni
Azalgoritmusok 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)
Utasítások Utasítások, hogyműveletekethajtsunk végreértékekenésváltozókon. • Vedd leacipőd • Számolj 10-ig • Vágjuk fela hagymát • 1 sima, • 1 fordított • Húzuk megszorosan a csavart Az utasítások egyértelműek, egyszerűek és végrehajthatóak
Utasításokalkalmazása • Legtöbb műveletet csak bizonyos típusú változókon és értékeken lehet elvégezni • Példa: Aprítsuk fel
Azalgoritmusok 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)
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
Azalgoritmusok 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)
Szubrutin • Egyelnevezettré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ó
Szubrutin: példa szubrutinVezess_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 }
Szubrutinhívása szubrutinHé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... } szubrutin39_hét { Hétfő Kedd Szerda Csütörtök ...stb...stb...stb... }
Szubrutin szubrutinHé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... } A “szubrutin” helyett használható: • Részfeladat • Modul • Procedure • Függvény
Szubrutin szubrutinHé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... } Kapcsos zárójelekjelzik a szubrutin elejét és végét.
Szubrutin hívása szubrutinHé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... } Speciális utasítás“szubrutin hívás”
Szubrutin • A szubrutinnak lehetnekparamé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” );
Azalgoritmusok 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)
Elágazások • Olyan utasítás amelyikeldö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
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 }
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 } igazvagyhamis állítás
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ételigaz.
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ételhamis.
Elágazások: reciprok Példák: A2 reciproka: 1/2 A-3/4 reciproka:1/(-3/4) = -4/3 A 0 reciproka:“értelmetlen” Feladat.Adjuk meg egy szám reciprokát.
Algoritmus: beolvasSzám; if (Számnem egyenlő 0) then { kiír 1/Szám; } else { kiír „végtelen”; } Elágazások: reciprok Feladat.Adjuk meg egy szám reciprokát.
Algoritmus: beolvasSzám; if (Számnem egyenlő 0) then { kiír 1/Szám; } else { kiír „végtelen”; } Elágazások: reciprok A Számegyváltozóamelyértékeattól függ, hogy mit adnak be a program futásakor.
Algoritmus: beolvasSzám; if (Számnem egyenlő 0) then { kiír 1/Szám; } else { kiír „végtelen”; } Elágazások: reciprok Az elágazás függSzám értékétől
Algoritmus: beolvasSzám; if (Számnem egyenlő 0) then { kiír 1/Szám; } else { kiír „végtelen”; } Elágazások: reciprok Egy adott konkrétSzámesetén csak az egyik ág hajtódik végre
Algoritmus: beolvasSzám; if (Számnem egyenlő 0) then { kiír 1/Szám; } else { kiír „végtelen”; } Elágazások: reciprok Végrehajtódik, haSzámnem egyenlő 0-val
Algoritmus: beolvasSzám; if (Számnem egyenlő 0) then { kiír 1/Szám; } else { kiír „végtelen”; } Elágazások: reciprok Végrehajtódik, haSzámegyenlő 0-val
Elágazások: feladat Ugyanazt a kimentet adja a két alábbi algoritmus? Algoritmus 1: input Num; if (Num != 0) then { output 1/Num; } else { output „végtelen”; } Algoritmus 2: input Num; if (Num != 0) then { output 1/Num; } output „végtelen” ;
Elágazások: összetett feltétel • Mi van hatöbb feltételtkell kielégítteni? ha ( ma csütörtök vanés12:00 ) akkor { gyerünk az 160-as terembe } egyébként { gyerünk moziba } megoldás 1
Elágazások: összetett feltétel ha ( ma csütörtök van ) akkor { ha ( 12:00 ) akkor { gyerünk a 160-as terembe } } egyébként …stb... “egymásbaágyazott” feltételek megoldás 2
Elágazások: legalább egyfeltétel • Több feltétel közül elég ha egy teljesül ha ( éhes vagyokvagyelmúlt 11:00 óravagya padszomszédom szemet vetett az uzsonnámra ) akkor { Most megeszem az uzsonnát }
Azalgoritmusok 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)
Ismétlések • Ismételj egy utasítást... • ...addig amíg egy feltétel fennáll • Más néveniterációvagyciklus • Példa: • Randira hívás
Ismétlések szubrutinRandiraHí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ámanullától;amíg (a válasz "Nem" éskönyörgések_száma < 100){Mond(„Na,lécci!"); könyörgések_számanövelése 1-el; VálasztHallgat ( );} }
Ismétlések szubrutinRandiraHí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ámanullától;amíg (a válasz "Nem" éskönyörgések_száma < 100){Mond(„Na,lécci!"); könyörgések_számanövelése 1-el; VálasztHallgat ( );} } A feltételt vizsgáljuk meg először
Ismétlések szubrutinRandiraHí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ámanullától;amíg (a válasz "Nem" éskönyörgések_száma < 100){Mond(„Na,lécci!"); könyörgések_számanövelése 1-el; VálasztHallgat ( );} } Lehet, hogy nem is hajtódik végre
Ismétlések A változók kezdteti értékét helyesen kell beállítani szubrutinRandiraHí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ámanullától;amíg (a válasz "Nem" éskönyörgések_száma < 100){Mond(„Na,lécci!"); könyörgések_számanövelése 1-el; VálasztHallgat ( );} }
Ismétlések szubrutinRandiraHí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ámanullától;amíg (a válasz "Nem" éskönyörgések_száma < 100){Mond(„Na,lécci!"); könyörgések_számanövelése 1-el; VálasztHallgat ( );} } A feltételben használt változót frissíteni kell
Ismétlések Mi történik, ha nem frissítjük az értéket? szubrutinRandiraHí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ámanullától;amíg (a válasz "Nem" éskönyörgések_száma < 100){Mond(„Na,lécci!"); VálasztHallgat ( );} } Végtelen ciklus