Upload
anneke
View
31
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
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