====== Egyszerű általános gyakorló feladatok ======
**1.) Írjon egy C programot, amely segít eldönteni, hogy egy diák sikeres volt-e egy vizsgán! A programnak a következő funkciókat kell megvalósítania:**
* Kérje be a felhasználótól a maximális pontszámot (egész szám).
* Kérje be a felhasználótól az elért pontszámot (egész szám).
* Ellenőrizze, hogy az elért pontszám eléri-e legalább a maximális pontszám 60%-át.
* Kiírja a képernyőre a következő üzenetet:
* Ha a feltétel teljesül (az elért pontszám legalább a maximális pontszám 60%-a): "Sikeres"
* Ha a feltétel nem teljesül: "Sikertelen"
Tesztelje le néhány példával, hogy helyesen működik-e a vizsgaeredmények kiértékelése.
#include
int main()
{
printf("Kerem a maximum pontot:");
int maxPont;
scanf("%d", &maxPont);
printf("Kerem az elert pontot:");
int elertPont;
scanf("%d", &elertPont);
if(elertPont > maxPont * 0.6)
{
printf("Sikeres");
}
else
{
printf("Sikertelen");
}
}
**2. Írjon egy C programot, ami egy évszámról megállapítja, hogy szökőév-e?**
Szökőévek számolása kapcsán a következő szabályokat alkalmazzuk:
* Oszthatóság 4-gyel: Az év szökőév, ha osztható 4-tel. Például: 2004, 2008, 2012.
* Kivétel a századok esetén: A szabálytól van egy kivétel: ha egy év század év (például 1800, 1900, 2000), akkor az csak akkor szökőév, ha osztható 400-zal. Tehát a 1900 nem szökőév, mivel bár osztható 4-tel, de század, és nem osztható 400-zal.
#include
int main() {
printf("Kerem az evet: ");
int ev;
scanf("%d", &ev);
// Szökőév ellenőrzése
if ((ev % 4 == 0 && ev % 100 != 0) || (ev % 400 == 0))
{
printf("%d egy szokoev.\n", ev);
}
else
{
printf("%d nem szokoev.\n", ev);
}
return 0;
}
**3. Írjon programot, ami eldönti, hogy a felhasználó által bevitt három szakasz hossza alapján, a szakaszok alkothatnak-e háromszöget?
**
Akkor szerkeszthető háromszög, ha bármely két szakasz hossza nagyobb mint a harmadik.
#include
int main()
{
// Bemenet: három szakasz hossza
double a, b, c;
printf("Kerem az elso szakasz hosszat: ");
scanf("%lf", &a);
printf("Kerem a masodik szakasz hosszat: ");
scanf("%lf", &b);
printf("Kerem a harmadik szakasz hosszat: ");
scanf("%lf", &c);
// Háromszög szerkeszthetőségének vizsgálata
if (a + b > c && a + c > b && b + c > a) {
printf("A haromszog szerkesztheto.\n");
} else {
printf("A haromszog nem szerkesztheto.\n");
}
return 0;
}
**4. Írjunk C programot, amely egész számokat olvas be a billentyűzetről mindaddig, amíg 0-t nem gépelünk, és minden beolvasott számról eldönti, hogy páros-e vagy páratlan**
#include
int main() {
int szam;
// Olvassuk be az első számot
printf("Kerem a szamot (0 a kilepeshez): ");
scanf("%d", &szam);
while (szam != 0) {
// Eldöntjük, hogy páros vagy páratlan
if (szam % 2 == 0) {
printf("%d paros.\n", szam);
} else {
printf("%d paratlan.\n", szam);
}
// Olvassuk be a következő számot
printf("Kerem a kovetkezo szamot (0 a kilepeshez): ");
scanf("%d", &szam);
}
printf("Program kilepett, mert 0-t irtal be.\n");
return 0;
}
**5. Írjunk másodfokú egyenlet valós gyökeit megoldó programot. Bemenetkét kérjük be a három együtthatót.**
#include
#include
int main() {
double a, b, c;
double discriminant, x1, x2;
// Bemenet: a, b és c beolvasása
printf("Kerem a masodfoku egyenlet egyutthatoit:\n");
printf("a: ");
scanf("%lf", &a);
printf("b: ");
scanf("%lf", &b);
printf("c: ");
scanf("%lf", &c);
// Számláló (discriminant) kiszámítása
discriminant = b * b - 4 * a * c;
// Discriminant ellenőrzése
if (discriminant > 0) {
// Két valós gyök
x1 = (-b + sqrt(discriminant)) / (2 * a);
x2 = (-b - sqrt(discriminant)) / (2 * a);
printf("A masodfoku egyenletnek ket valos gyoke van:\n");
printf("x1 = %lf\n", x1);
printf("x2 = %lf\n", x2);
} else if (discriminant == 0) {
// Egy valós gyök
x1 = -b / (2 * a);
printf("A masodfoku egyenletnek egy valos gyoke van:\n");
printf("x1 = %lf\n", x1);
} else {
// Nincsenek valós gyökök
printf("Nincsenek valós gyokok");
}
return 0;
}
**6. Írjunk c programot ami bekér a felhasználótól egy természetes számot, majd eldönti, hogy prímszám-e vagy sem. A prímszám ellenőrzésére egy egyszerű függvényt használ, ami a szám négyzetgyökéig megy és ellenőrzi, hogy osztható-e bármely számmal a [2, négyzetgyök(szám)] intervallumban .**
#include
#include
// Függvény a prímszám ellenőrzésére
int isPrime(int number) {
if (number < 2) {
return 0; // Nem prímszám, mert kisebb, mint 2
}
int i;
int sqrtNumber = sqrt(number);
for (i = 2; i <= sqrtNumber; ++i) {
if (number % i == 0) {
return 0; // Nem prímszám, mert osztható más számmal is
}
}
return 1; // Prímszám
}
int main() {
int szam;
// Olvassuk be a számot
printf("Kerem a szamot: ");
scanf("%d", &szam);
// Ellenőrizzük, hogy a szám prímszám-e
if (isPrime(szam)) {
printf("%d primszam.\n", szam);
} else {
printf("%d nem primszam.\n", szam);
}
return 0;
}
**7. Kérjük be karaktereket az 'enter' megnyomásáig és közben számoljuk meg hány kisbetűt írt a felhasználó. (az angol ABC szerint)**
#include
#include
int main() {
printf("Kerem a karaktereket (amig entert nem nyomunk): ");
char karakter;
int kisbetuSzamlalo = 0;
// Olvassuk be a karaktereket, amíg az angol ábécé betűit kapjuk
while ((karakter = getch()) != '\r' &&
((karakter >= 'A' && karakter <= 'Z') || (karakter >= 'a' && karakter <= 'z'))) {
// Ellenőrizzük, hogy a karakter kisbetű-e
if (karakter >= 'a' && karakter <= 'z') {
kisbetuSzamlalo++;
}
printf("%c", karakter);
}
// Kiírjuk, hány kisbetű volt
printf("\nA bevitt szovegben %d kisbetű volt.\n", kisbetuSzamlalo);
return 0;
}
**8. Írjon C programot, amely az ötöslottó számsorsolását modellezi. A program véletlenszerűen generál öt különböző számot 1 és 90 között, majd kiírja ezeket a számokat: (figyelve, hogy különböző számokat húzzon**
#include
#include
#include
#define SZAMOK 5
#define LEGKISEBB_SZAM 1
#define LEGNAGYOBB_SZAM 90
int main() {
int lottoSzamok[SZAMOK];
int i, j;
// Inicializáljuk a random generátort a jelenlegi idő alapján
srand(time(NULL));
// Generálunk öt különböző számot 1 és 90 között
for (i = 0; i < SZAMOK_SZAMA; ++i) {
int ujSzam;
do {
ujSzam = rand() % LEGNAGYOBB_SZAM + LEGKISEBB_SZAM;
// Ellenőrizzük, hogy az újonnan generált szám már nem szerepel-e a listában
for (j = 0; j < i; ++j) {
if (ujSzam == lottoSzamok[j]) {
ujSzam = 0; // Az ellenőrzés nem sikerült, generáljunk új számot
break;
}
}
} while (ujSzam == 0);
// Hozzáadjuk az újonnan generált számot a listához
lottoSzamok[i] = ujSzam;
}
// Kiírjuk a generált számokat
printf("Az otoslotto szamok: ");
for (i = 0; i < SZAMOK; ++i) {
printf("%d ", lottoSzamok[i]);
}
printf("\n");
return 0;
}
** 9. Írjon programot ami a felhasználótól bekért szövegben a betűk gyakoriságát megállapítja, és egy hisztogrammot készít a konzolon.**
A programban a betűk gyakoriságát egy 26 elemű tömbben (gyakorisag) érdemes tárolni, ahol minden elem egy betű gyakoriságát jelenti. A program kérje be a felhasználótól a szöveget, majd a betűk gyakoriságát számolja ki és egy hisztogrammal írja ki a konzolra. A toupper() függvény segítségével minden betűt nagybetűvé alakíthat, hogy az ábrázolás ne függjön a betűk nagy- vagy kisbetűs formájától.
#include
#include
#define MAX_HISZTOGRAM_MERET 26
void hisztogramKiirasa(int gyakorisag[]) {
printf("\nBetuk gyakorisaga hisztogrammal:\n");
for (int i = 0; i < MAX_HISZTOGRAM_MERET; ++i) {
char karakter = 'A' + i;
printf("%c | ", karakter);
for (int j = 0; j < gyakorisag[i]; ++j) {
printf("*");
}
printf("\n");
}
}
int main() {
char szoveg[1000];
int gyakorisag[MAX_HISZTOGRAM_MERET] = {0}; // minden elemet nulláz
printf("Kerem a szoveget (legfeljebb 1000 karakter): ");
fgets(szoveg, sizeof(szoveg), stdin);
for (int i = 0; szoveg[i] != '\0'; ++i) {
char karakter = toupper(szoveg[i]);
if (isalpha(karakter)) {
int index = karakter - 'A';
gyakorisag[index]++;
}
}
hisztogramKiirasa(gyakorisag);
return 0;
}
**10. Rajzoljunk egy kört a konzolra csillag karakterekből. **
Ebben a játékos feladatban, legyen egy circle() függvény ami kiszámolja egy adott pont távolságát a kör középpontjától, majd összehasonlítja a sugárral. Ha a távolság közel van a sugárhoz, a függvény közelítőleg 0-t ad vissza.
#include
#include
const float centerX = 0.5;
const float centerY = 0.5;
const int screenSizeX = 50;
const int screenSizeY = 30;
float circle(float x, float y, float r)
{
return (x - centerX) * (x - centerX) + (y - centerY) * (y - centerY) - r * r;
}
int main() {
for(int j = 0; j <= screenSizeY; j++)
{
for(int i = 0; i <= screenSizeX; i++)
{
float x = (float)i / screenSizeX;
float y = (float)j / screenSizeY;
if(fabs(circle(x, y, 0.3f)) < 0.01f)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
return 0;
}