Пример 2. 3 Begin

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;{Этот модуль включает все вспомогательные действия типа создания файла данных, работа с меню и вывод самого меню на экран }


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: