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

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

Войти
Регистрация
Восстановить пароль
 
Daemon_88
1 / 1 / 0
Регистрация: 03.02.2013
Сообщений: 54
#1

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

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

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

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

Дана строка, изображающая арифметическое выражение. Найти значение выражения - C++
дана строка, изображающая арифмитическое вырожение вида "<число>+или-<число>+или-<число>+или-.....<число>+или->" где на месте знака...

Дана строка, изображающая арифметическое выражение. Вывести значение - C++
помогите пожалуйста решить 1)Дана строка, изображающая арифметическое выражение вида «<циф- ра>±<цифра>±…±<цифра>», где на месте ...

Дана строка символов. Подсчитать общее число вхождений символов .,+ в строку - C++
Здравствуйте. Дана строка символов. Подсчитать общее число вхождений символов .,+ в строку. Как такую программу сделать? Заранее спасибо за...

Дана строка символов. Подсчитать общее число вхождений символов - C++
Привет всем. Дана строка символов. Подсчитать общее число вхождений символов .,+ в строку. Помогите реализовать данную программу. Нашел...

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

10
kuli4ok
31 / 31 / 3
Регистрация: 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
32 / 32 / 3
Регистрация: 12.11.2011
Сообщений: 109
Завершенные тесты: 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
_
201 / 145 / 9
Регистрация: 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
_
201 / 145 / 9
Регистрация: 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
_
201 / 145 / 9
Регистрация: 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
Привет! Вот еще темы с ответами:

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

Дана строка. Подсчитать, сколько различных символов встречается в ней. Вывести их на экран. - C++
Помогите решить задачи: 1. Найти все простые натуральные числа, не превосходящие n, двоичная запись которых представляет собой палиндром,...

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

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


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

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

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