Felhasználói eszközök

Eszközök a webhelyen


tanszek:oktatas:szamitastechnika:gyakorlo_feladatok_1

Különbségek

A kiválasztott változat és az aktuális verzió közötti különbségek a következők.

Összehasonlító nézet linkje

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>​
 + 
 +
tanszek/oktatas/szamitastechnika/gyakorlo_feladatok_1.1697559777.txt.gz · Utolsó módosítás: 2023/10/17 16:22 szerkesztette: knehez