Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Название темы: Ввод формул
Показать сообщение отдельно

Аватара для Doom77

Пользователь


Сообщения: 69
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вот нашел пример ввода пытаюсь добавить функцию sin получаеться только не в нутри примера. Где ошибка? Вместо sin надо вводить , ))))))))))))))))))

Код: Выделить весь код
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <ctype.h>
#include <assert.h>

int tok;
int b=2;
double tokval, x;

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();

// numpar ::= number | '(' expr ')'
double numpar() {
    if (tok == 'n') { double x = tokval; skip('n'); return x; }
    skip('('); double x = expr(); skip(')'); return x;
}

// factor ::= numpar | numpar '^' factor
double factor() {
    double x = numpar();
    if (tok == '^') { skip('^'); x = pow(x, factor()); }
    return x;
}

// term ::= factor | term '*' factor | term '/' factor
double term() {
    double x = factor();
    for (;;) {
        if (tok == '*') { skip('*'); x *= factor(); }
        else if (tok == '/') { skip('/'); x /= factor(); }
        else return x;
    }
}

// expr ::= term | expr '+' term | expr '-' term
double expr() {
    double x = term();
    for (;;) {
        if (tok == '+') { skip('+'); x += term(); }
        else if (tok == '-') { skip('-'); x -= term(); }
        else return x;
    }
}
double sinn(){
	double x= expr();
	for(;;){
	
		if (tok == ',') { skip(','); x = sin(expr());}
		return x;
	}}

int main() {
    next();
    while (tok != EOF) {
        if (tok == '\n') { skip('\n'); continue; }
        printf("%.9g\n", sinn());
    }
    return 0;
}

Последний раз редактировалось Drongo, 04-11-2009 в 16:08. Причина: [code] - #


Отправлено: 21:34, 03-11-2009 | #4

Название темы: Ввод формул