Задание. Рассмотрите приведенные примеры задач. Наберите программы на компьютере, дополните их комментарием и протестируйте их. Имейте в виду, что уже рассмотренные выше подпрограммы в текстах задач пропущены. Будьте готовы объяснить учителю алгоритмы решения задач и продемонстрировать их графически.
Пример 1. За один просмотр файла действительных чисел и с использованием очереди напечатать элементы файла в следующем порядке: сначала – все числа, меньшие а, затем – все числа из отрезка [а, b], и наконец – все остальные числа, сохраняя исходный порядок в каждой из этих трех групп чисел. Числа а и b задает пользователь.
Program MordovskihK;
Type
EXO = ^O;
O = record
Data: integer;
Next: EXO;
End;
Var
i: Real;
Min, Vibr, Other, EndMin, EndVibr, EndOther: EXO;
f: File of real;
Stroka: string;
Procedure writeO(Var BeginO, EndO: EXO; c: real);
...
Procedure PrintO(u: EXO);
...
Begin
Min:= Nil;
Vibr:= Nil;
Other:= Nil;
EndMin:= Nil;
EndVibr:= Nil;
EndOther:= Nil;
writeln ('Введите имя файла >');
readln(Stroka);
writeln ('Введите промежуток >');
readln(a, b);
assign(f, Stroka);
reset(f);
while not Eof(f) do
begin
read(f, i);
if i<a
then
writeO(Min, x, i)
else
if (i>=a) and (i<=b)
then
writeO(Vibr, x, i)
else
writeO(Other, x, i)
end;
close(f);
writeln('Числа, меньшие ', а);
Print(Min);
writeln('Числа из промежутка [', а, b, ']');
Print(Vibr);
writeln('Числа, большие ', b);
Print(Other);
End.
Пример 2. Из заданного текста перенести все цифры в конец каждой строки, сохранив их порядок.
Program BaranovA;
Type
EXO = ^O;
O = record
Data: integer;
Next: EXO;
End;
Var
i: integer;
O1, EndO1, O2, EndO2: EXO;
f1, f2: text;
Name, NewName, Stroka, NewStroka: string;
Procedure writeO(Var BeginO, EndO: EXO; k: char);
...
Procedure readO(u: EXO);
...
ModifStr(St: string, NewSt: string);
Var
l: char;
O1:= Nil;
EndO1:= Nil;
O2:= Nil;
EndO2:= Nil;
NewSt:= '';
for i:= 1 to Length(St) do
if St[i] in ['1', '2', '3', '4', '5', '6', '7', '8', '8', '9', '0']
then
writeO(O2, EndO2, St[i])
else
writeO(O1, EndO1, St[i]);
while O1 <> Nil do
begin
readO(O1, EndO1, l);
NewSt:= NewSt + l;
end;
while O2 <> Nil do
begin
readO(O2, EndO2, l);
NewSt:= NewSt + l;
end;
End;
Begin
write('Введите имя исходного файла: ');
readln(Name);
write('Введите имя файла-результата: ');
readln(NewName);
assign(f1, Name);
assign(f2, NewName);
reset(f1);
rewrite(f2);
while not Eof(f1) do
begin
readln(f1, Stroka);
ModifStr(Stroka, NewStroka);
writeln(f2, NewStroka);
end;
close(f1);
close(f2);
End.