diff --git a/du1/program.c b/du1/program.c new file mode 100644 index 0000000..a0fe93d --- /dev/null +++ b/du1/program.c @@ -0,0 +1,101 @@ +#include +#include +#include +#include + +#define SIZE 100 + +int nacitaj_riadok(double* cislo) { + char riadok[SIZE]; + memset(riadok, 0, SIZE); + + char* r = fgets(riadok, SIZE, stdin); + if (r == NULL) { + return 0; + } + + riadok[strcspn(riadok, "\n")] = '\0'; + + if (strlen(riadok) == 0) { + return 0; + } + + char* koniec = NULL; + long cele_cislo = strtol(riadok, &koniec, 10); + + if (koniec == riadok) { + return -1; + } + + if (*koniec == '.') { + double desatinne = strtod(riadok, &koniec); + if (koniec == riadok) { + return -1; + } + *cislo = desatinne; + } + else { + *cislo = (double)cele_cislo; + } + + return 1; +} + +double horner(double* koeficienty, int pocet, double x) { + double vysledok = 0.0; + int i = 0; + + for (i = 0; i < pocet; i++) { + vysledok = vysledok + koeficienty[i] * x; + } + + return vysledok; +} + +int main() { + double x = 0.0; + double koeficienty[SIZE]; + int pocet = 0; + + memset(koeficienty, 0, SIZE * sizeof(double)); + + int stav = nacitaj_riadok(&x); + if (stav != 1) { + fprintf(stderr, "Chyba: Nepodarilo sa nacitat hodnotu.\n"); + return 1; + } + + while (1) { + if (pocet >= SIZE) { + fprintf(stderr, "Chyba: Prilis vela koeficientov (max %d).\n", SIZE); + return 1; + } + + double koef = 0.0; + stav = nacitaj_riadok(&koef); + + if (stav == 0) { + break; + } + + if (stav == -1) { + fprintf(stderr, "Chyba: Nepodarilo sa nacitat koeficient c. %d.\n", pocet + 1); + return 1; + } + + koeficienty[pocet] = koef; + pocet += 1; + } + + if (pocet == 0) { + fprintf(stderr, "Chyba: Nepodarilo sa nacitat koeficient c. 1.\n"); + return 1; + } + + double vysledok = horner(koeficienty, pocet, x); + double skrateny = trunc(vysledok * 100.0) / 100.0; + + printf("Vysledok je: %.2f\n", skrateny); + + return 0; +}