Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
Daemon_88
1 / 1 / 0
Регистрация: 03.02.2013
Сообщений: 54
1

Дана строка символов, представляющих собой арифметическое выражение. Подсчитать результат выражения

24.02.2013, 14:31. Просмотров 1364. Ответов 10
Метки нет (Все метки)

Дана строка символов, представляющих собой арифметическое выражение. Подсчитать результат выражения.
Нужна ваша помощь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2013, 14:31
Ответы с готовыми решениями:

Дана строка символов, представляющих собой арифметическое выраже0ие. Вывести на экран результат данного выражения
Дана строка символов, представляющих собой арифметическое выраже0ие. Вывести на...

Дана строка, изображающая арифметическое выражение. Найти значение выражения
дана строка, изображающая арифмитическое вырожение вида...

Дана строка, изображающая арифметическое выражение. Вывести значение
помогите пожалуйста решить 1)Дана строка, изображающая арифметическое...

Дана строка символов. Подсчитать общее число вхождений символов .,+ в строку
Здравствуйте. Дана строка символов. Подсчитать общее число вхождений символов...

Дана строка символов. Подсчитать общее число вхождений символов
Привет всем. Дана строка символов. Подсчитать общее число вхождений символов...

10
kuli4ok
32 / 32 / 17
Регистрация: 10.10.2012
Сообщений: 88
24.02.2013, 14:38 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
#include <stdio.h>
 
int main()
{
    printf("Введите строку: ");
    char* buffer = new char[256];
    scanf("%s", buffer);
    char oper;
    int a, b;
    sscanf(buffer, "%d%c%d", &a, &oper, &b);
    int result;
    switch(oper)
    {                                                                                                                          
        case '+': result = a + b; break;
        case '-': result = a - b; break;
        case '*': result = a * b; break;
        case '/': result = a / b; break;
        /*при необходимости, добавишь сюда операции*/
        default: printf("Неизвестная операция!!!\n"); return 0;
    }
    printf("%d %c %d = %d\n", a, oper, b, result);
    return 0;
}
Ввод: 2*6
Вывод: 2 * 6 = 12
0
Daemon_88
1 / 1 / 0
Регистрация: 03.02.2013
Сообщений: 54
24.02.2013, 14:50  [ТС] 3
а через getche можно или нет? а то так не понятно

Добавлено через 8 минут
sscanf(buffer, "%d%c%d", &a, &oper, &b)
что эта строка делает ?
0
DPS
34 / 34 / 18
Регистрация: 12.11.2011
Сообщений: 115
Завершенные тесты: 1
24.02.2013, 16:48 4
Такой вот вариант(через стринги):

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
#include<iostream>
#include<sstream>       //для потока istringstream
#include<string>        //для строк
#include<process.h>     //для exit(0)
 
using std::string;      
using std::cin;
using std::cout;
using std::endl;
using std::istringstream;
 
int main()
{
    setlocale(LC_ALL,"Rus");    //русский язык
 
    cout<<"Введите строку(например, 100+3): ";
 
    string buffer;              //здесь храним строку
 
    getline(cin,buffer);        //вводим строку 
 
    istringstream in(buffer);   //связываем поток со строкой
 
    int a,b;            //слагаемые
    char oper;          //знак операции
 
    in>>a>>oper>>b;     //читаем из строки поочередно - первое число, знак операции, второе число
 
    switch(oper)
    {                                                                                                                          
        case '+': 
            cout<<a + b<<endl; break;
        case '-':
            cout<<a - b<<endl; break;
        case '*': 
            cout<<a * b<<endl; break;
        case '/': 
            cout<<a / b<<endl; break;
        default: 
            {
                cout<<"Какая-то ошибка *-("<<endl;
                 exit(-1);      //выходим в случае некорректной операции
            }
    }
   
    return 0;
}
1
Daemon_88
1 / 1 / 0
Регистрация: 03.02.2013
Сообщений: 54
24.02.2013, 17:42  [ТС] 5
но ведь операций может быть не две а больше
0
ya_noob
_
315 / 149 / 27
Регистрация: 08.10.2011
Сообщений: 432
24.02.2013, 18:01 6
вам нужен алгоритм для вычисления инфиксных выражений, а точнее для перевода инфиксных выражений в постфиксную (или префиксную) форму. а постфиксные (или префиксные) выражения вычисляются легко через стек или рекурсию.
Код писать не буду, т.к. он довольно мудрен, но скажу где есть эти алгоритмы: учебник Дейтела упражнения 20.12 и 20.13. только там есть ошибки в описании алгоритма (не правильно расставлены отступы в паре мест, что может запутать). этих ошибок нет в английской версии книги.
0
Daemon_88
1 / 1 / 0
Регистрация: 03.02.2013
Сообщений: 54
25.02.2013, 08:06  [ТС] 7
там нет такого упражнения
0
ya_noob
_
315 / 149 / 27
Регистрация: 08.10.2011
Сообщений: 432
25.02.2013, 14:12 8
Цитата Сообщение от Daemon_88 Посмотреть сообщение
там нет такого упражнения
Да ну. Вы меня обманываете. я вот сейчас сижу и смотрю на эти упражнения. Может быть дело в издании, у меня последнее 5-ое издание 2008 года, файл содержит 1454 страницы
Может быть вы не там смотрите. Под упражнениями я имел ввиду задачи в конце главы, там и описаны алгоритмы
0
Daemon_88
1 / 1 / 0
Регистрация: 03.02.2013
Сообщений: 54
25.02.2013, 17:50  [ТС] 9
Точно так, вы правы. У меня издание другое: 1011 страниц

Добавлено через 7 минут
можно страничку, а то я только сами задания нашёл

Добавлено через 6 минут
лучше название главы, я думаю там уж найду упражнения
0
ya_noob
_
315 / 149 / 27
Регистрация: 08.10.2011
Сообщений: 432
25.02.2013, 18:00 10
сейчас вот сидел писал где скачать нормальную книгу, на какой странице находятся данные упражнения и !!! даже номер строки сверху подсчитал, а потом понял, что вы просто дурака валяете и не нужны вам эти глупости с инфиксными выражениями. Пока!
0
Daemon_88
1 / 1 / 0
Регистрация: 03.02.2013
Сообщений: 54
25.02.2013, 18:05  [ТС] 11
Проще можно сделать?
0
25.02.2013, 18:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2013, 18:05

Дана строка, которая представляет арифметическое выражение. Проверить его корректность
Дана ленту, которая представляет арифметическое выражение. Проверить...

Дана строка символов. Определить количество слов, у которых первый и последний символы совпадают между собой.
Собственно само задание. 2)Дана строка символов. Определить количество слов,...

Дана строка. Подсчитать процентное содержание всех символов входящих в данную строку. C++
Дана строка. Подсчитать процентное содержание всех символов входящих в данную...


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

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

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