Переписать содержимое исходного текстового файла в файл-результат_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.

Объяснение кода листинга программы

  1. В программе создается переменная t1 типа text, которая представляет собой текстовый файл, и присваивается значение u: t1.txt. Аналогично создается переменная t2 типа text и присваивается значение u: t2.txt.
  2. Переменная l типа list инициализируется значением nil. Эта переменная будет использоваться для хранения списка слов.
  3. Переменная spacecount инициализируется значением 0. Она будет использоваться для подсчета количества пробелов в каждом слове.
  4. Переменная flag инициализируется значением false. Она будет использоваться для отслеживания конца строки при чтении текста из файла t1.
  5. В цикле while происходит следующее:
    • Вызывается функция makelist, которая формирует список слов из текста в файле t1. Эта функция возвращает количество букв в слове.
    • Если указатель установлен на начало строки (flag равно true), то считывается одно слово и увеличивается счетчик пробелов (spacecount) на количество пробелов в этом слове.
    • Если указатель установлен на конец строки (flag равно false), то считывается слово до тех пор, пока не встретится пробел или конец строки. Каждое слово добавляется в список.
    • После чтения слова вызывается функция writelisttofile, которая записывает каждое слово из списка в файл t2.
    • После окончания чтения списка вызывается функция deletelist, которая освобождает память, выделенную под список.
  6. По завершении чтения текста из файла t1 вызывается функция writeln для записи строки Complete в файл t2.
  7. В конце программы закрываются файлы t1 и t2 с помощью функций close.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4 из 5
Похожие ответы