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

Стековый калькулятор - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ размер считываемой строки из файла http://www.cyberforum.ru/cpp-beginners/thread980844.html
открываю файл, пытаюсь считать строку в массив, массив через char* a=new char, есть ли функция, которая мне вернёт размер строки из файла? Или придётся 2 раза считывать файл, 1ый раз в какой-нибудь буфер, считая символы #include <iostream> #include <fstream> using namespace std; int main() { int n; ifstream file; file.open("text.txt");
C++ Калькулятор и стек Решил опробовать себя в С++. В Visual Studio C++ решил сделать мини калькулятор, который выполняет подсчет через стек. Причем парсит скобки дабы в них подсчитать в начале и только потом подсчитать все остальное. Реально реализовать такое? Подскажите, в какую сторону копать в плане стека и регулярки для скобок. Буду очень благодарен! http://www.cyberforum.ru/cpp-beginners/thread980842.html
Сортировка двоичным включением C++
У меня задание продемонстрировать в виде таблицы алгоритм роботы сортировки с двоичным включением на массиве 15,4,10,8,6,9,16,1.Написал программу,н оона раюотает неправильно.В чём ошибка? #include <iostream> #include <conio.h> using namespace std; void main() { int i,j,a,n,l,z,m,S,t,k; cout<<"Input n"; cin>>n;
параллельное программирование C++
Подскажите, пожалуйста! Возвожу положительные числа в степень, а выдается отрицательный результат. Как быть? #include <iostream> #include <stdio.h> #include <stdlib.h> #include <mpi.h> using namespace std;
C++ Рандомизация ответов http://www.cyberforum.ru/cpp-beginners/thread980816.html
Возникли некоторые проблемы, не знаю как сделать рандом ответов в тестирование, да так чтобы не потерять правильный ответ. Буду очень рад примерам.
C++ Что здесь не так? Только начал изучать С++. Решил написать программу которая гласит что число больше или меньше ста и парное оно или непарное. За код строго не судите(только учусь)! Компилятор-MS Visual C++ Express 2010#include<iostream> #include<math.h> using namespace std; int main() { setlocale(LC_ALL, "russian"); int peremenaya; cin>>peremenaya; int a=peremenaya/2; if (peremenaya<100) { подробнее

Показать сообщение отдельно
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
18.10.2013, 14:52     Стековый калькулятор
Смотрите обратную польскую нотацию.
Мой код с первого семестра, сейчас я его не проверял и в суть не вникал.
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
#include<iostream>
#include<conio.h>
#include<clocale>
using namespace std;
 
struct st
{
       char c;
       struct st *next;
};
struct st *push (struct st *, char);
char DEL (struct st **);
int PRIOR (char);
 
int main()
{
    setlocale(LC_ALL,"Russian");
    struct st *OPERS = NULL;
    char a[80], outstring[80];
    int k, point;
    do
    {
        cout<<"Введите выражение (в конце поставьте '=') : ";
        fflush (stdin);
        cin.getline (a, 80);
        k=point=0;
        while (a[k]!= '\0' && a[k]!= '=')
        {
              if (a[k] == ')') //выталкиваем из стека все знаки операций до ближ. 
              {                //открывающей скобки
                       while ((OPERS->c)!= '(')
                           outstring[point++] = DEL(&OPERS);
                       DEL(&OPERS); // удаляем из стека саму открыв. скобку
              }
              if (a[k]>= 'a' && a[k] <= 'z')
                  outstring[point++] = a[k];
              if (a[k] == '(')
                  OPERS = push(OPERS, '(');
              if (a[k] == '+' || a[k] == '-' || a[k] == '/' || a[k] == '*')
              {
                       if (OPERS == NULL) // если стек пуст - записываем в него операцию
                           OPERS = push(OPERS, a[k]);
                       else
                       if (PRIOR(OPERS->c) < PRIOR(a[k]))
                           OPERS = push(OPERS, a[k]);
                       else
                       {
                           while ((OPERS!= NULL) && (PRIOR(OPERS->c) >= PRIOR(a[k])))
                               outstring[point++] = DEL(&OPERS);
                           OPERS = push(OPERS, a[k]);
                       }
              }
              k++;
        }
        while (OPERS!= NULL)
            outstring[point++] = DEL(&OPERS);
        outstring[point] = '\0';
        cout<<endl;
        for (int i=0; i<point; i++)
            cout<<outstring[i];
        cout<<endl;
        fflush(stdin);
        cout<<"Повторить (y/n)? ";
    }
    while (getch() != 'n');
    return 0;
}
 
struct st *push (struct st *HEAD, char a)
{
       st* PTR = new st;
       PTR->c = a; // Инициализация созданной вершины
       PTR->next = HEAD; // Подключение её к стеку
       return PTR; // PTR - новая вершина
}
 
char DEL (struct st **HEAD)
{
     struct st *PTR;
     char a;
     if (*HEAD == NULL)
     return '\0';
     PTR = *HEAD; // адрес вершины стека
     a = PTR->c;
     *HEAD = PTR->next;
     free(PTR);
     return a;
}
 
int PRIOR (char a)
{
    switch(a)
    {
             case '*':
             case '/':
                  return 3;
             case '-':
             case '+':
                  return 2;
             case '(':
                  return 1;
    }
}
 
Текущее время: 03:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru