Переписать содержимое исходного текстового файла в файл-результат_1 - Turbo Pascal
Формулировка задачи:
Напишите программу, которая переписывает содержимого исходного текстового файла в
файл-результат, но во всех словах, имеющих нечетную длину, удаляет среднюю букву.
Длина слова не превышает 50 символов. Под словом понимается любая последователь-
ность символов, не включающая пробелы и переходы на новые строки.
Решение задачи: «Переписать содержимое исходного текстового файла в файл-результат_1»
textual
Листинг программы
program task; type list = ^chain; chain = record item: char; next: list end; var t1, t2: text; l: list; k, spacecount: integer; c: char; flag: boolean; function makelist( var t: text; var l: list; var spacecount: integer; flag: boolean ): integer; { Формирую список из букв слова. Значение функции - количество букв в слове. В переменной spacecount - количество пробелов перед словом. В переменной flag - false, если указатель установлен на начало строки и true иначе } var q: list; count: integer; begin count := 0; if flag then if c = ' ' then spacecount := spacecount + 1; if not eoln( t ) then begin read( t, c ); while ( c = ' ' ) and not eoln( t ) do begin read( t,c ); spacecount := spacecount + 1; end; if c = ' ' then spacecount := spacecount + 1; if c <> ' ' then begin count := 1; new( l ); l^.item := c; l^.next := nil; q := l; while not eoln( t ) and ( c <> ' ' ) do begin read( t, c ); if c <> ' ' then begin count := count + 1; new( q^.next ); q := q^.next; q^.item := c; q^.next := nil end; end; end; makelist := count; end else makelist := 0; end; procedure writelisttofile( var t: text; l: list; k: integer ); { Переписываю слово в файл t2 согласно условию } var i: integer; begin i := 1; if k mod 2 = 1 then begin while i < ( k + 1 ) div 2 do begin write( t, l^.item ); l := l^.next; i := i + 1; end; i := i + 1; l := l^.next; while i <= k do begin write( t, l^.item ); l := l^.next; i := i + 1; end; end else while i <= k do begin write( t, l^.item ); l := l^.next; i := i + 1; end; end; procedure writespace( var t: text; n: integer ); begin while n <> 0 do begin write( t, ' ' ); n := n - 1; end; end; procedure deletelist( var l: list ); begin if l <> nil then begin deletelist( l^.next ); dispose( l ); l := nil; end; end; begin assign( t1, 'u: t1.txt' ); assign( t2, 'u: t2.txt' ); reset( t1 ); rewrite( t2 ); l := nil; spacecount := 0; flag := false; while not eof( t1 ) do begin k := makelist( t1, l, spacecount, flag ); flag := true; writespace( t2, spacecount ); writelisttofile( t2, l, k ); deletelist( l ); if eoln( t1 ) then begin flag := false; readln( t1 ); writeln( t2 ); end; spacecount := 0; end; writeln( 'Complete' ); close( t1 ); close( t2 ); end.
Объяснение кода листинга программы
- В программе создается переменная
t1
типаtext
, которая представляет собой текстовый файл, и присваивается значениеu: t1.txt
. Аналогично создается переменнаяt2
типаtext
и присваивается значениеu: t2.txt
. - Переменная
l
типаlist
инициализируется значениемnil
. Эта переменная будет использоваться для хранения списка слов. - Переменная
spacecount
инициализируется значением 0. Она будет использоваться для подсчета количества пробелов в каждом слове. - Переменная
flag
инициализируется значениемfalse
. Она будет использоваться для отслеживания конца строки при чтении текста из файлаt1
. - В цикле while происходит следующее:
- Вызывается функция
makelist
, которая формирует список слов из текста в файлеt1
. Эта функция возвращает количество букв в слове. - Если указатель установлен на начало строки (
flag
равноtrue
), то считывается одно слово и увеличивается счетчик пробелов (spacecount
) на количество пробелов в этом слове. - Если указатель установлен на конец строки (
flag
равноfalse
), то считывается слово до тех пор, пока не встретится пробел или конец строки. Каждое слово добавляется в список. - После чтения слова вызывается функция
writelisttofile
, которая записывает каждое слово из списка в файлt2
. - После окончания чтения списка вызывается функция
deletelist
, которая освобождает память, выделенную под список.
- Вызывается функция
- По завершении чтения текста из файла
t1
вызывается функцияwriteln
для записи строкиComplete
в файлt2
. - В конце программы закрываются файлы
t1
иt2
с помощью функцийclose
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д