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; }