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

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

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

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

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

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

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

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

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Search..
Заказ софта
340 / 185 / 10
Регистрация: 26.05.2009
Сообщений: 863
14.06.2009, 18:27 #16
Самый крутой компилятор - это Microsoft Visual Studio 2005 !
1
exe-dealer
301 / 154 / 4
Регистрация: 07.06.2009
Сообщений: 538
14.06.2009, 18:40 #17
а скобки учитывать не надо чтоли?
1
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
Не компилируется...
0
ZZZed...
Сообщений: n/a
14.06.2009, 19:43 #20
Цитата Сообщение от Хакер Посмотреть сообщение
Не компилируется...
ага... после класса express ; поставь
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 1
14.06.2009, 19:49 #21
Цитата Сообщение от Search.. Посмотреть сообщение
Самый крутой компилятор - это Microsoft Visual Studio 2005 !
Это IDE а не компилятор.
1
Хакер
6 / 6 / 0
Регистрация: 15.03.2009
Сообщений: 83
14.06.2009, 19:52  [ТС] #22
Заработало,спс конечно,но это не то,мне надо сделать при помощи строк...
Я вот не знаю как сделать,чтобы во вводимой строке,делалась проверка на определенный символ,цифру,букву,знак операции и тп...
0
alex2693
Сообщений: n/a
14.06.2009, 20:16 #23
Цитата Сообщение от Search.. Посмотреть сообщение
Самый крутой компилятор - это Microsoft Visual Studio 2005 !
согласен...хах это легенда...но 2008 более улучшенный с более многоими библотеками...быстр еще...
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 1
14.06.2009, 20:18 #24
alex2693, смотри мой пост выше!.
1
alex2693
Сообщений: n/a
14.06.2009, 20:20 #25
Цитата Сообщение от ZZZed... Посмотреть сообщение
ага... после класса express ; поставь
а в самом вверху класс stdafx Не надо??
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 1
14.06.2009, 20:24 #26
Цитата Сообщение от alex2693 Посмотреть сообщение
а в самом вверху класс stdafx Не надо??
Нет.. это примочки студии(которые можно отключить или создавать пустые проекты)
1
alex2693
Сообщений: n/a
14.06.2009, 20:26 #27
после класс express идет ::

Добавлено через 2 минуты 19 секунд
Цитата Сообщение от ISergey Посмотреть сообщение
Это IDE а не компилятор.
ну и что?!.....пусть будеть и IDE
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 1
14.06.2009, 20:27 #28
Цитата Сообщение от alex2693 Посмотреть сообщение
после класс express идет ::
Это к чему. там код рабочий. кроме
Цитата Сообщение от ZZZed... Посмотреть сообщение
ага... после класса express ; поставь
1
CyBOSSeR
Эксперт C++
2302 / 1672 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.06.2009, 20:28 #29
Цитата Сообщение от alex2693 Посмотреть сообщение
а в самом вверху класс stdafx Не надо??
Повторяю во второй раз:
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
stdafx - это НЕ КЛАСС это ЗАГОЛОВОЧНЫЙ ФАЙЛ stdafx.h.
windows.h, stdio.h, iostream, fstream - все что ты подключаешь с помощью #include, это все ЗАГОЛОВОЧНЫЕ ФАЙЛЫ. Вот они в свою очередь, могут содержать объявления классов, функций, констант и т.д. Описание здесь.
И по поводу stdafx.h
При создании нового проекта (C++, далее любой из подпроектов, типа Console App, MFC App, или ATL Service) Visual Studio генерит кучку файлов, которые составляют костяк приложения. Среди этих файлов имеются два, которые служать для генерации файла предкомпилированных заголовков (precompiled headers). Первый -- stdafx.h, в нем хранятся все "основные" include-ы проекта, но, как правило, не входящие в сам проект, т.е. файлы типа windows.h, stdio.h, afxwin.h включаются, а CSomeSuperPuperProjectClass.h -- нет.
Второй -- stdafx.cpp, служит как "затравка" компилятору для компиляции этого самого .pch-файла (precompiled headers file)

В свойствах проекта для всех файлов ставиться опция "use this precompiled header" и указывается stdafx.h
Исключение -- stfafx.cpp, для него указывается "create precompiled header file" и, опять таки, указывается stdafx.h

Q: Для чего это сделано.
A: Все это сделано для ускорения компиляции проектов и не более того. Из-за того, что объем части общих .h-файлов превосходит все разумные пределы (например windows.h, цепляющий ещё десяток win*.h), и компилировать все эти заголовочники для каждого source-файлы просто накладно. Поэтому один раз генерится PCH-файл, а потом он (PCH) используется. Ускорение, кстати, в десятки раз, особенно заметное при работе с ATL/MFC проектами.

Q: Почему возникает ошибка "error looking precompiled header directive".
A: В каждом source-файле, для которого стоит опция "use this precompiled header" #include "stdafx.h" должно идти первым include

Q: Как избавится от генерации PCH-файлов
A: В свойствах проекта для файлов выставить "Not Using Precompiled Headers" или "Automatically Generate"

Q: Где находятся эти опции
A: VS6: Project settings -> C/C++ -> Precompiled Headers
VS.NET: Configuration Properties -> C/C++ -> Precompiled Headers

Q: Я настроил компиляцию DEBUG-версии на отказ использования PCH, но при компиляции RELEASE ошибка опять возникла.
A: Project setting для DEBUG/RELEASE представляю разные сущности. См. пред. пункт Q/A и настрой все для RELEASE-конфигурации.
1
alex2693
Сообщений: n/a
14.06.2009, 20:28 #30
Цитата Сообщение от ISergey Посмотреть сообщение
Нет.. это примочки студии(которые можно отключить или создавать пустые проекты)
когда я не ввожу stdafx у мня выдает ошибку...типо "не забыли ли подлючить этот класс?" на англ
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2009, 20:28
Привет! Вот еще темы с ответами:

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

Простой калькулятор и калькулятор с парсингом - C++
Ребят я совсем не давно только начал изучать сишку, решил написать простенький калькулятор который работает с 2 числами. Возник вопрос, как...

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

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


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

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

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