Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2010, 23:45   #1
vetalij
Пользователь
 
Регистрация: 02.04.2009
Сообщений: 18
Вопрос калькулятор

Привет всем. помогите разобраца в коде. дали готовый код но я еще плохо разбираюсь что и к чему.
Кто сможет. подпишыте в коде коментарий к функции, для чего она и как работает.
Некоторые функции я знаю. но хотелось бы чтоб обяснили знающие люди.

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <ctype.h>
#include <assert.h>

int tok;
double tokval;

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(stderr, "Bad character: %c\n", c); abort();
	}
}

void skip(int t) { assert(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 main() {
	next();
	while (tok != EOF) {
		if (tok == '\n') { skip('\n'); continue; }
		printf("%.9g\n", expr());
	}
	return 0;
}
Это консольный калькулятор.

Последний раз редактировалось MaTBeu; 23.01.2010 в 02:34.
vetalij вне форума Ответить с цитированием
Старый 23.01.2010, 00:01   #2
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Для начала исправь программу на ошибки, потом можно будет проверить.
coNsept вне форума Ответить с цитированием
Старый 23.01.2010, 00:17   #3
vetalij
Пользователь
 
Регистрация: 02.04.2009
Сообщений: 18
По умолчанию

ну программа у меня работает нормально и во время компиляции ошыбок не показивает.

http://programmersforum.ru/attachmen...1&d=1264195287

вот всё из файла cpp
Вложения
Тип файла: txt калькулятор.txt (1.4 Кб, 152 просмотров)

Последний раз редактировалось MaTBeu; 23.01.2010 в 02:34.
vetalij вне форума Ответить с цитированием
Старый 25.01.2010, 21:04   #4
vetalij
Пользователь
 
Регистрация: 02.04.2009
Сообщений: 18
По умолчанию

Форум умирает. или оживает но редко. короч никто помогать не хочит.
vetalij вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Калькулятор Sekt Фриланс 4 22.10.2009 10:34
Калькулятор program09 Общие вопросы C/C++ 1 01.06.2009 15:39
калькулятор FARGO Общие вопросы Delphi 1 14.12.2008 23:01
Калькулятор Димарик Общие вопросы Delphi 1 04.10.2008 15:52
Калькулятор Nixtone Помощь студентам 7 03.07.2008 23:17