Fizikus C labor

1. óra: ismerkedés a fejlesztőkörnyezettel2. óra: ciklusok3. óra: számelméleti feladatok
4. óra: számítás valós számokkal5. óra: sok adat beolvasása, tömbök6. óra: iteráció, könyvtári sztringkezelő függvények
7. óra: függvények és sztringek8. óra: cím szerinti és tömb paraméterek, struktúrák, dinamikus tömbök9. óra: rendezés, fájlkezelés, parancssori paraméterek
10. óra: állapotgép, szabványos I/O átirányítása11. óra: rekurzió, gyakorlás12. óra: láncolt listák, fák
13. óra: NHF beadás

Rajzoljunk a konzol ablakba Windowson

3. alkalom: számelméleti feladatok

1. feladat

Az alábbi program a bekért szám faktoriálisát számolná ki, de több hiba is van benne. A fordító lefordítja, mégsem jó az eredmény. Miért?

A feladat célja, hogy kipróbáld a fejlesztőkörnyezet beépített hibakereső (debug) lehetőségeit. Ezeket akkor is próbáld ki, ha e nélkül is megtalálod a hibákat!

A hiba megkeresésében többek között a következő funkciók segítenek:

#include <stdio.h>

int main(){
    int n, i, l;
    double fakt;
    
    printf("Mennyi faktorialisat? ");
    scanf("%d", &n);

    i = 1;
    while(i<=n){
        fakt = n * i;
        i = i + l;
    }
    printf("%g\n",fakt);
    return 0;
}

2. feladat

Készíts programot, amely bekér a felhasználótól egy pozitív egész számot, és kiírja a prímtényezős felbontását! Pl.:

	  75|3
	  25|5
	   5|5
	   1|

3. feladat

Készíts programot, amely megkeresi azokat a háromjegyű számokat, melyeknek osztója a 2, 7 és a 13, de nem osztója az 5! Oldd meg próbálgatással, valamint okos módon is!

4. feladat

Készíts programot, amely kiírja, hogy a felhasználó által megadott pozitív egész szám prím-e, és azt is, hogy tökéletes szám-e! (Tökéletes akkor egy szám, ha megegyezik az osztói összegével, amibe az 1-et beleértjük, de önmagát nem. Pl. 6=1+2+3)

Gyakorló feladatok

Gyakorláshoz ajánlott a https://infoc.eet.bme.hu/f02/ oldalon található feladatok közül néhány megoldása (a tömbös és véletlenszámos feladatokkal még ne foglalkozzatok).

Az órai feladatok mintamegoldása

2. feladat
#include <stdio.h>

int main(){
	int szam,oszto=2;

	scanf("%d",&szam);

	while(szam>1){
		while(szam%oszto==0){
			printf("%4d|%d\n",szam,oszto);
			szam = szam / oszto;
		}
		oszto = oszto + 1;
	}
	printf("   1|\n");

	return 0;
}

 

3. feladat
/*
int main(){
	int i=100;
	while(i<1000){
		if( (i%2==0) && (i%7==0) && i%13==0 && i%5!=0 )
			printf("%d\n",i);
		i = i + 1;
	}
	return 0;
}
*/
#include <stdio.h>

int main(){
	int i=2*7*13;
	while(i<1000){
		if( i%5!=0 )
			printf("%d\n",i);
		i = i + 2*7*13;
	}
	return 0;
}

 

4. feladat
#include <stdio.h>

int main(void){
    int szam, i, prim_e, osszeg;

    // szám beolvasása

    printf("Kerek egy pozitiv egesz szamot: ");
    scanf("%d", &szam);

    // prím-e

    for (i = 2, prim_e = 1; i < szam && prim_e == 1; i = i + 1){
        if (szam % i == 0)
            prim_e = 0;
    }
    if (prim_e != 0 && szam > 1)
        printf("%d prim.\n", szam);
    else
        printf("%d nem prim.\n", szam);

    // tökéletes-e

    for (i = 1, osszeg = 0; i < szam; i = i + 1){
        if (szam%i == 0)
            osszeg = osszeg + i;
    }
    if (osszeg == szam)
        printf("%d tokeletes.\n", szam);
    else
        printf("%d nem tokeletes.\n", szam);

    return 0;
}