[[oktatas:programozás:feladatok:speciális| < Speciális]] ====== C nyelvhez kapcsolódó feladatok ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2011, 2022 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]] * Web: https://szit.hu ===== Bevezetés ===== Az itt található feladatok a C nyelvhez kapcsolódnak. Azonban több mint kétszáz általános feladatokat találsz az alábbi helyen, amelyek szintén megvalósíthatók C nyelven, az egészen kezdőtől haladóbb szintig: * [[oktatas:programozas:feladatok:altalanos|Általános programozási feladatok]] Néhány feladatban hiányozik a megfelelő tagolás, behúzás, szintaxis kiemelés; ez nem véletlen. ===== Szintaktikai hibák ===== A következő feladatok szintaktikai hibákat tartalmaznak, amelyeket meg kell keresned. ==== Feladat 001 ==== A következő programban keresse meg a hibákat: #include stdio.h main() { int a := 0; printf("Írj be egy száznál nagyobb számot: "); while a < 100 { printf("Szám: "); scanf("%d", &a); } } A megoldást írja a 001.txt állományba, majd töltse fel a megadott helyre. ==== Feladat 002 ==== A következő programban keresse meg a hibákat: #inclde main() { a = 0; printf("Írj be egy száznál nagyobb számot: ") while(a < 100) { printf("Szám: ") scanf("%d", &a) } } A megoldást írja a 002.txt állományba, majd töltse fel a megadott helyre. ==== Feladat 003 ==== Keresse meg a következő programban a szintaktikai hibákat. #include #include A megoldást írja a 003.txt állományba, majd töltse fel a megadott helyre. ===== Szemantikai hibák ===== ==== Feladat 101 ==== A következő programnak ki kell írnia, hogy kérünk egy száznál nagyobb számot, majd be kell kérni egy számot mindaddig amíg 100-nál kisebbet írt be a felhasználó. A program azonban nem ezt csinálja. Hol a hiba? #include main() { a = 0; printf("Írj be egy száznál nagyobb számot: "); while(a > 100) { printf("Szám: "); scanf("%d", &a); } } A megoldást írja a 101.txt állományba, majd töltse fel a megadott helyre. ==== Feladat 102 ==== A következő programnak be kell kérnie egy háromszög három oldalát. El kell döntenie, hogy a háromszög megszerkeszthető-e, majd kiszámolnia a területet. A program azonban nem ezt teszi. Hol a hiba? #include #include main() { double a, b, c; printf("Háromszög adatai"); printf("a: "); scanf("%lf", &a); printf("a: "); scanf("%lf", &b); printf("c: "); scanf("%lf", &a); if (a + b < c) { printf("Háromszög nem szerkeszthető"); exit(2); } else if (a + c < b) { printf("A háromszög nem szerkeszthető"); exit(2); } else if (c + b < a) { printf("A háromszög nem szerkeszthető"); exit(2); } else { s = (a, + b + c)/2; terulet = pow(s*(s-a)*(s-b)*(s-c),s); } } A megoldást írja a 102.txt állományba, majd töltse fel a megadott helyre. ==== Feladat 103 ==== A következő programnak be kell kérnie egy számot majd az értéket a képernyőre írnia. A program viszont nem ezt csinálja. Hol a hiba? #include main() { double a; printf("Szám: "); scanf("%f", &a); printf("%f\n", a); } A válaszod mentsd a hoz.txt fájlba. ==== Feladat 104 ==== #include int main() { printf("Helló"); return 0; printf("adf"); printf("adf"); printf("adf"); int a; for(a=0; a<10; a++) { printf("Valami"); printf("Másik"); } } Mit ír a következő program a képernyőre? ===== Átláthatatlan szintaktikai hibák ===== ==== Feladat 201 ==== #include #include main() { printf("Ellipszis közelítő kerülete"); double ellipszisatlo1 ellipszisatlo2; double ter1 := 4*((M_PI*ellipszisatlo1*ellipszisatlo2+pow(ellipszisatlo1-ellipszisatlo2,2))\(ellipszisatlo1+ellipszsatlo2)); printf("Terület: %lf\n", ter1) if ter1 < 1200 then { print("Nem elég nagy az ellipszis!\n"); } ===== Átláthatatlan szemantikai hibák ===== ==== Feladat 301 ==== A következő program feladata, hogy bekéri két kör sugarát, majd kiszámolja azok kerületét és területét. A kör kerületének képlete 2*r*pi. A kör területének képlete r^2*pi. A ^ karakter egy szám valahányadik hatványát jelöli. A r^2, az r a második hatványon. A program a végén kiírja, hogy melyik nagyobb a területe alapján. A program azonban nem ezt csinálja. Keresse meg a hibákat. #include #include main( ){ double ter2, r1, ker1, ker2, ter1, r2; printf("Kör 1 sugara: "); scanf("%lf", &r1); printf("Kör 2 sugara: "); scanf("%lf", &r2); ker1 = r1 * M_PI; ker2 = r2 * M_PI; ter1 = pow(r1, 2) * M_PI; ter2 = pow(r2, 2) * M_PI; if (ter1 > ter2) printf("A második kör nagyobb");else printf("Az első kör nagyob"); } ===== Vegyes hibák ===== ==== Feladat 401 ==== A következő feladat a húrnégyszögekről szól. A húrnégyszögek olyan négyszögek amelyeknek bármely két szemközti szögének összege 180°. Megfordítva: Ha egy négyszög két szemközti szögének összege 180°, akkor az húrnégyszög. Másként fogalmazva: A húrnégyszög olyan négyszög, amelyhez van olyan kör, amely áthalad a négyszög négy csúcsán. Újabb megfogalmazásban: olyan négyszög, melynek oldalai egy kör húrjai. A következő programnak ki kell számolnia a húrnégyszög köré írható kör sugarát. Azonban nem ezt teszi. Keresse meg a hibákat! === Segítség === A húrnégyszög kerületének fele: s = (a+b+c+d)/2; A húrnégyszög kerülete: terulet = gyok((s-a)*(s-b)*(s-c)*(s-d)); A húrnégyszög köré írható kör sugara: sugar = (1/(4*terulet))* gyok((ab + cd)* (ac + bd)* (ad + bc)); === A program === #include #include main() {double a, b, c, d; printf("a: "); scanf("%lf", &a); printf("b: "); scanf("%lf, &c); printf("c: "); scanf("lf", &c); print(" b: ", &d); s = (a+b+c+d)/2; t = sqrt((s-a)*(s-b)*(s-c)*(s-d)); r = (1/(4*T))* sqrt((ab + cd)* (ac + bd)* (ad + bc)); }