Помощь - Поиск - Пользователи - Календарь
Полная версия: списки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Hunt666
задача: требуется найти сумму последнего и предпоследнего элемента в списке

program spisok;
uses crt ;
type
point = ^item;
item = record
number: integer;
ch:integer;
next: point
end;

var k,y,x,n,j:integer;
first,r:point;

begin
clrscr;
First:= nil ;
writeln('vvedite n');
readln(n);
randomize;
while n>0 do
begin
if n=2 then
begin
j:=random(10);
NEW®;
r^.next:=first;
r^.ch:=j;
x:= j ;
r^.NUMBER:=n;

First:=r;
n:= n-1;
end;


k:=random(10);
NEW®;
r^.next:=first;
r^.ch:=k;
y:= k ;
r^.NUMBER:=n;
{ k:=r^.ch;}
First:=r;
n:= n-1

end;

begin
r:=first;
while r<>nil do
begin
write('number = ', r^.number);
writeln(' chislo = ', r^.ch);
r:=r^.next;
end;
readln;
k:=x+y;
writeln(' k = ', k);
readln;
end;
end.


собственно проблема в том , что при выводе 1 номеру в списке должен соответствовать 1 введенный элемент,
а почему то выводится последний, ну и так со всеми элементами.
volvo
Если тебе надо только правильно заполнить список и найти сумму предпоследнего и последнего его элементов (я имею в виду, что нет каких-то дополнительных условий), то ты очень сильно все усложнил... Достаточно сделать так:

program spisok;
uses crt ;
type
point = ^item;
item = record
number: integer;
ch:integer;
next: point
end;

var
k, n: integer;
first,r,p: point;

begin
clrscr;
first := nil;
write('vvedite n: '); readln(n);

randomize;
while n > 0 do begin

new®;

r^.ch := random(10);
r^.number := n;
r^.next := first;
first := r;

n := n - 1;
end;

r := first;
while r <> nil do begin
writeln('number = ', r^.number:4, ' chislo = ', r^.ch:4);

if (r^.next <> nil) and (r^.next^.next = nil) then p := r;
r := r^.next;
end;

k := p^.ch + p^.next^.ch;
readln;

writeln('k = ', k);
readln;
end.

Hunt666
спасибо
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.