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

 

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