diff --git a/du4/program b/du4/program index cf3e0d4..713cc11 100755 Binary files a/du4/program and b/du4/program differ diff --git a/du4/program.c b/du4/program.c index 766d97b..6cd1b0c 100644 --- a/du4/program.c +++ b/du4/program.c @@ -2,75 +2,145 @@ #include #include #include +#include -int main() { +int main(){ - int i,j; // pro cyklus - double number1, number2, summary, rsum, msum; /*aby se mohlo počítat s desetinnými čísly*/ - char operand, equ; //načítání znaků - - scanf("%lf", &number1); // nacte prvni cislo, znamenko, druhe cislo - scanf("%c", &operand); - scanf("%lf", &number2); - scanf("%c", &equ); - scanf("%lf",&msum); + int i,j; + double number1, number2, summary, rsum, msum; + char operand, equ; +/* char input[1000]; + char num_str[30] = {0}; + float numbers[3]; + fgets(input, 999, stdin); + for (int i = 0, j =0; i < strlen(input); i++) { + char c = input[i]; + if (c==' ') continue; + if (c=='+') operand='+'; + if (c=='-') operand='-'; + if (c=='*') operand='*'; + if (c=='/') operand='/'; + if (c=='\n') break; + if (isdigit(c)) {num_str[j++] = c - '0';} + else if (j > 0) { + j = 0; + numbers[...] = atof(num_str); + } + } + } + // scanf("%lf", &number1); + //scanf("%lf", &number2); + //scanf("%lf",&msum); + +*/ + char* input = calloc(1000, 1); + while (1) { + + input = fgets(input, 1000, stdin); + if (input == NULL) break; + + fflush(stdin); + if (input[0] == '\n' || input[0] == EOF || strlen(input) <= 0) + break; + + float values[3] = {0}; + char operation = 0; + + int k = 0; + int num = strlen(input); + for (int i = 0; i < num; i++) { + + if (input[i] == ' ') + continue; + + if (isalpha(input[i])) + break; + - /*pokud se operand rovna deleni a delitel se rovna nule vypise chybu*/ - if((operand == '/') && (number2 == 0)){ + if (i < strlen(input) && (isdigit(input[i]) || input[i] == '.' || (input[i] == '-' && isdigit(input[i + 1])))) { + char temp[100] = {0}; + for (int j = 0; i < strlen(input) && (isdigit(input[i]) || input[i] == '.' || input[i] == '-'); j++) { + temp[j] = input[i++]; + } + i--; + + values[k++] = (float)atof(temp); + } else if (isdigit(input[i]) == 0 && input[i] != ' ' && input[i] != '\n' && input[i] != '=') { + + operation = input[i]; + } + } + + + if (k != 3) { + printf("CHYBA\n"); + continue; + } + + + if (operation == 0 && values[1] < 0) { + operation = '-'; + values[1] = abs(values[1]); + } + + + float result = 0; + + + +//////////////////////////////////////////////// + + /*if((operand == '/') && (number2 == 0)){ printf("Nulou sa nedá deli"); } if(operand !='+' && operand !='-' && operand !='*' && operand !='/'){ return 1; printf("\n"); - } - if(equ !='='){ - return 1; - printf("\n"); - - } - - else if(operand=='+'){ - rsum=number1+number2; + } + */ + msum=values[2]; + if(operation=='+'){ + rsum=values[0]+values[1]; if(msum==rsum){ printf("OK\n"); } else{ printf("ZLE\n"); } - printf("%lf\n",rsum); + //printf("%lf\n",rsum); } - else if(operand=='-'){ - rsum=number1-number2; + else if(operation=='-'){ + rsum=values[0]-values[1]; if(msum==rsum){ printf("OK\n"); } else{ printf("ZLE\n"); } - printf("%lf\n",rsum); + //printf("%lf\n",rsum); } - else if(operand=='*'){ - rsum=number1*number2; + else if(operation=='*'){ + rsum=values[0]*values[1]; if(msum==rsum){ printf("OK\n"); } else{ printf("ZLE\n"); } - printf("%lf\n",rsum); + //printf("%lf\n",rsum); } - else if(operand=='/'){ - rsum=number1/number2; + else if(operation=='/'){ + rsum=values[0]/values[1]; if(msum==rsum){ printf("OK\n"); } else{ printf("ZLE\n"); } - printf("%lf\n",rsum); - } -} - + //printf("%lf\n",rsum); + } + } + } \ No newline at end of file