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

Калькулятор - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ межклассовые колбеки http://www.cyberforum.ru/cpp-beginners/thread114894.html
есть 2 класса А B, нужно сделать так чтобы класс В мог регистрировать свой метод у класса А в качестве колбека, а класс А соответственно вызывать этот метод по событию. При этом класс В может быть произвольный, его структура неизвестна для класса А. Как это грамотно сделать? помогите плз. Вариант с бустом не предлагать, он мне известен, но хотелось бы найти решение в рамках STL. Возможно это...
C++ Сигнатура Мне нужно организовать поиск сигнатуры. Допустим есть сигнатура (ну например ca64a10a706173c4776f7d72e1d) Есть файл file.exe Нужно определить присудствует ли сигнатура в файле. Как это сделать, а то толком ниче не понял, помогите плз! Зарание спасибо! http://www.cyberforum.ru/cpp-beginners/thread114883.html
C++ Найти подматрицу максимального размера
Увести матрицу, которая состоит из 0 и 1. Найти в ней квадратную подматрицу максимального размера, элементы которой имеют значение 1.
Определить слово с максимальным количеством согласных C++
В строке символов определить слово с максимальным количеством согласных и переставить его буквы в соответствии с алфавитом. Каждую букву на парной позиции слова напечатать большими буквами.
C++ Граф(массивы) http://www.cyberforum.ru/cpp-beginners/thread114870.html
Граф задано количеством вершин и дуг, что их соединяют. Для каждой дуги задана длина маршрута из одной вершины в другую. Найти кратчайший маршрут между вершинами в графе, заданными пользователем.
C++ Определение единиц массы Определяет единицы массы в кг, г, мг. Ниже приведены неметрические русские единицы массы: Берковец = 10 пудам = 163805 кг, пуд = 40 фунтам, фунт = 32 лотам = 96 золотникам, лот = 3 золотникам, золотник = 96 долей. Результат должен быть напечатан в 4 столбца. Буду крайне признателен кто поможет с решением, что то ничего по реализации в голову не приходит. Код нужен на языке "C" подробнее

Показать сообщение отдельно
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
11.04.2010, 22:22     Калькулятор
у меня тут старая прога завалялась я там подкоректировал кое что. и в итоге:
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include <iostream>
using namespace std;
struct node{
    node *l,*r;
    char val;
    node(node *ll,node *rr,char c):l(ll),r(rr),val(c){}
};
void print(node *t,int n)
{
    if (t)
    {
        print(t->r,n+1);
        for (int i=0;i<n;i++) cout << "  ";
        cout << t->val << '\n';
        print(t->l,n+1);
    }
}
void del(node *&t)
{
    if (t)
    {
        del(t->r);
        del(t->l);
        delete t;
    }
 
}
char lookahead;
int amount_of_errors=0;
void match(char c)
{
    if (lookahead==c)
    {
        cin.get(lookahead);
        while(lookahead==' '||lookahead=='\t')cin.get(lookahead);
    }
    else
    {
        cout << "\nsyntax error in " << lookahead << '\n';
        amount_of_errors++;
    }
}
node *scan()
{
    while(lookahead==' '||lookahead=='\t')cin.get(lookahead);
    if (isalpha(lookahead)||isdigit(lookahead))return new node(0,0,lookahead);
    else
    {
        cout << "\nsyntax error in " << lookahead << '\n';
        amount_of_errors++;
        return 0;
    }
}
node *expr();
node *factor()
{
    if (lookahead=='(')
    {
        match('(');node *t=expr(); match(')');
        return t;
    }
    else
    {
        node *t = scan();
        match(lookahead);
        return t;
    }
}
node *prim();
node *prim1()
{
    if (lookahead=='*')
    {
        match('*'); return prim();
    }
    else if (lookahead=='/')
    {
        match('/'); return prim();
    }
    else {}
}
node *prim()
{
    node *t1=factor();
    if (lookahead=='*' || lookahead=='/')
    {
        char c=lookahead;
        node *t2=prim1();
        return new node(t1,t2,c);
    }
    else return t1;
}
node *expr1()
{
    if (lookahead=='-')
    {
        match('-'); return expr();
    }
    else if (lookahead=='+')
    {
        match('+'); return expr();
    }
    else {}
}
node *expr()
{
    node *t1=prim();
    if (lookahead=='+' || lookahead=='-')
    {
        char c=lookahead;
        node *t2=expr1();
        return new node(t1,t2,c);
    }
    else return t1;
}
void super_print(node *t)
{
    if (t)
    {
        if (t->r)super_print(t->r);
        if (t->l)super_print(t->l);
 
        if (strchr("*+/-",t->val))
        {
            if (!strchr("*+/-",t->l->val) && !strchr("*+/-",t->r->val)) cout << t->l->val;
            cout << t->val;
            if (!strchr("*+/-",t->l->val)&& strchr("*+/-",t->r->val)) cout << t->l->val;
            if (!strchr("*+/-",t->r->val)) cout << t->r->val;
            cout << '>';
        }
    }
}
int main()
{
    node *root=0;
    match(lookahead);
    root=expr();
    if (amount_of_errors)
    {
        cout << "errors presents in tree constructing\n";
    }
    else
    {
        //print(root,0);
        super_print(root);
    }
    del(root);
    return 0;
}
она принимает только числа из одного знака и не умеет пропускать пробелы. Только вот что программа должна выводить вот на это 4+6*9-2*8? ибо в нотации, требуемой твоим преподом ,токое адекватно не выведешь. в том числе и это 784*(78+(75/5))-3*4 тут только 3*4>75/5>+>78>*>748>->.
 
Текущее время: 01:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru