Program Number_2_3;
{текст основной программы}
uses crt,prg9,prg9_1;
Begin
Run;
End.
unit prg9; {Этот модуль содержит основные действия с объектом}
Interface
{Вводится некоторая последовательность строк Составить список из предложений по строкам, причем между словами в предложениях не может быть более одного пробела, то-есть при решении придется удалить лишние пробелы между словами.}
Type
ss=string[80]; {Этот раздел в модуле с объектами}
T_el = ^el; { или без них называется - интерфейс}
el= record { Структура- запись }
s: ss; { Предложение }
next:T_el; {Ссылка на элемент списка }
end;
MY_list = object { Структура - объект с данными }
First,Pcur:T_el; { Переменные, с которыми придется}
f:text; { работать в объекте}
Constructor Init;
Destructor Done; {Методы объекта-список}
Procedure Loadfile;
Procedure Del_prob;
Procedure Outtext;
end;
Implementation
uses crt,prg9_1;
var Pcur1:T_el;
{Раздел описания методов объекта}
Constructor MY_list.Init;
Begin
First:=nil;
end;
Destructor MY_list.Done;
Begin
Pcur:=First;
While Pcur<>nil do
Begin
Pcur1:=Pcur;
Pcur:=Pcur^.next;
Dispose(Pcur1);
end;
end;
Procedure MY_list.Loadfile;
var fname:ss;
P1cur:T_el;
Begin
|
|
fname:=Read_name_file(f);
if fname<>' 'then
Begin
assign(f,fname);
reset(f);
MY_list.done;
While not eof(f)do
Begin
if First =nil then
Begin
new(Pcur); {Здесь обычный список}
readln(f,Pcur^.s); {из предложений }
Pcur^.next:=nil; {создается}
First:=Pcur;
End else
Begin
new(P1cur); {Это любой следующий элемент списка}
Pcur^.next:=P1cur;
readln(f,P1cur^.s);
P1cur^.next:=nil;
Pcur:=P1cur;
end;
end;
close(f);
end;
end;
Procedure MY_list.del_prob;
var s1:ss; p:byte; i:byte;
Begin
Pcur:=First;
clrscr;textcolor(red);
writeln('Удаление лишних пробелов');
while Pcur<>nil do
Begin
i:=1;
s1:=' ';
Repeat
p:=pos(' ',Pcur^.s);
{Находим позицию первого пробела в предложении}
if (p<>0) and (p=i) then
delete(Pcur^.s,p,i) else
{Все подряд стоящие пробелы находим и сразу удаляем, так как они уже лишние}
if (p<>0) and (p<>i) then
Begin
s1:=s1+copy(Pcur^.s,i,p);
delete(Pcur^.s,i,p);
{Часть предложения с одним пробелом копируем в буфер и удаляем, чтобы не считать уже сосчитанные пробелы}
end;
until p=0;
s1:=s1+Pcur^.s;
{А теперь нужно добавить ту часть предложения, в которой нет пробелов}
Pcur^.s:=s1;
Pcur:=Pcur^.next;
end;
end;
Procedure MY_list.Outtext;
var i:integer;
Begin
clrscr;
i:=0;
Pcur:=First;
while Pcur<>nil do
Begin
writeln(Pcur^.s);
inc(i);
if i=24 then
{ Если количество предложений будет больше, чем число строк на обычном экране}
Begin
i:=0;
write('Нажмите любую клавишу');
readkey;
writeln;
end;
Pcur:=Pcur^.next;
end;
writeln('Вывод завершен');
readkey;
end;
End.
unit prg9_1;{Этот модуль включает все вспомогательные действия типа создания файла данных, работа с меню и вывод самого меню на экран }