Помощь - Поиск - Пользователи - Календарь
Полная версия: списки
Форум «Всё о Паскале» > 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);
    r^.next:=first;
    r^.ch:=j;
    x:= j ;
    r^.NUMBER:=n;

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


   k:=random(10);
    NEW(r);
    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);

    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
спасибо
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.