IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Динамические структуры данных
Pascal 2007.0
сообщение 27.12.2007 3:00
Сообщение #1


Гость






Пожалуйста, помогите решить задачу :
Описать процедуру (и проверить ее), которая по списку L строит два новых списка:
L1 – из положительных элементов;
L2 – из остальных элементов списка L (тип элементов – real ) .
 К началу страницы 
+ Ответить 
andriano
сообщение 27.12.2007 9:13
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Что уже сделал? В чем возникла проблема?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Pascal 2007.0
сообщение 27.12.2007 12:38
Сообщение #3


Гость






Цитата(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 13:44
Сообщение #4


Гость






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

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

, с ее помощью будет гораздо проще реализовать и заполнение первоначального списка, и раскидывание элементов одного списка на два других...
 К началу страницы 
+ Ответить 
Pascal 2007.0
сообщение 6.01.2008 2:14
Сообщение #5


Гость






Всё работает! Спасибо за помощь!
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.07.2025 18:17
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"