Помощь - Поиск - Пользователи - Календарь
Полная версия: Списки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Katti
вот условие: Написать программу, которая вставляет в список L овый элемент Е1 за каждым вхождение элемента Е

Код

Program dinam;
Uses crt;
Type
pel=^element;
element = record
num: integer;
next: pel;
end;
Var
first, g,f,r: pel;
a,e,e1:integer;
ok: boolean;
Begin
Writeln ('Введите элементы списка, окончание ввода Ctrl+Z');
Readln (a);
new (first);
first^.num:=a;
first^.next:= nil;
 While not eof do
  begin
  Readln (a);
  new (g);
  g^.num:=a;
  g^.next:= first;
  first:=g;
  end;
  Writeln ('Получившийся список');
  f:=first;
  While f<> nil do begin
  Writeln (f^.num, ' ');
 f:=f^.next;
 end;
 Writeln ('Введите элемент для поиска');
 Readln (e);
 Writeln ('Введите  дополнительный элемент');
 Readln (e1);
 Writeln;
 g:=first;
 ok:=true;
  While ((g<> nil) and ok) do  begin
   if g^.num=e then ok:=false
   else g:=g^.next;
   end;
   While g<> nil do
   if (not ok) then begin
   New(r);
   r^.num:=e1;
   r^.next:=g^.next;
   g^.next:=r;
   end;
   Writeln ('Результат: ');
   f:=first;
   While f<> nil do begin
   Write (f^.num, ' ');
   f:=f^.next;
   end;
   End.
volvo
Цитата(Katti @ 28.03.05 19:18)
вот условие: Написать программу, которая вставляет в список L овый элемент Е1 за каждым вхождение элемента Е

Ну и что? Что Вы имеете в виду под словом "неверно"? То, что программа некорректно вводит значения? То, что список распечатывается задом наперед? Что именно? Здесь что, телепаты, по Вашему?
Altair
Совет.
Учитесь структурировать текст программы (форматирование текста) и саму программу (использование функций и процедур как кирпичиков для создания программы).

Читать программу в таком виде не хочется.
Katti
вот новая програмка, условие тоже.
Проблема возникает, после того, как вводишь элемент Е1, ничего не происходит, т.е. программа дальше не работает...
Код

Program dinam;
 Type
    pel=^element;
    element = record
    num: integer;
    next: pel;
    end;
Var
  first, g,f,r: pel;
  a,e,e1,i,n:integer;
Begin
 readln(n);
  Writeln ('Введите элементы списка');
   Read (a);
    new (first);
   first^.num:=a;
  first^.next:= nil;
 for i:=1 to n-1 do
    begin
      Read (a);
       new (g);
      g^.num:=a;
     g^.next:= first;
    first:=g;
   end;
  Writeln ('Получившийся список');
   f:=first;
     While f<> nil do begin
       Write(f^.num, ' ');
  f:=f^.next;
    end;
  Writeln ('Введите элемент для поиска');
    Readln (e);
     Writeln ('Введите  дополнительный элемент');
    Readln (e1);
  Writeln;
 f:=first;
    g:=f^.next;
  While (f<> nil) do  begin
      if f^.num=e then
    begin
     New(r);
       r^.num:=e1;
         r^.next:=g;
           f^.next:=r;
         dispose(r);
         end
       else f:=f^.next;
   end;
     Writeln ('Результат: ');
      f:=first;
       While f<> nil do begin
         Write (f^.num, ' ');
         f:=f^.next;
       end;
   End.
volvo
Цитата(Katti @ 29.03.05 15:04)
Проблема возникает, после того, как вводишь элемент Е1, ничего не происходит, т.е. программа дальше не работает...

Ничего подобного... Программа даже распечатывает введенный список (только почему-то задом наперед)... blink.gif
Katti
Ничего не получается, я запускаю программу, она вводит элемент Е1 и все, и дальше просто виснет... unsure.gif
Altair
значит алгоритм неверный.
Скажите, зачем велосипед изобретать, если можно обойтись материалами FAQ"a ?
Программа действительно виснет после ввода e и e1 ...видимо бесконечный цикл...
volvo
Вот верный алгоритм:
Код
uses item, list;
var
 L: tlist;
 p: ptitem;
 x, e1: integer;

begin
 L.init;
 repeat
   readln(x);
   if x <> -1 then
     L.append(x)
 until( x = -1 );
 L.print;

 write('e = '); readln(x);
 write('e1 = '); readln(e1);

 p := L.first;
 while assigned(p) do
   begin
     if p^.info = x then
       L.insert_after(p, e1);
     p := p^.next
   end;
 L.print;

 L.done
end.



P.S. Скачать модули необходимые для работы с программой (и заодно почитать про динамические структуры данных) можно здесь: FAQ: Динамические структуры данных (необходимо скачать модуль List.rar и распаковать в папку с этой программой)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.