Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/12: Рейтинг темы: голосов - 12, средняя оценка - 4.83
spirit_trapper
1

Распознать и вычислить математическое выражение, указанное в текстовом файле

17.01.2010, 23:45. Показов 2497. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется строковый калькулятор и текстовый файл 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]
Мне кажется, я чего-то где-то не дописал. Вот где - понять не могу. Помогите.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.01.2010, 23:45
Ответы с готовыми решениями:

В заданном текстовом файле нужно перечислить в обратном словарном порядке все различные слова из латинких букв которые содержат указанное сочетание бу
В заданном текстовом файле нужно перечислить в обратном словарном порядке все различные слова из...

Вычислить для заданного n указанное выражение
Добрый день. Текст задачи - Вычислить для заданного n указанное выражение. Помогите, пожалуйста,...

Вычислить для заданного n указанное выражение
Такая вот задача: Вычислить для заданного n указанное выражение. ...

Вычислить математическое выражение
Как записать в С++ такое: (a+b)^3 - (a^3+3ba^2) / 3ab^2 + b^2 Где а = 100 b = 0,001 ...

1
Evg
Эксперт CАвтор FAQ
21280 / 8303 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
18.01.2010, 10:08 2
В примере не вижу ни одного обращения к файлу

Почитай вот этот пост Пишем свой интерпретатор языка BASIC
И, если что-то непонятно (о чём там речь), то немного назад и немного вперёд. Там описана теория того, как должен работать парсер
0
18.01.2010, 10:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.01.2010, 10:08
Помогаю со студенческими работами здесь

Вычислить математическое выражение
Вычислить x=(13+sqrt(7))/(7+sqrt(13))+(15+sqrt(12))/(sqrt(15)+12)+(sqrt(21)+32)/(sqrt(32)+21) ...

Вычислить математическое выражение
Помогите пожалуйста вычислить заданное выражение

Вычислить математическое выражение (Z=...)
Вычислить математическое выражение

Вычислить математическое выражение Y=A/X-B
Помогите решить задачу на ассемблере, можно использовать любой микроконтроллер. Y=A/X-B; Где А=23;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru