Форум программистов, компьютерный форум CyberForum.ru

Вычисления значения арифметического выражения на C++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.81
Алена5
2 / 2 / 0
Регистрация: 17.05.2010
Сообщений: 68
23.05.2010, 10:42     Вычисления значения арифметического выражения на C++ #1
Помогите, пожалуйста, создать приложение для вычисления значения арифметического выражения, которое может включать в себя действительные числа, а также круглые скобки и следующие операции: +, -, *, /, ^ (возведение в степень). Вычисления должны производиться с учетом скобок и приоритетов используемых операций. Предусмотреть корректную обработку возможных ошибок и информирование о них пользователя.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2010, 10:42     Вычисления значения арифметического выражения на C++
Посмотрите здесь:

C++ Приложение для вычисления значения арифметического выражения
Программа ,вычисляющаю результат вычисления арифметического выражения C++
[C++] Разработать программу для вычисления арифметического выражения и вывода полученного результата C++
C++ Программа разбора и вычисления значения арифметического выражения
Программа на С++ для вычисления арифметического выражения C++
организовать функцию для вычисления арифметического выражения записанного в постфиксной форме C++
C++ организовать функцию для вычисления арифметического выражения записанного в постфиксной форме
Реализовать программу для вычисления линейного арифметического выражения C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Cool4k
Сообщений: n/a
08.04.2012, 12:00     Вычисления значения арифметического выражения на C++ #2
Вот что я накатал ) вообще - всем кого будет еще интересовать данная задача - книга автор Шилдт "Полный справочник по С" там она подробно описана.. где-то в конце книги... Вот код (некоторые проверки ошибок опущены)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include<iostream>
#include<string.h>
#include<stdio.h>
#define ZNAK 1
#define CHISLO 2
using namespace std;
 
char *formula; //cодержит формулу
char leks[50]; //массив символов нашей формулы
char lek_tip;  //тип введенного символа
void Nachalo(double *result);
void sloz_vichet(double *result); //сложение-вычитание
void umnoz_del(double *result);   //умножение-деление
void step(double *result);        //степень
void skobki(double *result);      //скобки
void atom(double *result);        //
void leks_potok();
void get_leks();
int isdelim(char c);
void Nachalo(double *result){
    get_leks(); //вызываем функцию считывания символа
    sloz_vichet(result); //вызываем функцию 
}
void sloz_vichet(double *result){ //функция сложения-вычитания
    char up;
    double temp;
    umnoz_del(result);
    while((up = *leks) == '+' || up == '-'){
        get_leks();
        umnoz_del(&temp);
        switch(up){
        case '-':
            *result= *result-temp;
            break;
        case '+':
            *result= *result+temp;
            break;
}}}
void umnoz_del(double *result){ //функция умножения-деления
    char up;
    double temp;
    step(result);
    while((up= *leks)=='*'||up=='/'){
        get_leks();
        step(&temp);
        switch(up){
        case '*':
            *result= *result * temp;
            break;
        case '/':
            *result= *result / temp;
            break;
}}}
void step(double* result){ //расчет степени
    double temp,ex;
    int t;
    skobki(result);
    if(*leks=='^'){ //если встречен символ ^ 
        get_leks(); //вызываем get_leks
        step(&temp);
        ex= *result;
        if(temp==0.0){
            *result = 1.0;
            return;
        }
        for(t=temp-1;t>0;--t)
            *result= (*result) * (double)ex;
}}
void skobki(double *result){ //проверка на скобки
    if((*leks=='(')){
        get_leks();
        sloz_vichet(result);
        get_leks();
    }else
        atom(result);
}
void atom(double *result){
    if(lek_tip == CHISLO){
        *result=atof(leks);
        get_leks();
        return;
    }else cout<<"Oshibka!"<<endl;
}
void leks_potok(){
    char *t;
    t=leks;
    for(;*t;t++)
        formula--;
}
void get_leks(){
    char *temp; //указатель на чар
    lek_tip=0;  
    temp=leks;  //указателю присваиваем адресс элемента leks
    *temp='\0'; 
    if(!*formula) return; //если гичего не введено
    while(isspace(*formula))
        ++formula;
    if(strchr("+-*/^=()",*formula)){
        lek_tip=ZNAK;
        *temp++= *formula++;
    }
    else if(isdigit(*formula)){
        while(!isdelim(*formula))
            *temp++= *formula++;
        lek_tip=CHISLO;
    }
    *temp='\0';
}
int isdelim(char c){
    if(strchr("+-/*^=()",c)||c==9||c=='\r'||c==0)
        return 1;
    return 0;
}
 
int main(){
    double result; //обьявляем переменную результат
    char *p;       //указатель на символьный тип
    p=(char *)malloc(100); //выделяем место
    if(!p)                  //если ничего не введено - ошибка
        cout<<"Oshibka";
    do{
        formula=p;           //присваиваем нашу формулу указателю р
        cout<<"Vvedite virazenie: "<<endl;
        gets(formula);       //считываем формулу
        if(!*formula) break; 
        Nachalo(&result);    //в функцию Начало передаем результат
        cout<<"Result: "<<result<<endl<<endl;
    }while(*p);
    return 0;
}
Yandex
Объявления
08.04.2012, 12:00     Вычисления значения арифметического выражения на C++
Ответ Создать тему
Опции темы

Текущее время: 17:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru