Помощь - Поиск - Пользователи - Календарь
Полная версия: Динамические структуры данных
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Pascal 2007.0
Пожалуйста, помогите решить задачу :
Описать процедуру (и проверить ее), которая по списку L строит два новых списка:
L1 – из положительных элементов;
L2 – из остальных элементов списка L (тип элементов – real ) .
andriano
Что уже сделал? В чем возникла проблема?
Pascal 2007.0
Цитата(andriano @ 27.12.2007 9:13) *

Что уже сделал? В чем возникла проблема?

Сделал почти всё, но никак не могу вывести второй список, т.к. застрял при написании процедуры 'vibor'.

program spiski;
uses crt;
type tinf=real; tp=^tel;
     tel=record
          inf:tinf;
          psled:tp;
         end;
var head:tp; m:real; otvet2:char; pe:tp;

procedure vsp(var iel:tinf; var head:tp); 
var pe:tp; otvet:char;
  begin
    writeln ('Vedite elementi spiska L');
    writeln('Dlya zaversheniya vvoda nazmite "E"');
    repeat
     read(m);
     new(pe);
     pe^.inf:=iel;
     pe^.psled:=head;
     head:=pe;
     otvet:=readkey;
    until otvet='e';
  end;

procedure print(head1:tp);     
var pk:tp;
  begin
    writeln('Spisok');
    pk:=head;
    while pk<>nil do
      begin
        write(pk^.inf:5:2,' | ');
        pk:=pk^.psled
      end;
    writeln
  end;

procedure vibor(head2: tp; var first, second: tp);
var pl1: tp;
begin
  first := nil; second := nil;

  while head2 <> nil do begin
    new(pl1);
    pl1^.inf := head2^.inf;

    if head2^.inf > 0 then begin
      pl1^.psled := first;
      first := pl1
    end
    else begin
      pl1^.psled := second;
      second := pl1
    end;
    head2 := head2^.psled;
  end;
end;

begin
  repeat
  clrscr;
  vsp(m,head);
  print(head);
  vibor(head2);
  writeln ('Dlya vihoda iz programmi nazmite " Y "');
  otvet2:=readkey
  until otvet2='y';
end. 

.


volvo
Значит, пересмотри структуру программы. У тебя одинаковые действия (создание списка) делаются в двух разных местах программы, хотя можно было бы сделать в одном... Реализуй процедуру, которая вставляет передаваемый ей элемент в так же передаваемый список (НЕ вводить элемент с клавиатуры внутри процедуры, ТОЛЬКО добавлять его в список !!!):

Procedure add_item(item: real; var list: tp);
begin
  { ... }
end;

, с ее помощью будет гораздо проще реализовать и заполнение первоначального списка, и раскидывание элементов одного списка на два других...
Pascal 2007.0
Всё работает! Спасибо за помощь!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.