A kiválasztott változat és az aktuális verzió közötti különbségek a következők.
| Következő változat | Előző változat | ||
|
tanszek:oktatas:szamitastechnika:gyakorlo_feladatok_1 [2023/10/17 16:22] knehez létrehozva |
tanszek:oktatas:szamitastechnika:gyakorlo_feladatok_1 [2023/11/22 06:48] (aktuális) knehez |
||
|---|---|---|---|
| Sor 1: | Sor 1: | ||
| - | ====== Egyszerű gyakorló feladatok ====== | + | ====== Egyszerű általános gyakorló feladatok ====== |
| - | Írj 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: | + | |
| + | **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 a maximális pontszámot (egész szám). | ||
| Sor 36: | Sor 37: | ||
| } | } | ||
| </sxh> | </sxh> | ||
| + | |||
| + | **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. | ||
| + | |||
| + | <sxh c> | ||
| + | #include <stdio.h> | ||
| + | |||
| + | 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; | ||
| + | } | ||
| + | </sxh> | ||
| + | |||
| + | **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. | ||
| + | |||
| + | <sxh c> | ||
| + | #include <stdio.h> | ||
| + | |||
| + | 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; | ||
| + | } | ||
| + | </sxh> | ||
| + | |||
| + | |||
| + | **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** | ||
| + | |||
| + | <sxh c> | ||
| + | #include <stdio.h> | ||
| + | |||
| + | 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; | ||
| + | } | ||
| + | </sxh> | ||
| + | |||
| + | |||
| + | **5. Írjunk másodfokú egyenlet valós gyökeit megoldó programot. Bemenetkét kérjük be a három együtthatót.** | ||
| + | |||
| + | <sxh c> | ||
| + | #include <stdio.h> | ||
| + | #include <math.h> | ||
| + | |||
| + | 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; | ||
| + | } | ||
| + | |||
| + | </sxh> | ||
| + | |||
| + | **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 .** | ||
| + | |||
| + | <sxh c> | ||
| + | #include <stdio.h> | ||
| + | #include <math.h> | ||
| + | |||
| + | // 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; | ||
| + | } | ||
| + | </sxh> | ||
| + | |||
| + | **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)** | ||
| + | |||
| + | <sxh c> | ||
| + | #include <stdio.h> | ||
| + | #include <conio.h> | ||
| + | |||
| + | 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; | ||
| + | } | ||
| + | </sxh> | ||
| + | |||
| + | **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** | ||
| + | |||
| + | <sxh c> | ||
| + | #include <stdio.h> | ||
| + | #include <stdlib.h> | ||
| + | #include <time.h> | ||
| + | |||
| + | #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; | ||
| + | } | ||
| + | </sxh> | ||
| + | |||
| + | ** 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. | ||
| + | |||
| + | <sxh c> | ||
| + | #include <stdio.h> | ||
| + | #include <ctype.h> | ||
| + | |||
| + | #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; | ||
| + | } | ||
| + | </sxh> | ||
| + | |||
| + | **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. | ||
| + | |||
| + | <sxh c> | ||
| + | #include <stdio.h> | ||
| + | #include <math.h> | ||
| + | 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; | ||
| + | } | ||
| + | </sxh> | ||
| + | |||
| + | |||