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

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

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

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

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

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

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

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

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

1272
Эксперт С++
2328 / 1701 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
30.07.2010, 15:16 361
Цитата Сообщение от Freeman Посмотреть сообщение
Может самому Страуструпу письмо отправить, спросить, он то точно знает
Не факт. Все решает комитет по стандартизации. Просто сегодня ночью выяснилось, что в разных источниках приоритеты инкрементов то разные, то одинаковые. Я поэтому и спросил, почему Mr.X считает что приоритеты у них разные, ибо в стандарте я по этому поводу ничего не нашел, возможно, проглядел.
0
Эксперт С++
3204 / 1731 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
30.07.2010, 15:54 362
Цитата Сообщение от 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
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2010, 15:57 363
Mr.X, в общем-то, использовать шаблон для информации о типе было достаточно. А как узнать размер массива для использования в программе (sizeof'ом пользоваться нельзя)?
0
Эксперт С++
3204 / 1731 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
30.07.2010, 16:07 364
Цитата Сообщение от Nameless One Посмотреть сообщение
Mr.X, в общем-то, использовать шаблон для информации о типе было достаточно. А как узнать размер массива для использования в программе (sizeof'ом пользоваться нельзя)?
Давайте уточним. Размерность массива (одно, двух или трехмерный) у нас тоже считается неизвестной?
0
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2010, 16:15 365
Mr.X, размерность массива фиксирована (в данном случае - двумерный). Под размером здесь имеется в виду число строк и столбцов двумерного массива.
0
Эксперт С++
3210 / 1459 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
30.07.2010, 16:28 366
жуткий код
зато информации об аргументе больше.
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
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2010, 16:32 367
niXman, в принципе, все правильно.
Вот само решение
C++
1
2
template<class T, size_t n, size_t m>
void func(T (&t)[n][m]);
0
Эксперт С++
3210 / 1459 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
30.07.2010, 16:36 368
никогда бы на практике такого не написал

Добавлено через 2 минуты
Цитата Сообщение от Nameless One Посмотреть сообщение
niXman, в принципе, все правильно.
Вот само решение
C++
1
2
template<class T, size_t n, size_t m>
void func(T (&t)[n][m]);
подкорректировал.
0
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2010, 16:44 369
Еще на шаблоны. Написать программу, которая вычисляет значение факториала n, причем:
  1. n - константа времени компиляции;
  2. Искомое значение факториала должно быть вычислено еще на стадии компиляции.
0
Эксперт С++
3204 / 1731 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
30.07.2010, 18:21 370
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
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
30.07.2010, 18:23  [ТС] 371
Не знаю, что я тут натворил... Нужен макрос или не нужен... Нужен 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
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2010, 18:26 372
Цитата Сообщение от Lavroff Посмотреть сообщение
Функция должна быть константной или что?
Значение факториала должно быть вычислено еще до запуска программы.

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

Добавлено через 1 минуту
Цитата Сообщение от Lavroff Посмотреть сообщение
Функция должна быть константной или что?
Вызов функций может происходить только во время выполнения программы, так что вычисленное значение никак не может быть константой времени компиляции.
1
Эксперт С++
475 / 443 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
30.07.2010, 18:36 375
По мотивам кода 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
Эксперт С++
3204 / 1731 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
30.07.2010, 18:41 376
Да, пардон, вот так правильно:
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
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2010, 18:41 377
Хохол, все верно.
А у меня с 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
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
30.07.2010, 18:42  [ТС] 378
Кстати. А в чем смысл на практике делать шаблон под вычисление факториала?
0
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2010, 18:55 379
Lavroff, это только пример, так что для него вряд ли найдется практическое примение (впрочем, как и для многих программ из этой темы). Что важно в нем - показать, что во время выполнения программы не тратится ни память, ни время для вычислений.
0
1992 / 1592 / 488
Регистрация: 31.05.2009
Сообщений: 2,980
30.07.2010, 22:20 380
Цитата Сообщение от 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.07.2010, 22:20

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

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

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

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

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


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

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

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