Представление последовательности строк в виде линейного списка - 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.

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

  1. Объявлен тип данных tList, который представляет собой линейный список строк.
  2. В функции ReadToList создается новый экземпляр списка при каждой итерации цикла и добавляется в конец списка.
  3. В функции ReadTextToList читаются строки из файла и добавляются в список.
  4. В процедуре Добавить проверяется корректность индексов и создается новый экземпляр списка с указанным содержимым.
  5. В основной функции создается экземпляр списка, считывается его содержимое, печатается на экране, добавляется строка в список и снова печатается его содержимое.

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


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

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

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