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.
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 8)
volvo
сообщение 28.06.2007 13:34
Сообщение #2


Гость






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ина
сообщение 28.06.2007 13:40
Сообщение #3


Гость






function obrab(A:Tlist) : integer;
var p: tlist;
begin


надо кажется ещё в var
good: boolean;
да?
 К началу страницы 
+ Ответить 
volvo
сообщение 28.06.2007 14:06
Сообщение #4


Гость






Да, это тоже надо добавить... Я же говорю - не компилировал.
 К началу страницы 
+ Ответить 
Mapина
сообщение 28.06.2007 14:12
Сообщение #5


Гость






спасиб smile.gif
 К началу страницы 
+ Ответить 
Mapина
сообщение 28.06.2007 15:11
Сообщение #6


Гость






начала пробовать всякие варианты.....оказывается не верно,например, 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
сообщение 28.06.2007 15:32
Сообщение #7


Гость






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
 К началу страницы 
+ Ответить 
Mapина
сообщение 28.06.2007 17:32
Сообщение #8


Гость






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

спасибо, очень тебе благодарна!
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 28.06.2007 18:40
Сообщение #9


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


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

бедная Ада Лавлейс...


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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