Update 'a1/program.c'

This commit is contained in:
Tokarčík 2024-03-28 23:51:44 +00:00
parent 69ddebd758
commit 57a5a321d5

View File

@ -1,69 +1,155 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <math.h> #include <math.h>
#include <ctype.h> #include <ctype.h>
#include <stdlib.h> #include <stdlib.h>
int main(){
struct uloha{
char pole[100];
double cislo1; float result;
double cislo2; char Output[25];
double vysledok; };
char znamienko;
char* token;
char vysledky[50][50]; // pole pre ukladanie vysledkov char* ClearString(const char* str) {
int pocet = 0; const char* separator = " "; // Declare separator as const pointer
char* novy_string = malloc(strlen(str) + 1); // Allocate memory for new string
while (1) { if (novy_string == NULL) {
char* a = fgets(pole, 100, stdin);
return NULL;
if (pole[0] == '\n') { //ci je riadok prazdny, ci sa stlacil enter }
break; novy_string[0] = '\0'; // Initialize the new string
}
char* token;
token = strtok(pole, " "); //rozdelenie retazca podla medzier char* kopie_str = strdup(str); // Make a copy of the original string
cislo1 = atof(token); // premena stringu na desatinne cislo a priradenie cislu1 if (kopie_str == NULL) {
token = strtok(NULL, " "); //pokracovanie v rozdelovani retazca free(novy_string); // Free memory allocated for new string
znamienko = token[0]; //vrati ukazatel na nasledujuci token, cize znamienko
token = strtok(NULL, " =\n"); return NULL;
cislo2 = atof(token); }
token = strtok(NULL, " =\n");
vysledok = atof(token); // Get the first token
token = strtok(kopie_str, separator);
double realny;
// Iterate through the remaining tokens
switch (znamienko){ while (token != NULL) {
case '+': strcat(novy_string, token); // Append token to the new string
realny = cislo1 + cislo2; token = strtok(NULL, separator); // Get the next token
break; }
case '-':
realny = cislo1 - cislo2; free(kopie_str); // Free the copied string as it's no longer needed
break;
case '*': return novy_string;
realny = cislo1 * cislo2; }
break;
case '/':
realny = cislo1 / cislo2;
break; int main(){
default:
printf("CHYBA\n"); char pole[100];
return 1; memset(pole,0,100);
}
char CistePole[100];
if (realny == vysledok){
strcpy(vysledky[pocet], "OK"); //kopiruje vysledok do pola vysledky float cislo1;
} float cislo2;
else{ char znamienko;
strcpy(vysledky[pocet], "ZLE");
} char* token;
pocet++; int priklad = 0;
}
int chyba = 0;
//vypis vysledkov
for (int i = 0; i < pocet; i++) { struct uloha excel[100];
printf("%s\n", vysledky[i]);
} while (1) {
char* a = fgets(pole, 100, stdin);
return 0;
if (pole[0] == '\n' || a == NULL ) {
break;
}
//CHECK
for(int i = 0; i<strlen(pole); i++){
if(isdigit(pole[i]==0)){
if(pole[i] == '.'){
continue;
}
strcpy(excel[priklad].Output, "CHYBA");
chyba = 1;
}
}
if(chyba == 0){
char* ptrc = ClearString(pole);
strcpy(CistePole, ptrc);
char znamienka[] ="+-*/";
char* endptr;
cislo1 = strtof(CistePole, &endptr);
znamienko = *endptr;
cislo2 = strtof(endptr + 1, &endptr);
excel[priklad].result = strtof(endptr + 1, NULL);
//printf("STRUCT RESULT: %f\n",excel[priklad].result);
//CHECK ZNAMIENKA
for(int i = 0; i<4;i++){
if(strchr(znamienka,znamienko)==NULL){
chyba=2;
strcpy(excel[priklad].Output, "CHYBA");
break;
}
}
if(chyba!=2){
float realny = 0;
if (znamienko == '+') {
realny = cislo1 + cislo2;
} else if (znamienko == '-') {
realny = cislo1 - cislo2;
} else if (znamienko == '*') {
realny = cislo1 * cislo2;
} else if (znamienko == '/') {
realny = cislo1 / cislo2;
} else {
strcpy(excel[priklad].Output, "CHYBA");
return 1;
}
realny = round(realny * 100) / 100;
if (realny == excel[priklad].result){
strcpy(excel[priklad].Output, "OK"); //kopiruje vysledok do pola vysledky
}
else{
strcpy(excel[priklad].Output, "ZLE");
}
}
}
priklad++;
}
//vypis vysledkov
for (int i = 0; i < priklad; i++) {
printf("%s\n",excel[i].Output);
}
return 0;
} }