Обновить 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