2.3 Задача Ханойские башни

Легенда говорит ,– в одном из храмов Юго-Восточной Азии находятся три вертикальных стержня, на которые нанизаны 64 золотых кольца разного диаметра. Некогда бог Вишну поместил все 64 кольца на первый стержень так, что диаметр колец снизу вверх уменьшался, и повелел жрецам переместить башню из колец с первого стержня на третий, соблюдая следующее правило: на каждом шаге можно перенести самое верхнее кольцо с одного из стержней наверх другого стержня при условии, что на каждом из стержней кольца будут сохранять форму башни (т.е. их диаметр снизу вверх уменьшается). С тех пор много тысяч лет жрецы днем и ночью перекладывают кольца. Легенда гласит, что когда все кольца окажутся на третьем стержне, наступит конец света.

Программа:

#include <stdio.h>

#include <dos.h> /* sleep() */

#define MAX_NRINGS 64 /* Максимальное число колец */

int st[4][MAX_NRINGS]; /* 1,2,3 - стержни */

int nr[4]; /* Число колец на стержнях */

int nmoves; /* Число перемещений */

/* ---------------------------------------------- */

/* Печать текущего расположения колец на стержнях */

/* ---------------------------------------------- */

void print_st(void)

{

int i, j;

for(i = 1; i <= 3; i++) {

printf("\n| ");

for(j = 0; j < nr[i]; j++) printf("%d ", st[i][j]);

}

printf("\n");

}

/* ------------------------------------ */

/* Установка начального положения колец */

/* ------------------------------------ */

void init(int nrings)

{

for(nr[1] = 0; nrings > 0; nr[1]++,nrings--)

st[1][nr[1]] = nrings;

* Нанизали кольца на 1-й стержень */

nr[2] = nr[3] = 0;

/* Два других стержня пусты */

nmoves = 0;

print_st();

}

/* ----------------------------- */

/* Функция переносит одно кольцо */

/* со стержня n1 на стержень n2 */

/* ----------------------------- */

void move1(int n1, int n2)

{

st[n2][nr[n2]++] = st[n1][--nr[n1]];

sleep(1); /* Пауза в 1 секунду */

print_st(); /* Печать текущей позиции */

nmoves++;

}

/* ------------------------------------------------- */

/* Функция hanoi перемещает верхние nrings колец */

/* со стержня i1 на стержень i3, используя стержень */

/* i2 в качестве промежуточного. 1 <= i1,i2,i3 <= 3. */

/* ------------------------------------------------- */

void hanoi(int nrings, int i1, int i2, int i3)

{

if(nrings == 1)

move1(i1, i3);

else {

hanoi(nrings-1, i1, i3, i2);

move1(i1, i3);

hanoi(nrings-1, i2, i1, i3);

}

}

main()

{

int nrings;

printf("Число колец: "); scanf("%d", &nrings); init(nrings);

hanoi(nrings, 1, 2, 3);

printf("Перенос колец завершен.\n");

printf("Число перемещений - %d.\n", nmoves); return(0);

 }

В прложении N1 показано решение некоторых задачи на языке С.


Глава 3. Основы С++

 

3.1 Отличия С++ от С

1. В С++ ключевое слово void не обязательно (эквивалентно int m(); и int m(void)).

2. В С++ все функции должны иметь прототипы.

3.Если в С++ функция возвращает тип, отличный от void, то оператор return должен содержать значение типа.

4.В С++ можно выбирать место для объявления локальных переменных не только в начале блока.

5.В С++ ввод-вывод может осуществляться не только с помощью функций, но и с помощью операций.

3.2 Объектно-ориентированное программирование в С++

Развитие средств вычислительной техники требовало новых методик программирования:

- программирование небольших программ на базе переключателей;

- программирование на ассемблере;

- программирование на языках высокого уровня (Фортран);

- программирование на языках структурного программирования (Паскаль, Си);

- объектно-ориентированное программирование (ООП).

ООР позволяет разбить задачу на ряд самостоятельных связанных между собой подзадач, содержащих модели объектов реального мира.

Каждая подзадача содержит коды и данные, относящиеся к объекту, что упрощает решение задачи в целом и позволяет решать задачи большего объема.

Понятие объекта тесно связано с понятием класса. Класс – это дальнейшее развитие понятия структуры. Он позволяет создавать новые типы и определять функции, манипулирующие с этими типами.

Объект - это представитель определенного класса.

ООП использует механизмы инкапсуляции, полиморфизма и наследования.

Инкапсуляция позволяет создавать объекты - данные, процедуры и функции, манипулирующие с этими данными.

Данные, доступные для использования внутри объекта - private, данные доступные извне - public.

В общем, виде объект можно рассматривать как переменную, определенную программистом.

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

В зависимости от данных выполняются те или иные действия.

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


Информация о работе «Основы C»
Раздел: Информатика, программирование
Количество знаков с пробелами: 200759
Количество таблиц: 5
Количество изображений: 11

Похожие работы

Скачать
20474
0
0

... . Имеет ли право на существование эта биологизаторская интерпретация экологии? Видимо, да. Она широко представлена, и с этим следует считаться. Но она не может служить концептуальной основой комплексного непрерывного экологического образования. В структуре научного знания при таком подходе не остаётся места для географической и социальной экологии, экологии человека, а сама биология превращается ...

Скачать
5443
0
0

... хотя бы стены, чтобы нас не унижали в собственном доме, до конца не растащили наше имущество, нам нужна, обладающая высоким моральным и воинским духом достойно обеспеченная армия. Однако, значение российской армии и в том, что она представляет собой, пожалуй, единственный институт в современной виртуальной России, лишенный симулякров, поскольку ней, по крайней мере, погибают реально - в бою. ...

Скачать
8522
1
2

... важные функции управления предприятием, такие как: определение задач; планирование ресурсов; оценка деятельности и мотивация персонала на основе оценки; контроль исполнения. В целом, бюджетирование решает тактические вопросы и, по существу, для стратегического управления не предназначено. Связь бюджетирования со стратегией Практика стратегического планирования западных компаний ...

Скачать
11185
0
0

... . Для этого достаточно измерить его на карте и знать масштаб карты. Компас. Научиться пользоваться компасом нетрудно. Но компас, как правило, наилучшим помощником в ориентировании становится вместе с картой. В спортивном ориентировании пользуются специальными жидкостными компасами. Они позволяют быстро и просто взять с карты нужное направление и двигаться по местности по выбранному азимуту. ...

0 комментариев


Наверх