![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
Mapина |
![]() ![]()
Сообщение
#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 |
![]()
Сообщение
#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ина |
![]()
Сообщение
#3
|
Гость ![]() |
function obrab(A:Tlist) : integer;
var p: tlist;
begin
надо кажется ещё в var good: boolean;
да? |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Да, это тоже надо добавить... Я же говорю - не компилировал.
|
Mapина |
![]()
Сообщение
#5
|
Гость ![]() |
спасиб
![]() |
Mapина |
![]()
Сообщение
#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 |
![]()
Сообщение
#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ина |
![]()
Сообщение
#8
|
Гость ![]() |
женщины глупые создания, особенно когда у них в руках техника, которую придумали мужчины! а я типичная женщина...
спасибо, очень тебе благодарна! |
мисс_граффити |
![]()
Сообщение
#9
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Цитата женщины глупые создания, особенно когда у них в руках техника, которую придумали мужчины! бедная Ада Лавлейс... -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
![]() ![]() |
![]() |
Текстовая версия | 28.07.2025 7:46 |