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

Формула, по которой можно вычислить время наступления Рагнарека - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ При выводе минимального элемента последовательности программа выводит слишком большое число http://www.cyberforum.ru/cpp-beginners/thread1232190.html
При выводе минимального элемента программа выводит слишком большое число. #include <iostream> using namespace std; int main() { setlocale(0,""); int maximum; float numbers, amount, average, maximal_element; float minimal_element; average = 0;
C++ Sentence. Записать число прописью Once upon a time in a land far far away, inhabited only by math students, Iva and Vedran were discussing self-explanatory sentences. A part of these sentences is exactly one number and it is equal to the total number of letters in the sentence. Some examples are: “This sentence has thirtyone letters.”, “Blah blah seventeen”. Little Jurica overheard his friends' conversation and decided to... http://www.cyberforum.ru/cpp-beginners/thread1232183.html
Определить является ли десятичная запись числа симметричной C++
Задание: код: #include<iostream> using namespace std; int main() { int n; cin>>n; cout<<((n/1000==n%10)&&(n/100/10==n%100%10))?1:37<<endl;; return 0;
Как правильно написать функцию push (положить в стек) C++
Здравствуйте, господа. Не могу сообразить, как правильно написать функцию push (положить в стек). Ткните меня носом пожалуйста. Всё остальное без ошибок. #include <conio.h> #include <iostream.h> struct Node { int left; Node *next; }; Node *beg = 0;
C++ Как происходит сортировка в данном блоке? http://www.cyberforum.ru/cpp-beginners/thread1232112.html
void Sort(char *text, int len, TCHAR* ptr, bool newFile) { char *info; int i=0,b=0; char loly; int lol; int j=0; char info1; info=(char*)malloc(len*sizeof(char)); strcpy(info,"");
C++ Перегрузка операций умножения и деления Создать класс "Строка текста с числами". Переопределить операции умножения и деления, так чтобы числа первой строки умножались и/или делились на числа второй строки, а текст между числами заменялся при умножении на более длинный, а при делении на более короткий. Например: "Сумма 484 из 112" / "Итог 11 для 4" = "Итог 44 из 28" "Сумма 484 из 112" * "Сумма 11 для 4" = "Сумма 5324 для 448" подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
2799 / 1575 / 246
Регистрация: 03.05.2010
Сообщений: 3,656
23.07.2014, 08:14     Формула, по которой можно вычислить время наступления Рагнарека
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
/////////////////////////////////////////////////////////////////////////////////////////
//Рагнарек должен наступить с минуты на минуту. Но Один не знает, когда именно он наступит.
//Локи, как самый умный, сказал Одину формулу, по которой можно вычислить время наступления 
//Рагнарека. К сожалению, Одину с одним глазом сложно уследить за всеми скобками в выражении, 
//поэтому он решил заменить скобки первого уровня на фигурные, а второго уровня – на квадратные, 
//остальные же оставить круглыми. То есть выражение x * (y + (z * (5 + 3))) изменится 
//на x * {y + [z * (5 + 3)]}.
//Но Один не умеет программировать, Один умеет драться, поэтому программу придется написать вам. 
//Не гневите Одина.
//В первой и единственной строке входного файла указана формула, состоящая из букв латинского 
//алфавита, знаков арифметических действий, пробелов, цифр и скобок. Гарантируется, что скобки 
//образуют правильную скобочную последовательность. Длина формулы не превышает 105.
//Выведите эту строку в формате удобном для чтения Одину.
//
//Пример ввода 1
//
//x * (y + (z * (5 + 3)))
//
//Пример вывода 1
//
//x * {y + [z * (5 + 3)]}
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <stack>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
char    const   LEFT_ROUND_BRACKET      =   '(';
char    const   RIGHT_ROUND_BRACKET     =   ')';
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string     T_str;
/////////////////////////////////////////////////////////////////////////////////////////
T_str   get_rand_str_with_round_brackets()
{
    static  unsigned    const   LINE_LEN_MIN_MIN    =   3;
    static  unsigned    const   LINE_LEN_MIN        =   30;
    static  unsigned    const   LINE_LEN_MAX        =   80;
 
    T_str   res_str;
    int     level       =   0;
    char    cur_symb    =   0;
 
    do
    {
        res_str.clear();
        for(;;)
        {
            if  (
                    level == 0
                )
            {
                if  (
                        res_str.size()  >   (
                                                rand() % 2
                                                    ?   LINE_LEN_MIN_MIN
                                                    :   LINE_LEN_MIN
                                            )
                    )
                {
                    break;
                }
 
                ++level;
                cur_symb    =   LEFT_ROUND_BRACKET;
            }
            else
            {
                if  (
                        rand() % 2
                    )
                {
                    ++level;
                    cur_symb = LEFT_ROUND_BRACKET;
                }
                else
                {
                    --level;
                    cur_symb = RIGHT_ROUND_BRACKET;
                }
            }//else
 
            res_str.push_back( cur_symb );
        }//for
    }
    while   (
                res_str.size() > LINE_LEN_MAX
            );
 
    return  res_str;
}
/////////////////////////////////////////////////////////////////////////////////////////
struct  T_replace_bracket
{
    //-----------------------------------------------------------------------------------
    static  int     const   LEVEL_MAX   =   3;
    //-----------------------------------------------------------------------------------
    int     level_;
    //-----------------------------------------------------------------------------------
    T_replace_bracket()
        :
        level_()
    {}
    //-----------------------------------------------------------------------------------
    char    operator()  ( char  &   symb )
    {
        static  T_str   const   BRACKETS    =   "**{}[]()";
        char                    res_symb    =   0;
 
        switch( symb )
        {
        case    LEFT_ROUND_BRACKET:
            ++level_;
 
            res_symb    =   BRACKETS
                                [
                                    ind_of_level( level_ ) * 2
                                ];
            break;
 
        case    RIGHT_ROUND_BRACKET:
 
            res_symb    =   BRACKETS
                                [
                                    ind_of_level( level_ ) * 2 + 1
                                ];
 
            --level_;
            break;
 
        default:
            res_symb    =   symb;
        }//switch
 
        return  res_symb;
    }
    //-----------------------------------------------------------------------------------
    int     ind_of_level( int   level )
    {
        return  level > LEVEL_MAX
                    ?   LEVEL_MAX
                    :   level;
    }
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
void    transform_brackets( T_str   &   formula )
{
    std::transform
        (
            formula.begin       (),
            formula.end         (),
            formula.begin       (),
            T_replace_bracket   ()
        );
}
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    srand(unsigned(time(0)));
    T_str   const   formula_const       =   "A + (B * ((C + D) + (N+K))) * (A + B) * (D * (B - (C + (E+K))))";
    T_str   const   formula_const_1     =   "x * (y + (z * (5 + 3)))";
 
    for(;;)
    {
        T_str   formula     =   rand() % 2
                                    ?   get_rand_str_with_round_brackets()
                                    :   rand() % 2
                                            ?   formula_const
                                            :   formula_const_1;
 
        std::cout   <<  std::endl
                    <<  formula
                    <<  std::endl;
 
        transform_brackets( formula );
        std::cout   <<  formula
                    <<  std::endl;
 
        system("pause");
    }//for
}
 
Текущее время: 07:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru