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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2010, 15:37   #1
sir.andrey
Форумчанин
 
Регистрация: 06.12.2009
Сообщений: 380
Вопрос Динамические списки! Pascal!

Поивет друзья!!!
При запуске программы в строке (Dispose(k)) обнаруживается ошибка!
Я не понимаю почему...
Подскажите пожалуйста!
Код:
program adresa;
uses crt;
type
     adres=^adres_type;
     adres_type=record
      next,pred:adres;
       data:integer;
	    end;
var next,pred,p,h,buf,one,pered,posle,pered2,posle2,k,close:adres;
    i,n,t,r,y,M:integer; bykva,bykva2:string;
{ydaleni elementov menshe M}
procedure menshe_M(var n:integer);
begin
h:=one;
writeln ('vvedite M');
write ('M=');
readln (M);
for i:=1 to n do begin
                 if (h^.data<M) and (i=1) then begin
                                               h:=h^.next;
                                               h^.pred:=nil;
                                               dispose (one);
                                               one:=h;
                                               end;
                 if (h^.data<M) and (i=n) then begin
                                               h:=h^.pred;
                                               h^.next:=nil;
                                               dispose (close);
                                               close:=h;
                                               end
                                          else begin
                                               k:=h;
                                               pered2:=k^.pred;
                                               posle2:=k^.next;
                                               pered2^.next:=posle2;
                                               posle2^.pred:=pered2;
                                               dispose(k);
                                               end;
h:=h^.next;
end;
end;
{ydalenie elementa}
procedure del(var n:integer);
begin
r:=1;
writeln;
h:=one;
write ('ydalit element nomer: ');
readln (t);
if t=1 then begin
            h:=one^.next;
            h^.pred:=nil;
            dispose(one);
            one:=h;
            end
      else begin
           if y=n then begin
                       h:=close^.pred;
                       h^.next:=nil;
                       dispose(close);
                       close:=h;
                       end
                  else begin
                       for i:=1 to n do begin
                                        if i=t-1 then pered:=h;
                                        if i=t then k:=h;
                                        if i=t+1 then begin
                                                      posle:=h;
                                                      pered^.next:=posle;
                                                      posle^.pred:=pered;
                                                      dispose (k);
                                                      end;
                                        h:=h^.next;
                                        end;
                       end;
            end;
n:=n-r;
end;
Продолжение.......
sir.andrey вне форума Ответить с цитированием
Старый 25.02.2010, 15:38   #2
sir.andrey
Форумчанин
 
Регистрация: 06.12.2009
Сообщений: 380
Вопрос

Продолжение программы.....
Код:
{dobavlenie elementa}
procedure plus (var n:integer);
begin
r:=1;
writeln;
writeln ('na kakoe mesto vstavim noviy element?');
write ('na: ');
readln (t);
h:=one;
if t=1 then begin
            new(k);
            h^.pred:=k;
            k^.next:=h;
            k^.data:=random(100);
            k^.pred:=nil;
            one:=k;
            r:=r+1
           end
       else begin
            if t=n+1 then begin
                          new(k);
                          close^.next:=k;
                          k^.pred:=close;
                          k^.data:=random(100);
                          k^.next:=nil;
                          r:=r+1;
                          end
                     else begin
                          for i:=1 to n do begin
		                           if i=t-1 then pered:=h;
		                           if i=t then begin
                                                       posle:=h;
                                                       r:=r+1;
                                                       new(k);
                                                       k^.data:=random(100)+1;
                                                       k^.pred:=pered;
                                                       pered^.next:=k;
                                                       posle^.pred:=k;
                                                       k^.next:=posle;
                                                       end;
		                           h:=h^.next;
		                           end;
                          end;

            end;

n:=n+r;
end;
{vivod na ekran}
procedure vivod;
begin
write('spisok: ');
h:=one;
while h^.next<>nil do begin
                      write (h^.data,' ');
                      h:=h^.next;
                      end;
write (h^.data,' ');
end;

{ocnovnaya proga}
begin
clrscr;
randomize;
write('kol-vo elementov:');
readln (n);
clrscr;
buf:=nil;
new(h);
one:=h;
h^.pred:=nil;
h^.data:=random(100)+1;
h^.next:=nil;
buf:=h;
for i:=1 to n-1 do begin
                   new(h);
                   h^.pred:=buf;
                   h^.next:=nil;
                   h^.data:=random(100)+1;
                   buf^.next:=h;
                   buf:=h;
                   close:=h;
		   end;
vivod;
plus(n);
vivod;
del(n);
vivod;
menshe_M(n);
vivod;
end.
sir.andrey вне форума Ответить с цитированием
Старый 25.02.2010, 16:42   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
for i:=1 to n-1 do begin
                                        if i=t-1 then pered:=h;
                                        if i=t then k:=h;
                                        if i=t+1 then begin
                                                      posle:=h;
                                                      pered^.next:=posle;
                                                      posle^.pred:=pered;
                                                      dispose (k);
                                                      end;
                                        h:=h^.next;
                                        end;
Ты же из списка один элемент грохаешь? Стало быть список на один элемент становится меньше.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.02.2010, 16:44   #4
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию

Я тут тебе исправлял вроде все получилось!
Код:
clrscr
- это что ? (основная программа)
kta87 вне форума Ответить с цитированием
Старый 25.02.2010, 17:07   #5
sir.andrey
Форумчанин
 
Регистрация: 06.12.2009
Сообщений: 380
Вопрос

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ты же из списка один элемент грохаешь? Стало быть список на один элемент становится меньше.
Здесь все процедуры я сделаю зацикленными, поэтому можно будет удалять и прибавлять элементы сколко хочешь!

А не правильно у меня вот в этом месте!
Код:
procedure menshe_M(var n:integer);
begin
h:=one;
writeln ('vvedite M');
write ('M=');
readln (M);
for i:=1 to n do begin
                 if (h^.data<M) and (i=1) then begin
                                               h:=h^.next;
                                               h^.pred:=nil;
                                               dispose (one);
                                               one:=h;
                                               end;
                 if (h^.data<M) and (i=n) then begin
                                               h:=h^.pred;
                                               h^.next:=nil;
                                               dispose (close);
                                               close:=h;
                                               end
                                          else begin
                                               k:=h;
                                               pered2:=k^.pred;
                                               posle2:=k^.next;
                                               pered2^.next:=posle2;
                                               posle2^.pred:=pered2;
                                               dispose(k);
                                               end;
h:=h^.next;
end;
end;
P.S. clrscr-очистка экрана!!!!

Последний раз редактировалось sir.andrey; 25.02.2010 в 17:15.
sir.andrey вне форума Ответить с цитированием
Старый 25.02.2010, 17:09   #6
sir.andrey
Форумчанин
 
Регистрация: 06.12.2009
Сообщений: 380
По умолчанию

Цитата:
Сообщение от kta87 Посмотреть сообщение
Я тут тебе исправлял вроде все получилось!
Где тут?

Последний раз редактировалось sir.andrey; 25.02.2010 в 17:53.
sir.andrey вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические списки Ольчик Паскаль, Turbo Pascal, PascalABC.NET 4 15.01.2012 14:33
Динамические списки! Pascal! sir.andrey Помощь студентам 2 18.02.2010 14:24
Динамические списки lubafffka Паскаль, Turbo Pascal, PascalABC.NET 6 17.12.2008 21:59