Консультация онлайн # 161126

Раздел: Pascal / Delphi / Lazarus
Автор вопроса: Тупак Шакур
Дата: 22.02.2009, 15:47 Консультация неактивна
Поступило ответов: 1
Здравствуйте, уважаемые эксперты smile Помогите пожалуйста со следующими задачами:

1) Решить с помощью рекурсии следующую задачу - "Ханойская башня". Имеются три колышка A,B,C и N дисков разного диаметра на A, пронумерованных от 1 до N в порядке возрастания из размеров. Требуется перенести все диски с колышка A на колышек C, соблюдая при этом следующие условия : диски можно переносить только по одному, больший диск нельзя ставить на меньший.

2) Описать переменную "экзаменационная ведомость" (предмет, номер группы, список студентов данной группы, их оценки). Определить отличников, хорошистов, троечников и двоечников.

3) через файл открыть текст и удвоить в тексте каждую литеру.

Заранее благодарен smile

Ответ # 1, puporev (Профессор)

Здравствуйте, Тупак Шакур!
Решение задач №2,3 с пояснениями в приложении.

Приложение:


puporev

Профессор
23.02.2009, 11:57
Нет оценки ответа

Мини-форум консультации # 161126

Roman Chaplinsky / Химик CH

Модератор

ID: 156417

177336

= общий =    22.02.2009, 16:34
1) вывод идёт на экран и в файл

Код
uses CRT ;
var f:text; N:integer;

procedure movetop(mfrom,mto:char; h:integer);  forward; //предописание рекурсивной процедуры

procedure movetop(mfrom,mto:char; h:integer); //описание процедуры
var third:char  ;
begin
if h=1 then begin
        writeln(h,' from ',mfrom,' to ',mto);
        writeln(f, h,' from ',mfrom,' to ',mto); end
     else begin
             if (((mfrom='A')and(mto='B'))or((mfrom='B')and(mto='A'))) then third:='C'
                  else begin if (((mfrom='A')and(mto='C'))or((mfrom='C')and(mto='A'))) then third:='B'
                       else third:='A';end;
        movetop(mfrom,third,h-1);  
             writeln(h,' from ',mfrom,' to ',mto);
              writeln(f, h,' from ',mfrom,' to ',mto);
             movetop(third,mto,h-1);
 end;
end;  //конец процедуры

begin  
assign(f,'output.txt');
rewrite(F);
clrscr;
writeln('input N') ;
readln(N);
writeln;
movetop('A','C',N);

close(f);
readln;
end.
Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.