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