Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Анализатор формул


Автор: TheX3 4.11.2007, 14:05
Есть простой анализатор формул ( " / * - + ( ) "  ). 
Код

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.h>

double calc(char op)
{
    double a,b,c=0.0;
    char op1='+', op2, op3;
    while(op1!=op)
    {
        if(scanf("%lg %c",&a, &op2)!=2 && getchar()=='(')
        {    a=calc(')'); scanf(" %c",&op2);    }
        while(op2=='*' || op2=='/')
        {
            if(scanf("%lg %c",&b, &op3)!=2 && getchar()=='(')
            {    b=calc(')'); scanf(" %c",&op3);    }
            if(op2=='*')a*=b;
            else if(op2=='/')a/=b;
            op2=op3;
        }
        if(op1=='+')c+=a;
        else if(op1=='-')c-=a;
        op1=op2;
    }
    return c;
}
int main()
{
    setlocale(LC_CTYPE,".866");
    do
    {
        system("cls");
        wprintf(L"Введите формулу для вычисления и закончите ее знаком '='\n");
        printf("%lG\n",calc('='));
        wprintf(L"\nEsc закончить, любая клавиша - продолжить...");
    }while(getch()!=0x1B);

    return 0;
}


Поставлена задача:
Дана формула(в файле). Нам надо прочитать из файла,проанализировать и выдать ответ на экран или в файл.
мой черновик:
Код

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include<fstream.h>
#include<iostream.h>

char calc(char op)
{
    char a,b,c;
    char op1='+', op2, op3;
ifstream file;
file.open("d:\test.txt",ios::in);
    while(op1!=op)
    {
        if((file.get(a)&&file.get(op2)) && file.get()=='(')
        {    a=calc(')'); file.get(op2);    }
        while(op2=='*' || op2=='/')
        {
            if((file.get(b)&&file.get(op3)) && file.get()=='(')
            {    b=calc(')'); file.get(op3);    }
            if(op2=='*')a*=b;
            else if(op2=='/')a/=b;
            op2=op3;
        }
        if(op1=='+')c+=a;
        else if(op1=='-')c-=a;
        op1=op2;
    }
file.close();
    return c;
}
int main()
{

        printf("%c\n",calc('='));


    return 0;
}


Автор: bsa 4.11.2007, 16:32
Где вопрос?
Если просто хотел похвастаться, то смотри, как пишутся калькуляторы (не мое и не проверял, просто очень маленький код): http://alexott-ru.blogspot.com/2007/06/boostspirit.html

Автор: TheX3 4.11.2007, 16:35
Вопрос очень простой, нужно сделать чтение из файла,у меня с клавиатуры. Как это реализовать? есть идеи ,что при помощи getline ... кто знает подскажите плз smile 

Автор: bsa 4.11.2007, 16:45
Код
std::string line;
std::istream file;
...
std::getline(file, line);
...

Рекомендую заглянуть сюда: http://www.sgi.com/tech/stl/

Автор: jonie 4.11.2007, 16:48
bsa или вот еще : http://dklab.ru/chicken/nablas/10.html

Автор: bsa 4.11.2007, 16:54
Цитата(jonie @ 4.11.2007,  16:48)
bsa или вот еще : http://dklab.ru/chicken/nablas/10.html

Последняя строчка на странице заставила улыбнуться. smile 

Автор: TheX3 4.11.2007, 17:48
Эм,народ,спасибо,но помоему вторая ссылка не в тему,а первая на английском и тоже не совсем дает ответ на вопрос  smile 

Автор: bsa 4.11.2007, 18:08
Цитата(TheX3 @ 4.11.2007,  17:48)
Эм,народ,спасибо,но помоему вторая ссылка не в тему,а первая на английском и тоже не совсем дает ответ на вопрос  smile

Ну что на это можно сказать - учи английский и матчасть.

Автор: TheX3 5.11.2007, 10:54
Цитата(bsa @ 4.11.2007,  18:08)
Цитата(TheX3 @ 4.11.2007,  17:48)
Эм,народ,спасибо,но помоему вторая ссылка не в тему,а первая на английском и тоже не совсем дает ответ на вопрос  smile

Ну что на это можно сказать - учи английский и матчасть.

Да при чем тут английский ? Там явно написано не то ,что я спрашиваю. 

Автор: bsa 5.11.2007, 11:02
Вообще-то я тебе ответил на вопрос: http://forum.vingrad.ru/index.php?showtopic=180263&view=findpost&p=1306172
И дал ссылку на документацию по STL. Именно в STL входит getline, как и string.

Автор: archimed7592 5.11.2007, 11:23
Цитата(TheX3 @  5.11.2007,  10:54 Найти цитируемый пост)
Там явно написано не то ,что я спрашиваю.  

А что ты спрашиваешь? smile

Автор: TheX3 6.11.2007, 23:08
Ту archimed7592

Дана формула(в файле). Нам надо прочитать из файла,проанализировать и выдать ответ на экран или в файл.
Мне говорили ,что тут надо сначала прочитать всю функцию,а потом уже анализировать. гетлин как раз читает строку,а вот как анализировать это уже вопрос )

Автор: archimed7592 6.11.2007, 23:19
Цитата(TheX3 @  5.11.2007,  10:54 Найти цитируемый пост)
Там явно написано не то ,что я спрашиваю.  
Цитата(TheX3 @  6.11.2007,  23:08 Найти цитируемый пост)
гетлин как раз читает строку

Там как раз это и написано smile.

Автор: TheX3 6.11.2007, 23:20
Блин,действительно учить надо английский! а русского варианта нету ?)

Автор: archimed7592 6.11.2007, 23:44
Цитата(TheX3 @  6.11.2007,  23:20 Найти цитируемый пост)
а русского варианта нету ?) 

http://www.google.ru/search?complete=1&hl=ru&q=STL&lr=lang_ru, но об их полноте и корректности сказать ничего не могу.

Автор: TheX3 6.11.2007, 23:45
Благодарю.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)