pumpit
This commit is contained in:
		
							parent
							
								
									d9f282243a
								
							
						
					
					
						commit
						c513d24ba7
					
				
							
								
								
									
										
											BIN
										
									
								
								du4/program
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								du4/program
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										183
									
								
								du4/program.c
									
									
									
									
									
								
							
							
						
						
									
										183
									
								
								du4/program.c
									
									
									
									
									
								
							@ -9,15 +9,11 @@
 | 
			
		||||
#define SCAN_SECOND_NUMBER 2
 | 
			
		||||
#define SCAN_SECOND_OPERATOR 3
 | 
			
		||||
#define SCAN_RESULT 4
 | 
			
		||||
// #define SCAN_END 5
 | 
			
		||||
 | 
			
		||||
char* scanValue(char *s, float *output);
 | 
			
		||||
char* scanOperator(char *s, char *output);
 | 
			
		||||
 | 
			
		||||
// bool isDigit(char c);
 | 
			
		||||
bool isOperator(char c);
 | 
			
		||||
// bool isFloatingPoint(char c);
 | 
			
		||||
// bool isWhitespace(char c);
 | 
			
		||||
bool isNewline(char c);
 | 
			
		||||
bool evaluate(float a, float b, float c, char op);
 | 
			
		||||
 | 
			
		||||
@ -25,84 +21,74 @@ void error();
 | 
			
		||||
 | 
			
		||||
int main(){
 | 
			
		||||
    char buffer[2048];
 | 
			
		||||
    // char str[512];
 | 
			
		||||
    char *retVal;
 | 
			
		||||
    
 | 
			
		||||
    float a;
 | 
			
		||||
    float b;
 | 
			
		||||
    float c;
 | 
			
		||||
    char operator;
 | 
			
		||||
    
 | 
			
		||||
    char *retVal = fgets (buffer, sizeof(buffer), stdin);
 | 
			
		||||
    
 | 
			
		||||
    if (retVal == 0 || isNewline(buffer[0]) == true) {
 | 
			
		||||
        puts("KONIEC");
 | 
			
		||||
    while ((retVal = fgets(buffer, sizeof(buffer), stdin)) != 0) {
 | 
			
		||||
        float a;
 | 
			
		||||
        float b;
 | 
			
		||||
        float c;
 | 
			
		||||
        char operator;
 | 
			
		||||
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
        if (retVal == 0 || isNewline(buffer[0]) == true) {
 | 
			
		||||
            // puts("KONIEC");
 | 
			
		||||
 | 
			
		||||
    int l = strlen(buffer);
 | 
			
		||||
 | 
			
		||||
    if (isNewline(buffer[l - 1]) == false) {
 | 
			
		||||
        error();
 | 
			
		||||
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    int scanStatus = SCAN_FIRST_NUMBER;
 | 
			
		||||
    char *currentChar = buffer;
 | 
			
		||||
    char *endChar = buffer + l - 1;
 | 
			
		||||
 | 
			
		||||
    // for (char *i = 0; i < l; i++) {
 | 
			
		||||
    //     // int forward = 0;
 | 
			
		||||
        
 | 
			
		||||
    //     char currentChar = buffer[i];
 | 
			
		||||
 | 
			
		||||
    //     if (i == l - 1 && isNewline(currentChar) == false) {
 | 
			
		||||
 | 
			
		||||
    //     }
 | 
			
		||||
    // }
 | 
			
		||||
 | 
			
		||||
    while (currentChar < endChar) {
 | 
			
		||||
        if (scanStatus == SCAN_FIRST_NUMBER) {
 | 
			
		||||
            retVal = scanValue(currentChar, &a);
 | 
			
		||||
        } else if (scanStatus == SCAN_FIRST_OPERATOR) {
 | 
			
		||||
            retVal = scanOperator(currentChar, &operator);
 | 
			
		||||
        } else if (scanStatus == SCAN_SECOND_NUMBER) {
 | 
			
		||||
            retVal = scanValue(currentChar, &b);
 | 
			
		||||
        } else if (scanStatus == SCAN_SECOND_OPERATOR) {
 | 
			
		||||
            char eqOp;
 | 
			
		||||
            
 | 
			
		||||
            retVal = scanOperator(currentChar, &eqOp);
 | 
			
		||||
 | 
			
		||||
            if (eqOp != '=') {
 | 
			
		||||
                retVal = 0;
 | 
			
		||||
            }
 | 
			
		||||
        } else if (scanStatus == SCAN_RESULT) {
 | 
			
		||||
            retVal = scanValue(currentChar, &c);
 | 
			
		||||
        } else {
 | 
			
		||||
            error();
 | 
			
		||||
 | 
			
		||||
            break;
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (retVal == 0) {
 | 
			
		||||
        int l = strlen(buffer);
 | 
			
		||||
 | 
			
		||||
        if (isNewline(buffer[l - 1]) == false) {
 | 
			
		||||
            error();
 | 
			
		||||
 | 
			
		||||
            break;
 | 
			
		||||
        } else if (scanStatus == SCAN_RESULT) {
 | 
			
		||||
            bool validResult = evaluate(a, b, c, operator);
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
            if (validResult == true) {
 | 
			
		||||
                puts("OK");
 | 
			
		||||
        int scanStatus = SCAN_FIRST_NUMBER;
 | 
			
		||||
        char *currentChar = buffer;
 | 
			
		||||
        char *endChar = buffer + l - 1;
 | 
			
		||||
 | 
			
		||||
        while (currentChar < endChar) {
 | 
			
		||||
            if (scanStatus == SCAN_FIRST_NUMBER) {
 | 
			
		||||
                retVal = scanValue(currentChar, &a);
 | 
			
		||||
            } else if (scanStatus == SCAN_FIRST_OPERATOR) {
 | 
			
		||||
                retVal = scanOperator(currentChar, &operator);
 | 
			
		||||
            } else if (scanStatus == SCAN_SECOND_NUMBER) {
 | 
			
		||||
                retVal = scanValue(currentChar, &b);
 | 
			
		||||
            } else if (scanStatus == SCAN_SECOND_OPERATOR) {
 | 
			
		||||
                char eqOp;
 | 
			
		||||
                
 | 
			
		||||
                retVal = scanOperator(currentChar, &eqOp);
 | 
			
		||||
 | 
			
		||||
                if (eqOp != '=') {
 | 
			
		||||
                    retVal = 0;
 | 
			
		||||
                }
 | 
			
		||||
            } else if (scanStatus == SCAN_RESULT) {
 | 
			
		||||
                retVal = scanValue(currentChar, &c);
 | 
			
		||||
            } else {
 | 
			
		||||
                puts("ZLE");
 | 
			
		||||
                error();
 | 
			
		||||
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
            if (retVal == 0) {
 | 
			
		||||
                error();
 | 
			
		||||
 | 
			
		||||
        currentChar = retVal;
 | 
			
		||||
        scanStatus++;
 | 
			
		||||
                break;
 | 
			
		||||
            } else if (scanStatus == SCAN_RESULT) {
 | 
			
		||||
                bool validResult = evaluate(a, b, c, operator);
 | 
			
		||||
 | 
			
		||||
                if (validResult == true) {
 | 
			
		||||
                    puts("OK");
 | 
			
		||||
                } else {
 | 
			
		||||
                    puts("ZLE");
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            currentChar = retVal;
 | 
			
		||||
            scanStatus++;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
@ -118,51 +104,6 @@ char* scanValue(char *s, float *output) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return retVal;
 | 
			
		||||
    
 | 
			
		||||
    // int outPosition = 0;
 | 
			
		||||
    // int l = strlen(s);
 | 
			
		||||
    // bool hasPoint = false;
 | 
			
		||||
 | 
			
		||||
    // for (int i = 0; i < l - 1; i++) {
 | 
			
		||||
    //     char c = s[i];
 | 
			
		||||
    //     char cNext = s[i+1];
 | 
			
		||||
    //     bool isError = (outPosition == 0 && isDigit(c) == false)
 | 
			
		||||
    //         || (outPosition > 0 && (
 | 
			
		||||
    //             (hasPoint == true && isFloatingPoint(c))
 | 
			
		||||
    //             || (hasPoint == false && isFloatingPoint(c) == true && isDigit(cNext) == false)
 | 
			
		||||
    //             || (isDigit(c) == true && (
 | 
			
		||||
    //                 (hasPoint == true && isOperator(cNext) == false && isWhitespace(cNext) == false && isNewline(cNext) == false)
 | 
			
		||||
    //                 || (hasPoint == false && isOperator(cNext) == false && isWhitespace(cNext) == false && isNewline(cNext) == false && isFloatingPoint(cNext) == false))
 | 
			
		||||
    //             )
 | 
			
		||||
    //             || (hasPoint == true && isDigit(c) == false)
 | 
			
		||||
    //             || (hasPoint == false && isFloatingPoint(c) == false && isDigit(c) == false)
 | 
			
		||||
    //         ));
 | 
			
		||||
 | 
			
		||||
    //     if (isError == true) {
 | 
			
		||||
    //         return 0;
 | 
			
		||||
    //     }
 | 
			
		||||
 | 
			
		||||
    //     if (isFloatingPoint(c)) {
 | 
			
		||||
    //         hasPoint = true;
 | 
			
		||||
    //         outPosition++;
 | 
			
		||||
            
 | 
			
		||||
    //         continue;
 | 
			
		||||
    //     }
 | 
			
		||||
 | 
			
		||||
    //     bool endsHere = isOperator(cNext) == true || isWhitespace(cNext) == true || isNewline(cNext) == true;
 | 
			
		||||
 | 
			
		||||
    //     if (endsHere == true) {
 | 
			
		||||
    //         break;
 | 
			
		||||
    //     }
 | 
			
		||||
 | 
			
		||||
    //     outPosition++;
 | 
			
		||||
    // }
 | 
			
		||||
 | 
			
		||||
    // if (outPosition > 0) {
 | 
			
		||||
    //     *output = strtof(s, s + outPosition - 1);
 | 
			
		||||
    // }
 | 
			
		||||
 | 
			
		||||
    // return outPosition;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char* scanOperator(char *s, char *output) {
 | 
			
		||||
@ -183,22 +124,10 @@ char* scanOperator(char *s, char *output) {
 | 
			
		||||
    return start + 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// bool isDigit(char c) {
 | 
			
		||||
//     return c >= '0' && c <= '9';
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
bool isOperator(char c) {
 | 
			
		||||
    return c == '+' || c == '-' || c == '*' || c == '/' || c == '=';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// bool isFloatingPoint(char c) {
 | 
			
		||||
//     return c == '.' || c == ',';
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
// bool isWhitespace(char c) {
 | 
			
		||||
//     return c == ' ' || c == '\t';
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
bool isNewline(char c) {
 | 
			
		||||
    return c == '\n';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user