IB001 Úvod do programování skrze C, Seminární skupiny 09, 10, 11

Riešenie prikladov

#include <stdlib.h> 
#include <stdio.h>
#include <math.h>

int main(){
        puts("Zadaj cislo prikladu");
        int priklad = 1;
        scanf("%d", &priklad);
	if (priklad == 1){
		puts("Zadaj parametre kvadratickej rovnice a, b, c");
		int a, b, c;
		scanf("%d %d %d",&a, &b, &c);
		int d = b*b - 4*a*c;
		if (d < 0){
			puts("Rovnica nema riesenie v obore realnych cisel\n");
		} else if (d == 0) {
			//Rovnica ma dvojnasobny koren
			//aby som dostal realne cislo a nemal celociselne delenie, tak pouzivam nasobenie 2.0
			printf("Rovnica ma dvojnasobny koren %f\n", -b / (2.0 *a ));
		} else {
			printf("Rovnica %dx^2 + %dx + %d = 0 ma riesenie x1 = %g, a x2 = %g\n", a, b, c,(-b + sqrt(d))/(2.0*a), (-b - sqrt(d))/(2.0*a)); 
		}
        
        } else if (priklad == 2){
           int n, faktorial = 1;

           printf("Zadaj cislo: ");
           scanf("%d", &n);
           if ( n < 0){
              printf("Faktorial zaporneho cisla %d nie je definovany\n", n);
	      return -1;
           }

	   //pocitam od 2, pretoze vo faktoriale uz 1 mam a postupne vzdy nasobim vyssim cislom
	   //az kym sa nerovna zadane cislo, ktore naposledy vynasobim a viac uz neratam
           for (int i = 2; i <= n; i++){
               faktorial *=  i;
           }

           printf("%d! = %d\n", n, faktorial);
        }
        if (priklad == 3){
            int n, prvy = 0, druhy = 1, dalsi = 1;

            // v pripade zadania cisla, kotre nie je kladne sa nacitanie zopakuje
            do {
              printf("Zadaj maximalne cele cislo n Fibonacciho postupnowti: ");
              scanf("%d",&n);
            } while (n < 1);

            printf("Fibonacciho postupnost: ");
            printf("%d ", prvy);
            while (dalsi <= n){
               printf("%d ", dalsi);
               dalsi = prvy + druhy;
               prvy = druhy;
               druhy = dalsi;
            }
        }
	if (priklad == 4){
		puts("Zadaj nejake cele cislo");
		int max;
		scanf("%d",&max);
		//zacne od 2, lebo to je najmensie prvocislo
		for (int prvocislo = 2; prvocislo < max; prvocislo++){
			int delitelov = 0;
			//delitel nemoze byt vacsi ako odmoncnina z daneho cisla
			//viz erastesonovo sito
			double maxDelitel = sqrt(prvocislo) + 1;
			//spocitame delitelov daneho cisla
			for (int delitel = 2; delitel < maxDelitel; delitel++){
				if (prvocislo % delitel == 0){
					++delitelov;
				}
			}
			//Ak ma cislo menej nez jeden delitel, teda od 2 vyssie, tak je to prvvocislo
			if (delitelov < 1){
				printf("%d, ",prvocislo);
			}
		}
	}
        if (priklad  == 5){
            /*1: Program vypise zadane cislo odzadu */
            int n, odzadu = 0, poslednaCifra;

            printf("Zadaj kladne cele cislo: ");
            scanf("%d", &n);

            while (n > 0){
                poslednaCifra = n % 10;
                odzadu = odzadu * 10 + poslednaCifra;
                n /= 10;
            }

            printf("Cislo napisane odzadu je: %d\n", odzadu);

        }
	if (priklad == 6){
	    int n, odzadu = 0, poslednaCifra;

            printf("Zadaj kladne cele cislo: ");
            scanf("%d", &n);
	    int zadane = n;

            while (n > 0){
                poslednaCifra = n % 10;
                odzadu = odzadu * 10 + poslednaCifra;
                n /= 10;
            }

            printf("Cislo %d napisane odzadu je: %d\n", zadane, odzadu);
	    if (zadane == odzadu){
		puts("Cislo je palindrom");
	    } else {
		puts("Cislo nie je palindrom");
	    }
	}
	if (priklad == 7){
		puts("Zadajte cislo, overim, ci je dokonale");
		int cislo;
		scanf("%d", &cislo);
		int sucet = 0;
		for (int i = 1; i < cislo; i++){
			//Najdem delitela daneho cisla
			if (cislo % i == 0){
				//daneho delitela pripocitam k celemu cislu
				sucet += i;
			}
		}
		if (sucet == cislo){
			printf("Cislo %d je dokonale.\n",cislo);
		} else {
			printf("Cislo %d NIE je dokonale. Sucet delitelov je %d.\n", cislo, sucet);
		}
	}
	if (priklad == 8){
		puts("Zadaj cislo v dvojkovej sustave");
		int dvojkova;
		scanf("%d", &dvojkova);
		int desiatkova;
		//v premennej moc, si budeme pamatat na ako mieste sme
		//teda 2^0, 2^1, 2^2.. alebo inak 1, 2, 4...
		int moc =1;
		int pomocna = dvojkova;
		//cislo budeme postupne skracovat zprava dolava, az kym ho cele neprecitame
		//zkracovat ho budeme delenim 10
		while (pomocna > 0){
			//v premennej pripocitat si uchovame najskor
			//posledne cislo
			int pripocitat = pomocna % 10;
			if (pripocitat > 1){
				printf("Nastala nocna mora programatora, objavilo sa cislo ine ako 0, 1 => %d.\n",pripocitat);
				return -1; 
			}
			//vynasobime aktualnym miestom
			pripocitat = pripocitat * moc;
 			//pripocitame do celkoveho cisla
			desiatkova = desiatkova + pripocitat;
			//cislo zkratime
			pomocna = pomocna / 10;
			//miesto zvysime, posunieme sa o jedno miesto dolava
			moc = moc *2;
		}
		printf("Cislo %d v dvojkovej sustave, je %d v desiatkovej\n", dvojkova, desiatkova);
	}
	if (priklad == 9){
		printf("Zadaj vyber prevodu:\n1 = prevod z 10 do dvovjkovej sustavy\n2= prevod z dvojkovej do 10 sustavy\n");
		int vyber;
		scanf("%d", &vyber);
		if (vyber == 1){
			puts("Zadaj cislo v desiatkovej sustave");
			int desiatkova;
			scanf("%d", &desiatkova);
			int pomocna = desiatkova;
			unsigned int dvojkova = 0;
			int moc = 1;
			while (pomocna > 0){ //10
					     //zvysok  0 1 0 1
					     //zostalo 5 2 1 0
				unsigned int pripocitat = pomocna % 2;
				//Zvysok po deleni dvoch a na ake miesto to chcem dat 1, 10, 100 atd;
				pripocitat = pripocitat * moc;
				//moc je vzdy 10 krat viac tak pripocitavam vzdy o jedno cislo dolava
				dvojkova = dvojkova + pripocitat;
				pomocna = pomocna / 2;
				moc = moc * 10;
			}
			printf("Cislo %d v dvojkovej sustave, je %d v desiatkovej\n", dvojkova, desiatkova);
				

		} else if (vyber == 2){
			puts("Zadaj cislo v dvojkovej sustave");
			int dvojkova;
			scanf("%d", &dvojkova);
			int desiatkova;
			//v premennej moc, si budeme pamatat na ako mieste sme
			//teda 2^0, 2^1, 2^2.. alebo inak 1, 2, 4...
			int moc =1;
			int pomocna = dvojkova;
			//cislo budeme postupne skracovat zprava dolava, az kym ho cele neprecitame
			//zkracovat ho budeme delenim 10
			while (pomocna > 0){
				//v premennej pripocitat si uchovame najskor
				//posledne cislo
				int pripocitat = pomocna % 10;
				if (pripocitat > 1){
					printf("Nastala nocna mora programatora, objavilo sa cislo ine ako 0, 1 => %d.\n",pripocitat);
					return -1; 
				}
				//vynasobime aktualnym miestom
				pripocitat = pripocitat * moc;
				//pripocitame do celkoveho cisla
				desiatkova = desiatkova + pripocitat;
				//cislo zkratime
				pomocna = pomocna / 10;
				//miesto zvysime, posunieme sa o jedno miesto dolava
				moc = moc *2;
			}
			printf("Cislo %d v dvojkovej sustave, je %d v desiatkovej\n", dvojkova, desiatkova);

		} else {
			puts("To je tazke, ked niekto nepochopi zadanie");
		}
	}

    return 0;
}