Update 'a1/program.c'
This commit is contained in:
parent
69ddebd758
commit
57a5a321d5
190
a1/program.c
190
a1/program.c
@ -4,66 +4,152 @@
|
|||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
|
struct uloha{
|
||||||
|
|
||||||
|
float result;
|
||||||
|
char Output[25];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
char* ClearString(const char* str) {
|
||||||
|
const char* separator = " "; // Declare separator as const pointer
|
||||||
|
char* novy_string = malloc(strlen(str) + 1); // Allocate memory for new string
|
||||||
|
if (novy_string == NULL) {
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
novy_string[0] = '\0'; // Initialize the new string
|
||||||
|
|
||||||
|
char* token;
|
||||||
|
char* kopie_str = strdup(str); // Make a copy of the original string
|
||||||
|
if (kopie_str == NULL) {
|
||||||
|
free(novy_string); // Free memory allocated for new string
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the first token
|
||||||
|
token = strtok(kopie_str, separator);
|
||||||
|
|
||||||
|
// Iterate through the remaining tokens
|
||||||
|
while (token != NULL) {
|
||||||
|
strcat(novy_string, token); // Append token to the new string
|
||||||
|
token = strtok(NULL, separator); // Get the next token
|
||||||
|
}
|
||||||
|
|
||||||
|
free(kopie_str); // Free the copied string as it's no longer needed
|
||||||
|
|
||||||
|
return novy_string;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int main(){
|
int main(){
|
||||||
|
|
||||||
char pole[100];
|
char pole[100];
|
||||||
double cislo1;
|
memset(pole,0,100);
|
||||||
double cislo2;
|
|
||||||
double vysledok;
|
|
||||||
char znamienko;
|
|
||||||
char* token;
|
|
||||||
char vysledky[50][50]; // pole pre ukladanie vysledkov
|
|
||||||
int pocet = 0;
|
|
||||||
|
|
||||||
while (1) {
|
char CistePole[100];
|
||||||
char* a = fgets(pole, 100, stdin);
|
|
||||||
|
|
||||||
if (pole[0] == '\n') { //ci je riadok prazdny, ci sa stlacil enter
|
float cislo1;
|
||||||
break;
|
float cislo2;
|
||||||
}
|
char znamienko;
|
||||||
|
|
||||||
token = strtok(pole, " "); //rozdelenie retazca podla medzier
|
char* token;
|
||||||
cislo1 = atof(token); // premena stringu na desatinne cislo a priradenie cislu1
|
int priklad = 0;
|
||||||
token = strtok(NULL, " "); //pokracovanie v rozdelovani retazca
|
|
||||||
znamienko = token[0]; //vrati ukazatel na nasledujuci token, cize znamienko
|
|
||||||
token = strtok(NULL, " =\n");
|
|
||||||
cislo2 = atof(token);
|
|
||||||
token = strtok(NULL, " =\n");
|
|
||||||
vysledok = atof(token);
|
|
||||||
|
|
||||||
double realny;
|
int chyba = 0;
|
||||||
|
|
||||||
switch (znamienko){
|
struct uloha excel[100];
|
||||||
case '+':
|
|
||||||
realny = cislo1 + cislo2;
|
|
||||||
break;
|
|
||||||
case '-':
|
|
||||||
realny = cislo1 - cislo2;
|
|
||||||
break;
|
|
||||||
case '*':
|
|
||||||
realny = cislo1 * cislo2;
|
|
||||||
break;
|
|
||||||
case '/':
|
|
||||||
realny = cislo1 / cislo2;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
printf("CHYBA\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (realny == vysledok){
|
while (1) {
|
||||||
strcpy(vysledky[pocet], "OK"); //kopiruje vysledok do pola vysledky
|
char* a = fgets(pole, 100, stdin);
|
||||||
}
|
|
||||||
else{
|
|
||||||
strcpy(vysledky[pocet], "ZLE");
|
|
||||||
}
|
|
||||||
pocet++;
|
|
||||||
}
|
|
||||||
|
|
||||||
//vypis vysledkov
|
if (pole[0] == '\n' || a == NULL ) {
|
||||||
for (int i = 0; i < pocet; i++) {
|
break;
|
||||||
printf("%s\n", vysledky[i]);
|
}
|
||||||
}
|
//CHECK
|
||||||
|
for(int i = 0; i<strlen(pole); i++){
|
||||||
|
|
||||||
return 0;
|
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;
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user