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

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

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

> Задача с использованием списка
ruVdim
сообщение 19.05.2008 12:26
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской
Реальное имя: Дима

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


Задание: Вводится последовательность целых чисел(по одному). Используя список, найти среднее двух соседних чисел. Организовать новый список в котором расположить средние по неубыванию. Распечатать списки.

uses crt;
type
plist = ^tlist;
tlist = record
info: integer;
link: plist;
end;
var
first1, posl1 : plist;

procedure print(p: plist);
begin
while p <> nil do begin
write(p^.info:5);
p := p^.link
end;
writeln;
end;

procedure vvod (var first, last: plist);
var
s: integer;
p: plist;
begin

last := first;
repeat
write('Vvedite sled element: '); readln(s);
if s <> 25 then begin
new(p);
p^.info := s;
p^.link := nil;

if first = nil then first := p
else last^.link := p;
last := p;
end;
until s = 25;

end;

var
ii, jj, nmin: plist;
T: integer;

begin
clrscr;
writeln('Perviy spisok:');
first1:=nil; vvod (first1, posl1);
print(first1);

{ Sortirovka }
ii := first1;
while ii^.link <> nil do begin
nmin := ii;

jj := ii^.link;
while jj <> nil do begin
if jj^.info < nmin^.info then nmin := jj;
jj := jj^.link;
end;

T := ii^.info;
ii^.info := nmin^.info;
nmin^.info := T;

ii := ii^.link;
end;
writeln('Otsort spisok:');
print(first1);

end.

.
Я создал список, затем нужно только вычислить средние ариф. соседних чисел unsure.gif (отсортировал полученный). Помогите пожалуйста.
Заранее спасибо..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 22.05.2008 18:36
Сообщение #2


Гость






Цитата
почему со всего исходного списка n-целых чисел, после подсчета средних, получается вещ. список, содержащий только одно среднее(последняя пара 2-ух целых чисел)?
Значит, что-то неправильно вызываешь...

Кстати, я посмотрел на твои изменения в программе. Ты очень много лишнего делаешь, тебе не кажется? Можно же обойтись одной структурой tlist для хранения обоих списков. Ведь Real совместим с Integer по присваиванию, то есть значение типа Integer можно без проблем занести в поле типа Real. И еще. Когда я говорил о написании процедуры Append, я имел в виду, что при заполнении первого списка тоже может использоваться эта процедура. Смотри:

uses crt;
type
plist = ^tlist;
tlist = record
info: real; { <--- !!! }
link: plist;
end;

procedure append(var first, last: plist; value: real);
var p: plist;
begin
new(p);
p^.info := value; p^.link := nil;
if first = nil then first := p
else last^.link := p;

last := p;
end;

procedure print(p: plist; len: integer);
begin
while p <> nil do begin
write(p^.info:7:len);
p := p^.link
end;
writeln;
end;

procedure vvod(var first: plist);
var
s: integer;
p, last: plist;
begin
first := nil; last := nil;
repeat

write('Vvedite sled element: '); readln(s);
if s <> 25 then append(first, last, s);

until s = 25;
end;


var
first: plist;
p, first_2, last_2: plist;
ii, jj, nmin: plist;
T: real;

begin
clrscr;
writeln('Perviy spisok:');
vvod(first);
print(first, 0); { Печатаем целые числа, 0 знаков после запятой }

first_2 := nil; last_2 := nil;
p := first; { <--- íà÷àëî òâîåãî ñïèñêà }
while (p <> nil) and (p^.link <> nil) do begin
append(first_2, last_2, (p^.info + p^.link^.info) / 2);
p := p^.link;
end;

print(first_2, 2); { это - проверка, как средние заносятся в список }

{ Sortirovka }
ii := first_2;
while ii^.link <> nil do begin
nmin := ii;

jj := ii^.link;
while jj <> nil do begin
if jj^.info < nmin^.info then nmin := jj;
jj := jj^.link;
end;

T := ii^.info;
ii^.info := nmin^.info;
nmin^.info := T;

ii := ii^.link;
end;
writeln('Otsort spisok:');
print(first_2, 2); { Ну, и результат }
end.
Не забудь удалить списки...
 К началу страницы 
+ Ответить 

Сообщений в этой теме
ruVdim   Задача с использованием списка   19.05.2008 12:26
volvo   Ты зря сортировал ЭТОТ список... Опиши процедуру ...   19.05.2008 17:10
ruVdim   Ты зря сортировал ЭТОТ список... Опиши процедуру...   20.05.2008 22:53
ruVdim   Не знаю, попробую... :wink: Я описал процедуру, ...   21.05.2008 15:58
volvo   Убери из описания параметра R слово Var, не будет ...   21.05.2008 16:06
ruVdim   Убери из описания параметра R слово Var, не будет...   21.05.2008 16:34
ruVdim   Да, это правда! я не пойму: почему со всего ...   21.05.2008 17:14
volvo   Значит, что-то неправильно вызываешь... Кстати, я...   22.05.2008 18:36
ruVdim   Спасибо тебе огромное ! :good:   25.05.2008 20:43
ruVdim   Спасибо тебе огромное ! :good: Мдааа.. Зада...   2.06.2008 13:21
volvo   Причина? Нежелание преподавателя признать ее прави...   2.06.2008 13:26
ruVdim   Причина? Нежелание преподавателя признать ее прав...   2.06.2008 13:29
volvo   Сорри, можно у меня в коде показать, ГДЕ я что там...   2.06.2008 13:34
ruVdim   Просмотрев программу, он, позже, отметил:"Оши...   2.06.2008 13:40
ruVdim   Просмотрев программу, он, позже, отметил:"Ош...   2.06.2008 17:36
volvo   Ошибка на самом деле глубже - у него в ДНК... Это ...   2.06.2008 18:30


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

 



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