From 2f9b482d862550d369411f360a74c65adc18fc06 Mon Sep 17 00:00:00 2001 From: Andrii Hutsuliak Date: Sun, 23 Feb 2025 16:08:11 +0100 Subject: [PATCH] zmeny --- du2/program.c | 44 +++++++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/du2/program.c b/du2/program.c index 769a66d..7fbd5f7 100644 --- a/du2/program.c +++ b/du2/program.c @@ -1,26 +1,43 @@ #include #include -#include #define LINE_SIZE 256 -int main() { - char line[LINE_SIZE]; - if (!fgets(line, LINE_SIZE, stdin) || atol(line) == 0) { // Načítanie prvej hodnoty a kontrola, či je to číslo - printf("Nepodarilo sa nacitat zaklad x\n"); // Ak používateľ nič nezadal alebo zadal neplatné číslo, program sa ukončí +// Funkcia na kontrolu, či je reťazec platné číslo (desatinné alebo celé) +int isFloat(const char *str) { + if (*str == '\0') return 0; // Ak je reťazec prázdny, nie je to číslo + + char *endptr; + strtod(str, &endptr); // Pokus o konverziu reťazca na desatinné číslo + + return *endptr == '\0' || *endptr == '\n'; // Skontroluje, či bol celý reťazec číslo +} + +int main() { + char line[LINE_SIZE]; // Pole na ukladanie vstupného riadka + + // Načítanie hodnoty x a kontrola, či je platné číslo + if (!fgets(line, LINE_SIZE, stdin) || !isFloat(line)) { + printf("Nepodarilo sa nacitat zaklad x\n"); return 0; } + double x = atof(line); // Konverzia načítaného reťazca na číslo (double) - int x = atol(line); // Konverzia načítaného reťazca na číslo + // Načítanie prvého koeficientu polynómu a jeho kontrola + if (!fgets(line, LINE_SIZE, stdin) || !isFloat(line)) { + printf("Nepodarilo sa nacitat polynom na 1 mieste.\n"); + return 0; + } + double res = atof(line); // Prvý koeficient sa uloží do výsledku + int coefficient = 1; // Počítadlo koeficientov - double res = 0; - int coefficient = 1; // Premenná na uchovanie počtu polynómov - for (int i = 2; i >= 0; i--) { // Polynóm má 3 koeficienty (pre x^2, x^1, x^0), takže iterácie idú od 2 do 0 vrátane - if (!fgets(line, LINE_SIZE, stdin) || atol(line) == 0) { // Načítanie všetkých koeficientov a kontrola, či sú čísla - printf("Nepodarilo sa nacitat polynom na %d mieste.\n" , coefficient); + // Cyklus na načítanie ďalších koeficientov polynómu + while (fgets(line, LINE_SIZE, stdin) != NULL && line[0] != '\n') { // Číta, kým nie je prázdny riadok + coefficient++; + if (!isFloat(line)) { // Kontrola, či je vstup číslo + printf("Nepodarilo sa nacitat polynom na %d mieste.\n", coefficient); return 0; } - res += atol(line) * pow(x, i); // Aktuálny koeficient sa vynásobí x umocneným na i - coefficient++; // Zvýšenie počítadla koeficientov + res = res * x + atof(line); // Použitie Hornerovej schémy na výpočet hodnoty polynómu } printf("Vysledok je: %.2f\n", res); @@ -29,3 +46,4 @@ int main() { } +