Advertisement
Guest User

Untitled

a guest
Dec 17th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 3.74 KB | None | 0 0
  1. program loh;
  2.  
  3. type
  4.   mnoj = set of char;
  5.   zapis = record
  6.     wordd: string;
  7.     povt: integer;
  8.     next: ^zapis;
  9.   end;
  10.   spisok = ^zapis;
  11.   a = array[1..6] of spisok;
  12.  
  13. function last(d: spisok; var s: string): boolean;
  14. begin
  15.   while d^.next <> nil do
  16.     d := d^.next;
  17.   if d^.wordd <= s then last := true
  18.   else last := false;
  19. end;
  20.  
  21. procedure insert(s: string; var p: spisok);//процедура вставки слова в список.
  22. var
  23.   q, t: spisok;
  24.  
  25. begin
  26.   if p = nil then//если список пуст
  27.   begin
  28.     new(p);
  29.     p^.wordd := s;
  30.     p^.povt := 1;
  31.     p^.next := nil;
  32.   end
  33.  
  34.     else
  35.  
  36.   begin//если список не пустой
  37.    
  38.     q := p;
  39.     if last(p, s) then//проверка на местоположение - в конце или нет
  40.     begin
  41.       while q^.next <> nil do
  42.         q := q^.next;
  43.       if q^.wordd = s then q^.povt := q^.povt + 1 //если повторение, то добавляем
  44.           else
  45.       begin//если нет повторения, то создаем новый узел
  46.         new(t);
  47.         t^.wordd := s;
  48.         t^.next := nil;
  49.         q^.next := t;
  50.         t^.povt := 1;
  51.       end;  
  52.     end
  53.    
  54.     else
  55.    
  56.     if p^.wordd > s then //заносим в начало, если все слова позже
  57.     begin
  58.       if p^.wordd = s then p^.povt := p^.povt + 1
  59.           else
  60.       begin
  61.         new(q);
  62.         q^.wordd := s;
  63.         q^.next := p;
  64.         q^.povt := 1;
  65.         p := q;
  66.       end;
  67.     end
  68.         else
  69.    
  70.     begin//находим, между какими словами может располагаться вносимое слово.
  71.       while q^.next^.wordd < s do //через 1 элемент
  72.         q := q^.next;
  73.       if q^.wordd = s then
  74.         q^.povt := q^.povt + 1 //повторение элемента
  75.         else
  76.       begin
  77.         new(t);
  78.         t^.wordd := s;
  79.         t^.next := q^.next;
  80.         q^.next := t;
  81.       end;
  82.     end;
  83.   end;
  84. end;
  85.  
  86. procedure output(m: a);//процедура вывода массива.
  87. var
  88.   i, j: integer; q: spisok;
  89. begin
  90.   for i := 1 to 6 do
  91.   begin
  92.     if m[i] <> nil then
  93.     begin
  94.       q := m[i];
  95.       while q <> nil do//вывод полностью всех элементов из списка
  96.       begin
  97.         for j := 1 to q^.povt do //количество повторений слова
  98.           write(q^.wordd, ' ');
  99.         q := q^.next;
  100.       end;  
  101.       writeln(' - слова из ', i, ' букв(ы)')
  102.     end;
  103.   end;
  104. end;
  105.  
  106. procedure videl(var c: char; var s: string; var k: integer; allowed: mnoj);//процедура выделения слова из последовательности.
  107. begin
  108.   k := 0;
  109.   c := '^';
  110.   s := '';
  111.   while not (c = '.') and not (c = ',') do
  112.   begin
  113.     read(c);
  114.     if ((not (c in allowed) or ((k = 6) and (c <> '.') and (c <> ','))) and (c <> ' '))  then writeln('Введите другой символ')
  115.     else if (c <> '.') and (c <> ',') and (c <> ' ') then
  116.     begin
  117.       s := s + c; //сложение строки
  118.       k := k + 1; //счетчик буков
  119.     end;
  120.   end;
  121. end;
  122.  
  123. var
  124.   c: char;
  125.   allowed: mnoj;
  126.   m: a;
  127.   k: integer;
  128.   s: string;
  129.  
  130. begin
  131.   allowed := ['A'..'Z', ',', '.'];//множество допустимых для ввода символов
  132.   for k := 1 to 6 do //создание массива с пустыми списками
  133.     m[k] := nil;
  134.  
  135.   while not (c = '.') do//выделение+занос.
  136.   begin
  137.     videl(c, s, k, allowed);
  138.     if k <> 0 then
  139.       insert(s, m[k]);
  140.   end;
  141.   output(m);
  142.   for k := 1 to 6 do//освобождаем память
  143.     dispose(m[k]);
  144. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement