Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
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 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
4
Á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
5
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
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
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
8
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
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 < 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
10
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
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
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
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
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
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
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
22
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.
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; i<n; i++) { scanf (”%f”, &szam); if (i==1) {max=szam; min=szam; } else { if (szam>max) max = szam; if (szam <min) min = 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++; }
30
<> .
31
<> .
32
<> .
33
<> .
34
<> .
35
<> .
36
<> .
37
<> .
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.