tanszek:oktatas:szamitastechnika:tovabbi_algoritmusok_ii
1. pelda
Osztalyzat meghatarozasa pontszambol (if-else, switch, for, vektor):
#include <stdio.h> float pontszam[30]; // a hallgatok elert pontszamai int osztalyzat[30]; //index 0-29 kozott lehet main() { int i, letszam, szumma; printf(" Osztalyzatmeghatarozas az elert pontszam alapjan"); printf("\n es osztalyatlag szamitasa.\n\n"); printf("Az osztalyletszam="); scanf("%d",&letszam); // Elert pontszamok bekerese: for ( i = 0; i<letszam; i++ ) { printf("\nAz %d. tanulo pontszama=", i+1); scanf("%f",&pontszam[i]); } // Osztalyzatok szamitasa: for ( i = 0 ; i<letszam; i++) { // ez a kapcsos blokkzarojel-par elmaradhatna most if ( pontszam[i] >= 90 ) osztalyzat[i] = 5; else if (pontszam[i] >= 77 ) osztalyzat[i] = 4; else if (pontszam[i] >= 67 ) osztalyzat[i] = 3; else if (pontszam[i] >= 51 ) osztalyzat[i] = 2; else osztalyzat[i] = 1; } // Osztalyzatok kiiratasa es az atlagszamitas elokeszitese: for ( i = 0, szumma = 0; i<letszam; i++ ) { printf("\nA %d. hallgato osztalyzata= ", i+1); switch (osztalyzat[i]) { case 1: printf("elegtelen"); break; case 2: printf("elegseges"); break; case 3: printf("kozepes"); break; case 4: printf("jo"); break; case 5: printf("jeles"); break; } szumma += osztalyzat[i]; // szumma = szumma + osztalyzat[i]; } // Az atlag kiszamitasa kiiratas kozben: (double) nelkul egeszosztas lenne printf("\n\nAz osztalyatlag= %5.2lf", szumma / (double)letszam ); }
2. példa
“Indul a gorog aludni”, szovegforditos jatek: karaktervektor, while.
#include <stdio.h> main() { char mondat[80]; char forditott[80]; int i, hossz; printf("Mondatfordito jatek\n\n"); printf("Add meg a mondatot:\n"); gets(mondat); // mondat maga egy cim, egy konstans mutatoertek // scanf-fel csak szokoz nelkuli szoveget tudnank bevenni // Biztos, ami biztos, feltoltjuk \0 karakterekkel a forditott vektort: for ( i = 0; i<80 ; i++ ) { forditott[i] = '\0'; } // Megallapitjuk a mondat hosszat (mert meg nem ismerjuk az strlen() fv-t, // es hogy gyakoroljuk a while utasitast is: hossz = 0; while ( mondat[hossz] != '\0' ) // vagy egyszeruen (mondat[hossz]) { hossz++; } // Mondatforditas, ugyelve a mondatzaro \0 karakterre: for ( i = 0; i < hossz; i++) { forditott[i] = mondat[hossz-i-1]; // (hossz-1) az utolso betu indexe } // Kiiratas: printf("\nA forditott mondat:\n%s",forditott); }
3. példa
Sztringek kozott nincs ertelmezve az ertekadas, nekunk kell beturol-beture atmasolni. A do-while eppen megfelel.
#include <stdio.h> main() { char eredeti[80]; char masolat[80]; int i; printf("Szovegvaltozo tartalmanak atadasa egy masik szovegvaltozo reszere\n"); printf("\nAz eredeti szoveg:\n"); gets(eredeti); // itt nem kell az & operator, mert 'eredeti' maga egy pointer is egyben printf("\nA masolat vektor tartalma masolas elott:\n %s", masolat); // a do-while ciklus idealis, mert legalabb a \0 karaktert at kell masolni: i = -1; do { i++; masolat[i] = eredeti[i]; } while ( eredeti[i] != '\0' ) ; // vagy egyszeruen (eredeti[i]) printf("\nA masolat masolas utan:\n%s", masolat); getch(); }
4. példa
Egy vektor elemeit a pointeraritmetika segitsegevel erjuk el, indexeles helyett.
#include <stdio.h> #include <conio.h> main() { double meretek[25]; double min; int db,i,minindex; printf("A meretek kozul az erdekel minket, amelyik a 100-tol nagyobbak\n"); printf("kozul a legkisebb\n\n"); printf("Add meg a meresek szamat="); scanf("%d",&db); printf("\n\nAdd meg a mereteket:\n"); for ( i = 0; i < db; i++ ) { printf("\nAz %d. meret=",i); scanf("%lf",&meretek[i] ); // vagy (%lf",(meretek+i) ) } for ( i = 0, min = 1.7E300; i < db; i++) { if ( *(meretek+i) > 100 && *(meretek+i) < min ) { minindex = i; min = *(meretek+i); } } printf("\nA 100-tol nagyobbak kozul a legkisebb a %d indexu, erteke=%lf", minindex, *(meretek+minindex) ); }
tanszek/oktatas/szamitastechnika/tovabbi_algoritmusok_ii.txt · Last modified: 2022/09/05 21:53 by knehez