Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 2744, средняя оценка - 4.89
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
#1

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

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

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

Список задач, решение которых присутствует в данной теме:
Лучшие ответы (59)
Сообщение: #857841 Сообщение: #857861 Сообщение: #858352 Сообщение: #859371 Сообщение: #860160 Сообщение: #860255 Сообщение: #860259 Сообщение: #860317 Сообщение: #860368 Сообщение: #860466 Сообщение: #860508 Сообщение: #860720 Сообщение: #861091 Сообщение: #862174 Сообщение: #862617 Сообщение: #867259 Сообщение: #870298 Сообщение: #872053 Сообщение: #876456 Сообщение: #880114 Сообщение: #882889 Сообщение: #884418 Сообщение: #886414 Сообщение: #886989 Сообщение: #887733 Сообщение: #888464 Сообщение: #888487 Сообщение: #888941 Сообщение: #888947 Сообщение: #889040 Сообщение: #889450 Сообщение: #889587 Сообщение: #891772 Сообщение: #891790 Сообщение: #891862 Сообщение: #897758 Сообщение: #897782 Сообщение: #906325 Сообщение: #907991 Сообщение: #943672 Сообщение: #943700 Сообщение: #967735 Сообщение: #1053777 Сообщение: #1054209 Сообщение: #1083853 Сообщение: #1083928 Сообщение: #1131058 Сообщение: #1131359 Сообщение: #1273743 Сообщение: #1275465 Сообщение: #1276743 Сообщение: #1279215 Сообщение: #1282583 Сообщение: #1309088 Сообщение: #1315633 Сообщение: #1366395 Сообщение: #1550164 Сообщение: #1603678 Сообщение: #1604364
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2010, 05:53     Задачи для тренировки и лучшего понимания
Посмотрите здесь:

C++ Какой компилятор выбрать для лучшего изучения С++ по книге Берна Страуструпа?п
C++ Элементарные программы, для лучшего понимания языка...
Нужны задачи для тренировки C++
C++ Киньте задачки для тренировки
C++ Нужны простые задачи для тренировки
Нужны задачи для тренировки C++
На соревнованиях по фигурному катанию оценки заносятся в компьютер. Составить программу для вывода на экран лучшего результата после каждого выступлен C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт CАвтор FAQ
17275 / 5529 / 345
Регистрация: 30.03.2009
Сообщений: 15,041
Записей в блоге: 26
04.11.2010, 16:34     Задачи для тренировки и лучшего понимания #841
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Evg, есть еще одно решения в том же духе.
Навскидку кроме этого в голову больше ничего не лезет (если смотреть именно разные подходы к решению, а не разные вариации решения):

Тыц
C
1
2
3
4
5
int f (int n)
{
  static int a[3] = { -1, 2, 1 };
  return a[n];
}
CyBOSSeR
Эксперт C++
2298 / 1668 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2010, 16:38     Задачи для тренировки и лучшего понимания #842
Операторы ветвления, арифметические операторы, массивы. Есть еще варианты.

P.S. Задача с собеседования по C++.
silent_1991
Эксперт С++
4951 / 3027 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
04.11.2010, 16:47     Задачи для тренировки и лучшего понимания #843
Ещё так можно:

Код
C
1
2
3
4
int f(int n)
{
    return 4 + ~n;
}


Вообще с побитовыми операциями можно кучу примеров придумать...
CyBOSSeR
Эксперт C++
2298 / 1668 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2010, 16:51     Задачи для тренировки и лучшего понимания #844
silent_1991, да, побитовые операции еще один вариант решения.

Код
C
1
2
3
int f(int n) {
  return n ^ 0x3;
}


Опять же есть еще как минимум один способ решения.
silent_1991
Эксперт С++
4951 / 3027 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
04.11.2010, 16:54     Задачи для тренировки и лучшего понимания #845
CyBOSSeR, вы имеете ввиду общий способ (т.е. на ровне с массивами, ветвлениями, побитовыми операциями и т.д.), или в пределах перечисленных?

Не по теме:

P.S. Извиняюсь, что не использую теги, у меня форум подглючивает и почему-то неактивны кнопки тегов, смайлов, вообще большинство скриптов

CyBOSSeR
Эксперт C++
2298 / 1668 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2010, 16:57     Задачи для тренировки и лучшего понимания #846
Цитата Сообщение от silent_1991 Посмотреть сообщение
вы имеете ввиду общий способ
Да, за пределами тех, что уже использовались.
Evg
Эксперт CАвтор FAQ
17275 / 5529 / 345
Регистрация: 30.03.2009
Сообщений: 15,041
Записей в блоге: 26
04.11.2010, 17:01     Задачи для тренировки и лучшего понимания #847
silent_1991, вычитание, побитовые операции и т.п. - это всё один и тот же способ - придумать функцию (в математическом смысле), чтобы для 1 она возвращала 2, а для 2 - 1

Добавлено через 23 секунды
А про ещё один способ, с учётом собеседования по Си++ - надо подумать...

Добавлено через 2 минуты
может так?
Я не знаю, есть ли специализация шаблона по константному значению (а не по типу). Если есть, то через специализацию шаблонной функции
CyBOSSeR
Эксперт C++
2298 / 1668 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2010, 17:04     Задачи для тренировки и лучшего понимания #848
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Evg,
в точку
template<int n>
int f() {
return n;
}

template<>
int f<1>() {
return 2;
}

template<>
int f<2>() {
return 1;
}
.
Mr.X
Эксперт С++
3039 / 1684 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
04.11.2010, 19:01     Задачи для тренировки и лучшего понимания #849
Этого варианта по-моему еще не было:
C++
1
2
3
4
int f(int n)
{
    return 2 / n;
}
Добавлено через 13 минут
Еще вариант:
C++
1
2
3
4
int f(int n)
{    
    return 2 * n % 3;
}
rangerx
1922 / 1531 / 139
Регистрация: 31.05.2009
Сообщений: 2,894
04.11.2010, 20:23     Задачи для тренировки и лучшего понимания #850
Кроме уже перечисленного ничего в голову не приходит... разве что
C++
1
2
3
4
int func(int n)
{
    return !(n-1)+1;
}
CyBOSSeR
Эксперт C++
2298 / 1668 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2010, 20:31     Задачи для тренировки и лучшего понимания #851
Mr.X, rangerx, все известные мне способы решения:
1. Условные операторы:
C++
1
2
3
int f(int n) {
  return n == 1? 2 : 1;
}
2. Арифметические операторы:
C++
1
2
3
int f(int n) {
  return 3 - n;
}
3. Побитовые операторы:
C++
1
2
3
int f(int n) {
  return n ^ 0x3;
}
4. Массивы:
C++
1
2
3
4
int f(int n) {
  int arr[] = { 0, 2, 1 };
  return arr[n];
}
5. Специализация шаблона:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template<int n>
int f() {
  return n;
}
 
template<>
int f<1>() {
  return 2;
}
 
template<>
int f<2>() {
  return 1;
}
Возможно есть еще способы не входящие в данный список, но мне они не известны.
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
04.11.2010, 20:35     Задачи для тренировки и лучшего понимания #852
а так?
C++
1
sqrt(25-30*n+9*n*n);
CyBOSSeR
Эксперт C++
2298 / 1668 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2010, 20:37     Задачи для тренировки и лучшего понимания #853
nikkka, это опять же математические операции.
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
04.11.2010, 20:38     Задачи для тренировки и лучшего понимания #854
или так?
C++
1
sqrt((n*n-3)*(n*n-3));
Добавлено через 27 секунд
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
это опять же математические операции
ну да. а разве нельзя?
Хохол
Эксперт C++
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
04.11.2010, 20:40     Задачи для тренировки и лучшего понимания #855
Так можно взять произвольную математическую функцию, принимающую хотя бы два различных значения, сдвигом и умножением заставить ее проходить через точки (1; 2) и (2; 1). Будем перебирать все варианты?
CyBOSSeR
Эксперт C++
2298 / 1668 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2010, 20:41     Задачи для тренировки и лучшего понимания #856
Цитата Сообщение от nikkka Посмотреть сообщение
а разве нельзя?
Можно, конечно, но возможно есть способ решения не входящий в этот список. Именно способ, а не формула.
Цитата Сообщение от Хохол Посмотреть сообщение
Будем перебирать все варианты?
Это опять же математика.
Хохол
Эксперт C++
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
04.11.2010, 20:42     Задачи для тренировки и лучшего понимания #857
Ну я типа объясняю, почему еще одна формула - неинтересно.
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
04.11.2010, 21:50     Задачи для тренировки и лучшего понимания #858
Цитата Сообщение от Evg Посмотреть сообщение
Нашли ещё один способ, при котором печатается 21 звёздочка
Вот способ,при котором ничего не печатается
способ
C
1
2
3
4
5
6
main()
{
       int i, N=20;
       for(i = 0 ; i << N ; i--)
               printf("*");
}
C
1
2
3
4
5
6
main()
{
       int i, N=20;
       for(i = 0 ; i > N ; i--)
               printf("*");
}


Добавлено через 14 минут
Evg, у меня даже вопрос встречный появился,пока придумывал (я сжульничал,решал с компилятором)
Как,изменив один символ в исходном коде задачи,вызвать предупреждение в gcc:
Код
warning: value computed is not used
решилась
C
1
2
3
4
5
6
main()
{
       int i, N=20;
       for(i = 0; i + N ; i--)
               printf("*");
}
silent_1991
Эксперт С++
4951 / 3027 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
04.11.2010, 21:52     Задачи для тренировки и лучшего понимания #859
#pragma, но самое смешное то, что это один из трёх вариантов решения (звёздочка напечатается 20 раз))) )
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2010, 21:56     Задачи для тренировки и лучшего понимания
Еще ссылки по теме:

C++ Какая база требуется для понимания C++?
C++ Нужен пример рекурсивной функции для понимания ее назначения и практической пользы
C++ Builder Прошу примеров для понимания INDY
Книги для тренировки/развития котелка и просто убийства времени C++
Дайте задания для тренировки C++

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
04.11.2010, 21:56  [ТС]     Задачи для тренировки и лучшего понимания #860
#pragma, да собсна тут любое подойдет. И такое
C++
1
2
3
4
5
6
main()
{
       int i, N=20;
       for(i = 0; i - N ; i--)
               printf("*");
}
C++
1
2
3
4
5
6
main()
{
       int i, N=20;
       for(i = 0; i / N ; i--)
               printf("*");
}
C++
1
2
3
4
5
6
main()
{
       int i, N=20;
       for(i = 0; i * N ; i--)
               printf("*");
}
C++
1
2
3
4
5
6
main()
{
       int i, N=20;
       for(i = 0; i % N ; i--)
               printf("*");
}
И так далее.
Yandex
Объявления
04.11.2010, 21:56     Задачи для тренировки и лучшего понимания
Закрытая тема Создать тему
Опции темы

Текущее время: 11:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru