Представление последовательности строк в виде линейного списка - PascalABC.NET
Формулировка задачи:
Задача.
Используйте представление последовательности строк в виде линейного списка и опишите процедуру ДОБАВИТЬ (L , i , j), добавляющую после i-ой строки списка L копию j-й строки.
Решение задачи: «Представление последовательности строк в виде линейного списка»
textual
Листинг программы
type tList = class S : String; Next : tList; constructor (insS : String; pNext : tList); begin S := insS; Next := pNext; end; procedure Печать(msg : String := ''); begin if msg <> '' then WriteLn(msg); var Cur := Self; var N := 0; while Cur <> nil do begin N += 1; WriteLn(N, ' : ', Cur.S); Cur := Cur.Next; end; if N = 0 then WriteLn('< Список пуст >'); end; function Count : Integer; begin Result := 0; if Self <> nil then begin var Cur := Self; repeat Result += 1; Cur := Cur.Next; until Cur = nil; end; end; function Получить(N : Integer) : String; begin Result := ''; if Self <> nil then begin var Cur := Self; repeat N -= 1; if N = 0 then begin Result := Cur.S; Exit; end; Cur := Cur.Next; until Cur = nil; end; end; end; function ReadToList : tList; begin var First : tList := nil; var R : String; repeat var S := ReadLnString('строка ='); if First = nil then First := New tList(S, nil) else begin var Cur := First; while Cur.Next <> nil do Cur := Cur.Next; Cur.Next := New tList(S, nil); end; R := ReadLnString('Продолжить ввод? (Y или Yes означает ответ «да») :'); until NOT((R.Length > 0) and (UpperCase(R)[1] = 'Y')); Result := First; end; //function ReadTextToList(fName : String) : tList; //begin // var First : tList := nil; // WriteLn('Читаем файл в список: ', fName); // foreach var S in System.IO.File.ReadLines(fName) do // begin // if First = nil then // First := New tList(S, nil) // else // begin // var Cur := First; // while Cur.Next <> nil do // Cur := Cur.Next; // Cur.Next := New tList(S, nil); // end; // end; // Result := First; //end; procedure Добавить(var List : tList; i, j : Integer); begin if (i < 1) or (j < 1) or (i > List.Count) or (j > List.Count) then WriteLn('Индекс не входит в размер списка.') else begin var S := List.Получить(j); if List <> nil then begin var Cur := List; while i > 1 do begin Cur := Cur.Next; i -= 1; end; Cur.Next := New tList(S, Cur.Next); end; end; end; begin var List := ReadToList; //var List := ReadTextToList('12345.txt'); List.Печать('Список из файла:'); Добавить(List, ReadLnInteger('После строки № '), ReadLnInteger('Добавить копию строки № ')); List.Печать('Список после добавления:'); end.
Объяснение кода листинга программы
- Объявлен тип данных tList, который представляет собой линейный список строк.
- В функции ReadToList создается новый экземпляр списка при каждой итерации цикла и добавляется в конец списка.
- В функции ReadTextToList читаются строки из файла и добавляются в список.
- В процедуре Добавить проверяется корректность индексов и создается новый экземпляр списка с указанным содержимым.
- В основной функции создается экземпляр списка, считывается его содержимое, печатается на экране, добавляется строка в список и снова печатается его содержимое.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д