From 6fcb8313a337257ba5fcf3cdf1776023cda7027b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Vasi=C4=BE?= Date: Tue, 26 Apr 2022 19:38:55 +0200 Subject: [PATCH] domaca_uloha_3 --- du3/program | Bin 0 -> 6857 bytes du3/program.c | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100755 du3/program create mode 100644 du3/program.c diff --git a/du3/program b/du3/program new file mode 100755 index 0000000000000000000000000000000000000000..8e725f54ddeead0da2572e4bdadee9059f1429cf GIT binary patch literal 6857 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 literal 0 HcmV?d00001 diff --git a/du3/program.c b/du3/program.c new file mode 100644 index 0000000..ee19b50 --- /dev/null +++ b/du3/program.c @@ -0,0 +1,100 @@ +#include //pripojím potrebné knižnice +#include +#include + +#define DLZKA_VSTUPU 10 //nastavím príslušné konštanty + +void kopirovanieCiselnehoPola(int velkostNajmensiehoPolaPola, double* starePole, double* novePole); //zadeklarujem vlastné funkcie +double umocnenie(double mocnitel, double exponent); + +int main() { + char vstup[DLZKA_VSTUPU]; //vytvorím pole pre načítanie vstupu z klávesnice + char* stav_vstupu = fgets(vstup, DLZKA_VSTUPU, stdin); //načítam hodnotu polynómu, uložím ju do poľa pre načítanie vstupu a stav funkcie fgets uložím do premennej určenej pre kontrolu úspešnosti vykonania + + double* polynom = (double*) calloc(1, sizeof(double)); //dynamicky alokujem jednu bunku pamäte, podľa potreby budem realokovávať pamäť (pre zachovanie už načítaných hodnôt použijem medzipamäťové dynamické pole) + if (polynom == NULL) return 0; + + double* medzipamat = (double*) calloc(1, sizeof(double)); + if (medzipamat == NULL) return 0; + + if (stav_vstupu == NULL) { //ak sa mi nepodarí úspešne načítať stupeň polynómu, + printf("Chyba: Nepodarilo sa načítať hodnotu polynómu.\n"); //tak vypíšem hlásenie o neúspešnom načítaní zo vstupu, + + free(polynom); //vyčistím dynamicky alokované pamäte, + free(medzipamat); + + return 0; //a program ukončím + } + + double premennaPolynomu = atof(vstup); //zadaný stupeň polynómu prevediem na matematické číslo + int pocetClenovPolynomu = 0, i = 0; + + while (1) { //načítam taký počet čísel, aký je stupeň polynómu + stav_vstupu = fgets(vstup, DLZKA_VSTUPU, stdin); //načítam číslo príslušného indexu polynómu + + if (stav_vstupu == NULL) { //ak sa načítanie niektorého z čísel nepodarí + printf("Chyba: Zlyhalo načítanie %d. člena polynómu.\n", i + 1); //tak vypíšem informáciu o tom, pri ktorom člene polynómu zlyhalo načítavanie + + free(polynom); //vyčistím dynamicky alokované pamäte, + free(medzipamat); + + return 0; //a program ukončím + } + + else if (strcmp(vstup, "\n") == 0) break; //ak načítam prázdny riadok, tak ukončím načítavanie hodnôt + + else if (strcmp(vstup, "0") == 0 && strcmp(vstup, "0.0") == 0) { //funkcia atof() považuje nulu za chybový stav, takže musím ošetriť použitie nuly + polynom[i] = atof(vstup); + + //na začiatku programu neviem, koľko vstupov úžívateľ zadá, preto potrebujem po každom zadaní čísla dynamicky zväčšíť pamäť o jedno miesto a kvôli zachovaniu dát pri realokácii pamäte musím hodnoty skopírovať do medzipamäte + kopirovanieCiselnehoPola(i + 1, polynom, medzipamat); //skopírujem uložené hodnoty do medzipamäte + polynom = (double*) calloc(i + 2, sizeof(double)); //pôvodnú pamäť realokujem + + kopirovanieCiselnehoPola(i + 1, medzipamat, polynom); //hodnoty z medzipamäte skopírujem naspäť do realokovanej pôvodnej pamäte + medzipamat = (double*) calloc(i + 2, sizeof(double)); //realokujem aj medzipamäť, aby som pri ďalšom načítaní mohol znova zväčšiť pamäť o jedno miesto + } + else { + polynom[i] = atof(vstup); //zadaný vstu prevediem na matematické číslo + + kopirovanieCiselnehoPola(i + 1, polynom, medzipamat); //skopírujem uložené hodnoty do medzipamäte + polynom = (double*) calloc(i + 2, sizeof(double)); //pôvodnú pamäť realokujem + + kopirovanieCiselnehoPola(i + 1, medzipamat, polynom); //hodnoty z medzipamäte skopírujem naspäť do realokovanej pôvodnej pamäte + medzipamat = (double*) calloc(i + 2, sizeof(double)); //realokujem aj medzipamäť, aby som pri ďalšom načítaní mohol znova zväčšiť pamäť o jedno miesto + + + /*if (polynom[i] == 0.0) { //ak sa nepodarí konverzia vstupu na matematické číslo, + printf("Chyba: Zlyhalo načítanie %d. člena polynómu.\n", i + 1); //tak vypíšem chybové hlásenie + return 0; //a program ukončím + }*/ + } + + pocetClenovPolynomu++; //každý úspešne prekonvertovaný vstup započítam + i++; //hodnota indexu poľa i je v tomto prípade rovnaká ako hodnota premennej pocetClenovPolynomu + } + + double vysledok = 0.0; //vyčíslenú hodnotu polynómu uložím do pamäte + for (i = 0; i < pocetClenovPolynomu; i++) vysledok += (polynom[i] * umocnenie(premennaPolynomu, pocetClenovPolynomu - 1 - i)); //vyčíslim hodnotu polynómu pre danú premennú + + printf("Vysledok je: %.2f\n", vysledok); //vypíšem výsledok s presnosťou na dve desatinné miesta + + free(polynom); //vyčistím dynamicky alokované pamäte + free(medzipamat); + + return 0; +} + +void kopirovanieCiselnehoPola(int velkostNajmensiehoPola, double* starePole, double* novePole) { //funkcia skopíruje čísla z jedného číselného poľa do druhého, pričom polia sú rovnako veľké + int i; + for (i = 0; i < velkostNajmensiehoPola; i++) novePole[i] = starePole[i]; //prekopírujem čísla zo starého poľa do nového +} + +double umocnenie(double mocnitel, double exponent) { //funkcia umocní čislo (mocniteľa) na daný exponent + int i; + double vysledok = mocnitel; //mocniteľa budem násobiť mocniteľom niekoľkokrát + + if (exponent == 0) return 1; //akékoľvek číslo na 0 = 1 + for (i = 0; i < exponent - 1; i++) vysledok *= mocnitel; + + return vysledok; +}