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

Нужно отредактировать код - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Функция: найти среднеквадратичное значение положительных элементов каждой строки матрицы http://www.cyberforum.ru/cpp-beginners/thread835196.html
Дан массив а<8,5> с использованием функции найти среднеквадратичное значение положительных элементов каждой строки массива Добавлено через 10 часов 48 минут Ребята хоть идею дайте?
C++ Функция, которая аннулирует двумерный динамический массив Здравствуйте! Подскажите пожалуйста функцию которая аннулирует двумерный динамический массив. Заранее благодарна. http://www.cyberforum.ru/cpp-beginners/thread835189.html
C++ Функция find
Что значит строчка: if(s.find(str,0) != -1)
C++ В главной функции main () ввести входные данные, и вызвав собственные функции, вычислить значение выражения и вывести результаты.
задание: 1. В главной функции main () ввести входные данные, и вызвав собственные функции, вычислить значение выражения и вывести результаты. Вычислить B = f (x, k, y) +0.8 f2 (x, y, y-k), при k = 0.6, x = 3.8, y = 0.042, если f (x, y, z) = 2y + x +4 z2 Заранее спасибо.
C++ Помочь в написании программы. (С матрицами) http://www.cyberforum.ru/cpp-beginners/thread835145.html
Здравствуйте, дорогие форумчане. ----------------------------------- Мне нужна ваша помощь. ----------------------------------- Не могу написать программу. Поможете, пожалуйста, реализовать? ----------------------------------- С меня много плюсов. Задание прикрепил на скрине. Заранее спасибо.
C++ Двухмерный массив (Определить сумму элементов, минимум среди сумм элементов диагоналей) Дана квадратная матрица!!! Определить 1)сумму элементов в тех строках которые не содержат отрицательных элементов. 2)минимум среди сумм элементов диагоналей параллельных главной диагонали матрицы. подробнее

Показать сообщение отдельно
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
11.04.2013, 22:32     Нужно отредактировать код
ошибки в этой программе можно перечеслять долго, целую диссертацию можно написать... какой-то фантаст, видимо набросал такой код?
я так понимаю вам надо обратную польскую нотацию разобрать

вот я попытался исправить, работает, но и это ещё не окончательный вариант, т.к. по идее надо ещё пробелы ставить, чтобы числа отделять друг от друга, этот вариант рабочий только для чисел 0..9
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
#include <iostream>
#include <string>
#include <stack>
 
int main()
{
std::stack <int> st;
std::string s="12+4*3+";
char symb;
int secoper,firoper,value, str ;
std::size_t n_s = 0;
for (int i=0;i<=s.size() ;i++)
{
    symb = s[n_s];
    ++n_s;
    switch (symb)
                {
                case '+':
                        secoper=st.top();
                        st.pop();
                        firoper=st.top();
                        st.pop();
                        value=secoper+firoper;
                        st.push(value);
                        break;
                case '-':
                        secoper=st.top();
                        st.pop();
                        firoper=st.top();
                        st.pop();
                        value=secoper-firoper;
                        st.push(value);
                        break;
                case '/':
                        secoper=st.top();
                        st.pop();
                        firoper=st.top();
                        st.pop();
                        value=secoper/firoper;
                        st.push(value);
                        break;
                case '*':
                        secoper=st.top();
                        st.pop();
                        firoper=st.top();
                        st.pop();
                        value=secoper*firoper;
                        st.push(value);
                        break;
                case 0 : break;
                 default : st.push(int(symb)-48);
                }
 
}
    std::cout<<st.top()<<std::endl;
    system("pause");
    return 0;
}
p.s. пример 12+4*3+ взят из википедии - http://ru.wikipedia.org/wiki/%D0%9E%...B8%D1%81%D1%8C

и программа правильно находит 15, но пробелы всё же надо учитывать, чтобы брать числа > 9

ваш исходный пример не выдерживает никакой критики, как и сама реализация...

Добавлено через 6 минут
да и по хорошему - надо double в контейнера стека завернуть, а не int, как у меня
 
Текущее время: 18:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru