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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.88
Хакер
6 / 6 / 0
Регистрация: 15.03.2009
Сообщений: 83
#1

Реализовать программный калькулятор - C++

01.06.2009, 21:10. Просмотров 3124. Ответов 37
Метки нет (Все метки)

Нужно сделать на с++ следующее...

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

Прошу помощи.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2009, 21:10     Реализовать программный калькулятор
Посмотрите здесь:

Реализовать калькулятор, при помощи пользовательских классов - C++
Мне нужно сделать калькулятор, при помощи классов. Учитывая скобки( например: 3-2*(3+5)) Классы начали изучать буквально недавно. Поэтому...

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

Реализовать консольный калькулятор с выводом функций через параметры - C++
Мне задали реализовать консольный калькулятор с выводом функций через параметры. Функции + - * / Пример использования: #myCalck...

Калькулятор на Си. Как реализовать триногометрические ф-ции и функцию логарифм? - C++
Написал код в котором надо вводить каждый елемент(первое число, знак операции, второе число, знак операции, 3... знак "=") по отдельности....

Цикл: Реализовать приложение "калькулятор"... - C++
Доброе время суток! Скажите что не так? Сдал задачу, говорят не то!!! Реализовать приложение "калькулятор". Сделать защиту от...

Реализовать приложение "калькулятор" - C++
Приветствую всех, на завтра задачка, посоветовали обратится этому форуму!!! Часть сделал, но думаю, чего-то не хватает!!!:wall: За...

Реализовать класс "Калькулятор" - C++
Задание: Есть класс для работы с дробными числами ( 1.33 , -0.9, 99.333 и т.п. ) в котором уже реализована перегрузка операторов суммы,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
01.06.2009, 21:18     Реализовать программный калькулятор #2
Страуструп "Язык программирования С++"
вот у него есть в книге подобное
Хакер
6 / 6 / 0
Регистрация: 15.03.2009
Сообщений: 83
08.06.2009, 10:25  [ТС]     Реализовать программный калькулятор #3
Больше никаких идей нету?
rangerx
1931 / 1540 / 141
Регистрация: 31.05.2009
Сообщений: 2,908
08.06.2009, 10:56     Реализовать программный калькулятор #4
Обратная польская запись
Хакер
6 / 6 / 0
Регистрация: 15.03.2009
Сообщений: 83
14.06.2009, 13:01  [ТС]     Реализовать программный калькулятор #5
Там все так сложно описано...

Добавлено через 6 часов 47 минут 15 секунд
Помогите пожалуйста

Добавлено через 1 час 0 минут 46 секунд
Короче не сдам я лабу послезавтра...не знаю как сделать...

Добавлено через 13 часов 57 минут 36 секунд
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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int main(){
     char formula[100], oper1[50][50], zn[50],a1[15]="0123456789", a2[5]="+-*/";
     cin>>formula;
     int k=0,l,m,i=0,j=0,o=0,s,x=0,oper2[50];
     while(formula[k]!='\0'){
                             m=0;
                             for(l=0;l<10;l++){
                             if(formula[k]!=a1[l]){m++;}}
                             for(l=0;l<4;l++){
                             if(formula[k]!=a2[l]){m--;}}
                             if(m==6){
                                      cout<<formula[k]<<'=';//sluchai peremenoy
                                      cin>>oper1[i];
                                      i++;
                                      o=1;}
                             if(m==5){oper1[i][j]=formula[k];//sluchai cifri
                                      j++;
                                      o=0;}
                             if(m==7){zn[x]=formula[k];}//sluchai znaka
                             if(o==0){oper1[i][j]='\0';i++;
                             j=0;x++;
                             k++;}
                             for(x=0;x<=i;x++)
                             oper2[x]=atoi(oper1[x]);
                             for(x=0;x<i;x++){
                                              if(zn[x]=='*'){oper2[x+1]=oper2[x]*oper2[x+1];}
                                              if(zn[x]=='/'){oper2[x+1]=oper2[x]/oper2[x+1];}
                                              if(zn[x]=='*'||zn[x]=='/'){
                                                                         oper2[x]=0;
                                                                         if(x!=0){zn[x]=zn[x-1];}
                                                                         else {zn[x]='+';}}
                                                                         s=oper2[0];
                                                                         for(x=0;x<i;x++)
                                                                         {
                                                                                         if(zn[x]=='+'){s+=oper2[x+1];}
                                                                                         if(zn[x]=='-'){s-=oper2[x+1];}
                                                                                         }
                                                                                         cout<<'='<<s;}}
                                                                                         system("pause");}
Скажите где ошибка
alex2693
Сообщений: n/a
14.06.2009, 13:23     Реализовать программный калькулятор #6
в самом верху кода нету stdafx
когда я ввел этот класс открылся консоль...написал 4+4
получилось
4+4
=4=4=4

)))что то не правильно там написано....какой у тя компилятор?
Хакер
6 / 6 / 0
Регистрация: 15.03.2009
Сообщений: 83
14.06.2009, 13:33  [ТС]     Реализовать программный калькулятор #7
Borland
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.06.2009, 13:40     Реализовать программный калькулятор #8
Цитата Сообщение от alex2693 Посмотреть сообщение
в самом верху кода нету stdafx
когда я ввел этот класс открылся консоль...
stdafx - это НЕ КЛАСС это ЗАГОЛОВОЧНЫЙ ФАЙЛ stdafx.h.
windows.h, stdio.h, iostream, fstream - все что ты подключаешь с помощью #include, это все ЗАГОЛОВОЧНЫЕ ФАЙЛЫ. Вот они в свою очередь, могут содержать объявления классов, функций, констант и т.д. Описание здесь.
И еще консоль - слово ЖЕНСКОГО РОДА (открылась консоль).
Хакер
6 / 6 / 0
Регистрация: 15.03.2009
Сообщений: 83
14.06.2009, 15:43  [ТС]     Реализовать программный калькулятор #9
Весь гугл облазил,ничего толкового не нашел...может у кого-то есть хороший учебник по с++,где все написано,все функции и тд...потому что хорошего материала по строкам найти не могу...Страуструп это вообще отдельный разговор,там у него такой бред,что черт ногу сломит...
alex2693
Сообщений: n/a
14.06.2009, 16:13     Реализовать программный калькулятор #10
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
stdafx - это НЕ КЛАСС это ЗАГОЛОВОЧНЫЙ ФАЙЛ stdafx.h.
windows.h, stdio.h, iostream, fstream - все что ты подключаешь с помощью #include, это все ЗАГОЛОВОЧНЫЕ ФАЙЛЫ. Вот они в свою очередь, могут содержать объявления классов, функций, констант и т.д. Описание здесь.
И еще консоль - слово ЖЕНСКОГО РОДА (открылась консоль).
ну извини....
Хакер
6 / 6 / 0
Регистрация: 15.03.2009
Сообщений: 83
14.06.2009, 16:50  [ТС]     Реализовать программный калькулятор #11
Есть идеи?
alex2693
Сообщений: n/a
14.06.2009, 17:28     Реализовать программный калькулятор #12
лучше пользуйся visual studio 2008
Хакер
6 / 6 / 0
Регистрация: 15.03.2009
Сообщений: 83
14.06.2009, 17:34  [ТС]     Реализовать программный калькулятор #13
Я в нем вообще ничего запустить не могу,там какие-то ошибки левые вылазят...
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.06.2009, 17:35     Реализовать программный калькулятор #14
Цитата Сообщение от Humanitis Посмотреть сообщение
Страуструп "Язык программирования С++"
вот у него есть в книге подобное
Вот правильный совет, пробовал у Страуструпа смотреть, там даже глава так называется "Калькулятор"? Там конечно тяжеловато написано, но разобраться можно.
Хакер
6 / 6 / 0
Регистрация: 15.03.2009
Сообщений: 83
14.06.2009, 17:37  [ТС]     Реализовать программный калькулятор #15
Я весь пункт по калькулятору перечитал...извините я наверное сильно тупой...

Добавлено через 52 секунды
К тому же сижу 3-й час переустанавливаю компиляторы...уже не говоря что сам код писать надо(( ппц
Search..
Заказ софта
340 / 185 / 10
Регистрация: 26.05.2009
Сообщений: 863
14.06.2009, 18:27     Реализовать программный калькулятор #16
Самый крутой компилятор - это Microsoft Visual Studio 2005 !
exe-dealer
301 / 154 / 4
Регистрация: 07.06.2009
Сообщений: 538
14.06.2009, 18:40     Реализовать программный калькулятор #17
а скобки учитывать не надо чтоли?
ZZZed...
Сообщений: n/a
14.06.2009, 18:58     Реализовать программный калькулятор #18
Цитата Сообщение от Хакер Посмотреть сообщение
Весь гугл облазил,ничего толкового не нашел...может у кого-то есть хороший учебник по с++,где все написано,все функции и тд...потому что хорошего материала по строкам найти не могу...Страуструп это вообще отдельный разговор,там у него такой бред,что черт ногу сломит...
Есть похожий пример в книге Р.Лафоре "ООП в С++"
Только тут без переменных.


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
131
132
133
// parse.cpp
// программа разбора арифметических выражений
#include <iostream>
#include <cstring>
using namespace std;
const int LEN = 80;       // максимальная длина выражения
const int MAX = 40;       //
///////////////////////////////////////////////////////////
class Stack
{
  private:
    char st [ MAX ];      // массив данных
    int top;              // количество сохраненных данных
  public:
    Stack ( )              // конструктор
      { top = 0; }
    void push ( char var ) // поместить в стек
      { st [ ++top ] = var; }
    char pop ( )           // взять из стека
      { return st [ top-- ]; }
    int gettop ( )         // узнать количество элементов
      { return top; }
};
///////////////////////////////////////////////////////////
class express
{
  private:
    Stack s;                   // стек данных
    char* pStr;                // строка для ввода
    int len;                   // длина строки
  public:
    express ( char* ptr )      // конструктор
      {
        pStr = ptr;            // запоминаем указатель на строку
        len = strlen ( pStr ); // устанавливаем длину
      }
    void parse ( );            // разбор выражения
    int solve ( );             // получение результата
}
///////////////////////////////////////////////////////////
void express::parse ( ) // добавляем данные в стек
{
  char ch;              // символ из строки
  char lastval;         // последнее значение
  char lastop;          // последний оператор
 
  for ( int j = 0; j < len; j++ ) // для всех символов в строке
  {
    ch = pStr [ j ];    // получаем символ
 
    if ( ch >= '0' && ch <= '9' ) // если это цифра,
      s.push ( ch - '0' );        // то сохраняем ее значение
    else
    if ( ch == '+' || ch == '-' || ch == '*' || ch == '/' )
    {
      if ( s.gettop ( ) == 1 ) // если это первый оператор,
        s.push ( ch );         // помещаем его в стек
      else // иначе
      {
        lastval = s.pop ( ); // получаем предыдущее число
        lastop = s.pop ( );  // получаем предыдущий оператор
        // если это * или /, а предыдущий был + или -, то
        if ( ( ch == '*' || ch == '/' ) && ( lastop == '+' || lastop == '-' ) )
        {
          s.push ( lastop ); // отменяем последние два взятия из стека
          s.push ( lastval );
        }
        else
        {
          // помещаем в стек результат операции
          switch ( lastop )
          {
            case '+': s.push ( s.pop ( ) + lastval ); break;
            case '-': s.push ( s.pop ( ) - lastval ); break;
            case '*': s.push ( s.pop ( ) * lastval ); break;
            case '/': s.push ( s.pop ( ) / lastval ); break;
            default: cout << "\nНеизвестный оператор"; exit ( 1 );
          }
        }
        s.push ( ch ); // помещаем в стек текущий оператор
      }
    }
    else               // какая-то ерунда...
    {
      cout << "\nНеизвестный символ";
      exit ( 1 );
    }
  }
}
///////////////////////////////////////////////////////////
int express::solve ( ) // убираем данные из стека
{
  char lastval;        // предыдущее значение
 
  while ( s.gettop ( ) > 1 )
  {
    lastval = s.pop ( ); // получаем предыдущее значение
    switch ( s.pop ( ) ) // получаем предыдущий оператор
    {
      case '+': s.push ( s.pop ( ) + lastval ); break;
      case '-': s.push ( s.pop ( ) - lastval ); break;
      case '*': s.push ( s.pop ( ) * lastval ); break;
      case '/': s.push ( s.pop ( ) / lastval ); break;
      default: cout << "\nНеизвестный оператор"; exit ( 1 );
    }
  }
  return int ( s.pop ( ) ); // последний оператор в стеке – это результат
}
///////////////////////////////////////////////////////////
int main ( )
{
  char ans;            // 'д' или 'н'
  char string [ LEN ]; // строка для разбора
 
  cout << "\nВведите арифметическое выражение в виде 2+3*4/3-2"
          "\nЧисла должны быть из одной цифры"
          "\nНе используйте пробелы и скобки";
 
  do
  {
    cout << "\nВыражение: ";
    cin >> string;                          // вводим строку
    express* eptr = new express ( string ); // создаем объект для разбора
    eptr->parse ( );                        // разбираем
    cout << "\nРезультат: "
         << eptr->solve ( );                // решаем
    delete eptr;                            // удаляем объект
    cout << "Еще одно выражение (д/н)? ";
    cin >> ans;
  }
  while ( ans == 'д' );
  return 0;
}
Хакер
6 / 6 / 0
Регистрация: 15.03.2009
Сообщений: 83
14.06.2009, 19:20  [ТС]     Реализовать программный калькулятор #19
Не компилируется...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2009, 19:43     Реализовать программный калькулятор
Еще ссылки по теме:

Исправить программный код - C++
Вот программный код. При компиляции не показывает ошибок хотя она там есть я не могу её найти. P.S. C++ начал изучать недавно. ...

Программный выход из приложения - C++
Нужна команда программного выхода и консольного приложения типа как Close();

программный код по ШАхматам С++ - C++
Прошу помочь с программным кодом по шахматам подсказать что изменить или что добавить. Мне была дана задача сделать класс матрицы игры в...

Программный перезапуск программы - C++
Здравствуйте, как программно сделать перезапуск программы в программе (работаю в VS) . При этом путь к .exe должен определяться...

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


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

Или воспользуйтесь поиском по форуму:
ZZZed...
Сообщений: n/a
14.06.2009, 19:43     Реализовать программный калькулятор #20
Цитата Сообщение от Хакер Посмотреть сообщение
Не компилируется...
ага... после класса express ; поставь
Yandex
Объявления
14.06.2009, 19:43     Реализовать программный калькулятор
Ответ Создать тему
Опции темы

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