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

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

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

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

Список задач, решение которых присутствует в данной теме:
44
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.07.2010, 05:53
Ответы с готовыми решениями:

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

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

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

1272
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
30.07.2010, 15:16
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Freeman Посмотреть сообщение
Может самому Страуструпу письмо отправить, спросить, он то точно знает
Не факт. Все решает комитет по стандартизации. Просто сегодня ночью выяснилось, что в разных источниках приоритеты инкрементов то разные, то одинаковые. Я поэтому и спросил, почему Mr.X считает что приоритеты у них разные, ибо в стандарте я по этому поводу ничего не нашел, возможно, проглядел.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
30.07.2010, 15:54
Цитата Сообщение от Nameless One Посмотреть сообщение
Вот такая задачка:
Какой должен быть прототип у функции func, чтобы при передаче ей статического массива функция имела информацию о типе и размере массива:
C++
1
2
int arr[2][2] = {{0, 1}, {2, 3}};
func(arr);
Мое решение
//////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <typeinfo>
//////////////////////////////////////////////////////////////////////////////
template<class T>
void func(T& p)
{
std::cout << typeid(p).name()
<< std::endl;
}
//////////////////////////////////////////////////////////////////////////////
int main()
{
int arr[2][2] = {{0, 1}, {2, 3}};
func(arr);
return 0;
}

0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2010, 15:57
Mr.X, в общем-то, использовать шаблон для информации о типе было достаточно. А как узнать размер массива для использования в программе (sizeof'ом пользоваться нельзя)?
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
30.07.2010, 16:07
Цитата Сообщение от Nameless One Посмотреть сообщение
Mr.X, в общем-то, использовать шаблон для информации о типе было достаточно. А как узнать размер массива для использования в программе (sizeof'ом пользоваться нельзя)?
Давайте уточним. Размерность массива (одно, двух или трехмерный) у нас тоже считается неизвестной?
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2010, 16:15
Mr.X, размерность массива фиксирована (в данном случае - двумерный). Под размером здесь имеется в виду число строк и столбцов двумерного массива.
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
30.07.2010, 16:28
жуткий код
зато информации об аргументе больше.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
template <typename T, const size_t cols, const size_t rows>
void func (T (&arr)[cols][rows])
{
   std::cout<< "cols: "    << cols << ", rows: " << rows << std::endl
            << "summ: "    << cols*rows << std::endl
            << "sizeof: "  << sizeof(arr) << std::endl;
}
 
int main() {
   int array[4][32];
   func(array);
   return 0;
}
http://liveworkspace.org/code/... 5e8ae012f4
1
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2010, 16:32
niXman, в принципе, все правильно.
Вот само решение
C++
1
2
template<class T, size_t n, size_t m>
void func(T (&t)[n][m]);
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
30.07.2010, 16:36
никогда бы на практике такого не написал

Добавлено через 2 минуты
Цитата Сообщение от Nameless One Посмотреть сообщение
niXman, в принципе, все правильно.
Вот само решение
C++
1
2
template<class T, size_t n, size_t m>
void func(T (&t)[n][m]);
подкорректировал.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2010, 16:44
Еще на шаблоны. Написать программу, которая вычисляет значение факториала n, причем:
  1. n - константа времени компиляции;
  2. Искомое значение факториала должно быть вычислено еще на стадии компиляции.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
30.07.2010, 18:21
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
///////////////////////////////////////////////////////////////////////////////////
//Написать программу, которая вычисляет значение факториала n, причем:
//
//   1. n - константа времени компиляции;
//   2. Искомое значение факториала должно быть вычислено еще на стадии компиляции.
///////////////////////////////////////////////////////////////////////////////////
#include <iostream>
///////////////////////////////////////////////////////////////////////////////////
template<int i, int j = i>
struct T_fact
{
    enum 
    {        
        result  = i * (i - 1)
    };    
};
///////////////////////////////////////////////////////////////////////////////////
template<int i>
struct T_fact<i, 0>
{    
    enum {result = 1};        
};
///////////////////////////////////////////////////////////////////////////////////
template<int i>
struct T_fact<i, 1>
{    
    enum {result = 1};        
};
///////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::cout << "T_fact<0>::result = "
              << T_fact<0>::result
              << std::endl;
    
    std::cout << "T_fact<1>::result = "
              << T_fact<1>::result
              << std::endl;
 
    std::cout << "T_fact<3>::result = "
              << T_fact<3>::result
              << std::endl;
 
    std::cout << "T_fact<4>::result = "
              << T_fact<4>::result
              << std::endl;  
    return 0;
}
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.07.2010, 18:23  [ТС]
Не знаю, что я тут натворил... Нужен макрос или не нужен... Нужен const или не нужен... Но как-то так. Если не прав - скажите.

Вот этого чуток не понял: Искомое значение факториала должно быть вычислено еще на стадии компиляции.
Функция должна быть константной или что?

Fact
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
#define Factorial(N,Factor) for(int i=1;i<=(int)N;i++){Factor=Factor*i;}
 
template<class T>
const T Fact (const T N)
{
    T Factor=1;
    Factorial(N,Factor);
    return Factor;
}
 
int main()
{
    const int N=7;
    std::cout<< Fact(N) <<'\n';
    return 0;
}
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2010, 18:26
Цитата Сообщение от Lavroff Посмотреть сообщение
Функция должна быть константной или что?
Значение факториала должно быть вычислено еще до запуска программы.

Mr.X, 4! = 24, а не 12.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.07.2010, 18:26  [ТС]
Nameless One, Посмотрите мой код. Не верен?
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2010, 18:32
Lavroff, Если значение факториала - константа времени компиляции, значит, это значение может быть размером статического массива, т.е. запись "int arr[Fact(7)];" должна компилироваться. Так что у тебя не правильно, а вот Mr.X пошел по правильному пути, только вот напутал чего-то

Добавлено через 1 минуту
Цитата Сообщение от Lavroff Посмотреть сообщение
Функция должна быть константной или что?
Вызов функций может происходить только во время выполнения программы, так что вычисленное значение никак не может быть константой времени компиляции.
1
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
30.07.2010, 18:36
По мотивам кода Mr.X.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template<int n>
struct fact
{
    static const int val = n*fact<n-1>::val;
};
 
template<>
struct fact<0>
{
    static const int val = 1;   
};
 
int main()
{
    cout << fact<5>::val;
}
1
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
30.07.2010, 18:41
Да, пардон, вот так правильно:
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
///////////////////////////////////////////////////////////////////////////////////
//Написать программу, которая вычисляет значение факториала n, причем:
//
//   1. n - константа времени компиляции;
//   2. Искомое значение факториала должно быть вычислено еще на стадии компиляции.
///////////////////////////////////////////////////////////////////////////////////
#include <iostream>
///////////////////////////////////////////////////////////////////////////////////
template<int i, int j = i >
struct T_fact
{
    enum 
    {        
        result  = i * T_fact<i - 1>::result
    };    
};
///////////////////////////////////////////////////////////////////////////////////
template<int i>
struct T_fact<i, 0>
{    
    enum {result = 1};        
};
///////////////////////////////////////////////////////////////////////////////////
template<int i>
struct T_fact<i, 1>
{    
    enum {result = 1};        
};
///////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::cout << "fact<0>::result = "
              << T_fact<0>::result
              << std::endl;
    
    std::cout << "T_fact<1>::result = "
              << T_fact<1>::result
              << std::endl;
 
    std::cout << "T_fact<3>::result = "
              << T_fact<3>::result
              << std::endl;
 
    std::cout << "T_fact<4>::result = "
              << T_fact<4>::result
              << std::endl;  
    return 0;
}
1
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2010, 18:41
Хохол, все верно.
А у меня с enum'ами
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 <iostream>
 
template<const unsigned n>
struct fact
{
    enum
    {
        value = n * fact<n - 1>::value
    };
};
 
template<>
struct fact<0>
{
    enum
    {
        value = 1
    };
};
 
int main()
{
    const unsigned n = 12;
    std::cout << fact<n>::value << std::endl;
    system("pause");
    return EXIT_SUCCESS;
}
2
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.07.2010, 18:42  [ТС]
Кстати. А в чем смысл на практике делать шаблон под вычисление факториала?
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2010, 18:55
Lavroff, это только пример, так что для него вряд ли найдется практическое примение (впрочем, как и для многих программ из этой темы). Что важно в нем - показать, что во время выполнения программы не тратится ни память, ни время для вычислений.
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
30.07.2010, 22:20
Цитата Сообщение от 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
#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 a){ puts("DerivedClass::func(int)"); }   
        //...             
};
 
int main()
{           
    DerivedClass obj;
    obj.func(0);
    obj.func(0, 0);     // ошибка
    obj.func(0, 0, 0);  // ошибка      
   
    return 0;
}
метод func из DerivedClass перекрывает метод func и все его перегрузки из BaseClass. Каким образом можно исправить данный код чтобы в конечном итоге на экран всё-таки было выведено:
DerivedClass::func(int)
BaseClass::func(int, int)
BaseClass::func(int, int, int)
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.07.2010, 22:20

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

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

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

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

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


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

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

Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru