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

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 2744, средняя оценка - 4.89
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
#1

Задачи для тренировки и лучшего понимания - C++

15.07.2010, 05:53. Просмотров 338465. Ответов 1272
Метки нет (Все метки)

Ребят. Кто-нибудь может дать задачу для тренировки? Приблизительно по всему курсу С++. Буду благодарен за сложную задачу, но которую способен сделать новичок-любитель. Затраты сил-времени не важно. Главное, чтобы это было интересно и не слишком рутинно. + Если найдется человек который даст задачу просьба помогать с кодом, который я буду себя скидывать. Не переписывать за меня, но указывать на ошибки и желательно объяснять. Заранее спасибо.

Список задач, решение которых присутствует в данной теме:
Лучшие ответы (59)
Сообщение: #857841 Сообщение: #857861 Сообщение: #858352 Сообщение: #859371 Сообщение: #860160 Сообщение: #860255 Сообщение: #860259 Сообщение: #860317 Сообщение: #860368 Сообщение: #860466 Сообщение: #860508 Сообщение: #860720 Сообщение: #861091 Сообщение: #862174 Сообщение: #862617 Сообщение: #867259 Сообщение: #870298 Сообщение: #872053 Сообщение: #876456 Сообщение: #880114 Сообщение: #882889 Сообщение: #884418 Сообщение: #886414 Сообщение: #886989 Сообщение: #887733 Сообщение: #888464 Сообщение: #888487 Сообщение: #888941 Сообщение: #888947 Сообщение: #889040 Сообщение: #889450 Сообщение: #889587 Сообщение: #891772 Сообщение: #891790 Сообщение: #891862 Сообщение: #897758 Сообщение: #897782 Сообщение: #906325 Сообщение: #907991 Сообщение: #943672 Сообщение: #943700 Сообщение: #967735 Сообщение: #1053777 Сообщение: #1054209 Сообщение: #1083853 Сообщение: #1083928 Сообщение: #1131058 Сообщение: #1131359 Сообщение: #1273743 Сообщение: #1275465 Сообщение: #1276743 Сообщение: #1279215 Сообщение: #1282583 Сообщение: #1309088 Сообщение: #1315633 Сообщение: #1366395 Сообщение: #1550164 Сообщение: #1603678 Сообщение: #1604364
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2010, 05:53     Задачи для тренировки и лучшего понимания
Посмотрите здесь:

C++ Какой компилятор выбрать для лучшего изучения С++ по книге Берна Страуструпа?п
C++ Элементарные программы, для лучшего понимания языка...
Нужны задачи для тренировки C++
C++ Киньте задачки для тренировки
C++ Нужны простые задачи для тренировки
Нужны задачи для тренировки C++
На соревнованиях по фигурному катанию оценки заносятся в компьютер. Составить программу для вывода на экран лучшего результата после каждого выступлен C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
30.07.2010, 22:28  [ТС]     Задачи для тренировки и лучшего понимания #381
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
#include <cstdio>
 
class BaseClass
{
    public:
        void func(int a) { puts("BaseClass::func(int)"); };
        void func(int a, int b) { puts("BaseClass::func(int, int)"); };
        void func(int a, int b, int c) { puts("BaseClass::func(int, int, int)"); };
        //...
};
 
class DerivedClass : public BaseClass
{
    public:        
        void func(int i){ puts("DerivedClass::func(int)"); }   
        //...             
};
 
int main()
{           
    DerivedClass*obj=new DerivedClass;
    obj->func(0);
    obj->BaseClass::func(0, 0);     // Работает
    obj->BaseClass::func(0, 0, 0);  // Работает    
   
    return 0;
}
Хохол
Эксперт C++
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
30.07.2010, 22:31     Задачи для тренировки и лучшего понимания #382
Lavroff, а зачем указатель? И без него работает.
ForEveR
30.07.2010, 22:33  [ТС]
  #383

Не по теме:

Хохол, Хм. Сначала не работало, видимо что-то неправильно написал. Потом вспомнил, что это было в книжке, посмотрел. Сделал через указатели.

rangerx
1922 / 1531 / 139
Регистрация: 31.05.2009
Сообщений: 2,894
30.07.2010, 22:34     Задачи для тренировки и лучшего понимания #384
В функции main меняться ничего естественно не должно.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
30.07.2010, 22:35  [ТС]     Задачи для тренировки и лучшего понимания #385
rangerx, А это должно было быть сказано сразу. Изменить только в классе?
rangerx
1922 / 1531 / 139
Регистрация: 31.05.2009
Сообщений: 2,894
30.07.2010, 22:41     Задачи для тренировки и лучшего понимания #386
Цитата Сообщение от Lavroff Посмотреть сообщение
Изменить только в классе?
[Freeman]
34 / 34 / 6
Регистрация: 07.06.2010
Сообщений: 118
30.07.2010, 23:02     Задачи для тренировки и лучшего понимания #387
Цитата Сообщение от Lavroff Посмотреть сообщение
Ух. Намаялся с этой задачкой... Тупил что-т жутко.

Код
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
//Как известно, в небоскрёбах часто располагаются магазины, в которые ходят гламурные модницы. 
//Любимое занятие блондинки Анжелы — шоппинг. И сегодня у нее праздник — поход за покупками в новый небоскрёб Призма. 
//Для начала она решила обойти там все магазины. 
//Но, как оказалось, Призма настолько большая, что в ней встречаются магазины разных фирм по нескольку раз. 
//Каждый раз, когда Анжела видела магазин той же фирмы, что она уже посетила, то произносила: «БАЯН», — и шла дальше.
//Сколько раз Анжела сказала «БАЯН», пока обходила все магазины?
//Исходные данные
//В первой строке записано целое число N — количество магазинов в Призме (1 ≤ N ≤ 1000). 
//В каждой из следующих N строк записано название магазина — строка из латинских букв и пробелов длиной от 1 до 30. 
//Известно, что в Призме нет магазинов, названия которых отличаются только регистром. 
//Результат
//Выведите количество магазинов, которые не посетила Анжела. 
 
#include <stdio.h>
#include <string.h>
 
int main()
{
    int N=0, Bajan=0, count=0, i=0, j=0;
    char Name[1000][31], End[4]="End";
    scanf("%d", &N);
    while(getchar()!='\n');
    for(i=0;i<N;i++)
    {
        gets(Name[i]);
    }
    for(i=0;i<N;i++)
    {
        if(Name[i]==End)
            break;
        for(j=i+1;j<=N;j++)
        {
            if(strcmp(Name[j], End))
            if(!(strcmp(Name[i], Name[j])))
            {
                Bajan++;
                strcpy(Name[j], End);
            }
        }
    }
    printf("%d\n", Bajan);
    return 0;
}
Баян
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
#include <iostream>
#include <string>
using namespace std;
int main()
{
    int size, count=0;
    cout<<"Enter number of shops: ";
    cin>>size;   cin.get();
    string *shops, buf;
    shops=new string[size];
    for(int i=0;i<size;i++)
        getline(cin,shops[i]);
    
    for(int i=0;i<size;++i)
    {
        buf=shops[i];
        ///////////// проверка не обрабатывался
        int f=0;    //ли данный элемент ранее
        for(int t=0;t<i;++t)
            if(stricmp(shops[t].c_str(),buf.c_str())==0) 
                f=1;
        if(f)
            continue;
        /////////////////////
        for(int j=0;j<size;++j)
            if((stricmp(shops[j].c_str(),buf.c_str())==0) && j != i)
                ++count;
    }
 
    cout<<"Angella said Bajan "<<count<<" times\n";
    delete [] shops;
    system("Pause");    
    return 0;
}

В STL string нет функции для сравнения строк без учета регистра ?
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
30.07.2010, 23:04  [ТС]     Задачи для тренировки и лучшего понимания #388
[Freeman], А зачем? По задаче не может отличатся только регистром... А так... Сравнении без учета регистра с использованием функции tolower допустим
[Freeman]
34 / 34 / 6
Регистрация: 07.06.2010
Сообщений: 118
30.07.2010, 23:15     Задачи для тренировки и лучшего понимания #389
Цитата Сообщение от Lavroff Посмотреть сообщение
[Freeman], А зачем? По задаче не может отличатся только регистром... А так... Сравнении без учета регистра с использованием функции tolower допустим
И правда, у меня в голове баг какой то произашел...О_о вначале везде стояло == потом заменил на stricmp

Добавлено через 4 минуты
Цитата Сообщение от rangerx Посмотреть сообщение
метод func из DerivedClass перекрывает метод func и все его перегрузки из BaseClass. Каким образом можно исправить данный код чтобы в конечном итоге на экран всё-таки было выведено:
DerivedClass::func(int)
BaseClass::func(int, int)
BaseClass::func(int, int, int)
Ну а если закоментировать строку
C++
1
//void func(int a){ puts("DerivedClass::func(int)"); }
то все работает, так можно?
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
30.07.2010, 23:18  [ТС]     Задачи для тренировки и лучшего понимания #390
[Freeman], Первая должна выйти "DerivedClass:func(int)" по заданию насколько я понимаю

Добавлено через 1 минуту
Перекопал две книжки... Ничего не написано про то, что делать в таких случаях... Хм...
[Freeman]
34 / 34 / 6
Регистрация: 07.06.2010
Сообщений: 118
30.07.2010, 23:23     Задачи для тренировки и лучшего понимания #391
Цитата Сообщение от Lavroff Посмотреть сообщение
[Freeman], Первая должна выйти "DerivedClass:func(int)" по заданию насколько я понимаю

Добавлено через 1 минуту
Перекопал две книжки... Ничего не написано про то, что делать в таких случаях... Хм...
Точно, не заметил
Mr.X
Эксперт С++
3039 / 1684 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
30.07.2010, 23:30     Задачи для тренировки и лучшего понимания #392
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <iostream>
 
class BaseClass
{
public:
    virtual void func(int a) { puts("BaseClass::func(int)"); };
    virtual void func(int a, int b) { puts("BaseClass::func(int, int)"); };
    virtual void func(int a, int b, int c) { puts("BaseClass::func(int, int, int)"); };
    //...
};
 
class DerivedClass : public BaseClass
{
 
public: 
    using BaseClass::func;
    void func(int a){ puts("DerivedClass::func(int)"); }   
    //...             
};
 
int main()
{           
    DerivedClass obj;
    obj.func(0);
    obj.func(0, 0);     // ошибка
    obj.func(0, 0, 0);  // ошибка      
   
    return 0;
}
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
30.07.2010, 23:32  [ТС]     Задачи для тренировки и лучшего понимания #393
Mr.X, Браво! Кстати. Виртуал не нужны перед функциями. И без них шарашит
Вот ж блин) И виртуалки использовал, и юзинг, а совместить не догадался) Есть еще такие мозгодробительные задачки?)

ЗЫ как вариант, вместо using:
C++
1
public: BaseClass::func;
Но так не рекомендуется.
Хохол
30.07.2010, 23:59
  #394

Не по теме:

Java
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
class Main {
    public static void main(String[] args) {
        DerivedClass c = new DerivedClass();
        c.func(1);
        c.func(1, 1);
        c.func(1, 1, 1);
    }
}
 
class BaseClass {
    void func(int a) {
        System.out.println("BaseClass::func(int)");
    }
 
    void func(int a, int b) {
        System.out.println("BaseClass::func(int, int)");
    }
 
    void func(int a, int b, int c) {
        System.out.println("BaseClass::func(int, int, int)");
    }
};
 
class DerivedClass extends BaseClass {
    void func(int a) {
        System.out.println("DerivedClass::func(int)");
    }
};
Ну разве это не прекрасно? Работает без бубна.

M128K145
Эксперт C++
8280 / 3499 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
31.07.2010, 12:04     Задачи для тренировки и лучшего понимания #395
Так лучше будет
Java
1
2
3
4
5
6
class DerivedClass extends BaseClass {
    @override
    void func(int a) {
        System.out.println("DerivedClass::func(int)");
    }
};
Mr.X
Эксперт С++
3039 / 1684 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
01.08.2010, 09:26     Задачи для тренировки и лучшего понимания #396
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от rangerx Посмотреть сообщение
Я уже предлагал написать калькулятор для вычисления выражений вводимых пользователем
Мое решение
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
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
///////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
///////////////////////////////////////////////////////////////////////////////
typedef std::string  T_str;
typedef double       T_num;
///////////////////////////////////////////////////////////////////////////////
bool  calculate                (const T_str&  s_inp, T_num& res);
void  remove_spaces            (T_str&  s);
bool  calc_expr                (const T_str&  s_inp, T_str&  s_out, T_num& res);
bool  calc_summand             (const T_str&  s_inp, T_str&  s_out, T_num& res);
bool  calc_line_of_summand     (const T_str&  s_inp, T_str&  s_out, T_num& res);
bool  calc_factor              (const T_str&  s_inp, T_str&  s_out, T_num& res);
bool  calc_minus_factor        (const T_str&  s_inp, T_str&  s_out, T_num& res);
bool  calc_line_of_factor      (const T_str&  s_inp, T_str&  s_out, T_num& res);
bool  calc_add_summand         (const T_str&  s_inp, T_str&  s_out, T_num& res);
bool  calc_subtract_summand    (const T_str&  s_inp, T_str&  s_out, T_num& res);
bool  calc_expr_in_brackets    (const T_str&  s_inp, T_str&  s_out, T_num& res);
bool  calc_num                 (const T_str&  s_inp, T_str&  s_out, T_num& res);
bool  calc_mult_to_factor      (const T_str&  s_inp, T_str&  s_out, T_num& res);
bool  calc_div_into_factor     (const T_str&  s_inp, T_str&  s_out, T_num& res);
bool  calc_minus               (const T_str&  s_inp, T_str&  s_out);
bool  calc_plus                (const T_str&  s_inp, T_str&  s_out);
bool  calc_asterisk            (const T_str&  s_inp, T_str&  s_out);
bool  calc_slash               (const T_str&  s_inp, T_str&  s_out);
bool  calc_left_parenthesis    (const T_str&  s_inp, T_str&  s_out);
bool  calc_right_parenthesis   (const T_str&  s_inp, T_str&  s_out);
bool  calc_symb                (const char c, const T_str&  s_inp, T_str&  s_out);
///////////////////////////////////////////////////////////////////////////////
bool  calculate(T_str&  s_inp, T_num& res)
{
    const char FINISH_SYMB = '$';
    if(s_inp.empty()) return false;
    remove_spaces(s_inp);
    T_str  s_out;    
    return     calc_expr(s_inp + FINISH_SYMB, s_out, res)
            && s_out[0] == FINISH_SYMB;  
}
///////////////////////////////////////////////////////////////////////////////
void  remove_spaces(T_str&  s)
{    
    for(;;)
    {
        T_str::size_type  pos = s.find_first_of(" \t");   
        if(pos == T_str::npos)
        {
            break;
        }
        s = s.erase(pos, 1);
    }    
}
///////////////////////////////////////////////////////////////////////////////
bool  calc_expr(const T_str&  s_inp, T_str&  s_out, T_num& res)
{
    if(s_inp.empty()) return false;
    return     calc_summand         (s_inp, s_out, res)
            && calc_line_of_summand (s_out, s_out, res);   
}
///////////////////////////////////////////////////////////////////////////////
bool  calc_summand(const T_str&  s_inp, T_str&  s_out, T_num& res)
{
    if(s_inp.empty()) return false;
    return     calc_factor         (s_inp, s_out, res)
            && calc_line_of_factor (s_out, s_out, res);   
}
///////////////////////////////////////////////////////////////////////////////
bool  calc_line_of_summand(const T_str&  s_inp, T_str&  s_out, T_num& res)
{
    bool  bool_res;
    if(s_inp.empty()) return true;    
    switch(s_inp[0])
    {
    case '+':
        return     calc_add_summand      (s_inp, s_out, res)
                && calc_line_of_summand  (s_out, s_out, res);
    case '-':
        return     calc_subtract_summand (s_inp, s_out, res)
                && calc_line_of_summand  (s_out, s_out, res);
    default:
        return  true;
    }
}
///////////////////////////////////////////////////////////////////////////////
bool  calc_factor(const T_str&  s_inp, T_str&  s_out, T_num& res)
{
    bool  bool_res;
    if(s_inp.empty()) return false;
    switch(s_inp[0])
    {
    case '-':
        return  calc_minus_factor     (s_inp, s_out, res);
    case '(':
        return  calc_expr_in_brackets (s_inp, s_out, res);
    default:
        return  calc_num              (s_inp, s_out, res);
    }
}
///////////////////////////////////////////////////////////////////////////////
bool  calc_minus_factor(const T_str&  s_inp, T_str&  s_out, T_num& res)
{
    if(s_inp.empty()) return false;
    bool   bool_res =    calc_minus  (s_inp, s_out)
                      && calc_factor (s_out, s_out, res);
    res *= -1;
    return  bool_res;
}
///////////////////////////////////////////////////////////////////////////////
bool  calc_line_of_factor(const T_str&  s_inp, T_str&  s_out, T_num& res)
{
    bool  bool_res;
    if(s_inp.empty()) return true;    
    switch(s_inp[0])
    {
    case '*':
        return     calc_mult_to_factor  (s_inp, s_out, res)
                && calc_line_of_factor  (s_out, s_out, res);
    case '/':
        return     calc_div_into_factor (s_inp, s_out, res)
                && calc_line_of_factor  (s_out, s_out, res);
    default:
        return  true;
    }
}
///////////////////////////////////////////////////////////////////////////////
bool  calc_add_summand(const T_str&  s_inp, T_str&  s_out, T_num& res)
{
    if(s_inp.empty()) return false;
    T_num  res_summand;
    bool    bool_res =     calc_plus    (s_inp, s_out)
                        && calc_summand (s_out, s_out, res_summand);
    res += res_summand;
    return  bool_res;
}
///////////////////////////////////////////////////////////////////////////////
bool  calc_subtract_summand(const T_str&  s_inp, T_str&  s_out, T_num& res)
{
    if(s_inp.empty()) return false;
    T_num  res_summand;
    bool    bool_res =     calc_minus   (s_inp, s_out)
                        && calc_summand (s_out, s_out, res_summand);
    res -= res_summand;
    return  bool_res;
}
///////////////////////////////////////////////////////////////////////////////
bool  calc_mult_to_factor(const T_str&  s_inp, T_str&  s_out, T_num& res)
{
    if(s_inp.empty()) return false;
    T_num  res_factor;
    bool    bool_res =     calc_asterisk (s_inp, s_out)
                        && calc_factor   (s_out, s_out, res_factor);
    res *= res_factor;
    return  bool_res;
}
///////////////////////////////////////////////////////////////////////////////
bool  calc_div_into_factor(const T_str&  s_inp, T_str&  s_out, T_num& res)
{
    if(s_inp.empty()) return false;
    T_num  res_factor;
    bool    bool_res =     calc_slash    (s_inp, s_out)
                        && calc_factor (s_out, s_out, res_factor);
    res /= res_factor;
    return  bool_res;
}
///////////////////////////////////////////////////////////////////////////////
bool  calc_plus(const T_str&  s_inp, T_str&  s_out)
{
    return  calc_symb('+', s_inp, s_out);
}
///////////////////////////////////////////////////////////////////////////////
bool  calc_asterisk(const T_str&  s_inp, T_str&  s_out)
{
    return  calc_symb('*', s_inp, s_out);
}
///////////////////////////////////////////////////////////////////////////////
bool  calc_slash(const T_str&  s_inp, T_str&  s_out)
{
    return  calc_symb('/', s_inp, s_out);
}
///////////////////////////////////////////////////////////////////////////////
bool  calc_minus(const T_str&  s_inp, T_str&  s_out)
{
    return  calc_symb('-', s_inp, s_out);
}
///////////////////////////////////////////////////////////////////////////////
bool  calc_expr_in_brackets(const T_str&  s_inp, T_str&  s_out, T_num& res)
{
    return     calc_left_parenthesis  (s_inp, s_out)
            && calc_expr              (s_out, s_out, res)
            && calc_right_parenthesis (s_out, s_out);
}
///////////////////////////////////////////////////////////////////////////////
bool  calc_num(const T_str&  s_inp, T_str&  s_out, T_num& res)
{
    if(s_inp.empty()) return false;
    std::istringstream  in_potok(s_inp);    
    bool  bool_res = ((in_potok >> res) != 0);
    in_potok >> s_out;
    return  bool_res;
}
///////////////////////////////////////////////////////////////////////////////
bool  calc_left_parenthesis(const T_str&  s_inp, T_str&  s_out)
{
    return  calc_symb('(', s_inp, s_out);
}
///////////////////////////////////////////////////////////////////////////////
bool  calc_right_parenthesis(const T_str&  s_inp, T_str&  s_out)
{
    return  calc_symb(')', s_inp, s_out);
}
///////////////////////////////////////////////////////////////////////////////
bool  calc_symb(const char c, const T_str&  s_inp, T_str&  s_out)
{
    if(s_inp.empty()) return false;
    bool  res = (s_inp[0] == c);
    if(res)
    {        
        s_out = s_inp.substr(1);
    }
    return res;    
}
///////////////////////////////////////////////////////////////////////////////
int main()
{    
    for(;;)
    {
        std::cout << "-> ";
        T_str  s;
        std::getline(std::cin, s);
        T_num res;
        if(calculate(s, res))
        {
            std::cout << "Result = "
                      << res;
        }
        else
        {            
            std::cout << "Not correct expr."
                      << std::endl;
        }      
        std::cout << std::endl
                  << std::endl
                  << std::endl;
    }
    return 0;
}
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
01.08.2010, 13:33     Задачи для тренировки и лучшего понимания #397

Не по теме:

Mr.X, СУУУУПЕР!!!!!



Добавлено через 2 часа 8 минут
Задачка на "Римские цифры":
Даётся число n<1000. перевести и вывести на экран это число в "римской" записи. на пример:
Код
87 = LXXXVII 
219 = CCXIX 
1354 = MCCCLIV 
2673 = MMDCLXXIII
M = 1000, D =500, C =100, L=50, X=10, V=5, I=1.

---

Ещё одна задача:
Написать программу которая считывает число в двоичном формате, переводит его в десятичный, и выводит на экран (и наоборот - принимает в десятичном, и переводит в двочный)


вот решение на считывание в двоичном
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cmath>
#include <cstring>
int main()
{
    std::string s;    
    std::cin>>s;
    double sum=0;
    for(int i=s.size()-1;i>=0;i--)
    {
        if(s[s.size()-1-i]=='1') sum+=pow(2,i);
    }
    std::cout<<sum<<"\n";
    system("PAUSE");
    return 0;
}
fasked
Эксперт C++
4932 / 2512 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
01.08.2010, 14:04     Задачи для тренировки и лучшего понимания #398
Цитата Сообщение от nikkka Посмотреть сообщение
вот решение на считывание в двоичном
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cmath>
#include <cstring>
int main()
{
    std::string s;    
    std::cin>>s;
    double sum=0;
    for(int i=s.size()-1;i>=0;i--)
    {
        if(s[s.size()-1-i]=='1') sum+=pow(2,i);
    }
    std::cout<<sum<<"\n";
    system("PAUSE");
    return 0;
}
а мне вот так больше нравится:
C++
1
2
3
4
5
6
7
8
9
10
11
    std::string s;
 
    std::cin>>s;
 
    unsigned long sum = 0;
 
    for(std::string::size_type i = 0; i < s.length(); ++i)
    {
        if(s[i] == '1') 
            sum |= 1 << (s.length() - i - 1);
    }
кстати, зачем ты в своем варианте подключаешь cstring, а не string

Добавлено через 3 минуты
Это вывод на Си правда

C
1
2
3
4
5
6
7
8
9
10
11
12
void printwb(unsigned int X)
{
    for (int n = (sizeof(unsigned int)*8 - 1); n >= 0; n--)
    {
        printf("%x",((X>>n)&1));
        if(n%4 == 0)
        {
            printf(" ");
        }
    }
    printf("\n");
}
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
02.08.2010, 09:44  [ТС]     Задачи для тренировки и лучшего понимания #399
Я конечно понимаю, что это ядерный писец, но единственное что мне пришло в голову после бессонной ночи, тупо брутфорсом эту задачу делать. Пока только от 900 до 1000. Но я иду к успеху!!!

Рим. числа. Возможна острая головная боль
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
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
#include <iostream>
 
int main()
{
    int x=0;
    std::cout<<"Enter n (<1000): ";
    std::cin>>x;
    int k=x/100;
    if(k)
    {
        if(x>=900&&x<1000)
        {
            std::cout<<"DCCCC";
            if(x==901)
                std::cout<<"I";
            else if(x==902)
                std::cout<<"II";
            else if(x==903)
                std::cout<<"III";
            else if(x==904)
                std::cout<<"IV";
            else if(x==905)
                std::cout<<"V";
            else if(x==906)
                std::cout<<"VI";
            else if(x==907)
                std::cout<<"VII";
            else if(x==908)
                std::cout<<"VIII";
            else if(x==909)
                std::cout<<"IX";
            if(x==910)
            {
                std::cout<<"X";
                if(x==911)
                    std::cout<<"I";
                else if(x==912)
                    std::cout<<"II";
                else if(x==913)
                    std::cout<<"III";
                else if(x==914)
                    std::cout<<"IV";
                else if(x==915)
                    std::cout<<"V";
                else if(x==916)
                    std::cout<<"VI";
                else if(x==917)
                    std::cout<<"VII";
                else if(x==918)
                    std::cout<<"VIII";
                else if(x==919)
                    std::cout<<"IX";
            }
            else if(x==920)
            {
                std::cout<<"XX";
                if(x==921)
                    std::cout<<"I";
                else if(x==922)
                    std::cout<<"II";
                else if(x==923)
                    std::cout<<"III";
                else if(x==924)
                    std::cout<<"IV";
                else if(x==925)
                    std::cout<<"V";
                else if(x==926)
                    std::cout<<"VI";
                else if(x==927)
                    std::cout<<"VII";
                else if(x==928)
                    std::cout<<"VIII";
                else if(x==929)
                    std::cout<<"IX";
            }
            else if(x==930)
            {
                std::cout<<"XXX";
                if(x==931)
                    std::cout<<"I";
                else if(x==932)
                    std::cout<<"II";
                else if(x==933)
                    std::cout<<"III";
                else if(x==934)
                    std::cout<<"IV";
                else if(x==935)
                    std::cout<<"V";
                else if(x==936)
                    std::cout<<"VI";
                else if(x==937)
                    std::cout<<"VII";
                else if(x==938)
                    std::cout<<"VIII";
                else if(x==939)
                    std::cout<<"IX";
            }
            else if(x==940)
            {
                std::cout<<"XL";
                if(x==941)
                    std::cout<<"I";
                else if(x==942)
                    std::cout<<"II";
                else if(x==943)
                    std::cout<<"III";
                else if(x==944)
                    std::cout<<"IV";
                else if(x==945)
                    std::cout<<"V";
                else if(x==946)
                    std::cout<<"VI";
                else if(x==947)
                    std::cout<<"VII";
                else if(x==948)
                    std::cout<<"VIII";
                else if(x==949)
                    std::cout<<"IX";
            }
            else if(x==950)
            {
                std::cout<<"L";
                if(x==951)
                    std::cout<<"I";
                else if(x==952)
                    std::cout<<"II";
                else if(x==953)
                    std::cout<<"III";
                else if(x==954)
                    std::cout<<"IV";
                else if(x==955)
                    std::cout<<"V";
                else if(x==956)
                    std::cout<<"VI";
                else if(x==957)
                    std::cout<<"VII";
                else if(x==958)
                    std::cout<<"VIII";
                else if(x==959)
                    std::cout<<"IX";
            }
            else if(x==960)
            {
                std::cout<<"LX";
                if(x==961)
                    std::cout<<"I";
                else if(x==962)
                    std::cout<<"II";
                else if(x==963)
                    std::cout<<"III";
                else if(x==964)
                    std::cout<<"IV";
                else if(x==965)
                    std::cout<<"V";
                else if(x==966)
                    std::cout<<"VI";
                else if(x==967)
                    std::cout<<"VII";
                else if(x==968)
                    std::cout<<"VIII";
                else if(x==969)
                    std::cout<<"IX";
            }
            else if(x==970)
            {
                std::cout<<"LXX";
                if(x==971)
                    std::cout<<"I";
                else if(x==972)
                    std::cout<<"II";
                else if(x==973)
                    std::cout<<"III";
                else if(x==974)
                    std::cout<<"IV";
                else if(x==975)
                    std::cout<<"V";
                else if(x==976)
                    std::cout<<"VI";
                else if(x==977)
                    std::cout<<"VII";
                else if(x==978)
                    std::cout<<"VIII";
                else if(x==979)
                    std::cout<<"IX";
            }
            else if(x==980)
            {
                std::cout<<"LXXX";
                if(x==981)
                    std::cout<<"I";
                else if(x==982)
                    std::cout<<"II";
                else if(x==983)
                    std::cout<<"III";
                else if(x==984)
                    std::cout<<"IV";
                else if(x==985)
                    std::cout<<"V";
                else if(x==986)
                    std::cout<<"VI";
                else if(x==987)
                    std::cout<<"VII";
                else if(x==988)
                    std::cout<<"VIII";
                else if(x==989)
                    std::cout<<"IX";
            }
            else if(x==990)
            {
                std::cout<<"XC";
                if(x==991)
                    std::cout<<"I";
                else if(x==992)
                    std::cout<<"II";
                else if(x==993)
                    std::cout<<"III";
                else if(x==994)
                    std::cout<<"IV";
                else if(x==995)
                    std::cout<<"V";
                else if(x==996)
                    std::cout<<"VI";
                else if(x==997)
                    std::cout<<"VII";
                else if(x==998)
                    std::cout<<"VIII";
                else if(x==999)
                    std::cout<<"IX";
            }
        }
        else if(x>=800&&x<900)
            std::cout<<"DCCC";
        else if(x>=700&&x<800)
            std::cout<<"DCC";
        else if(x>=600&&x<700)
            std::cout<<"DC";
        else if(x>=500&&x<600)
            std::cout<<"D";
        else if(x>=400&&x<500)
            std::cout<<"CCCC";
        else if(x>=300&&x<400)
            std::cout<<"CCC";
        else if(x>=200&&x<300)
            std::cout<<"CC";
        else if(x>=100&&x<200)
            std::cout<<"C";
    }
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2010, 10:15     Задачи для тренировки и лучшего понимания
Еще ссылки по теме:

C++ Какая база требуется для понимания C++?
C++ Нужен пример рекурсивной функции для понимания ее назначения и практической пользы
C++ Builder Прошу примеров для понимания INDY
Книги для тренировки/развития котелка и просто убийства времени C++
Дайте задания для тренировки C++

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

Или воспользуйтесь поиском по форуму:
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
02.08.2010, 10:15     Задачи для тренировки и лучшего понимания #400
Lavroff, ну ничего себе...
слушай, а давай тогда прямо все числа от 1 до 1000 закодиируем, и будим писать 1000 case-ов
Yandex
Объявления
02.08.2010, 10:15     Задачи для тренировки и лучшего понимания
Закрытая тема Создать тему
Опции темы

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