В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
1

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

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

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

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

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

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

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

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

1272
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
15.07.2010, 08:41 2
Лучший ответ Сообщение было отмечено как решение

Решение

попробуй эту. в принципе, ничего сложного. можно пофантазировать, и "улучшить" (усложнить) задание...
Миниатюры
Задачи для тренировки и лучшего понимания  
8
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
15.07.2010, 10:08  [ТС] 3
Лучший ответ Сообщение было отмечено как решение

Решение

nikkka, Хм. На ООП и наследование... Ну что ж. Можно и попробовать. Виртуальное наследование:

virtual public/private/protected?
Время выхода стрелка на рубеж через псевдослучайные числа?
Так. pokerplayer обязательно использует функцию класса Person, не переопределенную в данном классе?

Добавлено через 39 минут
Для начала так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//Person_classes.h
#ifndef PERSON_CLASSES_H_
#define PERSON_CLASSES_H_
#include <string>
class Person
{
    std::string name;
    std::string surname;
public:
    Person(){}
    Person(std::string name_, std::string surname_):name(name_), surname(surname_){}
            ~Person(){}
    void SetInfo(std::string name_, std::string surname_);
    void Show() const;
    Person(const Person&Ob):name(Ob.name), surname(Ob.surname){}
    Person& operator =(Person&Ob);
};
#endif
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//Person_functions.cpp
#include "Person_classes.h"
#include <iostream>
#include <string>
void Person::Show() const
{
    std::cout<<"Name: "<< name <<'\n';
    std::cout<<"Surname: "<< surname <<'\n';
    std::cout<<std::endl;
}
void Person::SetInfo(std::string name_, std::string surname_)
{
    name=name_;
    surname=surname_;
}
Person& Person::operator =(Person &Ob)
{
    if(this==&Ob)
        return *this;
    name=Ob.name;
    surname=Ob.surname;
    return *this;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//Person.cpp
#include "Person_classes.h"
#include <iostream>
#include <string>
int main()
{
    Person Temp;
    std::string name;
    std::string surname;
    std::cout<<"Enter name: "; std::getline(std::cin, name);
    std::cout<<"Enter surname: "; std::getline(std::cin, surname);
    Temp.SetInfo(name, surname);
    Temp.Show();
    return 0;
}
Добавлено через 17 минут
Остальное вечером. Уезжать над
5
34 / 34 / 8
Регистрация: 07.06.2010
Сообщений: 118
15.07.2010, 15:20 4
Лучший ответ Сообщение было отмечено как решение

Решение

Написал по первому абзацу классы Person Gunslinger
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
//P_and_G_classes.h - заголовочный файл с классами Person & Gunslinger пока в одном файле
#include <string>
using std::string;
class Person
{
public:
    Person(string name_, string surname_):name(name_),surname(surname_) {};
    Person(){}
    virtual ~Person(){}
    virtual void Show();
    void SetInfo(string name_, string surname_);
    Person& operator=(Person& rhs);
protected:
    string name;
    string surname;
};
 
//------------------------------------------------
 
 
class Gunslinger : virtual public Person
{
public:
    Gunslinger(){}
    Gunslinger(string name_, string surname_,int trunks_):
      trunks(trunks_),
      Person(name_ , surname_) {}
 
    virtual void Show();
    double Draw(){return 0;} // временно
    void SetInfo(string name_, string surname_,int trunks_);
    Gunslinger& operator=(Gunslinger& rhs);
protected:
    int trunks;
};
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
#ifndef _h_
#define _h_
//P_and_G_functions.cpp - файл реализации функций Person & Gunslinger
#include <iostream>
#include "P_and_G_classes.h"
using std::cout;
using std::endl;
void  Person::Show() 
{
    cout<<"Name : "<<name<<endl;
    cout<<"Surname : "<<surname<<endl;
}
 
Person& Person::operator =(Person& rhs)
{
    if(this==&rhs)
        return *this;
    SetInfo(rhs.name , rhs.surname);
    return *this;
}
 
void Person::SetInfo(string name_, string surname_)
    {
        name=name_;
        surname=surname_;
    }
 
void Gunslinger::SetInfo(string name_, string surname_,int trunks_)
    {   
        Person::SetInfo(name_,surname_);
        trunks=trunks_;
    }
 
void Gunslinger::Show()
{
    Person::Show();
    cout<<"Time to Line : "<< Draw()<<endl;
    cout<<"Trunks : "<<trunks<<endl;
}
 
Gunslinger& Gunslinger::operator=(Gunslinger& rhs)
{
    if(this==&rhs)
        return *this;
    SetInfo(rhs.name, rhs.surname, rhs.trunks);
    return *this;
}
 
#endif
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
#include "P_and_G_classes.h" //проверка функциональности классов
#include <iostream>
int main()
{
Person per1;
Person per2;
per2.SetInfo("Max","Payne");
per1=per2;
per1.Show();
Person* pPer;
int choice;
std::cout<<"Enter (1)Person,(2)Gunslinger : ";
std::cin>>choice;
switch(choice)
{
case 1:
    pPer=new Person("Good","Person");
    break;
case 2:
    pPer=new Gunslinger("Bad","Dude",2);
    break;
}
pPer->Show();
delete pPer;
return 0;
}
Как можно в типе double представить время, типа целая часть часы а дробная минуты или как?
И еще Cdraw() должна возвращать случайную карту или следующую по порядку ?
5
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
15.07.2010, 15:30 5
Цитата Сообщение от [Freeman
;858352]типа целая часть часы а дробная минуты
можно и так, но минут 60, а сотых частей 100...
попробуй сделать так:
time=3.5 - 3 ч. 30 мин.
time=2.333333 - 2 ч. 20 мин.
minin100=(minin60/60)*100

Добавлено через 20 секунд
по другому не представляю..
2
34 / 34 / 8
Регистрация: 07.06.2010
Сообщений: 118
15.07.2010, 21:29 6
Вобще не много не корректное задание
2
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.07.2010, 15:26  [ТС] 7
Лучший ответ Сообщение было отмечено как решение

Решение

Сделал. Но есть пара проблем. А именно.
1) Время выдается все-таки фигово. Но вроде не превышает 24 часов.
2) В
C++
1
2
3
4
else if (n==4)
    {
        Arr=new BadDude("Name", "Surname", 2);
    }
Не читает имя и фамилию. Оставляет пустые строки. В чем трабл понять не могу.

Сам код.
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
//Person_classes.h
#ifndef PERSON_CLASSES_H_
#define PERSON_CLASSES_H_
#include <string>
class Person
{
protected:
    std::string name;
    std::string surname;
public:
    Person(){}
    Person(std::string name_, std::string surname_):name(name_), surname(surname_){}
    virtual~Person(){}
    virtual void SetInfo(std::string name_, std::string surname_);
    virtual void Show();
    Person(const Person&Ob):name(Ob.name), surname(Ob.surname){}
    Person& operator =(Person&Ob);
};
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////
class GunLisher:virtual public Person
{
protected:
    int num_of_st;
public:
    GunLisher(){}
    GunLisher(int num_of_st_, std::string name_, std::string surname_):
    Person(name_, surname_), num_of_st(num_of_st_){}
    virtual~GunLisher(){}
    void SetInfo(std::string name_, std::string surname_, int num_of_st_);
    double Draw();
    virtual void Show();
    GunLisher(const GunLisher&Ob);
    GunLisher& operator =(GunLisher&Ob);
};
/////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
class PokerPlayer:virtual public Person
{
public:
    PokerPlayer(){}
    PokerPlayer(std::string name_, std::string surname_):Person(name_, surname_){}
    virtual ~PokerPlayer(){}
    void SetInfo(std::string name_, std::string surname_);
    int Draw();
    virtual void Show();
};
/////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
class BadDude:public GunLisher, public PokerPlayer
{
public:
    BadDude(){}
    BadDude(std::string name_, std::string surname_, int num_of_st_):
    GunLisher(num_of_st_, name_, surname_),
        PokerPlayer(name_,surname_){}
    virtual ~BadDude(){}
    double Gdraw();
    int Cdraw();
    virtual void Show();
    void SetInfo(std::string name_, std::string surname_, int num_of_st_);
};
#endif
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
//Person_sunctions.cpp
#include "Person_classes.h"
#include <iostream>
#include <string>
#include <ctime>
void Person::Show()
{
    std::cout<<"Name: "<< name <<'\n';
    std::cout<<"Surname: "<< surname <<'\n';
    std::cout<<std::endl;
}
void Person::SetInfo(std::string name_, std::string surname_)
{
    name=name_;
    surname=surname_;
}
Person& Person::operator =(Person &Ob)
{
    if(this==&Ob)
        return *this;
    name=Ob.name;
    surname=Ob.surname;
    return *this;
}
/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
void GunLisher::Show()
{
    std::cout<<"Name: "<< name <<'\n';
    std::cout<<"Surname: "<< surname <<'\n';
    std::cout<<"Time: "<< Draw() <<'\n';
    std::cout<<"Num_of_st: "<< num_of_st <<'\n';
}
void GunLisher::SetInfo(std::string name_, std::string surname_, int num_of_st_)
{
    name=name_;
    surname=surname_;
    num_of_st=num_of_st_;
}
GunLisher& GunLisher::operator =(GunLisher &Ob)
{
    if(this==&Ob)
        return *this;
    name=Ob.name;
    surname=Ob.surname;
    num_of_st=Ob.num_of_st;
    return *this;
}
GunLisher::GunLisher(const GunLisher &Ob)
{
    name=Ob.name;
    surname=Ob.surname;
    num_of_st=Ob.num_of_st;
}
double GunLisher::Draw()
{
    double hours=0;
    srand(time(NULL));
    hours=1+rand()%(23);
    hours*=60;
    int minutes=0;
    minutes=1+rand()%(59);
    double min=hours+minutes;
    double times=0;
    times=min/60;
    return times;
}
/////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
int PokerPlayer::Draw()
{
    int card=0;
    srand(time(NULL));
    card=1+rand()%(52);
    return card;
}
void PokerPlayer::Show() 
{
    Person::Show();
    std::cout<<"Number of card: "<< Draw() <<'\n';
}
void PokerPlayer::SetInfo(std::string name_, std::string surname_)
{
    name=name_;
    surname=surname_;
}
/////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
int BadDude::Cdraw()
{
    int card=0;
    srand(time(NULL));
    card=1+rand()%(52);
    return card;
}
double BadDude::Gdraw()
{
    double hours=0;
    srand(time(NULL));
    hours=1+rand()%(23);
    hours*=60;
    int minutes=0;
    minutes=1+rand()%(59);
    double min=hours+minutes;
    double times=0;
    times=min/60;
    return times;
}
void BadDude::Show()
{
    Person::Show();
    std::cout<<"Num_of_st: "<< num_of_st <<'\n';
    std::cout<<"Time: "<< Gdraw() <<'\n';
    std::cout<<"Card: "<< Cdraw() <<'\n';
}
void BadDude::SetInfo(std::string name_, std::string surname_, int num_of_st_)
{
    name=name_;
    surname=surname_;
    num_of_st=num_of_st_;
}
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
//Person.cpp
#include "Person_classes.h"
#include <iostream>
#include <string>
int main()
{
    Person*Arr;
    int n=0;
    std::cout<<"Enter n: 1 for work with Person class, 2 for work with GunLisher, "
        <<"3 for work with PokerPlayer, 4 for work with BadDude\n "; std::cin>>n;
    if(n==1)
    {
        Arr=new Person("Name", "Surname");
    }
    else if (n==2)
    {
        Arr=new GunLisher(2, "Name", "Surname");
    }
    else if (n==3)
    {
        Arr=new PokerPlayer("Name", "Surname");
    }
    else if (n==4)
    {
        Arr=new BadDude("Name", "Surname", 2);
    }
    else
    {
        std::cout<<"Error\n";
        exit(1);
    }
    Arr->Show();
    return 0;
}
Добавлено через 11 часов 18 минут
Может кто-нибудь объяснить в чем проблема вышла? + Дать еще задание) Посложнее что-ль...
4
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
16.07.2010, 17:17 8
Лучший ответ Сообщение было отмечено как решение

Решение

Lavroff, на STL?
3
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.07.2010, 17:18  [ТС] 9
nikkka, На С++ вцелом. Потоки, стл, классы и пр.
2
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
16.07.2010, 18:11 10
Lavroff, почему файлы содержащие объявление и реализацию класса Person имеют различное название?
2
7 / 7 / 7
Регистрация: 24.03.2010
Сообщений: 25
16.07.2010, 18:15 11
Я делал так:

1) Открываешь блокнот (ну или emacs);
2) Ищешь по ключевым словам темы, где народ просит написать за них код;
3) Копипастишь в файл, пока не наберешь 10-15 тем;
4) Пишешь программы;
5) Опционально: когда программа написана - сверяешь, для интереса.

Рекомендую.
2
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.07.2010, 18:17  [ТС] 12
CyBOSSeR, Це так важно? Не знаю. Переименовать проблем не возникнет, а по смыслу логичнее. В одном классы, в другом реализация функций. Заметил там печатная ошибка. person_functions.cpp.
0
7 / 7 / 7
Регистрация: 24.03.2010
Сообщений: 25
16.07.2010, 18:19 13
Цитата Сообщение от Lavroff Посмотреть сообщение
CyBOSSeR, Це так важно? Не знаю. Переименовать проблем не возникнет, а по смыслу логичнее. В одном классы, в другом реализация функций

Не по теме:

Дурной тон, тащемта.

1
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.07.2010, 18:21  [ТС] 14
Lаmer, А в чем это дурной тон? Какое название логичнее: Person_classes.cpp или Person_functions.cpp если учитывать, что там описаны функции классов содержащихся в Person_classes.h?
0
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
16.07.2010, 18:22 15
Lavroff, если ты один работаешь над проектом - нет. Но это противоречит общепринятым соглашениям, и видя название person_functions, очень сложно догадаться что там реализация класса, а не некие вспомогательные функции для работы с классом. Просто назови person.h и person.cpp.
Цитата Сообщение от Lavroff Посмотреть сообщение
В одном классы, в другом реализация функций
Реализация методов класса не является частью класса?
1
4337 / 1506 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
16.07.2010, 18:23 16
Лучший ответ Сообщение было отмечено как решение

Решение

Lavroff, Дан целочисленный массив, наподобие такого {1, 7, 3, 7, 8, 1, 3}. Все его элементы, кроме одного повторяются ровно 2 раза (две 1, две 7, две 3, но одна 8). Найти это неповторяющееся число. Числа и размер массива могут быть любыми.
Надеюсь понятно объяснил.
3
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.07.2010, 18:24  [ТС] 17
CyBOSSeR, Является. Действительно вы правы. Спасибо. А по поводу ошибок?

Добавлено через 1 минуту
HIMen, Спасибо. Попробую сделать)
0
Эксперт С++
3953 / 1808 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
16.07.2010, 18:26 18
Лучший ответ Сообщение было отмечено как решение

Решение

Lavroff, Хотите проверить свои знания при работе с указателями?
Не открывая среду разработки попробуйте в голове решить такую задачку:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
    char buf1[100] = "Hello";
    char buf2[100] = "World";
    char *ptr1 = buf1+2;
    char *ptr2 = buf2+3;
    strcpy(ptr1, buf2);
    strcpy(ptr2, buf1);
    cout << ptr1 << endl << ptr2 << endl;
 
    return 0;
}
Попробуйте не жульничать, не открывать IDE ...
Если вы решите эту задачку, считайте что указатели почти усвоили.

Ответ и примечание (Открывать в самый последний момент)
Если у вас возникли сложности при решении этой задачи в голове, попробуйте представить решение на листке бумаге.
Правильный ответ:
World
HeWorld

При возникновении вопроса "почему?" - пишите, попробую подробно обьяснить.
Подробное объяснение можно прочитать здесь: Почему правильный ответ "World HeWorld"?...
13
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.07.2010, 18:34  [ТС] 19
MikeSoft, Возник вопрос почему... Что-то не могу врубиться.
Черт. Открыв IDE дабы проверить резалт после того как уже понял что не врублюсь и прогнав пошагово понял.
Мы изменяем значение ptr1 который ссылается на buf1, следовательно buf1 тоже изменяется. Но только с 2 символа, а первые два символа остаются. Так?
0
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
16.07.2010, 18:45 20
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Lavroff, почему файлы содержащие объявление и реализацию класса Person имеют различное название?
а разве есть разница? :-S
главное ведь подключить их правельно.
да?
0
16.07.2010, 18:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.07.2010, 18:45
Помогаю со студенческими работами здесь

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru