From c1a852b42b7f85893fd6e28b1a001dc008d831ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Vl=C4=8Dek?= Date: Wed, 18 Mar 2026 23:16:18 +0000 Subject: [PATCH] Aktualizovat du3/program.c --- du3/program.c | 81 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 55 insertions(+), 26 deletions(-) diff --git a/du3/program.c b/du3/program.c index b2b6b38..7e7fc08 100644 --- a/du3/program.c +++ b/du3/program.c @@ -1,42 +1,47 @@ #include #include #include +#include #define SIZE 128 //kontrola, ze ci vycitane informacie su aritmeticky spravne -bool IsArithmeticallyCorrect(int num1, int num2, char* op) +//VRACIA: int: -1 (CHYBA), 0 (False), (True) +int IsArithCorrect(float num1, float num2, char* op, float result) { switch (op) { case '-' - if ((num1-num2) == resultTemp) { return true;} + if ((num1-num2) == result) { return 1;} break; case '+' - if ((num1-num2) == resultTemp) { return true;} + if ((num1-num2) == result) { return 1;} break; case '*' - if ((num1*num2) == resultTemp) { return true;} + if ((num1*num2) == result) { return 1;} break; case '/' - if (num2 == 0) { return false; - if ((num1-num2) == resultTemp) { return true;} + if (num2 == 0) { return -1;} + if ((num1-num2) == result) { return 1;} break; } - return false; + return 0; } int main() { - char line[SIZE]; + //pomocne premeny + char line[SIZE], strBuffer[SIZE]; line[0] = '\0'; - char strBuffer[SIZE]; + strBuffer[0] = '\0'; + const char* strtofEndPtr; + while (fgets(line, SIZE, stdin) != NULL) @@ -44,7 +49,6 @@ int main() if (sscantf(line, "%127[^\n]", strBuffer) == 1) { bool isLineInvalid = false; - int x = 0; //docasne 'char' premeny char num1Temp[10], num2Temp[10], resultTemp[10]; num1Temp[0] = '\0'; @@ -52,7 +56,7 @@ int main() resultTemp[0] = '\0'; int writeIntoArrayNum = 1; // kontrolna premena na urcovanie toho, kde sa ma zapisovat obsah (1 == num1, 2 = num2, 3 = vysledok) - char op1 = 'N'; //N = 'nothing/nic' + char op1 = 'N'; //N = 'None/NIC' for (int i = 0; i != '\0'; i++) { @@ -60,35 +64,54 @@ int main() { //skontroluj, ze ci char po nom je tiez cislo, AK NIE, povazuj buduce cisla v riadku ako ine cislo // a inkrementuj kontrolnu citaciu premenu - if (isdigit(i+1) != 0) + if (isdigit(i+1) == 0) { writeIntoArrayNum += 1; } switch (writeIntoArrayNum) + { case 1: strncat(num1Temp, i, 1); break; case 2: - strncat(num2Temp, i, 2); + strncat(num2Temp, i, 1); break; case 3: - strncat(resultTemp, i, 3); + strncat(resultTemp, i, 1); break; } - continue; } + if (ispunct() != 0) { - //ak je to nejaky printable symbol ('*/-,:./), skontroluj ci to nie je artimeticke znamienko, + //ak je to nejaky printable symbol ('*/-,:./), skontroluj ci to nie je artimeticke znamienko alebo desatinna bodka, //AK NIE, povazuj za riadok neplatny... if (i == '+' || i == '-' || i == '/' i == '*') { op1 = i; } + else if (i = '.') + { + //zisti, kde treba zapisat desatinnu bodku + switch (writeIntoArrayNum) + { + case 1: + strncat(num1Temp, i, 1); + break; + + case 2: + strncat(num2Temp, i, 1); + break; + + case 3: + strncat(resultTemp, i, 1); + break; + } + } else { isLineInvalid = true; @@ -97,23 +120,29 @@ int main() continue; } + if (isalpha(i) != 0) { isLineInvalid = true; break; } + } + //** konecna faza = vypisovanie vysledkov + + //ak systematicka chyba + if (isLineInvalid = true || op == 'N' || IsArithCorrect(strtof(num1Temp),strtof(num2Temp), op1, ) == -1) + { + printf("CHYBA\n"); + } + else if (IsArithCorrect(strtof(num1Temp, strtofEndPtr),strtof(num2Temp, strtofEndPtr), op1) == 0) + { + printf("ZLE\n"); + } + else + { + printf("OK"); } - } - - - int vysledok = calcResult(atoi(num1Temp),atoi(num2Temp), op1); - - - if (isLineInvalid || vysledok == 0) - { - printf("CHYBA"); } - return 0; }