spirit_trapper
|
|
1 | |
Распознать и вычислить математическое выражение, указанное в текстовом файле17.01.2010, 23:45. Показов 2497. Ответов 1
Метки нет (Все метки)
Имеется строковый калькулятор и текстовый файл message.txt Нужно чтобы калькулятор распознавал и вычислял математическое выражение, указанное в текстовом файле. т.е., грубо говоря, нужно чтобы при запуске калькулятор выдавал ответ на выражение, указанное в текстовом файле,а после этого мог работать в обычном режиме.
Проблема вот в чем: калькулятор не только не распознает выражение, но вообще не видит функций , связанных с текстовым файлом. Вот что у меня получилось (точнее не получилось): Код
[C]#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <ctype.h> int tok; double tokval; int ReadFile(char *fname); int next() { for(;;) { int c = getchar(); if (c == EOF || strchr("+-*/^()\n", c) != NULL) return tok = c; if (isspace(c)) continue; if (isdigit(c) || c == '.') { ungetc(c, stdin); scanf(" %lf", &tokval); return tok = 'n'; } fprintf(stdout, "Некорректный ввод: %c\n", c); abort(); } // return 0; } void skip(int t) {if (tok == t) next();} double expr(); double numpar() { if (tok == 'n') { double x = tokval; skip('n'); return x; } skip('('); double x = expr(); skip(')'); return x; } double factor() { double x = numpar(); if (tok == '^') { skip('^'); x = pow(x, factor()); } return x; } double term() { double x = factor(); for (;;) { if (tok == '*') { skip('*'); x *= factor(); } else if (tok == '/') { skip('/'); x /= factor(); } else return x; } } double expr() { double x = term(); for (;;) { if (tok == '+') { skip('+'); x += term(); } else if (tok == '-') { skip('-'); x -= term(); } else return x; } } int ReadFile(char *fname) { FILE *fo; int z; if((fo=fopen(fname,"rf"))==NULL) { printf("\nОшибка: "); perror(fname); return 1; } else fscanf(fo,"%d\n", &z); fclose(fo); return 0; } int main() { char *fname= "message.txt"; int r=ReadFile(fname); if (r == 0) { next(); while (tok != EOF) for (;;) { if (tok == r) {skip(r);continue;} printf("%.9g\n", expr()); continue; } } else next(); while (tok != EOF) for (;;) { if (tok == '\n') {skip('\n');continue;} printf("%.9g\n", expr()); } return 0; }[/C] |
17.01.2010, 23:45 | |
Ответы с готовыми решениями:
1
В заданном текстовом файле нужно перечислить в обратном словарном порядке все различные слова из латинких букв которые содержат указанное сочетание бу Вычислить для заданного n указанное выражение Вычислить для заданного n указанное выражение Вычислить математическое выражение |
18.01.2010, 10:08 | 2 |
В примере не вижу ни одного обращения к файлу
Почитай вот этот пост Пишем свой интерпретатор языка BASIC И, если что-то непонятно (о чём там речь), то немного назад и немного вперёд. Там описана теория того, как должен работать парсер
0
|
18.01.2010, 10:08 | |
18.01.2010, 10:08 | |
Помогаю со студенческими работами здесь
2
Вычислить математическое выражение Вычислить математическое выражение Вычислить математическое выражение (Z=...) Вычислить математическое выражение Y=A/X-B Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |