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

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

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

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

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

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

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

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

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

1272
Evg
Эксперт CАвтор FAQ
21118 / 8134 / 628
Регистрация: 30.03.2009
Сообщений: 22,448
Записей в блоге: 30
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];
}
1
Эксперт С++
2328 / 1701 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2010, 16:38 842
Операторы ветвления, арифметические операторы, массивы. Есть еще варианты.

P.S. Задача с собеседования по C++.
0
Эксперт С++
5036 / 3096 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
04.11.2010, 16:47 843
Ещё так можно:

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


Вообще с побитовыми операциями можно кучу примеров придумать...
1
Эксперт С++
2328 / 1701 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2010, 16:51 844
silent_1991, да, побитовые операции еще один вариант решения.

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


Опять же есть еще как минимум один способ решения.
0
Эксперт С++
5036 / 3096 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
04.11.2010, 16:54 845
CyBOSSeR, вы имеете ввиду общий способ (т.е. на ровне с массивами, ветвлениями, побитовыми операциями и т.д.), или в пределах перечисленных?

Не по теме:

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

0
Эксперт С++
2328 / 1701 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2010, 16:57 846
Цитата Сообщение от silent_1991 Посмотреть сообщение
вы имеете ввиду общий способ
Да, за пределами тех, что уже использовались.
0
Evg
Эксперт CАвтор FAQ
21118 / 8134 / 628
Регистрация: 30.03.2009
Сообщений: 22,448
Записей в блоге: 30
04.11.2010, 17:01 847
silent_1991, вычитание, побитовые операции и т.п. - это всё один и тот же способ - придумать функцию (в математическом смысле), чтобы для 1 она возвращала 2, а для 2 - 1

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

Добавлено через 2 минуты
может так?
Я не знаю, есть ли специализация шаблона по константному значению (а не по типу). Если есть, то через специализацию шаблонной функции
2
Эксперт С++
2328 / 1701 / 148
Регистрация: 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;
}
.
3
Эксперт С++
3204 / 1731 / 435
Регистрация: 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;
}
0
1992 / 1592 / 488
Регистрация: 31.05.2009
Сообщений: 2,980
04.11.2010, 20:23 850
Кроме уже перечисленного ничего в голову не приходит... разве что
C++
1
2
3
4
int func(int n)
{
    return !(n-1)+1;
}
0
Эксперт С++
2328 / 1701 / 148
Регистрация: 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;
}
Возможно есть еще способы не входящие в данный список, но мне они не известны.
0
Мат в 32 хода
236 / 171 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
04.11.2010, 20:35 852
а так?
C++
1
sqrt(25-30*n+9*n*n);
0
Эксперт С++
2328 / 1701 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2010, 20:37 853
nikkka, это опять же математические операции.
0
Мат в 32 хода
236 / 171 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
04.11.2010, 20:38 854
или так?
C++
1
sqrt((n*n-3)*(n*n-3));
Добавлено через 27 секунд
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
это опять же математические операции
ну да. а разве нельзя?
0
Эксперт С++
475 / 443 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
04.11.2010, 20:40 855
Так можно взять произвольную математическую функцию, принимающую хотя бы два различных значения, сдвигом и умножением заставить ее проходить через точки (1; 2) и (2; 1). Будем перебирать все варианты?
0
Эксперт С++
2328 / 1701 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2010, 20:41 856
Цитата Сообщение от nikkka Посмотреть сообщение
а разве нельзя?
Можно, конечно, но возможно есть способ решения не входящий в этот список. Именно способ, а не формула.
Цитата Сообщение от Хохол Посмотреть сообщение
Будем перебирать все варианты?
Это опять же математика.
0
Эксперт С++
475 / 443 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
04.11.2010, 20:42 857
Ну я типа объясняю, почему еще одна формула - неинтересно.
0
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
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("*");
}
0
Эксперт С++
5036 / 3096 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
04.11.2010, 21:52 859
#pragma, но самое смешное то, что это один из трёх вариантов решения (звёздочка напечатается 20 раз))) )
0
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
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("*");
}
И так далее.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.11.2010, 21:56

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

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

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

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

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


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

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

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