ELMÉLET I. Algoritmizálás A program valamilyen feladat, probléma megoldására készül, általános szerkezete: Ismert adatok
Keresett (kezdetben ismeretlen) adatok
INPUT
ALGORITMUS
OTUPUT
adatbeolvasás
feldolgozás
Ismert adatok
Más szavakkal:
eredmény megjelenítése
Algoritmus: azon utasítások halmaza, mely egy feladat megoldására vezetnek. Az algoritmussal szemben támasztott követelmények:
mindig végrehajtható lépésenként hajtható végre a lépések sorrendje meghatározott az egyes lépések elemi utasítások vagy elemi utasításokból álló eljárások véges sok lépésből áll a leírás
Az algoritmus leíró eszközök: 1. mondatszerű leírás (pszeudokód) 2. ábrákkal 2.1. folyamatábra 2.2. struktogram stb. 3. programnyelven program Algoritmus vezérlő szerkezetek: 1. SZEKVENCIA (utasítások egymás utáni végrehajtása feltétel nélkül) 2. SZELEKCIÓ = ELÁGAZÁS (utasítások feltételtől függő végrehajtása) 2.1. egyágú 2.2. kétágú 2.3. többágú 3. ITERÁCIÓ=CIKLUS (utasítások ismételt végrehajtása) 3.1. számlálós 3.2. feltételes 3.2.1. elöltesztelő 3.2.2. hátultesztelő Strukturált program: olyan program, amely felépítésében csak az előbbi három vezérlőszerkezetet (szekvencia, szelekció, iteráció) használja. Programozás alaptétele: minden algoritmus megvalósítható strukturáltan. (Böhm-Jacopini - tétel)
Folyamatábra: A folyamatábra elemei: 1)
A program kezdete és vége: Start
Stop
2)
Input, output:
Ki/Be:
3)
Utasítás:
utasítás
4)
Elágazás:
i
5)
feltétel
Számlálós ciklus: i=1 –től n-ig
h
6)
Feltételes ciklus – elöltesztelő, bennmaradási feltétellel:
feltétel
h
i utasítás
7)
Feltételes ciklus – hátultesztelő, kilépési feltétellel
utasítás
h
feltétel
i
II. Programozási nyelvek Kódolás: a feladatot megoldó algoritmus megírása valamely programozási nyelven Gépi kód (tárgykód = object code): (valamely típusú) processzor számára közvetlenül értelmezhető , bináris utasítássorozat. Assembly: a gépi kódhoz legközelebb álló programozási nyelv, amelyben minden gépi kódú utasításnak egy kis angol neve van, az ún. mnemonikon. Forráskód (source code): valamely programozási nyelven (nem gépi kódban) megírt állomány. Alacsony szintű programozási nyelv: a gépi kód és az assembly. Magas szintű programozási nyelvek: az emberi nyelvhez (általában az angol nyelvhez) közel álló, gépfüggetlen programozási nyelvek. (Első példánya a FORTRAN, melyet az IBM dolgozott ki és 1957-ben jelent meg.) Példák: BASIC, Turbo Pascal, C, Java, C# A C# nyelv: 2001-ben jelent meg, tiszta objektumorientált nyelv. A Microsoft fejlesztette a .NET keretrendszer részeként, alapja a C++ és a Java nyelvek. (A nyelv fejlesztését Anders Hejlsberg vezette, aki a Turbo Pascal tervezője volt.)
Fordító (compiler): olyan segédprogram, amely a program forrásszövegéből egy gépi kódú, futtatható programot (pl. EXE) állít elő, vagyis a programot lefordítja a gép nyelvére. Értelmező (interpreter): olyan segédprogram, amely a program forrásszövegét sorról sorra értelmezi, ellenőrzi, és (ha tudja) végrehajtja Szintaktikai hiba: alaki hiba, a program nem felel meg az adott nyelv szabályainak. Pl. elírás, elfelejtettünk egy zárójelet... Az ilyen hibákat viszonylag könnyű megtalálni, maga a fordító program jelzi a hibák létét, gyakran a mibenlétét is, és csak szintaktikailag hibátlan forráskódból állítja elő a gépi kódot. Szemantikai hiba: tartalmi, logikai hiba, amit leggyakrabban már az algoritmus tervezésekor vétünk el. A program lefordítható, futtatható, de nem jól működik. Az ilyen hibák bárhol megbújhatnak a programban, felderítésüket az ún. debuggolás (lépésenkénti nyomkövetés) segíti. Integrált fejlesztő eszközök: olyan programfejlesztő környezetek, amelyek megkönnyítik a programozásnál megszokott szerkesztés-fordítás-hibakeresés munkaciklust: a szövegszerkesztő (editor), fordító (compiler), és hibakereső (debugger) egy helyen találhatók és jól együttműködnek.
III. Nyelvi elemek: Változó: olyan azonosító, amely az információ ideiglenes tárolására szolgál. A program végrehajtásakor az adatokat változókban tároljuk. A változókban tárolt adatok a program futása során változhatnak, módosulhatnak. Változó nevek: a változóknak egyedi névvel kell rendelkezniük az érvényességi körükön belül. C# változó nevek szabályai:
max 32 karakter hosszú az 1. karakter betű vagy alulvonás a 2. karaktertől számok, betűk és alulvonás szerepelhet kis és nagybetűket megkülönbözteti
Változó deklaráció: a változó használata előtt rögzíteni kell a nevét és általában a típusát is meg kell adni.
Típusok: a típus határozza meg, hogy egy változó milyen értékeket vehet fel, mekkora helyet foglalhat el a memóriában, és milyen műveletek végezhetők vele. Inicializálás: kezdeti érték hozzárendelése egy változóhoz. A változó deklarálás formája C#-ban: típus változónév; több azonos típusú változó deklarálása: típus változónév1, változónév2, …; deklarálás inicializálással: típus változónév=érték; több azonos típusú változó deklarálása inicializálással: típus változónév1=érték1, változónév2=érték2, …; Elemi típusok a C#-ban: 1. KARAKTER TÍPUSOK
2. EGÉSZ TÍPUSOK
3. LEBEGŐPONTOS TÍPUSOK 4. LOGIKAI TÍPUS bool
1.1 char 1.2 string
2.1 előjeles 2.1.1 sbyte 2.1.2 short 2.1.3 int 2.1.4 long 2.2 előjel nélküli 2.2.1 byte 2.2.2 ushort 2.2.3 uint 2.2.4 ulong 3.1 float 3.2 double 3.3 decimal
FELADATOK Algoritmuskészítés Programkészítés lépései, szekvencia, szelekció, iteráció fogalma Algoritmus leíró eszközök: folyamatábra, mondatszerű leírás, programnyelv 1. Mit csinál az algoritmus? Változók n,x,db1,db2:egész Algoritmus Beolvas(n) db1:=0 db2:=0 Ciklus i:=1-től n-ig Beolvas(x) Ha (x maradék 2)=0 akkor db1:=db1+x különben db2:=db2+x Elágazás vége Ciklus vége Kiír(db1) Kiír(db2) Algoritmus vége 2. Készítsd el az előző algoritmus folyamatábráját! 3. Az iskolai könyvtárban két héten keresztül feljegyezték hány tanuló látogatta a könyvtárat. Írj algoritmust, amely beolvassa minden nap a látogatók számát, majd kiírja hány olyan nap volt, amikor 200-nál több látogatója volt a könyvtárnak 4. Írd le az alábbi algoritmust folyamatábrával! Be: a, b Ha a=0 vagy b=0 akkor Ki: "Rossz adatok" Különben Kerület=2*(a+b) Ki: Kerület Elágazás vége
5. Mit csinál az algoritmus? Fogalmazd meg pár mondatban és írd meg szöveges algoritmussal!
6. Mit csinál az algoritmus? Írd meg szöveges algoritmussal! Mit írna ki a következő bemenetre: Db=8 és a 8 szám: 4, 9, -3, 5, -7, -10, 11, 3
C# program felépítése, program részei, egyszerű utasítások, elágazások, ciklusok, véletlen szám generálás 7. Kódold C#-ban az alábbi algoritmust! Változók: n: egész i: egész d: egész s:egész Program eleje: Be(n) d=0 s=0 i=1 Ciklus amíg i<=n Ha n osztható i-vel akkor d=d+1 s=s+i Ki(i) Ki(szóköz) Elágazás vége i=i+1 Ciklus vége Ki(d) Ki(új_sor) Ki(s) Program vége 8. Kódold C#-ban az alábbi algoritmust! Változók: V:logikai i:egész j:egész Program eleje V := igaz Ciklus i:=1-től 8-ig 1-esével Ha i páratlan szám akkor V:= igaz különben V:= hamis elágazás vége Ciklus j:=1-től 8–ig 1–esével Ha V akkor KI(„A”) különben KI(„B”) elágazás vége V := NEM(V) Ciklus vége KI(új_sor) Ciklus vége Program vége
9. Kódold C#-ban az alábbi algoritmust! Konstans n=10 Változók A[n] : egész elemű vektor B[n]: egész elemű vektor i,j,k: egész Program eleje: Ciklus i=0-tól n–1-ig A[i]=véletlenszám(1..100) B[i]=véletlenszám(1..100) Ki(A[i]) Ki(szóköz) Ki(B[i]) Ki(új_sor) Ciklus vége j=0 k=0 Ciklus amíg j
14. Készíts programot, amely bekéri, milyen hónap van, majd kiírja, hogy ez a hónap milyen évszakba tartozik! 15. Írj programot az összeadás és a kivonás gyakoroltatására. A program billentyűzetről olvassa be, hogy hány feladatot kell megoldani. Egy feladat a következőkből áll: a program generáljon két véletlen számot egy és száz között, olvassa be billentyűzetről a két szám összegét és különbségét. Ellenőrizni kell, hogy valóban ez e két szám összege és különbsége. Minden feladat végén írja ki a képernyőre, hogy jók vagy rosszak az eredmények. 16. Írj programot, ami bekéri egy gyerekcsoport életkorát, majd meghatározza, hogy a gyereknek milyen iskolába kell járni! A program billentyűzetről olvassa be, hogy hány fős a csoport, azután olvassa be a gyerekek életkorát, majd írja ki a megfelelő iskolát! Csoportok: 3 – 6: óvoda 7 – 14: általános iskola 15 – 18: középiskola Hány év a csoport átlaga?
Szövegkezelés 17. Írj programot, ami bekéri a felhasználó vezetéknevét és keresztnevét, majd ezeket egy változóban tárolja és kiírja a képernyőre. 18. Programunk kérje be egy ember lakhelyének irányítószámát, a várost, a közterület nevét, a közterület jellegét, a házszámot és végül írja ki egy sorban a következő formátumban: Pl.: 1042 Budapest Tanoda tér 2. 19. Olvassunk be két vezeték- és két keresztnevet, és írassuk ki az ezekből képezhető neveket! 20. Írj programot, amely megszámolja, hogy egy képernyőről beolvasott szövegben hány kérdő vagy felkiáltó mondat van. 21. Írj programot, amely beolvas egy szöveget, majd a szöveg minden "a" betűjét *-ra cseréli! Tömbök, Programozási tételek Tömbök létrehozása, feltöltése, kiírása, műveletek, konstans tömbök Programozási tételek: Összegzés, Megszámlálás, Minimum kiválasztás, Maximum kiválasztás, Eldöntés tétele 22. Egy héten keresztül minden nap délben megmértük a hőmérsékletet az udvaron. Készítsen programot, amely a mért értékeket beolvassa és tárolja a hom tömbben! A hom tömbben tárolt értékek alapján határozza meg, és írassa ki a képernyőre a heti Hőingadozás mértékét! (A hőingadozás a mért legnagyobb és legkisebb érték különbsége.) 23. Egy tömbben tároljuk egy szerverre való bejelentkezéseket. Készítsen programot, amelyben beolvassuk 14 nap bejelentkezéseinek számát. Mennyi bejelentkezés volt összesen? 24. Felmérést végeznek egy könyves boltba, hogy melyik könyvek fogynak a legjobban. Vedd fel konstans tömbbe a 10 legkelendőbb könyv címét, majd egy másik tömbbe olvasd be, hogy mennyit adtak el eddig belőle. a) Negatív számot ne lehessen felvenni! b) Add meg az eladott példányszámok összegét, maximumát és minimumát! c) Írd ki a képernyőre annak a könyvnek a címét, amiből a legtöbbet adták el!
25. Egy osztályba csupa különböző nevű ember jár. Készítsen programot, amely konstans tömbben tárolja a matematika szakkörre jelentkezők nevét, egy másik tömbbe beolvassa a félévi matematika jegyeiket! Hány ötös tanuló van közöttük? 26. Egy diákcsoportot megkérdeztek, hogy eddig hány könyvet olvastak. Készíts programot, mely beolvassa hány diákot kérdeztek meg, majd diákonként a könyvek számát. Figyelj arra, hogy negatív számot ne lehessen felvenni. a) Add meg hány olyan diák volt, aki háromnál kevesebb könyvet olvasott! b) Add meg a legnagyobb könyvszámot! 27. Egy moziban minden nap eltárolják, hogy aznap mennyi jegyet adtak el. Készíts programot, mely beolvassa hány napot tárolnak, majd naponként az eladott jegyek számát. Figyelj arra, hogy negatív számot ne lehessen felvenni. a) Add meg mennyi a bevételük az adott időszakban, ha egy jegy 1500 Ft-ba kerül! b) Add meg a napi legkisebb jegyszámot! 28. Egy biztosítási ügynök mindennap feljegyzi, hogy hány biztosítást kötött. Készíts programot, mely beolvassa hány napot jegyez fel, majd naponként a megkötött biztosítások számát. Figyelj arra, hogy negatív számot ne lehessen felvenni. a) Add meg, hogy összesen és átlagosan hány biztosítást kötött! b) Add meg a napi legkevesebb és legtöbb biztosítás számot! 29. Egy madármegfigyelő állomáson a vonuló gólyákat tanulmányozzák. Tíz napon keresztül rögzítik az állomás fölött elvonuló gólyák számát. Negatív számot ne lehessen felvenni. a) Add meg összesen hány gólyát jegyeztek fel. b) Add meg átlagosan hány gólyát jegyeztek fel! c) Melyik nap vonult át a legtöbb gólya, és mennyi? d) Hány olyan nap volt, amikor egy gólyát sem láttak? e) Volt-e olyan nap, amikor száznál több gólyát láttak? 30. Egy diákcsoportot megkérdeznek, hogy átlagosan naponta hány órát interneteznek. A nev tömbben tárolják a diák nevét, az ido tömbben az óraszámot. Az ido tömbbe negatív számot ne lehessen felvenni. a) Add meg átlagosan hány órát interneteznek! b) Add meg a legmagasabb óraszámot! c) Kik azok akik a legtöbbet interneteznek? Add meg a nevüket! d) Hány diák internetezik két óránál többet? e) Van-e olyan diák, aki egy órát sem internetezik?
Budapest, 2013. június 28.