Programozás I. Típus algoritmusok

Slides:



Advertisements
Hasonló előadás
Eljaras linearis_kereses(adatok[],n)
Advertisements

Algoritmusok.
Megszámlálás Elemi algoritmusok.
Elemi algoritmusok Páll Boglárka.
Sorozatszámítás Sorozatszámítás (N,A,s) s := kezdőérték
Programozási tételek, és „négyzetes” rendezések
Matematika és Tánc Felkészítő tanár: Komáromi Annamária
Programozási alapismeretek
LFüggvények Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 20./0. lFüggvények deklarációja és prototípusa lA függvénydefiníció lHivatkozás.
LRendezés minimális elem kiválasztással Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 19./0. lAz algoritmus működése lRávezető feladat.
Programozási alapismeretek 5. előadás. ELTE Szlávi - Zsakó: Programozási alapismeretek 5.2/  Programozási tételek.
INFOÉRA Kombinatorikai algoritmusok (Horváth Gyula és Szlávi Péter előadásai felhasználásával) Juhász István-Zsakó László: Informatikai.
Programozási alapismeretek
Programozási alapismeretek 10. előadás
Programozási alapismeretek 5. előadás. ELTE 2/  Programozási tételek – a lényeglényeg  Sorozatszámítás Sorozatszámítás.
Programozási alapismeretek 8. előadás. ELTE 2/  További programozási tételek További programozási tételek 
Programozási alapismeretek 12. előadás. ELTE  Tapasztalatok a rendezésről Tapasztalatok a rendezésről  Keresés rendezett sorozatban Keresés rendezett.
Sztringek.
Csoportosítás megadása: Δx – csoport szélesség
C A C nyelv utasításai.
Borland C/C++ mintapéldák
Borland C/C++ mintapéldák tömbökre
Borland C/C++ mintapéldák függvényekre. 1. példa Írjunk olyan függvényt amely egy számot kiirat.
Egydimenziós tömbök. Deklarálás: var valtozónév:array[kezdőérték..végsőérték]of típus; type típusnév = array [kezdőérték..végsőérték] of típus; var valtozónév:
Gombkötő Attila Lineáris egyenlet.
Készítette: Pető László
Programozás I. Horváth Ernő 1. Elérhetőségek Bauer Péter Horváth Ernő Tanszéki honlap
Programozás I. Horváth Ernő 1. Elérhetőségek Bauer Péter Horváth Ernő Tanszéki honlap
Programozás I. Horváth Ernő.
Utasítások, elágazás- és ciklusszervezés C nyelvi utasítások
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.1/ Összegzés mátrixra Feladat: Egy mátrix elemeinek összege.
Programozás I. Ciklusok
Programozás I Függvények általános jellemzői
Programozás I. Adatállományok dr Póder Margit f. docens Rendszer és Szoftvertechnológia Tanszék.
További vektor, mátrix algoritmusok
Egydimenziós tömbökön végezhető műveletek
Elemi algoritmusok Páll Boglárka.
Tömbök és programozási tételek
Összetett adattípusok
1 AAO folytatás ++ Csink László. 2 Rekurzív bináris keresés (rendezett tömbben) public static int binker(int[] tomb, int value, int low, int high) public.
Nevezetes algoritmusok
Java programozási nyelv Adatbekérés konzolról
Programozási tételek.
Programozási tételek.
Az algoritmuskészítés alapjai
Algoritmizálás, adatmodellezés tanítása 2. előadás.
A hőmérsékletváltozás és globális felmelegedésről szóló esszé készitésének folyamatai.
Feladatok (értékadás)
Programozási alapismeretek * A Zh-írás módszertana.
Programozási alapismeretek 8. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 8.2/  További programozási.
Programozási alapismeretek 10. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 10.2/  Kiválogatás + összegzés.
© Tóth Ákos, Óbudai Egyetem, 2010
C++2. Ciklusok elöltesztelő (for, while) A ciklusmag feldolgozása előtt történik a vizsgálat  lehet, hogy egyszer sem fut le. A soronkövetkező iteráció.
Programtervezés, programozás I. 2.5 tömbök,stringek
TÁMOP /1-2F Felkészítés szakmai vizsgára, informatika területre modulhoz II/14. évfolyam Az interaktív vizsga jellegzetes feladattípusainak.
Programozási alapismeretek 4. előadás. ELTE  Programozási tételek – a lényeglényeg  Sorozatszámítás – összegzés… Sorozatszámítás  Megszámolás.
Hatékony-e a rekurzió? FÉLEGYHÁZI TAMÁS GÁBOR 1 Kovács Magda-díj pályázat 2015/16.
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Alapvető programozási tételek megvalósítása Czigléczky Gábor 2009.
Algoritmus Algoritmus Az algoritmus szó eredete a középkori arab matematikáig nyúlik vissza, egy a i.sz. IX. században élt perzsa tudós nevének pontatlan.
Programozási alapismeretek
Nevezetes algoritmusok
Tömbök és programozási tételek
Programozási tételek Mik is ezek?
Halmazműveletek.
Eljaras linearis_kereses(adatok[],n)
Informatikai gyakorlatok 11. évfolyam
A struct, az union és az enum típus
Programozási tételek.
Programozási tételek.
Előadás másolata:

Programozás I. Típus algoritmusok Rendszer és Szoftvertechnológia Tanszék

2.4. Típusalgoritmusok Az általunk vizsgált feladat-típusok: összegzés :a sorozat elemeinek összege, szorzata, stb. eldöntés: van-e a vizsgált sorozatban adott tulajdonságú elem kiválasztás: a vizsgált sorozat egy adott tulajdonságú elemének kikeresése megszámolás: adott tulajdonságú elemek keresése a sorozatban maximum (minimum) kiválasztás: a sorozat maximális, vagy minimális elemének a meghatározása. kiválogatás: a sorozat adott tulajdonságú elemeinek a megadása

Összegzés 2.4.1. Összegzés osszeg=0 ciklus i= 1 –től n-ig 1-esével Alap algoritmus: Összegzés osszeg=0 ciklus i= 1 –től n-ig 1-esével Be: szam osszeg=osszeg+szam ciklus vége Ki:osszeg

Átlag számítás 2.4.1. Összegzés atlag=0 ciklus i= 1 –től n-ig 1-esével Alap algoritmus: Átlag számítás atlag=0 ciklus i= 1 –től n-ig 1-esével Be: szam atlag=atlag+szam ciklus vége Ki: atlag/n

Szorzat számítás 2.4.1. Összegzés szorzat=1 Alap algoritmus: Szorzat számítás szorzat=1 ciklus i= 1 –től n-ig 1-esével Be: szam szorzat = szorzat * szam ciklus vége Ki: szorzat

2.4.1. Összegzés 2.4.1.1. feladat Készítsen programot, amely bekéri egy csoport zh-eredményeit, majd kiszámítja a csoport átlagát.

2.4.1. Összegzés //zh eredmények átlaga void main (void) { int letszam, i, pontszam; float atlag = 0; do printf ("\nA csoportlétszám:"); scanf ("%d", &letszam); } //do while (letszam < 1); for (i=1; i<=letszam; i++) printf ("\nKérem a pontszámot: ");scanf ("%d", &pontszam); atlag = atlag + pontszam; } //for i atlag = atlag / letszam; printf ("\nA csoport átlaga: %6.2f", atlag); } // program vége

Szorzat előállítás: 2.4.1.2. feladat Készítsen programot, amely kiszámítja az n! értékét megadott n esetén. Megoldás: Elemezzük a feladatot: n! = 1 * 2 * ... * (n-1) * n

void main (void) //Típusalgoritmusok: összegzés (szorzat, faktoriális előállítása) { int i,n; unsigned long fakt= 1; do printf ("\nAz n! számításhoz adja meg n értékét:"); scanf ("%d", &n); fflush (stdin); } // do while ((n < 0) || (n > 13)); for (i=1; i<=n; i++) fakt = fakt * i; printf ("\nAz %3d faktoriális értéke: %10ld",i,fakt); } //for } // program vége

2.4.2. Eldöntés Alap algoritmus: van=HAMIS ciklus i=1 –től n-ig 1-esével Be: változó Ha változó ”T” tulajdonságú akkor van=IGAZ ciklus vége Ki:van

2.4.2. Eldöntés 2.4.2.1. feladat Csillag (*) végjelig olvasson be karaktereket és állapítsa meg, hogy volt-e a bevitt karakterek között számjegy karakter. Megoldás: Elemezzük a feladatot: Ha a char típusú változóban tároljuk az éppen bevitt karaktert, ezt össze lehet hasonlítani a '0', '1', ... '9' karakter konstansokkal. Ha a ch >= '0' && ch <= '9' reláció teljesül, akkor ch valamelyik számjegyet tartalmazza.

void main (void) //(van-e számjegy a bevitt karakterek között) { int vanszamjegy = 0; //alapértelmezés:nincs számjegy char ch; printf ("\nKérek egy karakter-sorozatot '*' végjelig:\n"); do ch = getche (); //az éppen leütött karakter kerül ch-ba if (ch>='0' && ch<='9') vanszamjegy = 1; } //do while (ch != '*'); //* végjelig tart a beolvasás if (vanszamjegy) printf ("\nKaptam számjegyet"); else printf ("\nNem kaptam egyetlen számjegyet sem"); getch (); }

2.4.3. Kiválasztás Alap algoritmus: sorszam=0 Be: valtozo ciklus amíg valtozo nem T tulajdonságú sorszam=sorszam+1 ciklus vége Ki: sorszam

2.4.3. Kiválasztás Állítsunk elő 200 db 0 és 99 közötti véletlen számot, és mondjuk meg, hogy hányadik volt az első 25-ös szám. Megoldás: Elemezzük a feladatot: Mind a 200 db véletlen számot elő kell állítani, ezek között többször is előfordulhat a 25-ös szám, de nekünk az első előfordulás sorszámát kell megadnunk !

void main (void) //Típusalgoritmusok: kiválasztás (van-e 25-ös szám a sorozatban) { int szam, i, sorszam = 0; randomize (); printf ("\nA sorozat elemei: "); for (i=1; i <= 200; i++) szam = random (100); printf ("%3d",szam); if (szam == 25 && sorszam == 0) sorszam = i; } //for i if (sorszam) printf ("\nAz első 25-ös a %4d. a sorozatban",sorszam); getch (); } // program vége

2.4.5. Megszámolás Alap algoritmus: db=0; ciklus i=1-től n-ig 1 –esével Be: valtozo Ha valtozo T tulajdonságú akkor db=db+1 elágazás vége ciklus vége Ki:db

2.4.5. Megszámolás Olvassunk be tetszőleges szöveget * karakter végjelig és számoljuk meg, hogy mennyi kisbetűs rövid magánhangzót tartalmazott. Adjuk meg azt is, hogy a végjel * karaktert nem számítva összesen mennyi karaktert olvastunk be. Megoldás: Elemezzük a feladatot: Egyenként kell vizsgálni a beérkező karaktereket, ezért a C++ programban a getche függvényt használjuk karakter beolvasásra, mivel az közvetlenül a billentyűzetről olvas, nem kell megvárni az ENTER leütését.

void main (void) { int osszdb = 0, mghdb = 0; char ch; printf("\nTetszőleges szöveg * végjellel lezárva:\n"); do ch = getche (); osszdb++; switch (ch) case 'a': case 'e': case 'i': case 'o': case 'ö': case 'u': case 'ü': mghdb++; } //switch } //do while (ch != '*');

printf ("\nÖsszesen %3d db karakter érkezett,",osszdb-1); printf ("\nEbből %3d db volt a kisbetűs rövid",mghdb); printf ("magánhangzó "); getch (); } // program vége

2.4.6. Maximum kiválasztás Adott egy sorozat. A feladat ezen sorozat legnagyobb értékű elemének a meghatározása: az elem sorszáma és az értéke (a maximum) megadása. Hasonló a feladat (csupán a relációjelet kell megváltoztatni) a minimum-kiválasztás esetén is. A megoldás során egyenként vizsgáljuk a sorozat elemeit, s egy segédváltozóban tároljuk az addig átvizsgált elemek közül a legnagyobbat (legkisebbet). A maximális (minimális) elem sorszámát egy másik segédváltozóban tároljuk.

2.4.6. Maximum kiválasztás Alap algoritmus index=0 max_ertek = -végtelen ciklus i=1-től n-ig 1-esével Be: valtozo Ha valtozo>max_ertek akkor max_ertek=valtozo index=i Elágazás vége ciklus vége ki:index,max_ertek

2.4.6. Maximum kiválasztás 2.4.6.1. feladat : Készítsen programot, amelynek segítségével kiválasztjuk a legmagasabb hallgatót a csoportból. Megoldás: Elemezzük a feladatot: A magasságot mutató mérőszámokat a billentyűzetről fogjuk beolvasni 0 végjelig. A magasság mérőszámait egész típusúként ábrázolhatjuk. Biztosan lesz, aki negatív értéket is megad a magasság helyett. Védjük ezt ki úgy, hogy a negatív adat estén a vizsgálatokat nem végezzük el.

7/1. feladat Készítsen programot, amelyben -1 végjelig bekér egész számokat, Kiszámítja majd kiírja a 7-tel osztható számok átlagát 3 tizedesjegy pontossággal. int szam, db=0; float atlag=0; do { printf (”\nA következő szám:”);scanf (”%d”,&szam); if (szam%7==0) { atlag = atlag + szam; db++; } } while (szam != -1); If (db!=0) atlag=atlag/db; printf (”\nAz átlag: %8.3f”,atlag);

7/2. feladat Készítsen programot, amely bekér n darab valós számot, megvizsgálja azokat, majd a végén kiírja a legkisebb és a legnagyobb szám értékét 2 tizedesjegy pontossággal.. int i,n; float szam, min, max; printf ( ”\nHány szám lesz:”); scanf (”%d”,&n); printf (”\nKérem a számokat:”); for (i=1; i<n; i++) { scanf (”%f”, &szam); if (i==1) {max=szam; min=szam; } else { if (szam>max) max = szam; if (szam <min) min = szam; } }

7/3. feladat Készítsen programot, amely 1000 db 10 és 100 közötti egész számot generál, közben megszámolja, hogy hányszor fordult elő a 25-ös szám. int i, szam, db=0; randomize(); for (i=1; i<1000;i++) { szam=10+random (91); if (szam==25) db++; } printf …

7/4. feladat Készítsen programot, amely bekéri egy iskolás csoport létszámát és a testmagasság adatokat, közben kiszámolja az átlagot és megadja, hogy hányadik adat volt a legnagyobb.

7/5. feladat Készítsen programot, amely egész számokat kér be addig, amíg a szorzatuk már meghaladja az 50 000-es értéket. Írja ki, hogy hány adatot olvasott be ! int szam, db; long szorzat = 1; printf (”\nKérek egész számokat:”); do { scanf (”%d”,&szam); szorzat=szorzat * szam; } while (szorzat <50000); printf (”\nA szorzatuk: % ld”, szorzat);

7/6. feladat Készítsen programot, amely 50 és 500 közötti egész számokat generál véletlenszerűen. Közben kiírja a 13-mal osztható számokat és végül kiírja, hogy belőlük hány darab volt.

7/7. feladat Készítsen programot, amely tetszőleges számokat kér be 0 végjelig. Megszámolja és kiírja, hogy hányszor fordult elő, hogy az éppen beolvasott szám nagyobb volt, mint amit közvetlenül előtte adtunk meg. int db=0; float szam, elozoszam; printf (”\nKérek tetsz.számokat:”); scanf (”%f”,&szam); elozoszam=szam; while (szam !=0) { scanf (”%f”,&szam); if (szam>elozoszam) db++; }

<> .

<> .

<> .

<> .

<> .

<> .

<> .

<> .