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

Не могу довести до ума. Надо написать строчный калькулятор в 12-ричной системе счисления - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Описать структуру. Ошибка в коде http://www.cyberforum.ru/cpp-beginners/thread910246.html
9. Описать структуру с именем ZNAK, содержащую следующие поля: фамилия, имя, знак зодиака, дата рождения (массив из трёх чисел). Написать программу, выполняющую следующие действия: Ввод с клавиатуры данных в массив, состоящий из восьми структур типа ZNAK, вывод на экран информации о человеке, чья фамилия введена с клавиатуры. Упорядочить структуры по алфавиту (фамилии). прошу найти ошибку, в...
C++ Преобразовать строку таким образом, чтобы буквы каждого слова в ней были отсортированы по возрастанию Привет всем! Сломал я ногу и 4 месяца не ходил в универ,теперь мне задали задания,я даже примерно не знай как их реализовать,кому не сложно и не лень,подскажите хоть какое-то)) задания: 1.Преобразовать строку таким образом, чтобы буквы каждого слова в ней были отсортированы по возрастанию. P.S. я не совсем лентяй и из 20 заданий 13 нагугли,наспрашивал и т.д http://www.cyberforum.ru/cpp-beginners/thread910245.html
C++ Описать структуру. Ошибка в коде
Нашел ошибку
Создание рекурсивной функции, возвращающей значение для вычисления наибольшего размера в одномерном массиве C++
сем доброго времени суток. Собственно сама задача: Разработать рекурсивную функцию возвращающую значение, для вычисления наибольшего размера в одномерном массиве. #include <iostream> using namespace std; const int n=8; int Max(int m,int n) {
C++ MSD и LSD сортировка http://www.cyberforum.ru/cpp-beginners/thread910184.html
Доброе время суток ,форумчане-сишники, начинающему программисту требуется помощь. Помогите реализовать поразрядные LSD и MSD сортировки, только как можно проще. Или объясните на пальцах, а то я гуглил и что-то не доходит до меня как это получается, я не могу понять, что такое "ключ" и как с ним работать и не только это...
C++ Расчет точности для float и double По какой формуле рассчитывается точность float и double в количестве знаков после запятой отностительно целой части? Чтобы вопрос был более понятен, допустим у нас есть числа: 0.11111111111111111111111111111111111111111111111111111111111111 2.11111111111111111111111111111111111111111111111111111111111111 10.1111111111111111111111111111111111111111111111111111111111111... подробнее

Показать сообщение отдельно
ofel
Сообщений: n/a
23.06.2013, 19:32     Не могу довести до ума. Надо написать строчный калькулятор в 12-ричной системе счисления
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
#include <iostream>
#include <map>
#include <cctype>
#include <cmath>
#include <cstring>
#include <string>
#include <stdlib.h>
#include <math.h>
using namespace std;
void per();
enum Token_value
{
     NUMBER, END, PLUS = '+', MINUS = '-', MUL = '*', DIV = '/', PRINT = ',',   LP = '(', RP = ')'
};
 
struct SyntaxError
{
    const char* p;
    
    SyntaxError(const char* q)
    {
        p = q;
    }
};
 
struct MathError
{
    const char* p;
    
    MathError(const char* q)
    {
        p = q;
    }
};
 
Token_value curr_tok = PRINT; //PRINT - это или '\n' или ';'
map <string, double> table;
int no_of_errors;
 
int error (const string& s)
{
    no_of_errors++;
    cerr << "Error: " << s << '\n';
    return 1;
}
 
double number_value;
string string_value;
string s1("abs");
 
Token_value get_token()
{
    char ch = 0;
    cin >> ch;
    switch(ch)
    {
        case 0:
            return curr_tok = END; 
        case ';':
        case '*':
        case '/':
        case '+':
        case '-':
        case '(':
        case ')':
        case '=':
            return curr_tok = Token_value(ch);
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
        case ',':
        case 'A':
        case 'B':
 
            cin.putback(ch);
            cin >> number_value;
            per(ch);
            return curr_tok = NUMBER;
        default:
            if (isalpha(ch))
            {
                cin.putback(ch);
                cin >> string_value;
                return curr_tok = NUMBER;
            }
            error ("Неправильная лексима");
            return curr_tok = PRINT;
    }
}
 
double expr(bool); // складывает и вычитает 
 
double prim(bool get)
{
    if (get) get_token();
    switch (curr_tok)
    {
        case NUMBER: //константа с плавующей точкой
        {
            double v = number_value;
            get_token(); //помещает значение в глобальную переменную number_value
            return v;
        }
        
        case MINUS:
            return -prim(true);
        case LP:
        {
            double e = expr(true);
            if (curr_tok != RP)
                return error("Ожидалась )");
            get_token();
            return e;
        }
        throw(SyntaxError("Неверная функция"));
    }
}
 
double term (bool get) //умножает и складывает
{
    double left = prim(get);
    for(;; ) //бесконечный цикл
    switch(curr_tok)
    {
        case MUL:
            left *= prim(true);
            break;
        case DIV:
            if (double d = prim(true))
            {
                left /= d;
                break;
            }
            return error("Деление на ноль");
        default:
            return left;
    }
}
 
double expr(bool get) 
{
    double left = term(get);
    for(;; )
    switch(curr_tok)
    {
        case PLUS:
            left += term(true);
            break;
        case MUL: 
            left *= prim(true);
            break;
        case MINUS:
            left -= term(true);
            break;
        default:
            return left;
    }
}
 
int main()
{   
    setlocale(LC_ALL,"Rus");
    while(cin) // проверка cin
    {
        get_token();
        if (curr_tok == END) //корректный выход из цикла, когда get_token() встречает конец файла
            break;
        if (curr_tok == PRINT) //освобождает expr() от обязанности обрабатывать пустые выражения
            continue; // переход к концу цикла 
        cout << expr(false);
 
    }
    return no_of_errors;}
 
void per()
{
    int k = 0;
    string stroka = "1BA2A", sim = "";
    string stroka2 = "";
    string::reverse_iterator rit;
    int base_n = 12, n = 0, n10 = 0, res = 0;
//**********перевод из base_n в 10чную*********************************
    int size_str = stroka.length();
    cout << stroka << " = " << size_str <<endl;
    for (int i = 0; i < stroka.length(); i++) sim += stroka[i];//инвертируем строку что бы получить число как многочлен
    cout << sim << endl;
    for (int i = 0; i < size_str; i++)
    {
        if (sim[i] <= 57)
        { res+= ((int)sim[i] - 48) * (int)pow((double)base_n,i);}//возводим в степень а * base_n^i , если цифра 
        else
        { res+= ((int)sim[i] - 55) * (int)pow((double)base_n,i);}//возводим в степень а * base_n^i , если символ
    }
    cout << endl;
    cout << " res = " << res << endl;//вывод результата
//*********перевод из 10чной в другую систему base_n*******************
    char * szString = new char[1];
    stroka2 = ltoa(res,szString,base_n);//стандартная функция С
    cout << " stroka2 = " << stroka2 << endl;
    cin >> k;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru