Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Динамические структуры данных

Автор: Pascal 2007.0 27.12.2007 7:00

Пожалуйста, помогите решить задачу :
Описать процедуру (и проверить ее), которая по списку L строит два новых списка:
L1 – из положительных элементов;
L2 – из остальных элементов списка L (тип элементов – real ) .

Автор: andriano 27.12.2007 13:13

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

Автор: Pascal 2007.0 27.12.2007 16:38

Цитата(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 27.12.2007 17:44

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

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

, с ее помощью будет гораздо проще реализовать и заполнение первоначального списка, и раскидывание элементов одного списка на два других...

Автор: Pascal 2007.0 6.01.2008 6:14

Всё работает! Спасибо за помощь!