Обновить du3/program.c
This commit is contained in:
parent
fa09da2a6d
commit
4254807502
@ -15,11 +15,6 @@
|
|||||||
*
|
*
|
||||||
* Parametre:
|
* Parametre:
|
||||||
* - line: Reťazec, z ktorého sa má odstrániť koncový znak nového riadku.
|
* - line: Reťazec, z ktorého sa má odstrániť koncový znak nového riadku.
|
||||||
*
|
|
||||||
* Príklad použitia:
|
|
||||||
* char buffer[256];
|
|
||||||
* fgets(buffer, sizeof(buffer), stdin);
|
|
||||||
* trim_newline(buffer); // Odstráni '\n' z konca reťazca, ak existuje.
|
|
||||||
*/
|
*/
|
||||||
void trim_newline(char *line) {
|
void trim_newline(char *line) {
|
||||||
size_t len = strlen(line);
|
size_t len = strlen(line);
|
||||||
@ -157,7 +152,7 @@ float calculate(float num1, char op, float num2, int *error) {
|
|||||||
case '/':
|
case '/':
|
||||||
// Pred delením overíme, či nedochádza k deleniu nulou
|
// Pred delením overíme, či nedochádza k deleniu nulou
|
||||||
if (fabs(num2) < EPSILON) {
|
if (fabs(num2) < EPSILON) {
|
||||||
*error = 1;
|
*error = 1; // Chyba: delenie nulou
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
res = num1 / num2;
|
res = num1 / num2;
|
||||||
@ -180,10 +175,10 @@ float calculate(float num1, char op, float num2, int *error) {
|
|||||||
* 2. Predpokladá sa, že riadok nie je prázdny (kontrola prázdnoty sa vykoná v main).
|
* 2. Predpokladá sa, že riadok nie je prázdny (kontrola prázdnoty sa vykoná v main).
|
||||||
* 3. Pokúsi sa rozparsovať riadok na jednotlivé časti: prvé číslo, operátor, druhé číslo a výsledok.
|
* 3. Pokúsi sa rozparsovať riadok na jednotlivé časti: prvé číslo, operátor, druhé číslo a výsledok.
|
||||||
* 4. Ak parsovanie zlyhá, nastaví output na "CHYBA".
|
* 4. Ak parsovanie zlyhá, nastaví output na "CHYBA".
|
||||||
* 5. Ak ide o delenie nulou, tiež nastaví output na "CHYBA".
|
* 5. Vykoná operáciu a porovná vypočítaný výsledok so zadaným výsledkom s toleranciou EPSILON.
|
||||||
* 6. Vykoná operáciu a porovná vypočítaný výsledok so zadaným výsledkom s toleranciou EPSILON.
|
|
||||||
* - Ak sa výsledok zhoduje, nastaví output na "OK".
|
* - Ak sa výsledok zhoduje, nastaví output na "OK".
|
||||||
* - Ak sa výsledok nezhoduje, nastaví output na "ZLE".
|
* - Ak sa výsledok nezhoduje, nastaví output na "ZLE".
|
||||||
|
* 6. V prípade delenia nulou, keď calculate vráti chybu, program nastaví output na "ZLE".
|
||||||
*
|
*
|
||||||
* Parametre:
|
* Parametre:
|
||||||
* - line: Vstupný riadok (napr. "10.0 / 2.0 = 5.0").
|
* - line: Vstupný riadok (napr. "10.0 / 2.0 = 5.0").
|
||||||
@ -209,16 +204,11 @@ void process_line(const char *line, char *output, size_t output_size) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Overenie delenia nulou: ak ide o delenie a menovateľ je nulový, nastane chyba
|
|
||||||
if (op == '/' && fabs(num2) < EPSILON) {
|
|
||||||
snprintf(output, output_size, "CHYBA");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int calcError = 0;
|
int calcError = 0;
|
||||||
float calculatedResult = calculate(num1, op, num2, &calcError);
|
float calculatedResult = calculate(num1, op, num2, &calcError);
|
||||||
if (calcError) {
|
if (calcError) {
|
||||||
snprintf(output, output_size, "CHYBA");
|
// V prípade delenia nulou (alebo inej chyby v calcultion) vypíšeme "ZLE"
|
||||||
|
snprintf(output, output_size, "ZLE");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -270,4 +260,4 @@ int main(int argc, char *argv[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user