Помощь - Поиск - Пользователи - Календарь
Полная версия: сумма элементов списка
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
Mapина
Необходима только правильная функция обработки( function obrab), остальное есть!

Вычислите сумму тех элементов списка, значения которых меньше значений всех элементов, непосредственно следующих за ним.

Код
program un_list;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Windows;

type
  TElem = byte;
  TList = ^Zveno;
  Zveno = record
              inf :  Telem;
              next : TList;
          end;
var
  list: TList;

   procedure initList (var A : TList);
   begin
     A:=nil;
   end;

   procedure V_konev (var A : TList; el : TElem);
   var
     tmp : TList;
     p : TList;
   begin
     new(tmp);
     tmp^.inf:=el;
     tmp^.next:=nil;
     if A=nil then A:=tmp
     else
       begin
         p:=A;
         while p^.next<>nil do
           p:=p^.next;
         p^.next:=tmp;
       end;
   end;

   procedure Input(var A : TList);
   var
     tmp : TElem;
   begin
     write('Вводи элементы: ');
     initList(A);
     while not eoln do
     begin
       read(tmp);
       V_konev(A, tmp);
     end;
     readln;
   end;

   procedure clearList (var A : TList);
   var
     temp : TList;
   begin
     while A<>nil do
     begin
       temp:=A;
       A:=A^.next;
       dispose(temp);
     end;
   end;

   function obrab(A:Tlist) : integer;                      {неверная функция обработки}
   begin
     result := 0;
     if a <> nil then
       while a^.next <> nil do
       begin
         if a^.inf < a^.next^.inf then result := result + a^.inf;
         a := a^.next;
       end;
   end;

begin
  setConsoleCP(1251);
  setConsoleOutputCP(1251);
  Input(list);
  writeln('Сумма требуемых эл-ов : ',obrab(list));
  clearList(list);
  readln;
end.
volvo
function obrab(A:Tlist) : integer;
var p: tlist;
begin
result := 0;
while a <> nil do begin

good := true;
p := a^.next;
while (p <> nil) and good do begin
if p^.inf <= a^.inf then good := false;
else p := p^.next;
end;

if good then result := result + a^.inf;
a := a^.next;
end;
end;

Набирал прямо здесь - могут быть глюки, но идея именно такая... Последний элемент списка будет суммироваться, если не нужно - надо ставить доп. условие...
Mapина
function obrab(A:Tlist) : integer;
var p: tlist;
begin


надо кажется ещё в var
good: boolean;
да?
volvo
Да, это тоже надо добавить... Я же говорю - не компилировал.
Mapина
спасиб smile.gif
Mapина
начала пробовать всякие варианты.....оказывается не верно,например, 2 3 4 1 5.....выводит результат 6(2+3+1), а должен 1, потому как после 2 и 3 есть 1, элемент, который меньше их!

program un_list;

{$APPTYPE CONSOLE}

uses
SysUtils,
Windows;

type
TElem = byte;
TList = ^Zveno;
Zveno = record
inf : Telem;
next : TList;
end;
var
list: TList;

procedure initList (var A : TList);
begin
A:=nil;
end;

procedure V_konev (var A : TList; el : TElem);
var
tmp : TList;
p : TList;
begin
new(tmp);
tmp^.inf:=el;
tmp^.next:=nil;
if A=nil then A:=tmp
else
begin
p:=A;
while p^.next<>nil do
p:=p^.next;
p^.next:=tmp;
end;
end;

procedure Input(var A : TList);
var
tmp : TElem;
begin
write('Вводи элементы: ');
initList(A);
while not eoln do
begin
read(tmp);
V_konev(A, tmp);
end;
readln;
end;

procedure clearList (var A : TList);
var
temp : TList;
begin
while A<>nil do
begin
temp:=A;
A:=A^.next;
dispose(temp);
end;
end;

function obrab(A:Tlist) : integer;
var p: tlist;
good: boolean;
begin
result := 0;
while a <> nil do
begin
good := true;
p := a^.next;
while (p <> nil) and good do
begin
if p^.inf <= a^.inf then good := false
else p := p^.next;
end;

if good then result := result + a^.inf;
a := a^.next;
end;
end;


begin
setConsoleCP(1251);
setConsoleOutputCP(1251);
Input(list);
writeln('Сумма: ',obrab(list));
clearList(list);
readln;
end.

volvo
Mapина, давай договоримся, что ты будешь ЧИТАТЬ то, что тебе пишут! Я предупреждал, что:
Цитата
Последний элемент списка будет суммироваться, если не нужно - надо ставить доп. условие...


Сделай вот так:

  function obrab(A:Tlist) : integer;
var p: tlist;
good: boolean;
begin
result := 0;
while a <> nil do
begin
p := a^.next;
good := (p <> nil);
while (p <> nil) and good do
begin
if p^.inf <= a^.inf then good := false
else p := p^.next;
end;

if good then result := result + a^.inf;
a := a^.next;
end;
end;

- не будет считать последний элемент...
Mapина
женщины глупые создания, особенно когда у них в руках техника, которую придумали мужчины! а я типичная женщина...

спасибо, очень тебе благодарна!
мисс_граффити
Цитата
женщины глупые создания, особенно когда у них в руках техника, которую придумали мужчины!

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