Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Kivonatolta: Katona László

Hasonló előadás


Az előadások a következő témára: "Kivonatolta: Katona László"— Előadás másolata:

1 Kivonatolta: Katona László
ALGORITMUSOK Kivonatolta: Katona László Írta: Ionescu Klára

2 Az algoritmus fogalma A mindennapi életben nem tudjuk mindig megálla-pítani, hogy egy adott helyzetben elérhető-e kitűzött célunk, és ha igen, hogyan. A „megoldás” két dolgot feltételez: az eredmény milyenségének, azaz elvárásainknak pontos ismeretét; annak a folyamatnak a tervét, amely az eredmény eléréséhez vezet. A cél elérése érdekében megtervezzük az elvégzendő cselekvések sorozatát, vagyis megtervezzük az algoritmust, amely a kívánt eredményhez vezet.

3 Az algoritmus fogalma Olyan problémamegoldó eljárást (algoritmust) kell kidolgoznunk, amely véges számú lépésben befejeződik, és a bemeneti adatok alapján előállítja a kimeneti adatokat, azaz megoldja a feladatot. A számítógép csak egyértelmű leírást ért meg és így követni fogja elképzelésünket.

4 Definíció (röviden) Az algoritmus egy adott feladatkör megoldására kidolgozott eljárás, amely utasításszerűen előre megadott lépések sorozatából áll. Definíció (bővebben) Algoritmus alatt egy véges, bizonyos sorrendben megadott egyértelmű műveletsort értünk, amely mechanikusan elvégezhető (anélkül, hogy az ember arra szorulna, hogy saját maga döntéseket hozzon), és amely a rendelkezésre álló adatokból új adatokat hoz létre, vagy más formában vezet a kívánt eredményhez.

5 Valamely algoritmus akkor helyes, ha eleget tesz az alábbi követelményeknek:
Elvégezhető – az ember is képes eljutni az eredményhez, ha szigorúan betartja az algoritmus lépéseit; Meghatározott – bármely pillanatban tudjuk, hogy éppen mi fog történni; Általános – egy adott feladatkör megoldására képes; Véges – az algoritmus véges számú lépésben vezet eredményre.

6 Más tulajdonságok világos ■ az algoritmus leírása pontos, érthető, követhető; hatékony ■ megkeressük azt az algoritmust, amely a legkevésbé veszi igénybe a számítógép erőforrásait: nem terheli fölösleges műveletek elvégzésével, illetve fölösleges adatok tárolásával; ezek az algoritmusok „hatékonyak”, „optimálisak”, vagyis a bonyolultságuk a lehető legkisebb.

7 Az algoritmus Egy algoritmus kezdeti értékeket igényel, ezekből „származtatja” az eredményt. A kezdeti értékeket bemeneti (bemenő) adatoknak nevezzük. Az algoritmus által szolgáltatott (kiszámolt, megtalált, kiírt stb.) adatokat (eredményt) kimeneti (kimenő) adatoknak nevezzük. Mindaz amit az algoritmus elvégez, funkciójaként, nevezhető meg.

8 Az algoritmusok leírásához használt elemek
 Adatok  a) numerikus adatok; a numerikus adatok cso-portjába tartoznak az egész típusú adatok (egész számok), valamint a valós típusú adatok (tizedes számok). b) logikai adatok; mindössze két értéket vehetnek fel: a logikai igaz (true), valamint logikai hamis (false) értékeket. c) karakterláncok; egyszeres idézőjelek (aposztrófok) közé zárt karaktersorozatot jelentenek (például 'ez egy szoveg' vagy 'A'.

9 Állandók (konstansok)
Algoritmusok írásakor numerikus, logikai és karakterlánc típusú állandókat használhatunk. Ezek nem változtatják értéküket az algoritmus lépéseiben. Példák: 12, 3.14, true, 'algoritmus' Szimbolikus konstans: az állandó értékét hozzárendeljük egy választott névhez. Példák: a=12, pi=3.14, igaz=true, cim='algoritmus'

10 Változók Az algoritmusok leírásakor használt olyan elemeket, amelyeknek értéke, akár új értékadás, beolvasás, vagy valamely számítás során módosulhat, változóknak nevezzük. Minden változónak van azonosítója, típusa, pillanatnyi értéke, valamint helye (címe) a memóriában. De beszélünk a jelentéséről is. A változók típusa lehet numerikus, logikai és karakterlánc (standard típusok). Mellettük még végtelen sok típust definiálhat maga a programozó.

11 Kifejezések A kifejezés egy számítás kijelölése: előírja valamely érték kiszámításának módját. A kifejezés operátorokból (műveletekből) és operandusokból áll. Az operandusok lehetnek konstansok, változók vagy függvénykifejezések. A kifejezés kiértékelése az operátorprecedencia figyelembevételével történik. Azonos prioritású operátorok esetében a kifejezés kiértékelését balról jobbra haladva végezzük. Az algoritmusok leírásakor numerikus, logikai és karakterlánc típusú kifejezéseket használhatunk.

12 Egész típusú kifejezések
Az egész típusú kifejezések operandusai egész típusúak. Az egész típusú kifejezésekben a következő operátorokat használhatjuk: Operátor Aritmetikai művelet összeadás – kivonás * szorzás [a/b] egész számok osztásának hányadosa (szintén egész szám) maradék[a/b] egész számok osztási maradéka

13 Valós típusú kifejezések
A valós típusú kifejezések operandusai egész vagy valós típusúak. A valós típusú kifejezésekben a következő operátorokat használjuk: Operátor Aritmetikai művelet összeadás – kivonás * szorzás / osztás (A / valós eredményt szolgáltat még akkor is, ha az operandusok egész típusúak.)

14 Logikai kifejezések A logikai kifejezések operandusai logikai típusúak. A logikai kifejezések leírásában a következő operátorokat használhatjuk: relációs operátorok: <, >, , , =, <>; logikai operátorok: nem (az eredeti állítás tagadása, ellenkezője), és, vagy, xor (kizáró vagy).

15 Karakterlánc típusú kifejezések
Egyszerű műveletünk egy van: a karakterláncokat össze lehet fűzni. Példa Legyen a kifejezés: a + 'szöveg', ahol a egy karakterlánc típusú változó; ha a értéke ' Ez egy ', akkor a kifejezés értéke ' Ez egy szöveg' lesz. Más műveletek is lehetségesek, de ezek megvalósítását függvényekkel és eljárásokkal fogjuk elvégezni.

16 Műveletek  Az algoritmusok leírásakor az alábbi műveleteket használhatjuk: ki/bemeneti műveletek; értékadás; döntéshozatal.

17 Ki/bemeneti műveletek
A bemeneti művelet szerepe bekérni a szükséges bemeneti adatokat. Ezeket billentyűzetről vagy állományokból olvashatjuk be. A kimeneti művelet szerepe a feldolgozott adatokat, eredményeket megjeleníteni. Ez a kiírás történhet a képernyőre, papírra vagy valamilyen állományba.

18 Értékadás Döntéshozatal
Az értékadó művelet a := (vagy ) műveleti jel bal oldalán található változóhoz hozzárendeli a jobb oldalon levő kifejezés értékét.  Példa: a  5 + x Döntéshozatal A döntéshozó művelet lényege, hogy adott feltételek teljesülésekor egy bizonyos műveletsor elvégzését írja elő, egyébként egy másik műveletsorét. Példa: Ha a > 0 akkor b  12 különben b  100

19 Adatszerkezetek Adatszerkezet alatt az adatok olyan csoportosulását értjük, amelyben pontos szabályok szerint szervezzük a feldolgozandó adatokat. Egy adattípuson belül azonos tulajdonságú értékeket foglalunk egybe, amelyekhez hozzárendeljük az elvégezhető műveleteket. egyszerű adattípusok: például az egész típusú számot nem tekintjük számjegyek sorozataként. összetett adattípusok: az értékek elemekre bonthatók, az elemek egy adott szerkezetnek megfelelően csoportosulnak. Az adatszerkezeten belül ismerjük az elemek közti kapcsolatot (szerkezetet).

20 Példa A Pascalban az Integer (a C-ben az int) egy egész adattípus.
Ha több Integer (int) típusú számot szeretnénk egy adatkent kezelni, akkor egy sorozatot képezünk belőlük. Így a sorozat egy adatszerke-zet, amelynek az elemei egész számok. Az elemek közti kapcsolat az, hogy egymás után következnek. Műveletek: elemek lekérdezése a sorszámuk (indexük) segítségével, értékadás stb.

21 Algoritmusok ábrázolása folyamatábrák és pszeudokód nyelvek segítségével
Az algoritmusok ábrázolásához használhatunk: folyamatábrákat pszeudokód nyelvet különböző típusú diagramokat a hétköznap használt nyelvet A folyamatábra grafikus ábrázolásmód, amelynek segítségével nem csupán az egyes műveleteket, hanem ezek elvégzésének sorrendjét és összefüggését is feltüntetjük.

22 Pszeudokód nyelvek Közelebb állnak a programozási nyelvekhez, de ezeknél kevésbé szigorú szabályok alapján használjuk őket, mivel nem abból a célból születtek, hogy a számítógépen futtatható programot írjunk. Az úgynevezett pszeudokód, az elemi struktúrákat írja le egyszerű utasítások formájában. A pszeudókodban leírt algoritmus nagyon könnyen átírható bármely programozási nyelvre.

23 A strukturált programozás alapelvei
Hoare és Dijkstra – a strukturált programozás alapelve: az algoritmusok leírására néhány alapstruktúrát (elemi struktúrát) használunk, amelyeknek egyetlen bejárata és egyetlen kijárata van. A kitűzött feladatot részfeladatokra bontjuk, majd e részfeladatok megoldásával jutunk el az eredeti feladat megoldásához. Bármely algoritmus: alapstruktúrák lineáris szekvenciája.

24 Alapstruktúrák lineáris struktúra – valamely művelet feltétel nélküli elvégzését jelenti; elágazási (alternatív) struktúra – lehetővé teszi, hogy valamely műveletet csak adott feltételek teljesülésekor végezzünk el; ismétlő struktúra (ciklus) – adott műveletsor véges számszor történő ismételt elvégzését jelenti. Az elemi struktúrák használata megkönnyíti az algoritmusírást. A kész algoritmus érthetőbb, áttekinthetőbb, könnyebben javítható lesz.

25 Elemi struktúrák leírása pszeudokód segítségével
Utasítás Általános alak – az algoritmus első utasítása: Algoritmus Név(Paramételista): Lineáris struktúrák – beolvasás: Be: változólista – kiírás: Ki: kifejezéslista – értékadás: változónév  kifejezés – eljáráshívás: eljárásnév(paraméterlista)

26 Elágazási struktúrák Ha... akkor... különben típusú struktúra
Ha feltétel akkor utasítás(ok)1 különben utasítás(ok)2 vége(Ha) Ha... akkor típusú struktúra utasítás(ok)

27 Példa Határozzuk meg és írjuk ki adott valós szám abszolút értékét!
Elemzés Matematikából tudjuk, hogy valamely szám abszolút értéke:

28 Algoritmus Abszolút_érték(x,modulusz):
{ bemeneti adat: x, kimeneti adat: modulusz } Ha x  0 akkor modulusz  x különben modulusz  -x vége(ha) Vége(algoritmus)

29 Megjegyzés: Ha az x változó eredeti értékére a továbbiakban nincs szükségünk, elegánsabb megoldást kapunk, ha nem használunk külön változót az abszolút érték tárolására! Egyébként a megoldás hátránya lehet, hogy módosul az x értéke! Algoritmus Abszolút_érték_másként(x): { bemeneti és kimeneti adat: x } Ha x < 0 akkor x  -x vége(ha) Vége(algoritmus)

30 Ismétlő struktúrák Amíg típusú struktúra Amíg feltétel végezd el:
utasítás(ok) vége(amíg) Ismételd típusú struktúra Ismételd ameddig feltétel

31 Példa Számítsuk ki két természetes szám egész hányadosát ismételt kivonásokkal! Algoritmus Osztás(a,b,hányados): { bemeneti adatok: a,b, kimeneti adat: hányados } hányados  0 Amíg a ≥ b végezd el: hányados  hányados + 1 a  a - b vége(amíg) Vége(algoritmus)

32 Ismert számú ismétlés Minden típusú struktúra
Minden i:=ek, ev, r-re végezd el: utasítás(ok) Vége(minden) – az algoritmus utolsó utasítása: Vége(algoritmus)

33 Példa 1. Felcserélés Olvassunk be két egész típusú változót! Cseréljük fel, majd írjuk ki a két változó tartalmát! Algoritmus Felcserél(a,b): { bemeneti adatok: a,b, kimeneti adatok: a,b } segéd:=a a:=b b:=segéd Ki a, b Vége(algoritmus)

34 Példa Számoljuk meg n szám közül a páros számokat!
Algoritmus Páros(n,db): db  { bemeneti adat: n, kimeneti adat: db } Minden i=1,n végezd el: Be: szám Ha szám páros akkor db  db + 1 vége(ha) vége(minden) Vége(algoritmus)

35 3. Maximumérték Határozzuk meg és írjuk ki három, páronként különböző valós szám közül a legnagyobbat! Algoritmus Maximum(a,b,c): { bemeneti adatok: a,b,c } Ha ( a > b ) és ( a > c ) akkor Ki 'a legnagyobb: ', a vége(ha) Ha ( b > c ) és ( b > a ) akkor Ki 'a legnagyobb: ', b Ha ( c > a ) és ( c > b ) akkor Ki 'A legnagyobb: ', c Vége(algoritmus)

36 A megoldás menete, segédváltozó használatával:
Algoritmus Maximum_másként: { bemeneti adatok: a,b,c, kimeneti adat: max } max:=a Ha max < b akkor max:=b vége(ha) Ha max < c akkor max:=c Vége(algoritmus)

37 Algoritmus Maximum_harmadik_változata:
{ bemeneti adatok: a,b,c, kimeneti adat: max } Ha ( a > b) és ( a > c) akkor max:=a különben Ha ( b > a) és ( b > c) akkor max:= b Ha ( c > a) és ( c > b) akkor max:= c vége(ha) Ki 'A legnagyobb: ', max Vége(algoritmus) Megjegyzés: egymásbaágyazott döntések...

38 Alapszabályok Adjunk a változóknak beszédes azonosítókat!
Ne használjunk inicializálatlan változókat! A megoldandó feladatot teljes egészében elemezzük! Amíg lehet, a feladatot bontsuk részfeladatokra, az algoritmust pedig al-algoritmusokra (alprogramokra)! Ha a Ha struktúrában valamelyik ág hiányzik, ez legyen a különben! Az egymásba ágyazott Ha struktúrák következzenek a megvalósulásuk valószínűsége szerint csökkenő sorrendben! A Minden típusú struktúrában ne módosítsuk a ciklusváltozót, de a kezdő-, illetve a végső értéket sem! Írjuk indentálva algoritmusunkat (programunkat)!

39 Példa Írjunk algoritmust, amely megvizsgálja, hogy egy adott természetes szám palindromszám-e vagy sem. Elemzés Egy számot palindromszámnak (vagy tükörszámnak) hívunk, ha egyenlő a „fordított”-jával, vagyis azzal a számmal, amelyet a szám számjegyei fordított sorrendben alkotnak. A számot számjegyekre bontjuk. Ezzel párhuzamosan felépítjük az új számot.

40 Elemzés Az új szám generálását a Horner-séma néven ismert módszer segítségével végezzük: a ciklusban újszám  újszám  10 + számjegy. Az algoritmus a számjegyeket úgy határozza meg, hogy ismételten osztja az eredeti számot 10-zel  az algoritmus végén az eredeti szám értéke 0. De nekünk szükségünk van az eredeti értékre, hogy összehasonlíthassuk az új számmal. Ezért a beolvasott számról a feldolgozás előtt másolatot készítünk.

41 Algoritmus Palindrom(szám,p):
{ bemeneti adat: szám, kimeneti adat: p } { p = igaz, ha szám palindrom, különben hamis } { az algoritmus eldönti, hogy szám palindrom-e? } másolat  szám újszám  0 Amíg szám > 0 végezd el: számjegy  maradék[szám/10] { számjegyekre bontás } újszám  újszám*10 + számjegy { Horner séma } szám  [szám/10] { a feldolgozott számjegyet levágjuk } vége(amíg) p  újszám = másolat { ugyanaz, de jobb mint: Ha újszám = másolat akkor p  igaz különben p  hamis } vége(ha) Vége(algoritmus)

42 A számítógépes feladatmegoldás lépései
A számítógép egy feladatot akkor képes megoldani, ha végrehajtjuk rajta azt a programot, amelyet abból a célból írtunk, hogy a feladatot megoldja. A programon keresztül irányítjuk a számítógép által elvégzendő lépéseket és biztosítjuk a feladat automatikus módon való megoldását.

43 Ma: programozás = csapatmunka
Egy alkalmazás nem egyetlen program megírását jelenti. Több személy, többhetes, esetleg többéves munkával programrendszereket hoz létre. Szükségessé vált a programozói tevékenység szabályozása, egy bizonyos sajátos fegyelem megkövetelése, a programozók közti kommu-nikáció szabványosítása, valamint a megoldandó feladatok szövegeinek megfelelő specifikálása.

44 Moduláris programozás
A programozási munka egyszerűsítését tűzte ki céljául (1956). Az eredetileg bonyolult feladatot részfeladatokra bontjuk, és az ezeket megoldó algoritmusokat alprogramokkal kódoljuk. A részfeladatokat megoldó alprogramokat összefűzve, megkapjuk az eredeti feladat megoldását.

45 Strukturált programozás
1972: E. W. Dijkstra olyan algoritmusokat javasolt, amelyekből hiányzik a goto utasítás. Nagymértékben megnőtt a programok olvashatósága, frissíthetősége, sőt könnyebb lett azok karbantartása is. Böhm és Jacopini: bármely algoritmus megvalósítható a három alapstruktúrával: szekvencia, elágazás (döntés) és az előltesztelő ismeretlen lépésszámú ciklus (iteráció).

46 A feladatmegoldás lépései számítógépes környezetben
Az ember által elvégzendő lépések: A követelmények és a feladat megfogalmazása ■ A megrendelő leírja a kivitelező számára (sokszor pontatlanul és ellentmondásosan) azt a feladatot, amelyet számítógépes programmal szeretne megoldani. A leírás (általában) a kimenetre összpontosít.

47 A feladat specifikációja
Több beszélgetés után a rendszertervező megfogalmazza a feladatot. Ehhez ismernie kell: milyen körülmények között, mekkora méretű adatokkal, milyen számítógépen kerül fölhasználásra az elkészítendő program.

48 A fejlesztői dokumentáció
A rendszertervezők elemzik a megrendelő követelményeit és lefordítják „saját nyelvük-re” a feladatot: létrehozzák azt a belső használatra készülő dokumentációt, amely a feladat pontos és helyes specifikációját tartalmazza. Itt már bemeneti és kimeneti adatokról, valamint megszorításokról (a bemeneti adatok és az adatszerkezetek méretéről, az elfogadható legnagyobb futási időről stb.) van szó.

49 Az algoritmus megtervezése (elemzés, modellek és módszerek megállapítása)
■ A programozók kiválasztják a megfelelő matematikai modelleket, megtervezik az adatszerkezeteket és eldöntik, hogy milyen programozási környezetben milyen módszereket fognak alkalmazni.  Több megoldási lehetőség közül az lesz a jobb, amely a számítógép erőforrásait (memória és idő) a leghatékonyabban használja.

50 Az algoritmus megtervezése (elemzés, modellek és módszerek megállapítása) (2)
A feladatot részfeladatokra bontják és megtervezik a megoldásokat. A matematikai modellek, az adatszerkezetek és az algoritmusok kiválasztása összefonódik. Kialakulnak a modulok és a köztük levő kapcsolatok. Bővül a fejlesztői dokumentáció, amely tartalmazza a megoldás vázát, a választások indoklását. Erre a kódolás során, valamint a program karbantartásakor lesz szükség.

51 Kódolás (az algoritmus implementálása egy programozási nyelvben)
■ Ebben a fázisban az algoritmust átírják valamilyen programozási nyelvre, amelyet – a feladat jellegének megfelelően – gondosan választanak ki.

52 Tesztelés (ellenőrzés = „verifikáció” és érvényesítés = „validálás”)
■ A programozók különböző tesztadatok esetében tanulmányozzák a program működését. Arra számítanak, hogy a program a várt (helyes) adatokat adja, de megfigyelik a futási időt, a biztonságos működést stb. A felfedezett hibákat kijavítják, majd újra ellenőrzik az eredményt.

53 Ellenőrzés és érvényesítés
Olyan ellenőrzésről van szó, amely egy folyamatos tevékenység, és amely a tervezés, a kódolás és a karbantartás során zajlik. Az ellenőrzés lényeges összetevője az úgynevezett érvényesítés. Ezt előbb elvégzi a kivitelező, később a felhasználás során a megrendelő. A megrendelő nem végez ellenőrzéseket, hanem valós adatokkal futtatja a programot.

54 A fejlesztői és a felhasználói dokumentáció elkészítése
■ A dokumentációk a program fontos tarto-zékai, amelyek a programhoz kapcsolódó fontos információkat tartalmazzák. A fejlesztői dokumentáció leírja, hogyan volt megtervezve a program. A felhasználói dokumentáció elmagyarázza, hogyan kell használni a programot.

55 Felhasználás és karbantartás
■ A megrendelő a programot a felhasználás közben valós adatokkal futtatja. Ez természetesen hosszabb ideig zajlik, és előfordulhat, hogy a felhasználás során bizonyos programrészeket a programozónak meg kell változtatnia.

56 Alkalmazások minőségi szempontjai
Helyesség ■ A program helyes, ha pontosan megoldja a feladatot, megfelel a pontos és helyes specifikációnak.

57 Megbízhatóság ■ Egy programot megbízhatónak neve-zünk, ha helyes eredményt határoz meg, és a specifikációban nem leírt helyzetekben is intelligens módon viselkedik.

58 Karbantarthatóság ■ Milyen könnyű a programterméket a specifikáció esetleges változtatásához adaptálni? Néha a szoftverköltségek 70%-át a szoftverek karbantartására fordítják! A karbantarthatóság növelése szempontjá-ból a két legfontosabb alapelv: a tervezési egyszerűség és a decentralizáció (minél önállóbb modulok létrehozása).

59 Újrafelhasználhatóság
■ Az újrafelhasználhatóság a szoftver-termékek azon képessége, hogy egész-ben vagy részben újrafelhasználhatók új alkalmazásokban.

60 Kompatibilitás ■ A kompatibilitás azt mutatja meg, hogy milyen könnyű a szoftvertermékeket egymás között kombinálni.

61 Hordozhatóság ■ A program hordozhatósága arra vonatkozik, hogy mennyire könnyű a programot más géphez, konfigurációhoz, vagy operációs rendszerhez – általában más fizikai környezethez – igazítani.

62 Hatékonyság ■ A program hatékonysága a futási idővel és a felhasznált memória méretével arányos – minél gyorsabb, illetve minél kevesebb memóriát használ, a program annál hatékonyabb.

63 Barátságosság ■ A program emberközelisége, barátságossága a felhasználó számára rendkívül fontos: ez megköveteli, hogy a bemenet logikus és egyszerű, az eredmények formája áttekinthető legyen.

64 Tesztelhetőség ■ A tesztelhetőség a program karbantartói, fejlesztői számára fontos.


Letölteni ppt "Kivonatolta: Katona László"

Hasonló előadás


Google Hirdetések