Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.88/2010: Рейтинг темы: голосов - 2010, средняя оценка - 4.88
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
1

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

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

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

Список задач, решение которых присутствует в данной теме:
43
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.07.2010, 05:53
Ответы с готовыми решениями:

Элементарные программы, для лучшего понимания языка...
Здравствуйте. Вот сегодня решил что пора изучать с++. Есть пару задач. Начал решать и уже на первой...

Задачи для тренировки и лучшего понимания языка
Предлагаю в этой теме размещать задачи, которые помогут новичкам (и не только) более детально...

Литература для лучшего понимания сути программирования
Привет! Подскажите литературу, которая поможет разобраться в сути самого процесса программирования,...

Набор задачь для тренировки и улучшения понимания программирования
Добрый вечер всем. Если кто знает модскажите где можно найти подобный набор задачь...

1272
1545 / 911 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
17.07.2010, 00:24 81
Ну как я думаю, в самом начале обучения компьютеру все равно куда ходить, каждая из свободных клеток, для него равноценна.
Именно по этому, у каждой клетки будет свой параметр, не знаю даже как обозвать. Если какой то код ведет к выигрышу компьютера, мы увеличиваем параметр.

Дальше нужно думать и реализовывать.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10837 / 6647 / 1614
Регистрация: 25.07.2009
Сообщений: 12,428
17.07.2010, 00:26 82
Цитата Сообщение от Lavroff Посмотреть сообщение
Фильм или игру?
не, настоящую... с количеством человек, подбором снов, при которых каждый будет вырабатывать больше энергии, ну и всякой технической ерундой - сбором труппов, клонированием детей и прочим...
0
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
17.07.2010, 00:27  [ТС] 83
neske, Я так понимаю само поле должно быть двумерным массивом?

Добавлено через 1 минуту
easybudda, шутки-шутками) А если серьезно? Какую именно матрицу, в плане какое именно задание

Не по теме:

На тему написания реальной матрицы:

Вот
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <string>
int main()
{
    std::string Name;
    std::cout<<"Enter your  name\n";
    std::cin>>Name;
    std::cout<<Name<<", MATRIX has YOU\n";
    return 0;
}

0
1545 / 911 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
17.07.2010, 00:28 84
Когда я писал самые обычные крестики-нолики в консоли, пользователь-пользователь, укладывалась в 50-60 строк кода. И там использовался двумерный массив.
Как тут пока не знаю.
0
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
17.07.2010, 00:31  [ТС] 85
neske, А остался этот код? Интересно посмотреть
0
1545 / 911 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
17.07.2010, 00:36 86
К сожалению не осталось.
Но алгоритм очень прост, все поле (матрица) заполнена нулями. Если в клетке крестик - "1", нолик - "-1".
И при каждом ходе мы проверяем варианты на победу и ничью.
0
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
17.07.2010, 00:38  [ТС] 87
neske, Все варианты на победу и ничью? Хотя... Их по идее не так уж много.
0
1545 / 911 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
17.07.2010, 00:41 88
Всего 8 выигрышных вариантов. Но помоему это проблема была решена, но сейчас, блин, не помню.
0
Мат в 32 хода
236 / 171 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
17.07.2010, 08:33 89
Цитата Сообщение от MikeSoft Посмотреть сообщение
Lavroff, в строке:
Код
1
:-)
программа находит 1 смайл.
А в строке
Код
1
hello :-)
- ни одного. Проверяю и вариант с файлами, и без них...
а я проверил без фаилов, и работает...
ничего не понимаю...


Lavroff, вот вам (а может и не только), ещё несколько задач.

Паук и Муха

В пустой прямоугольной комнате размерами АхВхС (длина, ширина, высота) на пол упала уснувшая муха. Паук, находившийся на одной из стен, или на полу комнаты, начал двигаться к ней по кратчайшему пути.
На какое расстояние он при этом переместится?
входные данные - переменные a, b, c.
Задача не сложная, но интерестная.


Змей Горыныч

А вот с этоы вы вряд ли справитесь так быстро. Я её писал целый вечер...
В некотором царстве жил Змей Горыныч. У него было N голов и M хвостов. Иван-царевич решил уничтожить губителя человеческих душ, для чего ему его кума Баба Яга подарила волшебный меч, так как только им можно убить Змея Горыныча. Если отрубить одну голову, то на её месте вырастает новая, если отрубить хвост, то вместо него вырастет 2 хвоста. Если отрубить два хвоста, то вырастает 1 голова, и только когда отрубить 2 головы, то не вырастет ничего. Змей Горыныч гибнет только в том случае, когда ему отрубить все головы и все хвосты. Определить минимальное количество ударов мечом, нужное для уничтожения Змея Горыныча.
Вход. переменные - m, n.


Добавлено через 11 минут
Цитата Сообщение от MikeSoft Посмотреть сообщение
nikkka, неправильно. Не выполнено одно из условий.
в смысле фаилов?
ну, это легко можно поправить...
0
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
17.07.2010, 13:55  [ТС] 90
nikkka, Насколько я понимаю, протестив немного вашу программу:

1) Вот это является смайлом
C++
1
:)()(
, хотя смайл только если скобки одинаковые.
2) Вот это
C++
1
:::)
он так же считает смайлом. Хотя двоеточие должно бы быть только 1

Добавлено через 18 минут
Кстати. Задачи какие-то садистские которые вы скинули) Вечерком надо будет попробовать
0
Эксперт С++
3204 / 1731 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
17.07.2010, 14:10 91
Лучший ответ Сообщение было отмечено как решение

Решение

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
/////////////////////////////////////////////////////////////////////////
//В некотором царстве жил Змей Горыныч. У него было N голов и M хвостов. 
//Иван-царевич решил уничтожить губителя человеческих душ, для чего ему 
//его кума Баба Яга подарила волшебный меч, так как только им можно убить
//Змея Горыныча. 
 
//Если отрубить одну голову, то на её месте вырастает 
//новая, 
 
//если отрубить хвост, то вместо него вырастет 2 хвоста. 
 
//Если отрубить два хвоста, то вырастает 1 голова, 
 
//и только когда 
//отрубить 2 головы, то не вырастет ничего. 
 
//Змей Горыныч гибнет только в том случае, когда ему отрубить 
//все головы и все хвосты. 
//Определить минимальное количество ударов мечом, нужное 
//для уничтожения Змея Горыныча.
//Вход. переменные - m, n.
//#include <string>
/////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <limits>
 
class T_zmey
{
    enum T_tip_udara_mechom
    {
        OTRUBIT_1_GOL,
        OTRUBIT_2_GOL,
        OTRUBIT_1_HV,
        OTRUBIT_2_HV
    };
    //-----------------------------------------------------------
    int kolich_golov_;
    int kolich_hvostov_;
    int kolich_udarov_;
    //-----------------------------------------------------------
public:
    //-----------------------------------------------------------
    T_zmey
        (
            int  kolich_golov,
            int  kolich_hvostov
        ) 
        : kolich_golov_(kolich_golov),
          kolich_hvostov_(kolich_hvostov),
          kolich_udarov_(0)
    {}
    //-----------------------------------------------------------
    bool is_ubit()
    {
        return kolich_golov_ == 0
               && kolich_hvostov_ == 0;
    }    
    //-----------------------------------------------------------
    void  udar_mechom
        (
            T_tip_udara_mechom  tip_udara_mechom            
        )
    { 
        ++kolich_udarov_;
        switch(tip_udara_mechom)
        {
        case OTRUBIT_1_GOL:
            //std::cout << "1_GOL ";
            break;
        case OTRUBIT_2_GOL:
            kolich_golov_ -= 2;
            //std::cout << "2_GOL ";
            break;
        case OTRUBIT_1_HV:
            ++kolich_hvostov_;
            //std::cout << "1_HV ";
            break;
        case OTRUBIT_2_HV:
            ++kolich_golov_;
            kolich_hvostov_ -= 2;
            //std::cout << "2_HV ";
            break;                
        }        
    }
    //-----------------------------------------------------------
    double chislo_udarov_dlya_unichtoj()
    {
        if(kolich_hvostov_ == 0)
        {
            if( kolich_golov_ % 2 == 0)
            {
                while(!is_ubit())
                {
                    udar_mechom(OTRUBIT_2_GOL);
                }           
            }            
            else
            {
                return std::numeric_limits<double>::infinity();
            }            
        }
        else//Количество хвостов ненулевое.
            //Конвертируем их в головы.
        {
            if( kolich_golov_ % 2 == 0)
            {
                //Из хвостов надо сделать четное число голов.
                while(kolich_hvostov_ % 4 != 0)
                {
                    udar_mechom(OTRUBIT_1_HV);
                }                
            }
            else
            {
                //Из хвостов надо сделать нечетное число голов.
                while(kolich_hvostov_ % 4 != 2)
                {
                    udar_mechom(OTRUBIT_1_HV);
                }                
            }
            //Конвертируем хвосты в головы.
            while(kolich_hvostov_)
            {
                udar_mechom(OTRUBIT_2_HV);
            }
            chislo_udarov_dlya_unichtoj();
        }
        return  kolich_udarov_;
    }
};
 
int main()
{
    std::locale::global(std::locale(""));
    std::cout << "Число голов: ";
    int chislo_golov;
    std::cin >> chislo_golov;
    std::cout << "Число хвостов: ";
    int chislo_hvostov;
    std::cin >> chislo_hvostov;
    T_zmey  zmey(chislo_golov, chislo_hvostov);
    double chislo_udarov = zmey.chislo_udarov_dlya_unichtoj();
    if(chislo_udarov != std::numeric_limits<double>::infinity())
    {
        std::cout << "Змей убит за "
                  << chislo_udarov
                  << " ударов."
                  << std::endl;    
    }
    else
    {
        std::cout << "Змей бессмертен."
                  << std::endl;    ;
    };
    return 0;
}
7
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
17.07.2010, 14:23  [ТС] 92
Mr.X, Красиво!
0
Мат в 32 хода
236 / 171 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
17.07.2010, 20:12 93
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
44
#include <iostream>
#include <cstring>
#include <conio.h>
using namespace std;
int main()
{
    cout<<"Enter the string: \n";
    char s[50];
    cin.getline(s,50);
    int i=0;
    int count=0;
    bool last=false;
    while(s[i]!='\0')
    {
        if (s[i]==':' || s[i]==';')
        {
            if (last==false)
                last=true;
        };
        if ((s[i]==':' && s[i-1]==':') || (s[i]==';' && s[i-1]==';'))
        {
            last=false;
            goto e;
        }
        if (last==true && s[i]!=')' && s[i]!='(' && s[i]!=']' && s[i]!='[' && s[i]!=':' && s[i]!=';' && s[i]!='-')
        {
            last=false;
            goto e;
        };
        if (s[i]==')' || s[i]=='(' || s[i]==']' || s[i]=='[')
        {
            if (last==true)
            {
                last=false;
                count++; 
            }
        };
        e:
        i++;
    };
    cout<<count;
    getch();
    return 0;
}
?

Не по теме:

извинаюсь за предедущий "поломанный" код :)



Цитата Сообщение от MikeSoft Посмотреть сообщение
Первым символом является либо ; (точка с запятой), либо : (двоеточие) ровно один раз
то есть
Код
:::)
не 1 смаилик?
с 3 по 4 символы...
разве нет?
ведь тогда получается что если нам всреачаюся (где ни будь) два одинаковых знака ":" и ";", то что бы не шло дальше, счёт смаиликов закончен?
на пример, сколько здесь смаилов:
Код
:) ;-] :---------[ ::) :)
по моему 4...

Добавлено через 4 минуты
Цитата Сообщение от Lavroff Посмотреть сообщение
Задачи какие-то садистские которые вы скинули
с украинской олимпиады.
могу скинуть линк, там их сотни...

HIMen, вот
ваша
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>
#include <conio.h>
using namespace std;
int n=7;
int main()
{
    int a[n];
    int b[n];
    int i,k;
    cout<<"Enter the array: \n";
    for (i=0;i<n;i++)
    {
    cin>>a[i];
    b[i]=1;
    }
    for (i=0;i<n;i++)
    {
        for(k=0;k<n;k++)
            if (i!=k && a[i]==a[k])
                b[i]=2;
    }
    for (i=0;i<n;i++)
    {
        if(b[i]==1)
            {cout<<"\n"<<a[i]; break;}
    }
    getch();
    return 0;
}
, на массив.
длинная вышла : S

Добавлено через 5 часов 6 минут

Не по теме:

Цитата Сообщение от Lavroff Посмотреть сообщение
Задачи какие-то садистские которые вы скинули
ничего, горынычам всяким головы рубить, эт дело благое :D

0
easybudda
17.07.2010, 22:40
  #94

Не по теме:

Цитата Сообщение от Mr.X Посмотреть сообщение
//Количество хвостов ненулевое.
//Конвертируем их в головы.
улыбнуло :)

0
372 / 286 / 97
Регистрация: 17.12.2009
Сообщений: 567
18.07.2010, 07:17 95
считает смайлики, с командной строки запускать, у проги один параметр - имя файла с текстом.
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
#include <iostream>
#include <fstream>
#include <cstdio>
using namespace std;
 
int main(int argc, char **argv)
{
    if (argc!=2)
    {
        cout << "O_o where is file name?\n";
        return 1;
    }
    ifstream fin(argv[1]);
    int counter = 0;
    int state = 1;
    char c;
    while (!fin.eof())
    {
        fin.get(c);
        //cout << state << "\t=>\t" << c << "\n";
        switch (state)
        {
            case 0: if (c==' ' or c=='\n') state=1; else state=0; break;
            case 1: if (c==':' or c==';') state=2; else state=0; break;
            case 2: if (c=='-') state=2;
                      else if (c==']') state=3;
                      else if (c==')') state=4;
                      else if (c=='[') state=5;
                      else if (c=='(') state=6;
                      else state=0;
                      break;
            case 3: if (c==EOF) counter++;
                    if (c==']')state=3;
                    else if (c==' ' or c=='\n') counter++, state=1;
                    else state=0;
                    break;
            case 4: if (c==EOF) counter++;
                    if (c==')')state=4;
                    else if (c==' ' or c=='\n') counter++, state=1;
                    else state=0;
                    break;
            case 5: if (c==EOF) counter++;
                    if (c=='[')state=5;
                    else if (c==' ' or c=='\n') counter++, state=1;
                    else state=0;
                    break;
            case 6: if (c==EOF) counter++;
                    if (c=='(')state=6;
                    else if (c==' ' or c=='\n') counter++, state=1;
                    else state=0;
                    break;
        }
    }
    fin.close();
    cout << counter << '\n';
    return 0;
}
вроде работает...
1
Jesus loves me
Эксперт С++
5096 / 3110 / 351
Регистрация: 12.12.2009
Сообщений: 7,845
Записей в блоге: 2
18.07.2010, 10:18 96
Код очень сырой, есть некоторые недороботки, но общая идея по-моему правильная, хотя кратчайший путь можно еще по другому считать.
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
/*В пустой прямоугольной комнате размерами АхВхС (длина, ширина, высота)
 на пол упала уснувшая муха. Паук, находившийся на одной из стен, или на полу комнаты,
 начал двигаться к ней по кратчайшему пути.
На какое расстояние он при этом переместится?*/
#include <iostream>    
using namespace std;
int main (){  
double A,B;// размеры комнаты  
double x,y,z; //координаты паука
double a,b; // координаты мухи
double S;
cout<<"Enter size of room (A B): ";
cin>>A>>B;
cout<<"Enter coordinates of fly (a b):";
cin>>a>>b;
cout<<"Enter coordinates of spider (x y z):";
cin>>x>>y>>z;
if(x==0||x==A)// если паук сидит "длинной" стороне
  S=sqrt(z*z+(abs(y-b)))+a; // теорема Пифагора + a
else if(y==0||y==B) // если паук сидит на "широкой" стороне
  S=sqrt(z*z+(abs(x-a)))+b;
else if(z==0)//если паук сидит на полу
   S=sqrt((x-a)*(x-a)+ (y-b)*(y-b)); 
else cout<<"You enter incorrect coordinates!";   
cout<<"Way = "<<S<<endl;
system("pause");
  return 0;    
}
да, условие по-моему не корректно "входные данные - переменные a, b, c.", для правильного расчета нужно больше, собственно как я и сделал.

Добавлено через 2 минуты
Здесь высота комнаты не важна, т.к. нет условия "если паук сидит на потолке", поэтому не стал брать ее в расчет. Но по-хорошему еще б строчек 10 добавить надо)
1
Мат в 32 хода
236 / 171 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
18.07.2010, 10:30 97
Цитата Сообщение от Kastaneda Посмотреть сообщение
да, условие по-моему не корректно "входные данные - переменные a, b, c.", для правильного расчета нужно больше, собственно как я и сделал.
согласен..
звиняюсь...
0
Мат в 32 хода
236 / 171 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
18.07.2010, 10:45 98
вот ещё неплохая:


Конь и пешка против коня


Вам задана некая корректная отложенная шахматная партия, в которой встретился эндшпиль конь и пешка против коня. Ход белых.
Ваша задача очень проста - определить количество возможных ходов белого коня. Возможные по правилам ходы показаны на рисунке красными точками.
Учтите, ход разрешается, только если после передвижения на "новую" клетку ему не угражает ни одна фигура.

Пример:
(на риссунке 6 возможных ходов (из за чёрного коня))
0
Изображения
 
48 / 48 / 10
Регистрация: 12.01.2010
Сообщений: 183
18.07.2010, 13:05 99
Цитата Сообщение от MikeSoft Посмотреть сообщение
Lavroff, вот вам ещё задачка ... здесь больше на логику.
Даны две переменных:
C++
1
2
int a = 10;
int b = 25;
Не используя третью переменную добиться результата:
C++
1
2
a = 25;
b = 10;
То есть, поменять значения местами.
У задачи существует как минимум три решения (может и больше, но мне в голову пришли три)

C++
1
a^=b^=a^=b
вроди так
2
Мат в 32 хода
236 / 171 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
18.07.2010, 13:15 100
Цитата Сообщение от лендер Посмотреть сообщение
вроди так
один из способов
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.07.2010, 13:15

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Проверить на правильность и закомментировать весь код для лучшего понимания
Всем здравствуйте. Условие задачи - Заданная матрица целых чисел размером (N, N). Найти среднее...

Нужны задачи для тренировки
Киньте задачки на классы......а то в самоучителе, по которому я учу Сишку....приведены задачки,...

Нужны задачи для тренировки
Здравствуйте киньте пожалуйста задания по с++ для человека начинающего изучать Turbo с++

Нужны задачи для тренировки
Вот не давно был школьный этап по программирование в школе(олимпиады). Меня закинули на городскую,...


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

Или воспользуйтесь поиском по форуму:
100
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.