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

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> сумма элементов списка
Mapина
сообщение 28.06.2007 13:25
Сообщение #1


Гость






Необходима только правильная функция обработки( 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
сообщение 28.06.2007 15:32
Сообщение #2


Гость






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;

- не будет считать последний элемент...

Сообщение отредактировано: volvo - 28.06.2007 15:32
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



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