Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/2345: Рейтинг темы: голосов - 2345, средняя оценка - 4.54
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562

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

15.07.2010, 05:53. Показов 515454. Ответов 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
Закрытая тема Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru