Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2010, 16:10   #1
Ghost_gg
Новичок
Джуниор
 
Регистрация: 27.04.2008
Сообщений: 2
По умолчанию Удаление элемента из списка

Задание:
Вычислить среднее арифметическое элементов списка целых чисел и удалить все элементы меньше него.

С забиванием списка элементами все просто, и с вычислением среднего арифметического, а вот как удалить отдельные элементы до меня не доходит
P.S.
За код не ругать, писал ночью, знаю что много лишнего, но усовершенствовать его не горю желанием.

Код:
program spisk;
uses crt;
type
    inftype=string;
    kooficient = integer;
    sp=^list;
    list = record
         inf:inftype;
         next:sp;
         end;
var s:sp;
    flag:byte;
    k,w:integer;
    z:integer;

{**************SREDNEE ARIFMETICHESKOE***************}

function serArifm(a:sp):integer;
var tmp:sp;
s,b,i,x,m:integer;
begin
tmp:=a;
val(tmp^.inf,s,m);
i:=1;
{while tmp^.next<>nil do  }
for x:=1 to k do
begin
tmp:=tmp^.next;
val(tmp^.inf,b,m);
s:=s+b;
inc(i);
end;
serArifm:=s div i;
end;

{*************DELETE*************}
procedure del(var a:sp);
var x,b,c,m,n,e:integer;
q,p:pointer;
begin
b:=SerArifm(a);
{for x:=1 to k do}
{while n<>b do}
while a<>nil do
begin
val(a^.inf,c,m);
if c<b then
begin
q:=a;
dispose(q);
end;
a:=a^.next;
end;
end;

procedure vivod(q:sp);
var
tmp:sp;
begin
tmp:=q;
while tmp^.next<>nil do
begin
writeln(tmp^.inf);
tmp:=tmp^.next;
end;
writeln(tmp^.inf);
end;
procedure initsp(var q:sp);
var
t,tmp:sp;
begin
new(q);
q:=nil;
new(t);
t^.next:=nil;
write('vvedite info');
readln(t^.inf);
while t^.inf<>'' do
begin
inc(k);
if q=nil then q:=t
else
begin
tmp:=q;
while tmp^.next<>nil do
tmp:=tmp^.next;
tmp^.next:=t;
end;
new(t);
t^.next:=nil;
write('Vvedite info:');
readln(t^.inf);
end;
end;
begin
k:=-1;
initsp(s);
w:=serArifm(s);
writeln('Srednee Arifmeticheskoe: ',serArifm(s));
del(s);
vivod(s);
readln;
end.
кто-то может доступно объяснить как сделать это гребанное удаление?) не прошу решать задачу за меня.
Ghost_gg вне форума Ответить с цитированием
Старый 30.05.2010, 17:32   #2
Ghost_gg
Новичок
Джуниор
 
Регистрация: 27.04.2008
Сообщений: 2
По умолчанию

Код:
procedure del(var a:sp);
var x,b,c,m,n,e:integer;
q,p:sp;
begin
b:=serarifm(a);
val(a^.inf,c,m);

while b>c do begin
q:=a;
a:=a^.next;
dispose(q);
val(a^.inf,c,m);
end;
val(a^.inf,c,m);

while(a^.next<>nil) do
begin
if b<c then
a:=a^.next else
begin
a^.next:=a^.next^.next;   
q:=a^.next;
dispose(q);
end;
end;
end;
переписал эту процедуру, но теперь матерится "Error 204: Invalid pointer operation." на второй dispose.
В новой идее мы сначала удаляем то что в начале, а потом все остальное
Ghost_gg вне форума Ответить с цитированием
Старый 30.05.2010, 20:43   #3
sunman
 
Регистрация: 08.03.2010
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Ghost_gg Посмотреть сообщение
Код:
procedure del(var a:sp);
var x,b,c,m,n,e:integer;
q,p:sp;
begin
b:=serarifm(a);
val(a^.inf,c,m);

while b>c do begin
q:=a;
a:=a^.next;
dispose(q);
val(a^.inf,c,m);
end;
val(a^.inf,c,m);

while(a^.next<>nil) do
begin
if b<c then
a:=a^.next else
begin
a^.next:=a^.next^.next;   
q:=a^.next;
dispose(q);
end;
end;
end;
переписал эту процедуру, но теперь матерится "Error 204: Invalid pointer operation." на второй dispose.
В новой идее мы сначала удаляем то что в начале, а потом все остальное
Ты считаешь нормальным двукратное применение dispose?

Я предлагаю такой порядок: Ищем среднее арифмитическое элементов, ставим указатель на начало списка и далее проверяем значение элементов, если оно меньше то применяем dispose к элементу на который установлен указатель

Последний раз редактировалось sunman; 30.05.2010 в 21:59.
sunman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление последнего элемента из списка и реверс этого списка. Goose Общие вопросы C/C++ 8 16.05.2010 16:12
Списки. Удаление элемента из списка. thexqn Помощь студентам 0 11.05.2010 09:04
удаление элемента из списка yagluboko Помощь студентам 1 10.04.2010 14:54
Турбо Паскаль 7.0 Удаление из списка элемента sir.andrey Помощь студентам 12 02.03.2010 17:08
удаление элемента из списка aurora_87 Общие вопросы C/C++ 1 18.06.2009 14:02