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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Миша Колесников
1 / 1 / 0
Регистрация: 16.12.2011
Сообщений: 35
#1

Вычислить выражение записанное в стрке - C++

16.12.2011, 13:33. Просмотров 1286. Ответов 11
Метки нет (Все метки)

Здравствуйте. Подскажите как выполнить следующее: данна строка. необходимо вычислить выражение которое в ней записано и вывести. например: 4+3/2=5.5
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2011, 13:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вычислить выражение записанное в стрке (C++):

Вычислить выражение, записанное строкой - C++
Написать программу, которая использует класс string для анализа строки, содержащей математическое выражение, например, вида – «2 + 2 *...

Вычислить выражения записанное в текстом файле - C++
Вычислить выражения записанное в текстом файле(например - "пять плюс три умножить на сорок пять") Предусмотреть 4 ариф.операции и целые...

присвоить стрке двумерного масива значение - C++
у меня есть масив - mas; и вот кусок кода где надо присвоить второй строке масива значение 5.. вроде правильно написал не понимаю почему...

вычислить выражение - C++
Здравствуйте! Если есть у вас свободное время помогите с прогой. Заранее спасибо!

Вычислить выражение n++*m - C++
Есть математическое действие: n++*m Человек вводить значение n и m, а программа выполняет n++*m и выводит результат на экран. Напишите...

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

11
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
16.12.2011, 14:26 #2
http://ru.wikipedia.org/wiki/Обратная_польская_запись
1
Миша Колесников
1 / 1 / 0
Регистрация: 16.12.2011
Сообщений: 35
17.12.2011, 04:41  [ТС] #3
А как привести строку "4+3/2" к виду "4 3 2 / +" не подскажите?
0
alkagolik
Заблокирован
17.12.2011, 05:13 #4
алгоритм + обратная польская нотация

Добавлено через 2 минуты
вот еще. это я помню из учебника Тененбаума
1
Миша Колесников
1 / 1 / 0
Регистрация: 16.12.2011
Сообщений: 35
17.12.2011, 14:51  [ТС] #5
Спасибо. Алгоритм кажется понял. Осталось записать его на языке.
C++
1
2
3
4
[B]string[/B] Trans ( string st)
{
 
}
Скажите может быть такая функция? или она может быть только char?
Как посимвольно осуществить перебор строки?
Простите за такие вопросы пустяковые, просто с С до этого не имел дела))
0
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.12.2011, 15:00 #6
Цитата Сообщение от Миша Колесников Посмотреть сообщение
Простите за такие вопросы пустяковые, просто с С до этого не имел дела))
значит нужно открыть учебник и почитать, или вы нам предлагаете отвечать вам перефразироваными "цитатами" учебника?
2
Миша Колесников
1 / 1 / 0
Регистрация: 16.12.2011
Сообщений: 35
17.12.2011, 15:22  [ТС] #7
Ну чтобы узнать ответы на 2 этих элементарных вопроса нужно полкниги прочитать, а кода 2 строчки.
0
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
17.12.2011, 15:25 #8
Цитата Сообщение от Миша Колесников Посмотреть сообщение
Спасибо. Алгоритм кажется понял. Осталось записать его на языке.
C++
1
2
3
4
[B]string[/B] Trans ( string st)
{
 
}
Скажите может быть такая функция? или она может быть только char?
Как посимвольно осуществить перебор строки?
Простите за такие вопросы пустяковые, просто с С до этого не имел дела))
Да, такая функция вполне может быть.
Чтобы получить доступ к любому символу строки std::string, достаточно обратиться к нему, как к элементу массива. Т.е. если std::string stroka = "Hello", то stroka[0] будет равно 'H'
1
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
17.12.2011, 18:08 #9
Миша Колесников, вы статью по моей ссылке открывали? Внимательно читали? По всем ссылочкам ходили? По этой, например?
0
Миша Колесников
1 / 1 / 0
Регистрация: 16.12.2011
Сообщений: 35
17.12.2011, 18:29  [ТС] #10
silent_1991, да прочитал еще и гуглил. за ссылку премного Вам благодарен. но насколько мне хватило понимания кода там приведена функция вычисления уже постфиксной записи. То есть мне сначала нужно свое выражение записать в эту запись.
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
17.12.2011, 18:33 #11
Миша Колесников, там есть код перевода из инфиксной в постфиксную нотацию и на других языках, в частности, на C#, в котором совершенно не сложно разобраться.
0
Миша Колесников
1 / 1 / 0
Регистрация: 16.12.2011
Сообщений: 35
18.12.2011, 10:02  [ТС] #12
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
#include <stdio.h>
#include <string.h>
#include <windows.h>
 
int main(void)
{
        float stack[70];
        float res;
        int m = 0;
        char query[100];
 
        printf("Введите выражение: ");
        gets(query);
 
        for (int i = 0; i < strlen(query); i++)
        {
                if (query[i] >= '0' && query[i] <= '9')
                {
                        stack[m] = query[i] - '0';
                        m++;
                        continue;
                }
 
                switch (query[i])
                {
                        case '+':
                        {
                                res = stack[m - 2] + stack[m - 1];
                                break;
                        } 
                        case '-':
                        {
                                res = stack[m - 2] - stack[m - 1];
                                break;
                        }
                        case '*':
                        {
                                res = stack[m - 2] * stack[m - 1];
                                break;
                        }
                        case '/':
                        {
                                res = stack[m - 2] / stack[m - 1];
                                break;
                        }
                }
 
                stack[m - 2] = res;
                m--;
        }
 
        printf("Ответ: %f", res);
        system("pause");
 
        return 0;
}
Вы про этот код?
А все понял... там просто с использованием ООП код. Хочу попробовать без него сделать

Добавлено через 15 часов 17 минут
Составил следующий код перевода из инфиксной в постфиксную, но он почему то не делает то, что нужно. в чем ошибка?
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
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
    int j=0, k=0, prior[70];
    char stack[70];
    char st[255], outst[255];
            
    printf("Введите выражение: ");
    gets(st);
    for (int i = 0; i < strlen(st); i++)
    {
        if (st[i] >= '0' && st[i] <= '9')
        {
            outst[j] = st[i] - '0';
            j++;
            continue;
        }
        k++;
        switch (st[i])
        {
            case '+':
            {
                prior[k]=0;
                break;
            } 
            case '-':
            {
                prior[k]=0;
                break;
            } 
            case '/':
            {
                prior[k]=1;
                break;
            } 
            case '*':
            {
                prior[k]=1;
                break;
            } 
  
        }
        if (prior[k]>=prior[k-1])
        {
            stack[k]=st[i];
        }
        else 
        {
            for (int m=sizeof(stack); m<0; m--)
            {
                outst[j] = stack[m];
                stack[m]=0;
                j++;
            }
            stack[0]=st[i];
        }
    }
    printf("Ответ: %f", outst);
    system("pause");
 
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2011, 10:02
Привет! Вот еще темы с ответами:

Вычислить выражение - C++
5+a/b*2

Вычислить выражение - C++
Помогите пожалуйста нужен код для решения данного примера. y=\frac{arctg(bx)}{1+\sqrt{ax}} Формулы надо переписывать! Редактор формул...

Вычислить выражение - C++
Используя оператор if,вычислить заданное выражение для данных типа integer: f(x)=\begin{cases} 3\left|x \right| &amp; \text{ , } x \lt...

Вычислить выражение - C++
Добрый день. Буду благодарен если кто нибудь набросает решение. Нужно вычислить выражение: \frac{n\left(n-1 \right)\, ...\,...


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

Или воспользуйтесь поиском по форуму:
12
Yandex
Объявления
18.12.2011, 10:02
Ответ Создать тему
Опции темы

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