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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ вопрос по интерпретации http://www.cyberforum.ru/cpp-beginners/thread133996.html
помогите пожалуйста с переводом проги с паскаля на си uses crt; const n=6; m=5; function Prost(z:integer):boolean;{функция логического типа, определяет простое или нет} var i:integer; begin
C++ Удаление строк из файла Имеется файл формата аа бб вв гг дд Как удалить введенную с клавиатуры строку? Только чтоб не оставалось пробелов http://www.cyberforum.ru/cpp-beginners/thread133954.html
массивы C++
Помогите плиз! нужно задать массив из 50 целых четырёхзначных чисел с помощью датчика случайных чисел. Создать массив, состоящий из индексов неповторяющихся элементов. Повторяющиеся элементы заменить числом равным количеству повторов этого элемента. я вообще не понимаю, как это сделать((
Работа с матрицами C++
помоготи с небольшой задачкой пожалуйста ) заранее благодарен Дана действительная матрица 7x7. Найти минимальное значение среди элементов, стоящих над главной диагональю, и максимальное среди элементов, находящихся ниже главной диагонали, а также их местоположение. Сформировать одномерный массив, содержащий сумму элементов четных строк и произведение элементов нечетных строк.
C++ вывод входного потока http://www.cyberforum.ru/cpp-beginners/thread133927.html
Помогите пожалуйста с программой. Дан код: int magic(int a, int b) { return b == 0 ? a : magic(b, a % b); } int main() { int a, b; scanf("%d%d", &a, &b); printf("%d\n", magic(a, b));
C++ Симплекс метод почему незапускается прога #include <iostream.h> #include <fstream.h> #include <iomanip.h> #include <string.h> using namespace std; fstream in( "lptask.txt", ios_base::in ); double tbl={ подробнее

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

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