Pohuyumer

LAB 2.3 (PROC)

May 8th, 2020 (edited)
368
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 4.13 KB | None | 0 0
  1. unit Proc;  // один параметр - имя текстового файла
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. interface
  6.  
  7. uses
  8.   SysUtils,
  9.   Windows,
  10.   UnList,   // подключаем модули с типами и процедурами, а затем и с переменными
  11.   UnVar;
  12.  
  13. procedure rusification;
  14. procedure AddR(var ListN, ListK: PElem; r: TInfo); // адреса начала и конца списка и R
  15. procedure AddN;
  16. procedure AddFromTextFile;
  17. procedure Add1;
  18. procedure SearchIt;
  19. procedure ViewList;
  20.  
  21.  
  22. implementation
  23.  
  24. procedure rusification;
  25.   begin
  26.     SetConsoleCP(1251);      // из модуля Windows
  27.     SetConsoleOutputCP(1251);
  28.   end;
  29.  
  30. // добавить элемент со значением R в соответствии с заданным порядком в список
  31. procedure AddR(var ListN, ListK: PElem; r: TInfo); // адреса начала и конца списка и R
  32. var ListC: PElem;  // текущий элемент списка
  33. begin
  34.   if ListN = nil then CreateList(ListN, ListK, r)  // если список пуст
  35.   else
  36.     if r >= ListN^.info then AddFirst(ListN, ListK, r)  // добавить в начало
  37.     else
  38.        if r <= ListK^.info then AddLast(ListN, ListK, r)  // добавить в конец
  39.        else
  40.          begin // найти после какого
  41.            ListC:=ListN; // с начала списка
  42.            while ListC^.next^.info >= r do
  43.              ListC := ListC^.next;
  44.            AddMedium(ListN, ListC, ListK, r)  // добавить после текущего
  45.          end;
  46. end;
  47.  
  48. //  "Добавить псевдослучайные N элементов" в текущий список
  49. procedure AddN;
  50. var n,i: integer; s:string; r: TInfo;
  51. begin
  52.   write('Сколько N=?'); readln(s);
  53.   if not TryStrToInt(s,n) then n:=1;
  54.   for i:=1 to n do
  55.   begin
  56.     r:= char(122-random(25));
  57.     AddR(NachaloSpiska, KonecSpiska, r);
  58.   end;
  59. end;
  60.  
  61. // Добавление всех данных из текстового файла в текущий список
  62. procedure AddFromTextFile;
  63. var
  64.   f: TextFile;
  65.   r: TInfo;
  66. begin
  67.   if ParamCount=1 then writeln('Введите элементы и Ctrl+Z') ;
  68.  
  69.   AssignFile(f, ParamStr(1));
  70.   try
  71.     Reset(f);
  72.     try
  73.       try
  74.           while not eof(f) do
  75.           begin
  76.             readln(f, r);
  77.             AddR(NachaloSpiska, KonecSpiska,r);
  78.           end;
  79.           writeln('Список создан');
  80.       except
  81.        writeln('Некорректные данные в текстовом файле '+ ParamStr(1));
  82.       end;
  83.     finally
  84.       CloseFile(f);
  85.     end;
  86.   except
  87.     writeln('Не удалось открыть текстовый файл '+ ParamStr(1));
  88.   end;
  89. end;
  90.  
  91. // Добавить один элемент  в текущий список
  92. procedure Add1;
  93. var
  94.   r: TInfo;
  95. begin
  96.  try
  97.   write('введите элемент, который хотите добавить  R=?'); readln(r);
  98.   AddR(NachaloSpiska, KonecSpiska, r);
  99.  except
  100.     writeln('Некорректное число или ошибка добавления');
  101.  end;
  102. end;
  103.  
  104. // "Найти в списке"
  105. procedure SearchIt;
  106. var
  107.   ListC: PElem;
  108.   i,n:integer;
  109.   flag:boolean;
  110.   a,b:char;
  111. begin
  112.    ListC:=NachaloSpiska;
  113.    flag:=true;
  114.    n:=0;
  115.    while (ListC<>nil) and (flag=true) do
  116.   begin
  117.     n:=n+1;
  118.     if ((ListC^.info)=('a')) or ((ListC^.info)=('b')) then
  119.     begin
  120.     writeln('Номер первого символа из заданного диапазона от a до b включительно');
  121.     writeln(n);
  122.     flag:=false;
  123.     end;
  124.     ListC:=ListC^.next;
  125.   end;
  126.   if flag=true then writeln('В списке нет элемента, принадлежащего диапазону [a,b]');
  127. end;
  128.  
  129. //  "Что сейчас в списке?" - вывод на экран консоли
  130. procedure ViewList;
  131. var
  132.   ListC: PElem;
  133. begin
  134.   writeln('Список:');
  135.   ListC:=NachaloSpiska;
  136.   if ListC=nil then writeln('Пустой');
  137.   while ListC<>nil do
  138.   begin
  139.     writeln(ListC^.info);
  140.     ListC:=ListC^.next;
  141.   end;
  142. end;
  143.  
  144. end.
Add Comment
Please, Sign In to add comment