Rating@Mail.ru

Форум по операционной системе GNU/Linux и свободному программному обеспечению


Текущее время: 22 фев 2018, 13:35

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 44 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: примеры задач при изучении C++
Непрочитанное сообщениеДобавлено: 30 ноя 2014, 01:02 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10530
Откуда: Харьков
Обнаружил, что в учебных курсах, материалах и т.д. по изучению C++ очень мало реальных практических примеров задач для решения на C++.

Довольно много ... общих рассуждений и упражнений по виртуализации методов, множественному наследованию, ... патернам программирования ... и т.п. вещам, ... которые по большинству были раскритикованы и выброшены из всех последующих проектов языков программирования (Java, Scala, Go, ...).

Но практически нет примеров и задач по основам программирования в C++, когда приступающий к C++ не является корифеем в языке C (что кажется даже вредным для изучения C++) ... но ему сразу начинают пудрить мозги про ... "должен ли быть всегда виртуальным деструктор класса" :-o ...

В этой теме я собираюсь собрать набор таких задач-примеров.
Причём не для флейма что лучше что хуже ... а просто чтоб были задачи. Для себя, любимого, когда мне это понадобится. Если у кого есть идеи и задачи - милости просим... добавляйте от себя.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: примеры задач при изучении C++
Непрочитанное сообщениеДобавлено: 30 ноя 2014, 01:11 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10530
Откуда: Харьков
Прежде всего ... для того, чтобы сложить какую-то систему, нужно вспомнить утверждение автора C++, что на C++ может быть много разных стилей использования языка ... которые даже не пересекаются между собой:
- программирование в структурном стиле C с использованием POSIX API связи с операционной системой Linux (фактически C, с удобными операциями ввода-вывода типа >> и <<, строками string и т.д.);
- то же самое программирование "в стиле C", но с максимальным использованием внешних средств STL и других средств, вошедших, например, в Boost;
- программирование с максимальным вовлечением template, но практически без использования иерархий наследований, виртуализации ... и т.п. (в манере Александреску ;-) );
- максимальное использование полиморфизма, множественного наследования, виртуализации и т.д.;

... наверное ещё можно вычленить несколько отчётливых "стилей" ... радикально различающихся.

Цитата:
Обнаружил, что в учебных курсах, материалах и т.д. по изучению C++ очень мало реальных практических примеров задач для решения на C++.

Ситуация такая вот:
- сложилось так, что предложили поднатаскать в C++ программиста, молодого специалиста после института...
- я в C++ делал и руководил весьма крупными проектами пром. автоматики, но последний раз это где-то году в 2008-м ...
- с тех пор писал при случае отдельные приложения и на C++ ...
- но опыта систематизированного изложения именно C++ не имею ...
- и что там с учебниками и решебниками имеет место не следил и не знаю.
А для "прохода" по любому языку программирования важнейшим делом есть план, последовательность разбора вопросов. И его нужно или самому сложить (и ничего не пропустить), или взять какую-то обстоятельную книжку-публикацию, или учебный курс, и им следовать ... даже не очень важно какие именно взять, потому как нужна только последовательность действий ;-) .

Беру за план вот это (так сложилось):
Изображение

P.S. Вообще, ... IMHO ;-) , но это сугубо моё личное мнение, что C++ нужно и изучать и затем совершенствоваться исключительно по книгам Бьёрна Страуструпа, как единственного автора этого языка. Благо, таких книг Страуструпа наиздано в разное время достаточно.
Это как та же история с языком PASCAL, у которого был единственный автор Никлас Вирт, и который умел написать уникально компактные исчерпывающие описания к нему ... как позже и к Modula-2.
К сожалению, осваивать С++ по Страуструпу, в большинстве, не хотят: "это слишком заумно" ... предпочитают пересказки "на пальцах".


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: примеры задач при изучении C++
Непрочитанное сообщениеДобавлено: 30 ноя 2014, 14:48 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10530
Откуда: Харьков
Olej писал(а):
- и что там с учебниками и решебниками имеет место не следил и не знаю.

Даже интересно самому себе стало, любопытно... что можно здесь придумать?
Вопросы и упражнения в самой книге этой - это просто бред :-o ... это только толкование рассказанных понятий: "масло маслянное".

Давно известно и описано, что любой язык программирования нельзя изложить, описать последовательно. Это всегда будет рекурсивное описание: в обсуждение некоторых понятий всегда будут вовлекаться другие, которые ещё не рассмотренные, и которым очередь рассматриваться позже. Т.е. любое описание рассчитано на несколько проходов чтения. А с задачами - это и в несколько раз сложнее: трудно говорить о массивах не используя вызовы функций... Но это и не нужно. Можно использовать вещи, которые ещё последовательно не рассматривались, на интуитивно понятном уровне, откладывая детали на потом.

А вот "впереди паровоза" использовать "слои" С++ не нужно бы:
- нельзя говорить о структурировании данных (структуры, массивы), не разобравшись с простыми типами данных ... а ещё больше со всем разнообразием операций и кода, работающих с этими простыми типами;
- не стоит лезть в объекты и классы, не разобравшись обстоятельно со структурами;
- не нужно упоминать типы STL, не разобравшись вообще с шаблонами и их их ручным применением;
- не нужно упоминать Boost, прежде разборок с STL, который с некоторых пор и сам стал составной частью Boost;
и т.д.

А вот тут все штатные преподаватели, которые пишут книги, как раз наоборот спешат "впереди паровоза" ... как будто спешат похвастаться, что они и это, вроде как, понимают :lol: ... и это, и это, и это ...


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: примеры задач при изучении C++
Непрочитанное сообщениеДобавлено: 30 ноя 2014, 15:19 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10530
Откуда: Харьков
Olej писал(а):
Беру за план вот это (так сложилось):
Изображение


Цитата:
Глава 3. Работа с данными ........ 85
Простые данные ...... 86
...

Это вообще часть, наследуемая из C.
А к C у всех рассуждающих ;-) о C++ очень неравнодушное, двойственное отношение:

1. Завышенное. Вроде как они считают, что тот, кто "взбирается к вершинам" :lol: C++ должен бы освоить, знать ... хотя бы основы C. Поэтому эту заимствованную часть почти не затрагивают в учебниках и задачах по C++.
Это в принципе неправильно: обстоятельно знать C не только не обязательно, но в излишнем объёме и вредно - это "навевает" другие манеры программирования. ;-)

2. Заниженное. В системно зависимых вещах они не обсуждают и не упоминают библиотечные возможности C - POSIX API.
Но педагоги-теоретики так и просто не знают о том (приходилось обсуждать), что C++ вообще не имеет собственных средств выполнения вызовов операций операционной системы, и для них всегда использует как промежуточный интерфейсный слой стандартную библиотеку C libc.so. А поэтому все системно-зависимые "плюшки" C++ (такие, например, как класс thread:: - <thread> и др.) являются ни чем более, чем поверхностными обёртками над функциями и структурами данных POSIX API.

Вот это "ни чем более" нужно бы донести до разбирающихся с C++ ... но это как-раз и не делается, делая из этого ... "тайна сие великая есть". :-o

И эти вопросы как-раз и разрешаются, во многом, как раз в рассмотрении раздела "Простые данные".
И не нужно сюда примешивать ни классы, ни объекты ... ни-ни ... всё это не имеет сюда никакого касательства.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: примеры задач при изучении C++
Непрочитанное сообщениеДобавлено: 01 дек 2014, 22:55 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10530
Откуда: Харьков
Olej писал(а):
И задачи к такой большой части как "Простые данные" не должны бы задействовать (сверх минимально необходимого - см. выше о рекурсивности описания любого языка) понятия сверх того: массивы, структуры, классы, шаблоны, вектора со списками и т.д. Это из задач этого раздела желательно исключить.


Оставлю архивы задач по "Простые переменные".
Некоторые из них взяты из формулировок олимпиадных задач и "спортивного программирования" для школьников, другие переписаны с C, или свеже придуманы.

1. В нашем зоопарке появился заяц. Его поместили в клетку, и чтобы ему не было скучно, директор зоопарка
распорядился поставить в его клетке лесенку. Теперь наш зайчик может прыгать по лесенке вверх,
перепрыгивая через ступеньки. Лестница имеет определенное количество ступенек N. Заяц может одним
прыжком преодолеть не более К ступенек. Для разнообразия зайчик пытается каждый раз найти новый
путь к вершине лестницы. Директору любопытно, сколько различных способов есть у зайца добраться
до вершины лестницы при заданных значениях K и N. Помогите директору написать программу, которая
поможет вычислить это количество. Например, если K=3 и N=4, то существуют следующие маршруты:
1+1+1+1, 1+1+2, 1+2+1, 2+1+1, 2+2, 1+3, 3+1. Т.е. при данных значениях у зайца всего 7 различных
маршрутов добраться до вершины лестницы.
Вложение:
bunny.tgz [1.3 КБ]
Скачиваний: 503


2. Перестановкой P[1..n] размера n называется набор чисел от 1 до n, расположенных в определенном порядке.
При этом в нем должно присутствовать ровно один раз каждое из этих чисел. Примером перестановок являются
1,3,4,5,2 (для n=5) и 3,2,1 (для n=3), а, например, 1,2,3,4,5,1 перестановкой не является, так как
число 1 встречается два раза.
Число i называется неподвижной точкой для перестановки P, если P[i] = i. Например, в перестановке
1,3,4,2,5 ровно две неподвижных точки: 1 и 5, а перестановка 4,3,2,1 не имеет неподвижных точек.
Даны два числа: n и k. Найдите количество перестановок размера n с ровно k неподвижными точками.
Вложение:
stationary.tgz [4.91 КБ]
Скачиваний: 496


3.1. Написать код (или объяснить представленный), демонстрирующий приблизительность
любых вещественных предствалений: float, double, long double ...

3.2. Вычисление sqrt() из вещественного числа имтерационным методом Ньютона:
sqrt( x ) :
- последовательные итерации: z = z - ( z^2 - x ) / ( 2 * z )
Вычислять с максимально возможной точностью на данном компьютере!
Вложение:
float.tgz [2.01 КБ]
Скачиваний: 517


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: примеры задач при изучении C++
Непрочитанное сообщениеДобавлено: 02 дек 2014, 02:31 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10530
Откуда: Харьков
Olej писал(а):
Оставлю архивы задач по "Простые переменные".

2-й транш ;-) и всё те же "Простые переменные":

1.1. решето Эратосфена - метод нахождения ВСЕХ простых чисел, не превышающих N.
Задачка тривиальная, но там есть на чём порезвиться ...
Описания метода по ссылке.

1.2. Тот же, но оптимизированный алгоритм перебора по массиву с прореживанием .... Описан там же.

1.3. То же самое, но с использованием для признаков экономного битового массива.

1.... То же самое, но с использованием динамических типов STL: vector<>, list<>
Вариант vector<bool> ... посмотреть размер структуры.
То же самое, но с использованием множеств - из динамических типов STL или из пакетов Boost.
Вложение:
erastof.tgz [3.03 КБ]
Скачиваний: 530


2. Рекурсивные алгоритмы.

2.1. Записать как можно больше вариантов вычисления функции факториал:
N! = 1 * 2 * 3 * ... * N

2.3. Числа Фибоначчи:
Существуют 2 определения последовательности чисел Фибоначчи:
а). F1=0, F2=1, FN=FN-1+FN-2
б). F1=1, F2=1, FN=FN-1+FN-2.
Как легко видеть, эти последовательности сдвинуты на 1 член, так что не стоит ломать копья по этому поводу:
можно использовать любую форму. Будем использовать 2-ю (выбор не имеет значения, он только должен быть
одинаков для всех сравниваемых вариантов кодов).
2.3.1. Написать программу вычисления чисел Фибоначчи:
2.3.2. Написать программу вычисления чисел Фибоначчи исключив двойную рекурсию (не вычислять FN-1 2 раза, запоминать).
2.3.3. Написать программу вычисления чисел Фибоначчи вообще исключив рекурсию (циклом).
Сравнить время выполнения всех вариантом для больших N.

3. Задача Ханойская башня:
- Имеется 3 нумерованных стержня, на один из которых нанизаны N колец, на манер детской пирамидки...
Код:
    -|-    |     |
   --|--   |     |
  ---|---  |     |
     1     2     3

- Нужно переложить всю пирамидку со стержня 1 на стержень 3, используя промежуточный стержень 2
при условиях:
а). перекладываем за раз только одно кольцо;
б). кольцо можно перекладывать либо на пустой стержень, либо на стержень поверх лежащего на нём
кольца большего размера (можно класть только меньшее поверх большего).
Проконтролируйте время выполнения при росте N.
Изображение

3.1. Поискать не рекурсивное решение этой задачи ... алгоритмизировать.
Я, откровенно говоря, не знаю как к такой задаче подступиться ... если не пользоваться методами формального преобразования рекурсивных вычислений в не рекурсивные.
Но это не интересно!
Вложение:
recursive.tgz [3.12 КБ]
Скачиваний: 533


4. Задачи сортировки последовательностей (классика!).
Начиная с самой неэффективной в природе пузырьковой сортировки O(n^2) и ... далее, далее, далее...
Вложение:
sort.tgz [1.74 КБ]
Скачиваний: 519


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: примеры задач при изучении C++
Непрочитанное сообщениеДобавлено: 03 дек 2014, 19:27 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10530
Откуда: Харьков
Olej писал(а):
2-й транш ;-) и всё те же "Простые переменные":


3-й транш: агрегированные переменные.

Во многих источниках их называют составные переменные - массивы, структуры, объединения, перечисления...
На мой вкус это неправильно. О массивах и структурах правильнее говорить что это способы агрегирования более простых типов в более сложные. Например, в массив могут объединяться объекты типа "структура массивов структур" и т.д.
И тогда естественным образом решаются все вопросы ... такие как многомерные массивы и т.д.
А вот union и enum - это совсем другого ... ранга понятия - гораздо менее значимые.

И дальше, при таком подходе, очень простым получается переход (точнее расширение) от struct к class (что по существу есть одно и то же) и к ООП.

P.S. Вообще то, typedef + struct + class в C++ - это явно "масло масляное", нагромождение эквивалентных понятий ... И это всё произошло только из-за требований синтаксической совместимости C++ с C.
Позже в Go, те же авторы C, всё это объединили в одном определении type - новый тип однозначно определяет и его структуризацию, и допустимые с ним операции, и методы этого типа.

Но вернёмся к задачам... агрегированные переменные.
Хотелось в задачах выразить только какие-то не самые тривиальные случаи ... всё остальное в учебниках описано. ;-)
Пока очень немного...
Все примеры и архивы со временем планируется дополнить.

1. массивы функций.
Объект данных "функция" можно определить как и любую другую переменную, присваивать ей значения, агрегировать в массивы или встраивать в структуры... Здесь важно обратить внимание на то, что есть тип функции? ... для дозволенного присвоения.
Эти понятия - это основы функционального программирования ... в сторону которого и был расширен синтаксис C++ стандартом C++11.

1.a. тот же пример, но расширен типом функций, возвращающих структуру (struct).
Опыт общения показывает, что многие слабо представляют что происходит, когда функция возвращает структурный тип данных... так же мало, впрочем, как и на случай когда функция получает параметром структуру (или объект класса).
Вложение:
array.tgz [1.34 КБ]
Скачиваний: 521


2. Структуры и классы (для меня это одно и то же)...

2.1. Определить структуру (!) с элементами разной длины (особенно несовпадающих длин с границами выравнивания: 3, 5, 7...).
Проследить общий размер экземпляра структуры, сумму длин полей, их смещения.

2.2.1. Определить структуру для определения 2D-точки плоскости.
Написать программу, содержащую:
- функцию вывода координат 2D в собственном формате;
- функцию расстояния между двумя 2D точками;
... программа выводит длину вектора к 2D точке от начала координат [0,0].
Код:
отображение: [3,4]
расстояние от [0,0] = 5


2.2.2. Определить класс 2D точки.
Определить конструкторы.
Нужен ли деструктор?
Переопределить операции:
- присвоения =
- вывода <<
- расстояние между 2-мя 3D: -
- сдвига (сумирование) +
- другие полезные операции (==, !=, ...)

2.2.3. Определить класс 2D точки ... но не как п.2.2.2 на основе структуры, а наследованием комплексного шаблонного типа.

2.2.3. То же. что п.2.2.3, но на базе типа pair<> из STL.

2.3. из п.2.2.1 определить тип данных (структуру) треугольника.
Вводить вершины треугольника, а выводить его периметр.

2.4.1. Определить структуру (!) для определения 3D-точки плоскости, определение в виде 3-х координатного массива.
Сделать функции:
- форматирования координат точки;
- покоординатный вывод значений;
- покоординтеная установка значений;
- ... и ряд других полезных операций (==, !=, ...)
Код:
точка [1:1:1]
расстояние от [0:0:0] = sqrt( 1 + 1 + 1 ) = 1.73


2.4.1 Переписать п.2.4.1 как класс (!).
Определить конструкторы.
Нужен ли деструктор?
Переопределить операции:
- вывода <<
- расстояние между 2-мя 3D: -
- сдвига (сумирование) +
- другие полезные операции (==, !=, ...)

Вложение:
struct.class.tgz [3.98 КБ]
Скачиваний: 530


Очень много любопытного можно ... подобрать так прямо под ногами ;-)


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: примеры задач при изучении C++
Непрочитанное сообщениеДобавлено: 03 дек 2014, 20:30 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10530
Откуда: Харьков
Olej писал(а):
3-й транш: агрегированные переменные.


4-й транш: указатели и адресная арифметика.

Самый мощный инструмент C/C++.
И самый опасный.
От которого отказались в большинстве последующих языков программирования.

... опять же, перемещения по указателю вдоль массива описаны вдоль и поперёк.
А вот динамические структуры, которые без указателей никуда - это интересно.

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

2. Показать на списке подобного предыдущему, как можно получать значения элементов списка
не циклическим перемещением, а непосредственно записью многократного разименования: типа ****p.

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

P.S. Определения и заголовки структур кольцевого двухсвязного списка можно взять из заголовочных файлов ядра Linux: /lib/modules/.../source/include/linux/list.h
В ядре Linux давно (с версии 2.6) сообразили, что вместо любых динамических связных структур (списков, деревьев, очередей, графов, ...) можно использовать одну единственную структуру list_head_t .

4. Адресная арифметика.
Наложить (union) массивы элементов разных размеров, и показать считывание их по инкрементируемому указателю каждого из типов. Использовать анонимное (не именованное) поле union в структуре для наложения.
Вложение:
pointer.tgz [2.77 КБ]
Скачиваний: 499


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: примеры задач при изучении C++
Непрочитанное сообщениеДобавлено: 04 дек 2014, 17:23 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10530
Откуда: Харьков
Olej писал(а):
3. Задача Ханойская башня:
- Имеется 3 нумерованных стержня, на один из которых нанизаны N колец, на манер детской пирамидки...
Код:
    -|-    |     |
   --|--   |     |
  ---|---  |     |
     1     2     3

- Нужно переложить всю пирамидку со стержня 1 на стержень 3, используя промежуточный стержень 2
при условиях:
а). перекладываем за раз только одно кольцо;
б). кольцо можно перекладывать либо на пустой стержень, либо на стержень поверх лежащего на нём
кольца большего размера (можно класть только меньшее поверх большего).
Проконтролируйте время выполнения при росте N.

3.1. Поискать не рекурсивное решение этой задачи ... алгоритмизировать.
Я, откровенно говоря, не знаю как к такой задаче подступиться ... если не пользоваться методами формального преобразования рекурсивных вычислений в не рекурсивные.
Но это не интересно!


В показанное решение hanoy.cc вкралась ошибка ... при переписывании из C в C++ ;-) ... как выяснилось при демонстрации задачи одному из коллег :-( - "генеральский эффект".
При нахождении промежуточной позиции для переноса: (1,2)->3, (2,3)->1, ... и т.д.
Да и вообще там стоял отладочный (для пущей ясности) вариант выбора промежуточной позиции, а её можно просто как исключающее ИЛИ (XOR) для номеров "откуда" и "куда".
Так что код hanoy.cc нужно поправить:
Код:
#include <iostream>
#include <stdlib.h>
using namespace std;

//     ============> 
//    -|-    |     |
//   --|--   |     |
//  ---|---  |     |
//     1     2     3

int nopr = 0;                                // число операций переноса
bool debug = false;                          // признак диагностического вывода
const short inlin = 5;

void put( int from, int to ) {               // индикация операции переноса
   ++nopr;
   if( !debug ) return;
   cout << from << " => " << to
        << ( 0 == ( nopr % inlin ) ? "\n" : ",   " );
}

inline int temp( int from, int to ) {       // выбрать промежуточнуя позиция
   return from ^ to;                        // (1,2)->3, (2,3)->1, ...
}

void move( int from, int to, int n ) {       // перенос с #from на #to n колец
   if( 1 == n ) put( from, to );             // просто перенос 1-го кольца
   else {
      move( from, temp( from, to ), n - 1 ); // перенести n-1 верхних
      put( from, to );                       // перенести самое нижнее
      move( temp( from, to ), to, n - 1 );   // поставить n-1 верхних
   }
}

int main( int argc, char **argv, char **envp ) {
   if( argc != 2 )
      cout << "usage: " << argv[ 0 ] << " [-]<number>" << endl, exit( 1 );
   int size = atoi( argv[ 1 ] );             // число переносимых фишек
   if( size < 0 ) size = -size, debug = true;
   if( debug ) cout << "размер пирамиды: " << size << endl;
   move( 1, 3, size );                       // вот и всё решение!
   if( debug && ( nopr % inlin ) != 0 )
      cout << endl;                          // только для красоты
   cout << "общее число перемещений " << nopr << endl;
   return 0;
}

А результаты прогонов (для контроля) должны выглядеть так (параметр запуска с "-" - это только для подробного вывода последовательности операций):
Код:
[Olej@modules recursive]$ ./hanoy -3
размер пирамиды: 3
1 => 3,   1 => 2,   3 => 2,   1 => 3,   2 => 1
2 => 3,   1 => 3,
общее число перемещений 7

[Olej@modules recursive]$ ./hanoy -4
размер пирамиды: 4
1 => 2,   1 => 3,   2 => 3,   1 => 2,   3 => 1
3 => 2,   1 => 2,   1 => 3,   2 => 3,   2 => 1
3 => 1,   2 => 3,   1 => 2,   1 => 3,   2 => 3
общее число перемещений 15

[Olej@modules recursive]$ ./hanoy -5
размер пирамиды: 5
1 => 3,   1 => 2,   3 => 2,   1 => 3,   2 => 1
2 => 3,   1 => 3,   1 => 2,   3 => 2,   3 => 1
2 => 1,   3 => 2,   1 => 3,   1 => 2,   3 => 2
1 => 3,   2 => 1,   2 => 3,   1 => 3,   2 => 1
3 => 2,   3 => 1,   2 => 1,   2 => 3,   1 => 3
1 => 2,   3 => 2,   1 => 3,   2 => 1,   2 => 3
1 => 3,
общее число перемещений 31


Вложения:
recursive.tgz [3.19 КБ]
Скачиваний: 517
Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: примеры задач при изучении C++
Непрочитанное сообщениеДобавлено: 05 дек 2014, 17:51 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10530
Откуда: Харьков
Olej писал(а):
4-й транш: указатели и адресная арифметика.


Туда же: функции, передача параметров и возврат значений.

Почему "транш"? Сам не знаю ;-) - просто у меня (на рабочем компьютере) тематические каталоги (архивы) (pointer, function, и т.д.) разложились в группы, по несколько штук...
Как мне кажется, эти группы (транши) как-то приблизительно соответствуют и порядку освоения тем (архивов): не сделав задачи i-го транша не стоит переходить к i+1 ...

P.S. По функциям примеров пока мало ... интересных, о которых хочется что-то сказать.
По мере пополнения примерами все архивы будут пополняться и выкладываться под теми же именами.


Вложения:
function.tgz [1.41 КБ]
Скачиваний: 504
Вернуться к началу
 Профиль Отправить личное сообщение  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 44 ]  На страницу 1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
[ Time : 1.358s | 21 Queries | GZIP : On ]