From ab6cda9811fb7a5f3708162d63b65d7f9d253860 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Vl=C4=8Dek?= Date: Thu, 19 Mar 2026 00:50:56 +0000 Subject: [PATCH] Aktualizovat du3/program.c --- du3/program.c | 92 ++++++++++++++++++++++++--------------------------- 1 file changed, 43 insertions(+), 49 deletions(-) diff --git a/du3/program.c b/du3/program.c index f639c15..bffb5ec 100644 --- a/du3/program.c +++ b/du3/program.c @@ -30,7 +30,6 @@ float IsArithCorrect(float num1, float num2, char* op, float result) if ((num1/num2) == result ) { return 1;} break; } - printf("%.3f", num2); return 0; } @@ -56,24 +55,54 @@ int main() num2Temp[0] = '\0'; resultTemp[0] = '\0'; int writeIntoArrayNum = 1; - bool hasOper = false; - bool hasEqualsSign = false; + bool foundOp = false; + bool foundEqualSign = false; char op1 = 'N'; //N = 'None/NIC' for (int i = 0; strBuffer[i] != '\0'; i++) { - if (isdigit(strBuffer[i]) != 0) + if (isspace() != 0) { - //skontroluj, ze ci char po nom je tiez cislo (a NIE je desat. bodka), AK NIE, povazuj buduce cisla v riadku ako ine cislo - // a inkrementuj kontrolnu citaciu premenu - if (isdigit(strBuffer[i+1]) == 0 && strBuffer[i+1] != '.') + continue; + } + if (isdigit(strBuffer[i]) != 0 || strBuffer[i] == '.') + { + if (op1 == 'N') { - writeIntoArrayNum += 1; + strncat(num1Temp, &strBuffer[i], 1); } - - switch (writeIntoArrayNum) + else if (!foundEqualSign) { + strncat(num1Temp, &strBuffer[i], 1); + } + else + { + strncat(resultTemp, &strBuffer[i], 1); + } + } + //ak je to nejaky printable symbol ('*/-,:./), skontroluj ci to nie je artimeticke znamienko alebo desatinna bodka (a udel im vynimku) + //AK NIE, povazuj za riadok neplatny... + if (strBuffer[i] == '=') + { + foundEqualSign = true; + continue; + } + + if (strBuffer[i] == '+' || strBuffer[i] == '-' || strBuffer[i] == '/' || strBuffer[i] == '*') + { + //predbezna kontrola, ze ci sme doteraz daco vobec nacitavali + if (op1 == 'N' || strBuffer[0] == '\0') + { + isLineInvalid = true; + } + op1 = strBuffer[i]; + } + else if (strBuffer[i] == '.') + { + //zisti, kde treba zapisat desatinnu bodku + switch (writeIntoArrayNum) + { case 1: strncat(num1Temp, &strBuffer[i], 1); break; @@ -86,48 +115,13 @@ int main() strncat(resultTemp, &strBuffer[i], 1); break; } - continue; } - - if (ispunct(strBuffer[i]) != 0) + else { - //ak je to nejaky printable symbol ('*/-,:./), skontroluj ci to nie je artimeticke znamienko alebo desatinna bodka (a udel im vynimku) - //AK NIE, povazuj za riadok neplatny... - if (strBuffer[i] == '=') - { - continue; - } - - if (strBuffer[i] == '+' || strBuffer[i] == '-' || strBuffer[i] == '/' || strBuffer[i] == '*') - { - op1 = strBuffer[i]; - } - else if (strBuffer[i] == '.') - { - //zisti, kde treba zapisat desatinnu bodku - switch (writeIntoArrayNum) - { - case 1: - strncat(num1Temp, &strBuffer[i], 1); - break; - - case 2: - strncat(num2Temp, &strBuffer[i], 1); - break; - - case 3: - strncat(resultTemp, &strBuffer[i], 1); - break; - } - } - else - { - isLineInvalid = true; - break; - } - - continue; + isLineInvalid = true; + break; } + if (isalpha(strBuffer[i]) != 0) {