Консультация № 161126
22.02.2009, 15:47
0.00 руб.
0 2 1
Здравствуйте, уважаемые эксперты Помогите пожалуйста со следующими задачами:

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

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

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

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

Обсуждение

давно
Модератор
156417
2175
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.
давно
Профессор
401888
1232
23.02.2009, 11:57
общий
это ответ
Здравствуйте, Тупак Шакур!
Решение задач №2,3 с пояснениями в приложении.

Приложение:
№2.
uses crt;
const nmax=50;{максимальное число студентов}
type Tstud=record {тип запись студент с полями}
fam:string[20];{фамилия}
ocn:2..5;{оценка}
end;
Tspis=array[1..nmax]of Tstud;{тип массив записей студентов}
Tvedomost=record {тип запись ведомость с полями}
prd:string[20];{предмет}
grp:word;{номер группы}
sps:Tspis;{список студентов с оценками}
end;
var n,i:byte;
ved:Tvedomost;{переменная тиа ведомость}
begin
clrscr;
repeat
write('Vvedite kolichectvo studentov n=');
readln(n);
until (n>0)and(n<=nmax);{вводим с проверкой правильности число студентов}
write('Predmet: ');readln(ved.prd);{заполняем ведомость данными}
write('Nomer gruppy: ');readln(ved.grp);
writeln('Spisok studentov, ocenki:');
for i:=1 to n do
begin
writeln(' Student ',i);
write(' Familia: ');readln(ved.sps[i].fam);
write(' Ocenka: ');readln(ved.sps[i].ocn);
end;
clrscr;{очищаем экран от ввода}
writeln('Sdali na otlichno:');{выбираем у кого 5}
writeln('Predmet - ',ved.prd,' Gruppa - ',ved.grp);
for i:=1 to n do
if ved.sps[i].ocn=5 then writeln(ved.sps[i].fam);
readln;
writeln('Sdali na horosho:');{тоже 4}
writeln('Predmet - ',ved.prd,' Gruppa - ',ved.grp);
for i:=1 to n do
if ved.sps[i].ocn=4 then writeln(ved.sps[i].fam);
readln;
writeln('Sdali na udovletvoritelno:');{тоже 3}
writeln('Predmet - ',ved.prd,' Gruppa - ',ved.grp);
for i:=1 to n do
if ved.sps[i].ocn=3 then writeln(ved.sps[i].fam);
readln;
writeln('Sdali neudovletvoritelno:');{тоже 2}
writeln('Predmet - ',ved.prd,' Gruppa - ',ved.grp);
for i:=1 to n do
if ved.sps[i].ocn=2 then writeln(ved.sps[i].fam);
readln
end.
№3.
uses crt;
const lt=[65..90,97..122,168,184,192..255];{коды букв по ANSI}
var f,g:text;{2 текстовых файла}
s:string;{строка}
i:byte;{счетчик цикла}
begin
clrscr;
assign(f,'text1.txt');{связываем переменную с существующим файлом}
reset(f);{открываем для чтения}
assign(g,'text2.txt');{создаем новый файл}
rewrite(g);{открываем для записи}
while not eof(f) do{пока не конец файла}
begin
readln(f,s);{читаем построчно}
i:=1;
while i<=length(s) do{идем по строке}
begin
if ord(s[i]) in lt then insert(s[i],s,i+1);{если литера, вставляем еще одну такую же}
inc(i,2);{увеличиваем счетчик на 2}
end;
writeln(g,s);{записываем строку в новый файл}
end;
close(f);{закрываем оба файла}
close(g);
readln
end.
Форма ответа