Programozási alapok jegyzet



Hasonló dokumentumok
A C# programozási nyelv alapjai

MT Algoritmusok és V Algoritmusok és isual Basic programoz ás alapjai isual Basic programoz Algoritmus Muhammad Ibn Músza Al-Hvárizmi

Programozás alapjai (ANSI C)

Készítette: Nagy Tibor István

Java II. I A Java programozási nyelv alapelemei

Programozási alapismeretek 1. előadás

Java programozási nyelv

Készítette: Nagy Tibor István Felhasznált irodalom: Kotsis Domokos: OOP diasor Zsakó L., Szlávi P.: Mikrológia 19.

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

1. Jelölje meg az összes igaz állítást a következők közül!

ALGORITMIKUS SZERKEZETEK ELÁGAZÁSOK, CIKLUSOK, FÜGGVÉNYEK

Programozási nyelvek a közoktatásban alapfogalmak I. előadás

AZ ALGORITMUS. az eredményt szolgáltatja

Java II. I A Java programozási nyelv alapelemei

Objektumorientált Programozás I.

Programozási nyelvek 6. előadás

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás 2. előadás

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

Webprogramozás szakkör

C programozás. 1 óra Bevezetés

OOP I. Egyszerő algoritmusok és leírásuk. Készítette: Dr. Kotsis Domokos

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

Programozási alapismeretek. 1. előadás. A problémamegoldás lépései. A programkészítés folyamata. Az algoritmus fogalma. Nyelvi szintek.

Bevezetés az informatikába

A számolás és a számítástechnika története. Feladat:

Algoritmusok, adatszerkezetek, objektumok

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

Bevezetés az informatikába Tételsor és minta zárthelyi dolgozat 2014/2015 I. félév

Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

A programozás alapjai előadás. A C nyelv típusai. Egész típusok. C típusok. Előjeles egészek kettes komplemens kódú ábrázolása

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

A program valamilyen feladat, probléma megoldására készül, általános szerkezete: INPUT ALGORITMUS OTUPUT

Occam 1. Készítette: Szabó Éva

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Objektumorientált Programozás III.

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

Programozás I. 1. előadás: Algoritmusok alapjai. Sergyán Szabolcs

A C# PROGRAMOZÁSI NYELV

Vezérlési szerkezetek

Algoritmusok. Dr. Iványi Péter

PROGRAMOZÁS tantárgy. Gregorics Tibor egyetemi docens ELTE Informatikai Kar

A programozás alapjai

Programozás - Strukturált programozás a gyakorlatban

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Algoritmizálás és adatmodellezés tanítása 1. előadás

Készítette: Nagy Tibor István

B I T M A N B I v: T M A N

A fejlődés megindulása. A Z3 nevet viselő 1941-ben megépített programvezérlésű elektromechanikus gép már a 2-es számrendszert használta.

Az informatika kulcsfogalmai

Programzás I gyakorlat

Programozás - Strukturált programozás a gyakorlatban

Az algoritmusok alapelemei

5. előadás. Programozás-elmélet. Programozás-elmélet 5. előadás

Informatika tanítási módszerek

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

Programtervezés. Dr. Iványi Péter

Számítógép architektúra

1. Egyszerű (primitív) típusok. 2. Referencia típusok

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

A számítástechnika rövid története

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával)

Informatika tagozat osztályozóvizsga követelményei

Python bevezető foglalkozás Python bevezető foglalkozás

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

Mi a programozás? A programozás története ELSŐ FEJEZET

4. Programozási nyelvek osztályozása. Amatőr és professzionális

Információtartalom vázlata

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

Informatikus informatikus Térinformatikus Informatikus T 1/9

A számítástechnika történeti áttekintése

3. óra Számrendszerek-Szg. történet

ALGORITMUSOK, ALGORITMUS-LEÍRÓ ESZKÖZÖK

A számítástechnika története

Web-programozó Web-programozó

Algoritmizálás + kódolás C++ nyelven és Pascalban

Eljárások és függvények

Algoritmizálás, adatmodellezés 1. előadás

Nézzük tovább a lexikai egységeket!

Az informatika fejlődéstörténete

Történeti áttekintés

Bevezetés a C++ programozásba

Programozási nyelvek JAVA EA+GY 1. gyakolat

3. óra Számrendszerek-Szg. történet

Programozási alapismeretek. Bevezető

A számítástechnika fejlődése

Objektumorientált Programozás II.

A számítógép története (olvasmány)

Maximum kiválasztás tömbben

3 A C programozási nyelv szintaktikai egységei

INFORMATIKAI ALAPISMERETEK

Mintavételes szabályozás mikrovezérlő segítségével

Bevezetés a programozásba. 5. Előadás: Tömbök

Gyakorló feladatok Gyakorló feladatok

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Átírás:

Programozási alapok jegyzet Javított változat Összeállította: Faludi Anita 2012.

Tartalom A programozás története... 4 Program... 4 Programozás... 4 Történet... 4 Programnyelv-generációk... 6 Ellenőrző kérdések... 7 Programnyelvek csoportosítása... 8 Ember/gépközeliség szerint... 8 Felhasználó szerint... 8 Működés szerint... 8 Alkalmazás szerint... 8 Ellenőrző kérdések... 9 C# programozási nyelv... 9 Ellenőrző kérdések... 9 Programkészítés lépései... 10 1. Feladat meghatározása... 10 2. Algoritmuskészítés... 10 3. Kódolás... 10 4. Tesztelés, hibakeresés, javítás... 10 5. Hatékonyságvizsgálat... 10 6. Dokumentálás... 11 Ellenőrző kérdések... 11 Feladatmeghatározás, specifikáció... 12 1. Feladat meghatározása... 12 2. Bemenet... 12 3. Előfeltétel... 12 4. Kimenet... 12 5. Utófeltétel... 12 Feladatok... 13 Ellenőrző kérdések... 13 Konstansok és változók... 13 Ellenőrző kérdések... 13 Elemi adattípusok... 14 Karakter... 14-2 -

Karaktersorozat... 14 Egész... 14 Valós... 14 Logikai... 15 Ellenőrző kérdések... 15 Összetett és egyéb adattípusok... 15 Egy dimenziós tömb (vektor)... 15 Többdimenziós tömb... 16 Struktúra... 16 Felsorolás típus... 16 Ellenőrző kérdések... 17 Algoritmus... 17 Algoritmus fogalma... 17 Tevékenységszerkezetek... 18 Strukturált programozás... 19 Algoritmusleíró eszközök... 19 Rajzos algoritmus leíró eszközök... 20 Folyamatábra (blokkdiagram) jelei... 20 Struktogram jelei... 20 Az egész algoritmusnak egy nagy téglalapot feleltetünk meg, amelyet tovább osztunk... 20 Vezérlési szerkezetek... 21 Szekvencia... 21 Szelekció (elágazás)... 21 Iteráció (ismétlés)... 22 Feladatok... 23 Pszeudokód... 29 Irodalomjegyzék... 31-3 -

A programozás története Program Számítógép számára érthető utasítássorozat. Programozás Szűkebb értelemben a kódolást értjük ezalatt. Tágabb értelemben a feladat kigondolásától kezdődően a kész program leírásáig minden lépés ide tartozik. Történet Sokan gondolják úgy, hogy a programozás a huszadik század találmánya. A számítógépi programozás és a programozási nyelvek története valóban az 1940-es évek közepére nyúlik vissza, ennek ellenére a történetet korábbról kezdjük. 1822-ben Charles Babbage, az angliai Cambridge egyetem hallgatójaként felismerte, hogy az akkori számítóeszközök nagy része, például a csillagászati táblázatok, vízállásdiagramok, ha-józási térképek kritikus hibákat és hiányosságokat tartalmaznak. A hibák miatt sok hajó eltévedt a tengeren, és ez gyakran a legénység életébe és a rakományba került. Mivel a pontatlanságok forrásának az emberi tényezőt tartotta, az volt az elképzelése, hogy gőzgépek segítségével a táblázatok és a diagramok készítéséből és karban-tartásából kiiktatja a találgatásokat. Az egyik ilyen gép, a Difference Engine néven emlegetett szerkezet Babbage életének hátralevő részében rengeteg idejét lekötötte. Még a brit kormányt is felkereste, hogy pénzügyi segítséget kérjen: az első (de vélet-lenül sem az utolsó) kéréssel a számítógép-tudományi kutatás finanszírozásához kért kormányzati támogatást. A Difference Engine 10 évnyi fejlesztése után Babbage felismerte, hogy az egy-funkciós gép kizárólag egyetlen művelet végrehajtására képes. Rájött, hogy ez igen komoly korlátozás, és egy időre felfüggesztette a munkát a sokoldalú Analytical Engine fejlesztésének kedvéért. Ez a gép a modern számítógép alapelemeit tartal-mazta, és megalapozta Babbage számára a számítógép atyja nevet. Az Analytical Engine nem nyert széles körben elismerést, mivel Babbage ugyan-azzal a problémával küzdött, ami évszázadokra megkeserítette a programozók és az informatikusok életét: képtelen volt világosan dokumentálni és ezáltal közkinccsé tenni ötleteit! 1854 a következő állomásunk, amikoris Charles Boole elkészítette a nevét viselő szimbolikus logikai rendszert (Boole-algebra), amelynek igen jelentős szerepe van a programozásban. A rendszer bevezette a nagyobb, mint, kisebb, mint, egyenlő és nem egyenlő fogalmát, és egy szimbolikus rendszer segítségével megjelenítette ezeket a fogalmakat. 1890-ben az Egyesült Államok népszámlálási hivatala versenyt írt ki. Az 1880-as népszámláláskor az adatok összesítése 7 évet vett igénybe, valamint a lakosság is növekedett, így a becslések szerint az 1890-es népszámlálási adatok feldolgozása nem fejeződött volna be az 1900-as népszámlálás előtt. Ezért a verseny célja az volta, hogy fellendítse a számítástudomány iránti érdeklődést, és ennek eredményeként - 4 -

előálljon egy adatfeldolgozó berendezés, amely a kormány munkáját segíti. A versenyt Herman Hollerith német származású amerikai statisztikus nyerte. Hollerith az ötletét a Jaquard-féle szövőgépek lyukkártyás módszeréből merítette. Jacquard módszerének kulcsa egy kártyasorozat alkalmazása, amelyen lyukak vannak elhelyezve, mégpedig úgy, hogy azok a kívánt mintát rajzolják ki. Ennek láttán találta ki, hogy a Jacquard deszkalapjaihoz hasonló perforált kártyákat adatfeldolgozásra is lehet használni. Egy kártyára egy ember adatait lyukasztotta. Maga a lyukasztás kézi munkával történt. Az adatok feldolgozására olyan rendszert használt, ahol a lyukkártyák elektromos érintkezők között mentek át. Ahol a kártyán lyuk volt, az áramkör bezárult. Így a lyukakat meg lehetett számolni. Ezzel dolgozta fel az USA 1890-es népszámlálási adatait mindössze négy hét alatt! A lyukkártyás módszer egyébként később, több programozási nyelv kialakulására is hatással volt. Miután bebizonyította a technológia eredményességét, Hollerith más országokban is vállalta népszámlálási információk feldolgozását. Ennek sikere láttán alapította 1896-ban a Tabulating Machine Company nevű céget, amelyből aztán 1924-ben megalakult az IBM. 1935-ben Konrad Zuse programozás történetének újabb meghatározó alakja kifejlesztette Z-1 névre hallgató számítógépét. Ez volt az első számítógép, amely reléket használt, és a kettes számrendszer segítségével számolt. Ez a gép a számítógépek modern korának előfutára. Zuse volt az, aki a világ első programozási nyelve, a Plankalkül kifejlesztésével 1946-ban megalapozta a modern programozást. A nyelv megjelenése azért volt nagy áttörés, mert modern nyelvek összetevőinek nagy részét, többek között a táblákat és az adatstruktúrákat is tartalmazta. 1945 a számítástechnika történetében újabb fontos állomást jelentett, felbukkant az a szó, amelytől mindenki hidegrázást kap: a hiba! 1945-ben Grace Murray Hopper (később Hopper admirális) a Harvard egyetemen a Mark II Aiken-féle átkapcsoló kalkulátoron dolgozott. A gépekkel akkortájt folyamatosan probléma volt, és az egyik ilyen kellemetlen eset során, 1945. szeptember 9-én az egyik technikus felfedezte, hogy egy moly került a gép. Az esettel kapcsolatban a következő naplóbejegyzés született: Az első eset, amely során tényleges hibát (bug) találtam. Ebből a bejegyzésből született a gép hibakeresése (debugged), valamint a számítógép hibakeresése (debugging a computer) és a számítógépprogram hiba-keresése (debugging a computer program) kifejezés is. A 20. század közepétől felgyorsult a fejlődés. Egyre több fejlesztés történt: rengeteg különböző programnyelv jött létre, amelyek mindegyike rendelkezik egyaránt előnyös és hátrányos tulajdonságokkal. Megjelent az Internet, amely szintén nyelvek seregét hozta magával. Az Internet másik nagy előnye, hogy megkönnyíti az információk és a programok megosztását másokkal, így a programozás és a programozási nyelvek iránti érdeklődés egyre nő, és ezt az érdeklődést az információk, ötletek és alkalmazások akadálytalan cseréje még inkább fellendíti, vagyis a fejlődés nem áll meg. - 5 -

Programnyelv-generációk 1. GL (alacsony szintű nyelvek) Az első programozási nyelv a gépi kód volt. Ennek a nyelvnek az utasításait a számítógép képes volt közvetlenül, minden átalakítás nélkül végrehajtani, értelmezni. A problémákat nagyon precízen kellett megfogalmazni, lépésekre bontani. Emellett a nyelv erősen gépfüggő volt, hiszen minden gépen más és más utasításokat használt, az adott problémát minden géptípus esetén másképpen kellett leírni, megfogalmazni, alkalmazkodva a számolóegység sajátosságaihoz. Hátrányai mellett néhány előnyt is meg kell említenünk: A leggyorsabb programot eredményezi, mivel nem tartalmaz felesleges utasításokat. Az egyes utasítások egységes (egy vagy kétcímes) formában vannak leírva. pl: 0B0A 0C0E 0D00 az első négy szám egy utásítás, a többi memóriacímek A gépi kódú lehetőségekhez képest komoly előrelépést jelentett az Assembly nyelvek megjelenése, amelyek tulajdonképpen segédeszközt jelentettek a gépi kódú utasítások egyszerűbb megfogalmazásában. Az egyes gépi kódú utasításokhoz egy-egy mneomnikus kódot rendeltek hozzá, a tárcímeket pedig a memória kezdetéhez viszonyított relatív címekkel számították. Szintén újdonságnak számított, hogy az egyes memóriacímeket egy-egy szimbolikus névvel lehetett helyettesíteni. Minimális szókészlet (ma már csak hardver szintű vezérléshez használatos) pl: ADD, X, Y az ADD utasítás, az X és Y memóriacímek Az Assembly nyelv a gépi kódú programozás után igen nagy előrelépést jelentett, általa sokkal kényelmesebbé vált a programfejlesztési munka. Napjainkra az alacsony szintű programozási nyelvek háttérbe szorultak. Az Assembly-t ma már csak olyan feladatok esetén használják, ahol hardver szintű vezérlést kell megvalósítani. 2. GL (magas szintű nyelvek) A számítógépek alkalmazási területének bővülése szükségessé tette a programok fejlesztési idejének csökkentését, azaz felmerült az igény, hogy a programokat minél gyorsabban írják meg a programozók. A gépi kód és az assembly nehézkessége, géphez odása miatt nem volt erre alkalmas. A generáció jellemzői: A problémához odik, nem a számítógép tulajdonságaihoz. 1:N típusú programozás (1 utasítás több gépi szintű utasítást tartalmaz) Forráskód áttekinthetőbb Nyelvek: FORTRAN Az első magas szintű programnyelv. Több változáson esett átt, de ma is használatos. Főként matematikai és különböző tudományos területen. ALGOL A Pascal nyelv alapja A kutatásban és oktatásban használták. COBOL Több változáson esett átt, de ma is használatos, főként az adatfeldolgozás területén. BASIC Egyszerűsége miatt az oktatásban volt használatos és a kezdő programozók is ezt használták. - 6 -

3. GL A második generáció programozási nyelvei már lényegesen függetlenebbek voltak a gépi logikától, mint az első generációs nyelvek, az elkészített programokat többféle gépen is használni lehetett. Azonban a nyelvek többsége egy-egy problémacsoport megoldására specializálódott, ami a programok fejlesztése, javítása során igen komoly akadályokat jelentett. Ezért: 4. GL Megjelenik a struktúráltság mind módszerek, mind adatok tekintetében. Általános célú nyelvek megjelenése Nyelvek: MODULA-2 Moduláris programozás, feladatok részekre bontása. ADA Főleg rendszerprogramozásra és gazdasági számítások területén. PASCAL Általános célú programozási nyelv C Eredetileg UNIX rendszerprogramozásra találták ki, később elterjedt. Az 1980-as években kezdett széleskörűen elterjedni egy új szemléletű programozási technika, az objektum-orientált programozás, amely az elődeinél egyszerűbbé, hatékonyabbá, biztonságosabbá teszi a programkészítési munkát. Ez a programozási technika sokkal közelebb áll az emberi gondolkodáshoz, mint a procedurális programozás. Tehát jellemzők: Közelítés az emberi gondolkodáshoz Opjektumorientált szemlélet Nyelvek: TURBO PASCAL Pascal nyelv objektum-orientált lehetőségekkel. Borland C++ A C nyelv objektum-orientált lehetőségekkel bővített változata. DELPHI A Turbo Pascal nyelv továbbfejlesztése, vizuális környezet biztosítása. JAVA Általános célú, objektum-orientált nyelv C és C++ alapokon. 5. GL A XX. század második felében a számítástechnika forradalmi változáson ment keresztül. A Neumann elvek megjelenése és az első memóriában tárolt gépi nyelvű program lefuttatása után alig ötven évvel már információs rendszerek, központilag vezérelt számítógép hálózatok programozása, döntéshozást támogató rendszerek fejlesztése a célunk. Nyilvánvaló, hogy ilyen jellegű munkák elvégzésére a hagyományos programozási nyelvek által biztosított eszközök nem megfelelőek. A hardver eszközök rohamos fejlődésére támaszkodva kezdett kialakulni a programozás során egy új szemlélet, mely az eddigi alapelvekkel szöges ellentétben állt. Párhuzamos programozás Hálózatok programozása Ellenőrző kérdések Mit értünk program alatt? Mit értünk programozás alatt? Az első generációs nyelvek megjelenése előtt milyen programozási módszerek léteztek? Hogyan működött a lyukkártya? Miért volt szükség a magasszintű nyelvekre? Sorolja fel a programozási nyelvek generációit, annak jellemzőit? - 7 -

Programnyelvek csoportosítása Ember/gépközeliség szerint Gépi kód Alacsony szintű nyelvek Magasszintű nyelvek Felhasználó szerint Amatőr nyelvek Egyszerűen kezelhető nyelv, amelyben fontos a felhasználóbarát környezet, folyamatos visszajelzés az esetleges hibákról. Professzionális nyelvek Egy profi programnyelv elengedhetetlen kritériuma a hozdozhatóság és megbízhatóság. Működés szerint Neumann-elvű nyelvek A Neumann-elvek egyértelműen fellelhetők a program felépítésében és nyelvezetében. Automata-elvű nyelvek A programnyelv állapotváltozásokat, lekérdezéseket kezel adattárolás nélkül. Logikai nyelvek A nyelvben állítások megadására van lehetőség, amelyből a program kihámozza a lehetséges megoldás(oka)t, illetve a megoldhatatlanságot. Funkcionális nyelvek A program megírása tulajdonképpen egy függvény meghatározása, amely paraméterezhető. Alkalmazás szerint Matematikai számítások Adatfeldolgozás Rendszerprogramozás Szövegfeldolgozás Folyamatvezérlés Szimuláció Oktatás Általános - 8 -

Ellenőrző kérdések Hány féle képpen csoportosíthatjuk a programozási nyelveket? Melyik csoportosítási szemponthoz tartozik a gépi nyelv? Mi jellemzi az amatőr programozási nyelveket? Mi jellemzi a professzionális programozási nyelveket? Működés szerint hány féle programozási nyelvet ismerünk? Mik ezeknek a jellemzői? Sorolja fel az alkalmazás szerinti csoportosításokat! C# programozási nyelv A Microsoft által a.net keretrendszer részeként kifejlesztett objektum-orientált, általános célű programozási nyelv. A nyelv alapjául a C++ és Java szolgált. AC#-ot úgy tervezték, hogy meglegyen az egyensúly a fejlesztő nyelvi szabadsága és a gyors alkalmazásfejlesztés lehetősége között. Ellenőrző kérdések Alkalmazás szerinti csoportosításban hová soroljuk a C# programnyelvet? Milyen programozási nyelvek szolgáltak a C# alapjául? Milyen rendszer részét képezi a C#? - 9 -

Programkészítés lépései 1. Feladat meghatározása A program helyes működéséhez szükséges körülmények megfogalmazása 2. Algoritmuskészítés A feladat lépésenkénti megfogalmazása, ábrázolása 3. Kódolás Az algoritmus adott programozási nyelven történő megvalósítása 4. Tesztelés, hibakeresés, javítás Tesztelés i) Statikus (szg. nélküli algoritmus, ill. forrásellenőrzés) 1. Szemantikai hiba: logikátlan lépések 2. Szintaktikai hiba: nem helyesen lett beírva a programba ii) Dinamikus (lefuttatjuk a programot) Hibák észlelése (mi a hiba?) Nem indul el a program Nem áll le a pr. Megszakad a programfutás Rossz eredményt ír ki Nem ír ki semmit stb. Hibakeresés (hol van a hiba?) Adatfigyelés Töréspontok beállítása Részeredmények kiíratása Lépésenkénti végrehajtás stb. 5. Hatékonyságvizsgálat Szempontok Idő Helyfoglalás Bonyolultság Megközelítés Globális (teljes program vizsgálata) Lokális (részegységek vizsgálata) - 10 -

6. Dokumentálás Felhasználói dokumentáció: a program teljes leírása, használati utasítás Fejlesztői dokumentáció: minden, ami a program elkészítésével kapcsolatos Bemutató, reklám Ellenőrző kérdések Sorolja fel a programkészítés lépéseit! Milyen tesztelési módszereket ismer? Mit jelent a statikus tesztelés? Mit jelent a dinamikus tesztelés? Tesztelés során mik a leggyakoribb hibák? Milyen módszerekkel tudunk programozási hibákat keresni? Milyen szempontokból vizsgálhatjuk egy program hatékonyságát? Egy elkészült programmal kapcsolatban milyen dokumentációkat ismer? Melyek ezek? Mire valók? - 11 -

Feladatmeghatározás, specifikáció 1. Feladat meghatározása Fontos, hogy a feladatot a lehető legpontosabban fogalmazzuk meg 2. Bemenet Kiindulási adatok Bemenő paraméterek Eljárások, függvények Feladat megoldása előtt 3. Előfeltétel Kiindulási körülmények Előírások, megszorítások Specifikáció 4. Kimenet Előállítandó adatok 5. Utófeltétel Helyes működéshez szükséges követelmények Kimenő értékekre vonatkozó elvárások Feladat megoldása után Példák: Feladat: Bemenet: Előfeltétel: Kimenet: Utófeltétel: Valaki nyissa ki az ablakot! ablak, valaki (pl. Géza), ablaknyitó tevékenység csukva legyen az ablak ablak nyitva legyen az ablak Feladat: Bemenet: Előfeltétel: Kimenet: Utófeltétel: Add meg az osztályból a 10. legnagyobb emberkét! osztály, magasságok, kiválasztási módszer legalább 10 fő legyen az osztály, legyenek csökkenő sorba rendezve egy emberke előtte 9 emberke legyen - 12 -

Feladatok Adja meg az alábbi feladatok specifikációját! Valaki adja meg az osztályból magasság szempontjából a középső embert! Kerüljön fel a táblára egy angol szó! Ellenőrző kérdések Mi a specifikáció? Hogyan kell meghatározni egy programozási feladatot? Mi az a bemenet? Mi az a kimenet? Mi az az előfeltétel? Mi az az utófeltétel? Konstansok és változók Egy programozási nyelvben az egyik legfontosabb tulajdonság az, hogy a programkészítés során hogyan és milyen típusú adatokat használunk. Van néhány olyan nyelv, ahol ez nem án fontos (pl. PHP), de a C# szigorúan típusos nyelv, ebben a nyelvben csak ennek figyelembevételével használhatunk saját változókat. Változó: A program futása közben értéke változhat. Definiálása: típus azonosító; Konstans: A program futása közben értéke nem változhat. Definiálása: const típus azonosító = érték; Azonosító: A konstansokat és változókat egyéni azonosítóval kell ellátni, amely: - nem kezdődhet számmal, - nem lehet benne ékezet, - kis/nagybetű jelentőséggel bír, - nem lehet a program által foglalt kulcsszó. Ellenőrző kérdések Mi a konstans? Mi a változó? Mire kell ügyelni egy azonosító megadásánál? - 13 -

Elemi adattípusok Karakter char 1 B UNICODE karakter Speciális karakterek: \a - a 7-es kódú csipogás \b - backspace, előző karakter törlése \f - formfeed, soremelés karakter \r - kocsi vissza karakter \n - új sor karakter (soremelés+kocsi vissza) \t - tabulátor karakter \v - függőleges tabulátor \\ - backslash karakter \' - aposztróf \" - idézőjel \? - kérdőjel Karaktersorozat string Unicode karakterek szekvenciája Műveletek: + összefűzés [] indexelés string függvények Egész byte 1 B Előjel nélküli 0 255 sbyte 1 B Előjeles -128 127 short 2 B Előjeles -32768 32767 ushort 2 B Előjel nélküli 0 65535 int 4 B Előjeles -2147483647 2147483647 uint 4 B Előjel nélküli 0 4294967295 long 8 B Előjeles 64 bites (nagyon hosszú) ulong 8 B Előjel nélküli 64 bites (nagyon hosszú) Ábrázolás: kettős komplemens kódban Műveletek: matematikai műveletek és függvények Valós float 4 B egyszeres pontosságú double 8 B dupla pontosságú decimal 8 B fix pontosságú, 28+1 jegyű szám Ábrázolás: lebegőpontosan - 14 -

Logikai bool 1 B Hamis (0, false) vagy (1, true) Műveletek: logikai műveletek Ellenőrző kérdések Milyen elemi adattípusokat ismerünk? Milyen jelentősége van a \ jelnek? Milyen speciális karaktereket ismerünk? Hogyan ábrázoljuk a karaktereket? Egy logikai típusú változó milyen értékeket vehet fel? Hogyan ábrázoljuk az egész számokat? Hogyan ábrázoljuk a valós számokat? Összetett és egyéb adattípusok Egy dimenziós tömb (vektor) Azonos típusú adatok közös névvel való összekapcsolása. Ábrázolás: Elemek típusától függ tégla[0] tégla[1] Létrehozás: típus[] azonosító; Dinamikus változó, elemszáma változhat. Hivatkozás egy elemre: azonosító[index] tégla[n] - 15 -

Többdimenziós tömb Két dimenziós tömb (mátrix) tégla[0,0] tégla[m,0] tégla[0,n] tégla[m,n] Háromdimenziós tömb tégla[0,0,0] tégla[0,0,k] tégla[0,n,k] tégla[0,n,0] tégla[m,n,0] tégla[m,n,k] Sokdimenziós tömb Ahány dimenziós a tömb, annyi index-szel hivatkozunk egy elemére. Struktúra Összetartozó adatok egy egységként megadva. Egy struktúrában több típusú mezőnév is megadható. Létrehozás: sruct azonosító { típus mezőnév_1; típus mezőnév_2; típus mezőnév_n; függvények; } Hivatkozás egy mezőre: azonosító.mezőnév Felsorolás típus Nem más, mint egész konstansok definiálása. A felsorolás típus alapértelmezésben egész típusú értékeket vesz fel. Nem adhatom meg a valós vagy karakter típust! Létrehozás: enum azonosító {elem_1,, elem_n}; - 16 -

Ellenőrző kérdések Milyen összetett, ill. egyéb adattípusokat ismerünk? Mi a tömb? Mi a vektor? Mi a mátrix? Hogyan hivatkozunk a tömb egy elemére? Miért kell nagyon figyelni az indexekre? Mi az a struktúra? Milyen típus fordulhat elő egy struktúrában? Hogyan hivatkozunk a struktúra egy mezőjére? Mi az a felsorolás típus? Milyen típus nem adható meg a felsorolás típusban? Algoritmus Az algoritmus eredetileg egy matematikai fogalom, de a számítástechnikai kultúra elterjedése átültette a köznyelvbe. A szó eredete a koraközépkori arab matematikáig nyúlik vissza. Muhammad Ibn Músza Al-Hvárizmi csillagász, matematikus, ie. I. századi perzsa tudós nevéből származik, akinek egyik könyvét latinra fordították, és a nevét pontatlanul Algorithmus-nak írták. Algoritmus fogalma Műveletek tartalmát és sorrendjét meghatározó egyértelmű utasításrendszer, amely a megfelelő kiinduló adatokból a kívánt eredményre vezet. Az algoritmus megadása során különböző műveleteket végezhetünk az adatokon, az adatok segítségével. A műveleteket (tevékenységeket) az alábbi módon csoportosíthatjuk: Elemi műveletek Azok a tevékenységek, amelyek nem igényelnek magyarázatot, azonnal végrehajthatók. Ezen műveleteket a végrehajtó (a számítógép) ismeri, és azokat végre tudja hajtani. Összetett műveletek Azok a tevékenységek, amelyek elemi tevékenységekből épülnek föl, tartalmukat mindig megkell magyarázni, maguk is egyszerűbb algoritmusokból épülnek föl. Ezen tevékenységeket a végrehajtó (a számítógép) nem ismeri, azok további magyarázatra várnak, ki kell bontani őket. - 17 -

Tevékenységszerkezetek 1. Szekvencia a szekvenciát alkotó utasítások a megadás (leírás) sorrendjében végrehajtandók utasítás 1 utasítás 2 2. Elágazás két (vagy több) műveletcsoport közül legfeljebb csak az egyiket kell végrehajtani. A döntés mindig valamilyen logikai feltételtől függenek, és annak ismeretében egyértelmű a döntés. 2/1: Egyszerű elágazás (egy utasításblokkból áll) az utasításblokk a feltételtől függően vagy végrehajtásra kerül, vagy nem. HA sötét_van AKKOR kapcsold fel a villanyt HVÉGE 2/2: Összetett elágazás 2/2/a: két utasításblokkból álló összetett elágazás A két utasításblokk közül a feltételtől függően pontosan az egyik utasításblokk hajtódik végre. HA meleg_van AKKOR nyisd_ki_az_ablakot KÜLÖNBEN kapcsold_le_a_kazánt HVÉGE 2/2/b: több utasításblokkból álló összetett elágazás A több utasításblokk közül legfeljebb az egyik kerül végrehajtásra - elképzelhető, hogy egyik feltétel sem teljesül. Ekkor - ha van KÜLÖNBEN ág, akkor az hajtódik végre - ha nincs KÜLÖNBEN ág, akkor egyik blokk sem hajtódik végre - ha több feltétel is teljesül, akkor sorrendben csak az első hajtódik végre ELÁGAZÁS KEZD HA kapható_túró AKKOR süss_túrós_sütit HA kapható_mák AKKOR süss_mákos_sütit HA kapható_dió AKKOR süss_diós_sütit KÜLÖNBEN süss_almás_sütit ELÁGAZÁS VÉGE 3. Ciklus egy feltételtől függően egy adott utasításblokk többszöri ismételt végrehajtását jelenti. Az utasításblokkot ciklusmagnak nevezzük. A feltételt ciklus vezérlő feltételnek. Elöltesztelő ciklusok: a feltétel előbb értékelődik ki, majd megfelelő esetben végrehajtásra kerül a ciklusmag előbb tesztel, aztán ciklusmag. - 18 -

Hátultesztelő ciklusok: a ciklusmag végrehajtódik, majd kiértékelődik a ciklus vezérlő feltétel, és megfelelő esetben újra végrehajtásra kerül a ciklusmag. Fix ismétlésszámú/ számlálós ciklusok: a ciklusmag utasításai a fejrészben megadott számszor hajtódnak végre Strukturált programozás A strukturált programozás olyan algoritmusok készítése, amely csak a fenti három tevékenységszerkezet tartalmazza (szekvencia, szelekció, iteráció). Matematikusok bizonyították, hogy minden algoritmus elkészíthető csak ezen három szerkezet segítségével. Algoritmusleíró eszközök 1.Folyamatábra (rajzos leíró eszköz) A folyamatábrával nem csak strukturált algoritmusok írhatók le. Ahhoz, hogy ellenkezője ne történhessen, az alábbiakra kell ügyelni: - azon feltételes elágazások, melyek nem ciklust jelölnek, a Nem és az Igen ágak egy pontban kell hogy találkozzanak - Nem vezethet be irányított él a ciklusok magjába, sem feltételes elágazások ágainak belsejébe. 2. Struktogramm (rajzos leíró eszköz) Dobozolós módszer. Csak strukturált algoritmusok írhatók le segítségével. 3. Leíró nyelv (pszeudokód) Mondatszerű leíró eszköz, mely nem teljesen szabványosított, de könnyen elsajátítható. Csak strukturált algoritmusok írhatók le vele. - 19 -

Rajzos algoritmus leíró eszközök Folyamatábra (blokkdiagram) jelei START program eleje VÉGE program vége elemi tevékenység adatok ki/be választás csomópont haladási irány Struktogram jelei Az egész algoritmusnak egy nagy téglalapot feleltetünk meg, amelyet tovább osztunk elemi tevékenység, adatok ki/be választás ismétlés - 20 -

Vezérlési szerkezetek Szekvencia blokkdiagram stuktogram utasítás utasítás utasítás utasítás utasítás utasítás Szelekció (elágazás) A leggyakrabban használt elágazás az "if" (ha-különben típusú elágazás): blokkdiagram stuktogram utasítás (i) feltétel utasítás (h) feltétel utasítás (i) utasítás (h) - 21 -

Iteráció (ismétlés) 1. hátultesztelő ciklus Először végrehajtja a ciklusmagban lévő utasításokat, majd megvizsgálja a feltételt (bennmaradási feltétel), és ha ez, akkor újra végrehajtja a ciklustörzset. Vegyük észre, hogy ha ez az első lefutásnál már, attól még a ciklusmag mindenképp lefut egyszer. blokkdiagram stuktogram utasítás utasítás feltétel AMÍG a feltétel 2. elöltesztelő ciklus Először megvizsgálja a feltételt (belépési feltétel), és csak akkor hajtja végre a ciklusmagban lévő utasításokat, ha a feltétel. Vegyük észre, hogy ha kiinduláskor már a belépési feltétel, akkor egyszer sem fut le a ciklustörzs. blokkdiagram stuktogram feltétel utasítás (i) AMÍG a feltétel utasítás 3. számláló ciklus Az elöltesztelős ciklus egy speciális esete, amikor a megadott ciklusváltozó (általában i-nek nevezik) értéke minden lépés után automatikusan nő eggyel, a kezdőértéktől a végértékig. - 22 -

Feladatok 1. Egy szám négyzetének kiszámolása BE: a szám, felhasználó által megadott szám KI: e szám, eredmény EF: -, UF: e>=0 blokkdiagram stuktogram START BE: a e=a*a KI: e START BE: a e=a*a KI: e VÉGE VÉGE - 23 -

2. Két szám összegének, és különbségének kiszámolása BE: a, b szám, felhasználó által megadott számok KI: e1, e2 szám, eredmények EF: -, UF: - blokkdiagram stuktogram START BE: a BE: b e1=a+b e2=a-b KI: e1 START BE: a BE: b e1=a+b e2=a-b KI: e1 KI: e2 VÉGE KI: e2 VÉGE - 24 -

3. A felhasználó által meghatározott művelet (+-*/) elvégzése két szám között BE: a, b szám, felhasználó által megadott számok muv karakter, felhasználó által megadott műveleti jel KI: e eredmény EF: -, UF: - START BE: a BE: b BE: muv START muv= + BE: a c=a+b muv= - BE: b BE: muv c=a-b muv= * c=a*b c=a/b muv= + KI: e VÉGE e=a+b muv= - e=a-b muv= * e=a*b e=a/b KI: e VÉGE - 25 -

4. Egy pozitív és egy negatív szám szorzatának kiszámolása BE: a,b szám, felhasználó által megadott számok KI: e szám, eredmény EF: -, UF: e<0 START BE: a Amíg a=0 a>0 BE: b BE: b Amíg b>0 Amíg b<0 e=a*b KI: e START VÉGE BE: a a=0 a>0 BE: b BE: b b>0 b<0 e=a*b KI: e VÉGE - 26 -

5. A felhasználó által megadott számról a program eldönti, hogy +, -, vagy 0. BE: a szám, felhasználó által megadott szám KI: sz szöveg, eredmény EF: -, UF: - START BE: a a>0 START BE: a sz=a>0 a=0 sz=a=0 sz=a<0 KI: sz VÉGE a>0 sz=a>0 a=0 sz=a=0 sz=a<0 KI: sz VÉGE - 27 -

6. Egy háromszög kerületének kiszámolása BE: a,b,c szám, felhasználó által megadott számok KI: k szám, eredmény EF: UF: - a>b+c, b>a+c, c>a+b START START Amíg a<=0 BE: a BE: a Amíg b<=0 Amíg c<=0 BE: b BE: c a<=0 BE: b a>b+c b<=0 b>a+c c>a+b BE: c Amíg k=a+b+c c<=0 KI: k VÉGE a>b+c b>a+c c>a+b k=a+b+c KI: k VÉGE - 28 -

Pszeudokód Értékadás <változó> = <érték> Szekvencia utasítás(ok); Feltételes utasítás Ha <feltétel> akkor utasítás; Feltétel vége Elágazás Ha <feltétel> akkor utasítás; különben más utasítás; Elágazás vége Esetválasztás (többirányú elágazás) Esetválasztás <változó> <érték 1> esetén utasítás1; <érték 2> esetén utasítás2;... <érték n> esetén utasításn; máskülönben utasításn+1; Esetszétválasztás vége Elöltesztelős ciklus Ciklus amíg <feltétel> ciklustörzs utasításai; Ciklus vége Hátultesztelős ciklus Ciklus ciklustörzs utasításai; Amíg <feltétel> - 29 -

Számlálós ciklus ciklus <változó> = <kezdőérték>-től <végérték>-ig <lépésköz>-zel ciklustörzs utasítása; ciklus vége Függvény Függvény <függvény neve>(<paraméterek>) utasítás(ok); <függvény neve> = <visszatérési érték>; Függvény vége Eljárás Eljárás <eljárás neve>(<paraméterek>) utasítás(ok); Eljárás vége Program Program <program neve> programutasítások; Program vége Példa: két pozitív szám összeadása Be: a,b számok Ki: c szám Ef: a>0, b>0 Uf: - folyamatábra struktogram pszeudokód Start Összead Be: a a<=0 Be: b b<=0 c=a+b Start Összead Amíg a<=0 Amíg b<=0 c=a+b Várakozás Vége Be: a Be: b Program Összead Ciklus Be: a; Amig a<=0 Ciklus Be: b; Amíg b<=0 c=a+b; Ki: c; Várakozás; Program vége c=a+b Vége - 30 -

Irodalomjegyzék Fábián Zoltán: Adatszerkezetek és Programozási tételek Budapest, 2005-01-27 Illés Zoltán: Programozás C# nyelven Budapest, 2005. JOS Fábián Zoltán: Adatszerkezetek és Programozási tételek (2. bővített kiadás) Budapest, 2007 április Nagy Gergely: C# szemelvények 2008. augusztus 6. Reiter István: C# jegyzet devportal Adrian Kingsley-Hughes Kathie Kingsley-Hughes: Kezdőkönyv a programozásról SZAK Kiadó Kft. 2006. - 31 -