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

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

Hasonló előadás


Az előadások a következő témára: "Programozás I. Típus algoritmusok Rendszer és Szoftvertechnológia Tanszék."— Előadás másolata:

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

2 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

3 Összegzés 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

4 Összegzés 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

5 Összegzés 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

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

7 Ö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

8 Szorzat előállítás: 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

9 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 13)); for (i=1; i<=n; i++) { fakt = fakt * i; printf ("\nAz %3d faktoriális értéke: %10ld",i,fakt); } //for } // program vége

10 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

11 Eldöntés 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.

12 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 (); }

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

14 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 !

15 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

16 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

17 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.

18 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 != '*');

19 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

20 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.

21 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

22 Maximum kiválasztás 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.

23 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);

24 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; imax) max = szam; if (szam

25 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 …

26 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.

27 7/5. feladat Készítsen programot, amely egész számokat kér be addig, amíg a szorzatuk már meghaladja az 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);

28 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.

29 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++; elozoszam=szam; }

30 <>.

31 .

32 .

33 .

34 .

35 .

36 .

37 .


Letölteni ppt "Programozás I. Típus algoritmusok Rendszer és Szoftvertechnológia Tanszék."

Hasonló előadás


Google Hirdetések