Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
Készítette: Nagy Tibor István
Felhasznált irodalom: Kotsis Domokos: OOP diasor
Zsakó L., Szlávi P.: Mikrológia 19.
Programkészítés Megrendelői igények begyűjtése
Megoldás megtervezése (algoritmuskészítés)
Megoldás megvalósítása (implementálás)
Tesztelés
Algoritmus Algoritmus kritériumai:
Elemi lépésekre kell bontani (elemi lépés = az
algoritmus végrehajtója számára egyértelmű,
végrehajtható utasítás)
Az összes lehetséges esetet számba kell venni
Véges sok lépésből kell állnia
Algoritmusleíró eszközök Mondatokkal történő leírás
Teljes magyar mondatokkal íródik az algoritmus
Mondatszerű elemekkel történő leírás (pszeudo-kód) Kulcsszavakkal és az ezekből felépített tőmondatokkal íródik az algoritmus
Blokk-diagram Irányított gráf ábrázolja az algoritmust
Struktogram A teljes feladat egy téglalap, ennek részekre osztásával íródik az algoritmus
…
Algoritmusokban használt
strukturált elemek Másnéven strukturált algoritmikus szerkezetek, vagy
vezérlőszerkezetek:
Szekvencia (utasítássorozat) : tevékenységek
egymásutánja
Szelekció (elágazás) : egy feltétel teljesülése, vagy
nem teljesülése esetén más-más tevékenységeket kell
elvégezni
Iteráció (ciklus) : egy tevékenységet, vagy
tevékenységsorozatot többször meg kell ismételni
A vezérlőszerkezetek egymásba is ágyazhatók
Blokk-diagram
Szekvencia (utasítássorozat)
utasítás1
utasítás2
utasítás3
Blokk-diagram
Szelekció (elágazás)
utasítás1 utasítás2
feltétel i n
Blokk-diagram
Iteráció (elöltesztelős ciklus)
utasítás(ok)
feltétel i n
Nincs külön jelölés a ciklusra. Elágazással lehet megvalósítani.
Blokk-diagram
Iteráció (hátultesztelős ciklus)
utasítás(ok)
feltétel i n
Nincs külön jelölés a ciklusra. Elágazással lehet megvalósítani.
Példa – Rablóbanda Feladat:
Egy rablóbanda az erdőben les
gazdag áldozataira. A
gazdasági fellendülés
következtében megnőtt az
erdei úton közlekedő,
kincsekkel megrakott konvojok
száma, ezért szükségessé vált
a bandát új taggal bővíteni.
Az új tagnak el kell magyarázni
a rablás folyamatát.
A rablás algoritmusa I. Bunkót kézbe
Leshelyre ki
Lesés
Kirablás
Jön karaván? i n
Kocsma
Haza
És ha nem
volt a
karavánnál
pénz?
A rablás algoritmusa II. Bunkót kézbe
Leshelyre ki
Lesés
Kirablás
Jön karaván? i n
Kocsma
Haza
Elég a pénz? n i
És ha
nem is jött
karaván?
A rablás algoritmusa III. Bunkót kézbe
Leshelyre ki
Lesés
Kirablás
Jön karaván? i n
Kocsma
Haza
Elég a pénz? n i
Este van? i n
Ez már jó,
de kusza
Struktogram
Szekvencia (utasítássorozat)
utasítás1
utasítás2
utasítás3
utasítás1
utasítás2
utasítás3
vagy
Struktogram
Szelekció (elágazás)
feltétel
utasítás2 utasítás3
i n
feltétel
utasítás2
i n
vagy
Struktogram
Iteráció (ciklus) feltétel
utasítás(ok)
vagy
feltétel
utasítás(ok)
Amíg nincs este és nem elég a pénz
Lesés
A rablás algoritmusa
Jön karaván?
Kirablás
i n
Bunkót kézbe
Leshelyre ki
Elég a pénz?
Kocsma
i n
Haza
Pszeudo-kód
Szekvencia (utasítássorozat) Formátum:
utasítás1
utasítás2
…
utasításN
Az utasítások végrehajtása leírásuk sorrendjében
történik
Pszeudo-kód
Szelekció (elágazás) Formátum:
Ha feltétel akkor utasítás(ok)1 különben utasítás(ok)2 Elágazás vége
Ha a feltétel igaz, akkor utasítás(ok)1, különben utasítás(ok)2 hajtódik végre
A feltétel logikai igaz, vagy hamis értékű lehet
utasítás(ok)1 az elágazás igaz-ága, utasítás(ok)2 az elágazás hamis-ága.
A hamis-ág elhagyható
Pszeudo-kód
Szelekció (többirányú elágazás) Formátum:
Elágazás feltétel1 esetén utasítás(ok)1 feltétel2 esetén utasítás(ok)2 … különben utasítás(ok)N Elágazás vége
Ha feltétel1 igaz, akkor utasítás(ok)1, ha feltétel2 igaz, akkor utasítás(ok)2, ha egyik feltétel sem igaz, utasítás(ok)N hajtódik végre
Minden feltétel logikai igaz, vagy hamis értékű lehet
A különben-ág elhagyható
Pszeudo-kód
Iteráció (elöltesztelős ciklus) Formátum:
Ciklus amíg feltétel
Ciklusmag
Ciklus vége
A ciklusmag utasításai addig ismétlődnek, amíg a
feltétel igaz
Pszeudo-kód
Iteráció (hátultesztelős ciklus) Formátum:
Ciklus
Ciklusmag
amíg feltétel
Ciklus vége
A ciklusmag utasításai addig ismétlődnek, amíg a
feltétel igaz
A ciklusmag egyszer mindenképp végrehajtódik a
feltétel-től függetlenül
Pszeudo-kód
Iteráció (számlálós ciklus) Formátum:
Ciklus változó = kezdőérték-től végérték-ig
Ciklusmag
Ciklus vége
A ciklusmag utasításai kezdőérték-végérték+1-szer
ismétlődnek
A változó értéke kezdetben kezdőérték-kel egyenlő,
minden cikluslépés végén 1-gyel nő, amíg végérték-
nél nagyobb nem lesz
A változó Egy memóriában elhelyezkedő „rekesz”
Egy értéket tárol
Van azonosítója (vagyis neve)
Van típusa (milyen értéket tárolhat)
Az értéke értékadással módosítható
Az értéke egy kifejezésben lekérdezhető
Változókkal végezhető
tevékenységek Értékadás
Érték elhelyezése a
változóban
változónév = érték
változónév = kifejezés
Érték lekérdezése
A változó tartalmának kiolvasása.
Az érték a kiolvasás után is
megmarad a változóban. Pl.:
Ha változónév > 10 akkor …
változó2 = 3 * változónév + 12
Feladat – másodfokú egyenlet
megoldása ax2 + bx + c = 0
a = 0
bx + c = 0
a 0
ax2 + bx + c = 0
b = 0
c = 0
b 0
𝐱 = −𝒄
𝒃
c = 0
Azonosság
c 0
Ellentmondás
𝑏2 − 4𝑎𝑐 = 0
𝑏2 − 4𝑎𝑐 > 0
𝑏2 − 4𝑎𝑐 < 0
𝒙𝟏,𝟐 = −𝒃
𝟐𝒂±
𝒃𝟐 − 𝟒𝒂𝒄
𝟐𝒂𝒋
𝒙𝟏,𝟐 =−𝒃 ± 𝒃𝟐 − 𝟒𝒂𝒄
𝟐𝒂
𝒙𝟏,𝟐 = −𝒃
𝟐𝒂
a = 0 i n
c = 0
Azon. Ellentm.
i n
Feladat – másodfokú egyenlet
megoldása
b = 0
𝐱 = −𝒄
𝒃
i n 𝑏2 − 4𝑎𝑐 = 𝟎
𝒙𝟏,𝟐 = −𝒃
𝟐𝒂
i n
𝑏2 − 4𝑎𝑐 > 𝟎
𝒙𝟏,𝟐 =−𝒃 ± 𝒃𝟐 − 𝟒𝒂𝒄
𝟐𝒂 𝒙𝟏,𝟐 = −
𝒃
𝟐𝒂±
𝒃𝟐 − 𝟒𝒂𝒄
𝟐𝒂𝒋
i n
Algoritmusok specifikációja Négy részből áll:
Bemenet: az algoritmusnak milyen bemenő adat(ok)ra
van szüksége
Kimenet: az algoritmus milyen eredmény(eke)t állít elő
Előfeltétel: a bemenő adatok milyen feltételeknek kell,
hogy eleget tegyenek ahhoz, hogy az algoritmus
helyesen tudjon működni
Utófeltétel: Milyen feltételeknek tesz eleget a kimenet
az algoritmus végrehajtása után, vagy másképpen:
hogyan állítja elő az algoritmus a bemenő adatokból a
kimenetet
Feladat – másodfokú egyenlet
megoldása specifikációval
a = 0 i n
c = 0
Azon. Ellentm.
i n
b = 0
𝐱 = −𝒄
𝒃
i n 𝒃𝟐 − 𝟒𝒂𝒄 = 𝟎
𝒙𝟏,𝟐 = −𝒃
𝟐𝒂
i n
𝒃𝟐 − 𝟒𝒂𝒄 > 𝟎
𝒙𝟏,𝟐 =−𝒃 ± 𝒃𝟐 − 𝟒𝒂𝒄
𝟐𝒂 𝒙𝟏,𝟐 = −
𝒃
𝟐𝒂±
𝒃𝟐 − 𝟒𝒂𝒄
𝟐𝒂𝒋
i n
Bemenet: a, b, c ∈ ℝ
Kimenet: 𝑥1, 𝑥2 ∈ ℂ Előfeltétel: -
Utófeltétel:
Feladatok 1. Adott a, b, c oldalhossz. Állapítsuk meg, hogy a
három oldal milyen háromszöget alkot.
Adott a, b, c oldalhossz. Adjuk meg a háromszög
kerületét és területét.
Adott x és y. Adjuk meg x * y értékét az + művelet
felhasználásával.
Adott a és x. Adjuk meg ax értékét, a * művelet
felhasználásával
Adott a és x. Adjuk meg ax értékét, az + művelet
felhasználásával
Feladatok 2. Adott x és y. Határozzuk meg a két szám legkisebb
közös többszörösét.
Adott x és y. Határozzuk meg a két szám
legnagyobb közös osztóját.
Adott x. Mondjuk meg, hogy x prímszám-e.
Feladatok 3. Egy meteorológiai állomáson mérik a napi
középhőmérséklet-értékeket egy hónapon keresztül.
Írjuk ki azoknak a napoknak a sorszámát, amikor:
a hőmérséklet fagypont alatt volt
a leghidegebb volt
a legmelegebb volt
Feladatok 4. Egy toronyugró versenyen N versenyző indul.
Minden versenyzőnek egy ugrásra van lehetősége.
Az ugrásokat 7 bíró pontozza. Egy ugrás
összpontszáma a pontok összegéből számítódik,
amelyben a legkisebb és a legnagyobb pont nincs
benne.
Az a versenyző győz, aki a legtöbb pontot kapta az
ugrására. Adjuk meg ennek a versenyzőnek a nevét!
(Tételezzük fel, hogy van egy utasítás, amellyel a
versenyző nevét és a bírói pontokat tudjuk bekérni)
A tömb Több, memóriában
elhelyezkedő „rekesz”
együttese
Több, azonos típusú értéket tárol
Elemei a tömbön belüli sorszámukkal (index) érhetők
el
Egy elem értéke értékadással módosítható
Egy elem értéke egy kifejezésben lekérdezhető
Értékadás
Érték elhelyezése egy
tömbelemben
Érték lekérdezése
Egy tömbelem tartalmának kiolvasása.
Az érték a kiolvasás után is
megmarad a tömbelemben
Tömbbel végezhető
tevékenységek
Tömbelem elérése
(indexelés) A tömb egy adott eleméhez a tömb neve után
szögletes zárójelek között megadott sorszámmal
(index) férhetünk hozzá:
tömbnév[index]
A tömb első elemének indexe: 0
A tömb utolsó elemének indexe: elemszám – 1
28 3 17 11 50
0. 1. 2. 3. 4.
tomb
tomb[3]
Feladatok Egy meteorológiai állomáson mérik a napi
középhőmérséklet-értékeket egy hónapon keresztül.
Tároljuk el ezeket az értékeket egy tömbben
valósítsuk meg a feladatot mindhárom ciklusfajtával
Határozzuk meg a havi átlaghőmérsékletet
Írjuk ki azoknak a napoknak a hőmérsékletét, amikor
hidegebb volt a havi átlagnál
Írjuk ki azoknak a napoknak a hőmérsékletét, amikor
fagyott
Írjuk ki azoknak a napoknak a számát, amikor fagyott
Programozási tételek Egy adott feladatosztályba tartozó összes feladatra
megoldást adó algoritmus.
pl.: a keresés tétel bármilyen elemsorozatban
bármilyen feltételnek megfelelő elemek keresésére
használható
Programozási tételek –
alkalmazott jelölések ℍ : valamilyen (azonos) típusú elemek halmaza.
Például ℍ lehet a természetes számok halmaza,
vagy a karakterek halmaza, …
ℍ𝑁 : ℍ összes lehetséges N elemű részsorozata
Például: ℕ3 = * 0,1,2 , 1,0,2 , 1,2,0 , 1,1,1 , … +
Programozási tételek –
alkalmazott jelölések 𝑇:ℍ ⟶ 𝕃
𝑇 𝑎 =𝑖𝑔𝑎𝑧, 𝑎 𝒂 𝑚𝑒𝑔𝑓𝑒𝑙𝑒𝑙 𝑎 𝑡𝑢𝑙𝑎𝑗𝑑𝑜𝑛𝑠á𝑔𝑛𝑎𝑘
𝑎𝑚𝑖𝑠, 𝑒𝑔𝑦é𝑏𝑘é𝑛𝑡
Például:
𝑇 𝑎 =𝑖𝑔𝑎𝑧, 𝑎 𝒂 < 0
𝑎𝑚𝑖𝑠, 𝑒𝑔𝑦é𝑏𝑘é𝑛𝑡
vagy
𝑇 𝑎 =𝑖𝑔𝑎𝑧, 𝑎 𝒂 𝑝á𝑟𝑜𝑠𝑎𝑚𝑖𝑠, 𝑒𝑔𝑦é𝑏𝑘é𝑛𝑡
…
Eldöntés tétele Adott egy N elemű sorozat és egy – a sorozaton
értelmezett – T tulajdonság. Mondjuk meg, hogy a sorozatban van-e T tulajdonságú elem. Bemenet: N ∈ ℕ, 𝐴 ∈ ℍ𝑁 Kimenet: 𝑉𝐴𝑁 ∈ 𝕃 Előfeltétel:- Utófeltétel: 𝑉𝐴𝑁 ≡ (∃𝑖 0 ≤ 𝑖 < 𝑁 : 𝑇 𝐴𝑖 ) Algoritmus Eldöntés: i = 0; Ciklus amíg i<N és T(A[i]) i = i + 1 Ciklus vége VAN = i<N Algoritmus vége
Kiválasztás tétele Adott egy N elemű sorozat és egy – a sorozaton
értelmezett – T tulajdonság. Biztosan tudjuk, hogy a sorozatban van T tulajdonságú elem. Mondjuk meg az első ilyen elem sorszámát. Bemenet: N ∈ ℕ, 𝐴 ∈ ℍ𝑁 Kimenet: 𝑆𝑂𝑅𝑆𝑍 ∈ ℕ Előfeltétel: ∃𝑖 0 ≤ 𝑖 < 𝑁 : 𝑇(𝐴𝑖) Utófeltétel: 0 ≤ 𝑆𝑂𝑅𝑆𝑍 < 𝑁 é𝑠 𝑇(𝐴𝑆𝑂𝑅𝑆𝑍) Algoritmus Kiválasztás: i = 0; Ciklus amíg T(A[i]) i = i + 1 Ciklus vége SORSZ = i Algoritmus vége
Lineáris keresés tétele Adott egy N elemű sorozat és egy – a sorozaton
értelmezett – T tulajdonság. Mondjuk meg, hogy van-e T tulajdonságú elem a sorozatban, és adjuk meg az első ilyen elem sorszámát. Bemenet: N ∈ ℕ, 𝐴 ∈ ℍ𝑁 Kimenet: VAN ∈ 𝕃, 𝑆𝑂𝑅𝑆𝑍 ∈ ℕ Előfeltétel: - Utófeltétel: 𝑉𝐴𝑁 ≡ ∃𝑖 0 ≤ 𝑖 < 𝑁 : 𝑇 𝐴𝑖 é𝑠
𝑉𝐴𝑁 ⇒ (0 ≤ 𝑆𝑂𝑅𝑆𝑍 < 𝑁 é𝑠 𝑇 𝐴𝑆𝑂𝑅𝑆𝑍 ) Algoritmus Keresés: i = 0; Ciklus amíg i<N és T(A[i]) i = i + 1 Ciklus vége VAN = i<N Ha VAN akkor SORSZ = i Algoritmus vége
Megszámlálás tétele Adott egy N elemű sorozat és egy – a sorozaton
értelmezett – T tulajdonság. Mondjuk meg, hogy hány T tulajdonságú elem van a sorozatban.
Bemenet: N ∈ ℕ, 𝐴 ∈ ℍ𝑁 , 𝑈 𝑥 = 1, 𝑎 𝑇(𝑥)
0, 𝑒𝑔𝑦é𝑏𝑘é𝑛𝑡
Kimenet: DB ∈ ℕ Előfeltétel: - Utófeltétel: 𝐷𝐵 = 𝑈(𝐴𝑖)
𝑁𝑖=1
Algoritmus Megszámlálás: DB = 0 Ciklus i = 0-től N-1-ig Ha T(A[i]) akkor DB = DB + 1 Ciklus vége Algoritmus vége
Maximumkiválasztás tétele Adott egy N elemű sorozat. Mondjuk meg a sorozat
legkisebb elemének sorszámát. Bemenet: N ∈ ℕ, 𝐴 ∈ ℍ𝑁 Kimenet: maxindex ∈ ℕ Előfeltétel: 𝕏 teljesen rendezett és N>0 Utófeltétel: 0 ≤ 𝑚𝑎𝑥𝑖𝑛𝑑𝑒𝑥 < 𝑁 é𝑠 ∀𝑖 0 ≤ 𝑖 < 𝑁 :𝐴𝑚𝑎𝑥𝑖𝑛𝑑𝑒𝑥 ≥ 𝐴𝑖 Algoritmus Maximumkiválasztás: maxindex = 0 Ciklus i = 1-től N-1-ig Ha A[i] > A[maxindex] akkor maxindex = i Ciklus vége Algoritmus vége
Programkészítés lépései Megrendelői igények begyűjtése
Megoldás megtervezése (algoritmuskészítés)
Megoldás megvalósítása (implementálás)
Tesztelés
Implementálás (parancssorból)
1. Algoritmus C# Forráskód
1. Forráskód megírása szövegszerkesztőben
2. Forráskód elmentése fájlnév.cs néven
2. C# forráskód Futtatható fájl (.exe)
1. Parancssori ablak megnyitása
2. Belépés a forráskódot tartalmazó könyvtárba (cd)
3. Forrásfájl lefordítása (csc fájlnév.cs)
3. Futtatható fájl végrehajtása
1. Parancssori ablak megnyitása
2. Program futtatása (fájlnév.exe)
Üres C# program class ProgramNév
{
static void Main()
{
}
}
C# utasítások – szekvencia Minden utasítást ; zár le
Az utasítások írhatók külön sorokba:
utasítás1;
utasítás2;
…
utasításN;
Az utasítások írhatók egy sorba:
utasítás1; utasítás2; … utasításN;
C# utasítások – szelekció if ( feltétel )
utasítás1;
[else
utasítás2;]
if ( feltétel )
{ utasítás1;
utasítás2; …
} else
{ utasítás3;
utasítás4; …
}
else ág elhagyható
Több utasítás esetén kötelező a { }
C# utasítások – szelekció if ( feltétel1 ) utasítás1; [else if ( feltétel2 ) utasítás2;
[else if ( feltétel3 ) utasítás2;
… ]
[else utasításN; ]
else ág elhagyható
Több utasítás esetén kötelező a { }
else if ágakból tetszőleges számú használható
C# utasítások – szelekció switch( kifejezés )
{
case érték1 : utasítás(ok)1; break;
case érték2 : utasítás(ok)2; break;
…
[default: utasítás(ok)N; break;]
}
Ha a kifejezés értéke
= érték1, akkor utasítás(ok)1,
= érték2, akkor utasítás(ok)2, … hajtódik végre
Ha kifejezés értéke egyik case-ben megadottal
sem egyenlő, akkor utasítás(ok)N hajtódik végre
C# utasítások – iteráció while ( feltétel )
utasítás;
Amíg a feltétel igaz, utasítások újra és újra
végrehajtódik
Ha a ciklusmagban több utasítás van, kötelező a { }
while ( feltétel )
{
utasítások;
}
C# utasítások – iteráció do
{
utasítás(ok);
} while ( feltétel );
Amíg a feltétel igaz, utasítás(ok) újra és újra
végrehajtódik
Mindig kötelező a { }
C# utasítások – iteráció for ( inicializáló_rész; feltétel; módosító_rész )
{
utasítások;
}
Amíg a feltétel igaz, utasítások újra és újra végrehajtódik
Több utasítás esetén kötelező a { }
inicializáló_rész: ciklusváltozó(k) inicializálása
módosító_rész: ciklusváltozó(k) értékének módosítása
A zárójelek közti három rész közül egyiket sem kötelező megadni (végtelen ciklus)
C# utasítások – iteráció foreach (típus ciklusváltozó in gyűjtemény)
{
utasítások;
}
A gyűjtemény (pl. tömb) összes elemén végiglépked
Több utasítás esetén kötelező a { }
A ciklusváltozó minden cikluslépésben a
gyűjtemény aktuális elemének értékét tartalmazza
ciklusváltozó a ciklusban nem változtatható meg
gyűjteményből elemet törölni, vagy új elemet
felvenni a cikluson belül nem lehet!