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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.81
Алена5
2 / 2 / 0
Регистрация: 17.05.2010
Сообщений: 68
#1

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

23.05.2010, 10:42. Просмотров 2923. Ответов 1
Метки нет (Все метки)

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

Написать программу вычисления значения арифметического выражения - C++
Написать программу вычисления значения арифметического выражения, согласно варианта индивидуального задания. Исходные данные a и b...

Программа разбора и вычисления значения арифметического выражения - C++
Написать программу разбора и вычисления значения арифметического выражения. На входе программы — строка, содержащая числа, скобки «(» и...

Приложение для вычисления значения арифметического выражения - C++
Здравствуйте , подскажите пожалуйста как решить вот эту задачу : Создать приложение для вычисления значения арифметического выражения,...

Программа на С++ для вычисления арифметического выражения - C++
помогите пожалуйста написать программу, для вычисления ниже приведенного выражения само выражение

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

Реализовать программу для вычисления линейного арифметического выражения - C++
Реализовать программу для вычисления линейного арифметического выражения

1
Cool4k
Сообщений: n/a
08.04.2012, 12:00 #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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2012, 12:00
Привет! Вот еще темы с ответами:

организовать функцию для вычисления арифметического выражения записанного в постфиксной форме - C++
Нужна программа: Организовать функцию для вычисления арифметического выражения записанного в постфиксной форме Заранее благодарю ...

Организовать функцию для вычисления арифметического выражения записанного в постфиксной форме - C++
Нужна программа: Организовать функцию для вычисления арифметического выражения записанного в постфиксной форме Заранее благодарю ...

Паскаль.Разработать программу для вычисления арифметического выражения и вывода полученного результата - C++
Ребят помогите Разработать программу для вычисления арифметического выражения и вывода полученного результата.Соответствующие исходные...

Параметризованная функция вычисления среднего арифметического значения массива элементов - C++
Опишите параметризованную функцию вычисления среднего арифметического значения мас- сива элементов


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru