Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
3 / 3 / 4
Регистрация: 17.11.2008
Сообщений: 54
1

Динамический список, не пойму...

07.05.2009, 19:52. Показов 3473. Ответов 8
Метки нет (Все метки)

Здравствуйте, есть задание:
Сформировать динамический список, элементами которого являются
целые числа (в условии дано - это элементы массива).
Выполнить задание, не создавая массив, а с использованием динамического списка.
В процессе выполнения программа должна отслеживать и выводить
на экран объем свободной памяти до создания списка, в процессе
работы над ним (если удаляются или добавляются элементы), а
также в конце программы.
Если дано:
В массиве А=( а1, а2, . . . аn) удалить все положительные элементы,
имеющие четный порядковый номер, идущее после минимального элемента массива .( Новой массив не создавать ).
Вот вроде(должно работать)условие дано, без динамического списка и этого самого отслеживания памяти...


Код
program Lab5;
uses 
       crt;
const
       n = 20;
var 
      a: array [1..n] of integer;
      n1,i,min,imin,j:integer;
begin
 clrscr;
 randomize;
   {Generate}{Print}
 for i := 1 to n do
  begin
    a[i] := random(20)-3;
    write(a[i],' ');
  end; 
 writeln;
    {Get min index}
 min:=a[1];
 imin:=1;
 for i := 1 to n do
  if a[i]<min then
   begin
     min:=a[i];
     imin:=i;
   end;
 writeln('min=',min,' imin=',imin);
     {Delete elements}
 i:=imin+1;
 n1:=n;
 while i <= n1 do
  begin
    if(a[i]>0) and (i mod 2=0) then
     begin
       for j:=i to n-1 do
         a[j] := a[j+1];
       dec(n1);
     end;
  inc(i);
 end;
    {Print}
 for i := 1 to n1 do
  write(a[i],' ');
 readln;
end.

Какие есть задумки? Заранее спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.05.2009, 19:52
Ответы с готовыми решениями:

Отсортировать динамический список, используя основной (заполненный) и второй пустой список
Вроде бы сделал, но почему-то пропадает первый элемент... Иногда последний, не могу отследить... Не...

Динамический массив указателей(не пойму в чем ошибка в коде)
есть код: При попытки записи данных слетает на инициализации name..не могу понять,или память...

Динамический список
Здравствуйте. получил задание создать динамический список и методы работы со списком создать...

Динамический список
Здравствуйте! Давно задавал вопрос по динамическим спискам, но так на него ответ и не получил....

__________________
8
3064 / 724 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
07.05.2009, 22:11 2
Так а где у Вас тут Динамические списки ? Что-то не вижу...
0
3 / 3 / 4
Регистрация: 17.11.2008
Сообщений: 54
08.05.2009, 23:26  [ТС] 3
Цитата Сообщение от lexus_ilia Посмотреть сообщение
Так а где у Вас тут Динамические списки ? Что-то не вижу...
так вот вместо кода програмы требуется через Динамические списки...
0
3064 / 724 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
08.05.2009, 23:28 4
Ааа, ну понятно, ну давайте- показывайте что Вы сделали, и что у Вас не работает, а Мы уже поможем довести до конца.
1
3 / 3 / 4
Регистрация: 17.11.2008
Сообщений: 54
09.05.2009, 18:32  [ТС] 5
Добавлено через 5 часов 50 минут 59 секунд
Код
uses crt;
type mass=^element;
element=record
    X:integer;
    next,pre:mass;
end;

var List,Endlist,temppre,tempnext,Temp,CurrentRec,MinRec:mass;
    N,A,I:integer;


procedure NewListRec;
begin
  new(list);
  list^.X:=random(20)-random(9);
  CurrentRec:=List;
  for I:=2 to N do
  begin
   New(CurrentRec^.next);
   CurrentRec^.next^.X:=random(20)-random(9);
   CurrentRec:=CurrentRec^.next;
  end;
  CurrentRec^.next:=nil;
  endlist:=CurrentRec;
end;


procedure WriteList;
begin
 CurrentRec:=List;
 repeat
  write (CurrentRec^.X:3);
  CurrentRec:=CurrentRec^.next;
 until CurrentRec=nil;
end;

procedure MinimRec;
begin
MinRec:=list;
CurrentRec:=list;
 while CurrentRec^.next <> nil do
 begin
  CurrentRec:=CurrentRec^.Next;
  if MinRec^.X>CurrentRec^.X then MinRec:=CurrentRec;
 end;
 writeln('минимальный элемент массива: ',MinRec^.X);
end;
{----------------------------------}


[COLOR="Red"]procedure Del(MinRec:mass);
begin
 if MinRec=endlist then writeln('Ошибка! Eto posledny element ydalyt ne4ego')
        else
           begin
            CurrentRec:=MinRec;
            CurrentRec:=CurrentRec^.Next;
            writeln(CurrentRec^.X);
            repeat
               if CurrentRec^.X >= 0 then
               begin
                 temppre:=CurrentRec^.pre;
                 tempnext:=CurrentRec^.next;
                 dispose(CurrentRec);
                 tempnext^.pre:=temppre;
                 temppre^.next:=tempnext;
                 CurrentRec:=nil;
               end
               else
                 CurrentRec:=CurrentRec^.Next;
              until CurrentRec=endlist;
            end;
end;

{procedure DisposeRec;
begin
 CurrentRec:=List;
 while CurrentRec<>nil do
 begin
  Temp:=CurrentRec^.next;
  Dispose(CurrentRec);
  CurrentRec:=Temp;
 end;
end;}[/COLOR]

BEGIN
 randomize;
 clrscr;
 writeln('Кол-во свободной памяти', memavail);
 writeln('Введите кол-во элементов в массиве');
 readln(N);
 NewListRec;
 Write('Исходный массив:  ');
 WriteList;
 Writeln;
 Writeln;
 MinimRec;
 del(minrec);
 writeln;
 Write('Конечный массив:  ');
 WriteList;
 writeln;
 writeln('Кол-во свободной памяти', memavail);
 writeln('Освобождение памяти');
[COLOR="Red"]{DisposeRec;}[/COLOR]
 writeln('Кол-во свободной памяти', memavail);
 readln;
end.
Не хочет она выполнять свою задачу, сутки не переставая бьюсь.....весь кривой сижу и бьюсь за компом =\ PS выдилил красным
Dispose тоже забил коментом ибо толко не работает, хотя писал по учебнику...
0
3064 / 724 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
09.05.2009, 20:51 6
Держи, остальное доделаешь сам ( я про красоту вывода, русские буквы и про показания памяти перед и после удаления определённого элемента):
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
uses crt;
type
  mass=^element;
  element=record
    X,nom:integer; {nom-порядковый номер (как-бы в массиве)}
 
    next,pre:mass;
end;
 
var
  List,Endlist,tmp,CurrentRec,MinRec:mass;
  N,A,I:integer;
 
 
procedure NewListRec;
begin
  new(list);
  CurrentRec:=List; {CurrentRec- Начло списка}
  list^.X:=random(20)-random(9);
  list^.nom:=1;
  list^.next:=nil;
  list^.pre:=nil;
  for I:=2 to N do
  begin
   New(list^.next);
   tmp:=list^.next;
   tmp^.pre:=list;
   tmp^.next:=nil;
   tmp^.X:=random(20)-random(9);
   tmp^.nom:=i;
   list:=tmp
  end;
  endlist:=list {Конец списка}
end;
 
 
procedure WriteList;
begin
 list:=CurrentRec;
 repeat
  write (List^.X:3, ' ');
  List:=List^.next;
 until list=nil;
end;
 
Procedure MinimRec(var MinRec:mass);
begin
  MinRec:=CurrentRec;
  tmp:=CurrentRec;
  while tmp <> nil do
  begin
    if MinRec^.X>tmp^.X then
      MinRec:=tmp;
    tmp:=tmp^.next;
  end;
  writeln('MinimaLbHblu elemeHt macciva nod Homepom ' , MinRec^.nom, ' =',MinRec^.X);
end;
{----------------------------------}
 
 
procedure Del(var MinRec:mass);
var
  tmp1:mass;
begin
 if MinRec^.next<>nil then
 begin
   MinRec:=MinRec^.next;
   While MinRec<>nil do
   begin
     if (MinRec^.X>0) and (MinRec^.nom mod 2=0) then {ycloVi9 ydaleni9}
     begin
       Writeln('Ydal9em element nod nomerom ' ,MinRec^.nom, ' co zna4eniem ' ,MinRec^.x);
       if MinRec=EndList then
         EndList:=MinRec^.pre;
       tmp1:=MinRec^.next;
       tmp:=MinRec;
       tmp^.pre^.Next:=MinRec^.next;
       if MinRec^.next<>nil then
         tmp^.next^.pre:=MinRec^.pre;
       dispose(MinRec);
       MinRec:=tmp1;
     end
     else
       MinRec:=MinRec^.next;
   end;
 end;
end;
 
procedure DisposeRec;
begin
  List:=CurrentRec;
  while List<>nil do
  begin
    tmp:=list;
    List:=list^.next;
    Dispose(tmp)
  end
end;
 
BEGIN
 randomize;
 clrscr;
 writeln('Kolu4ectvo Cvobodnoi naM9Ti', memavail);
 writeln('VVedite kOli4ectvo elemeHTov v Maccive');
 readln(N);
 NewListRec;
 Write('UcxodHbli maciv:  ');
 WriteList;
 Writeln;
 Writeln;
 MinRec:=nil;
 MinimRec(MinRec);
 del(minrec);
 writeln;
 Write('Kone4Hbli macciv:  ');
 WriteList;
 writeln;
 Writeln;
 writeln('KoLu4ectvo cvoboDHoi naM9Ti ', memavail);
 writeln('Ocvobo}l{DeHie nam9Ti');
 DisposeRec;
 writeln('Namiati V KohL/e paboTi npograMMbl ', memavail);
 
 readln;
end.
Добавлено через 1 минуту 51 секунду
Да, я решил что при удалении у нас порядковые номера не сдвигаются, если хочешь сделай со сдвигом, это не сложно...
1
3 / 3 / 4
Регистрация: 17.11.2008
Сообщений: 54
09.05.2009, 21:12  [ТС] 7
Цитата Сообщение от lexus_ilia Посмотреть сообщение
Держи, остальное доделаешь сам ( я про красоту вывода, русские буквы и про показания памяти перед и после удаления определённого элемента):
Да, я решил что при удалении у нас порядковые номера не сдвигаются, если хочешь сделай со сдвигом, это не сложно...
уже сам справился =)))

Код
program lab5;
uses crt;
type mass=^element;
element=record
    X:integer;
    next,pre:mass;
    end;

var List,Endlist,CurrentRec,Temp,temppre,tempnext,minRec:mass;
    N,A,I:integer;

procedure NewListRec;
var I:integer;
begin
  new(list);
  list^.X:=random(20)-random(9);
  list^.pre:=nil;
  CurrentRec:=List;
  for I:=2 to N do
  begin
   New(CurrentRec^.next);
   CurrentRec^.next^.X:=random(20)-random(9);
   CurrentREc^.next^.pre:=CurrentRec;
   CurrentRec:=CurrentRec^.next;
  end;
  CurrentRec^.next:=nil;
  endlist:=CurrentRec;
end;

procedure WriteList;
begin
 CurrentRec:=List;
 repeat
  write (CurrentRec^.X:3);
  CurrentRec:=CurrentRec^.next;
 until CurrentRec=nil;
end;

procedure MinimRec;
begin
MinRec:=list;
CurrentRec:=list;
 while CurrentRec^.next <> nil do
 begin
  CurrentRec:=CurrentRec^.Next;
  if MinRec^.X>CurrentRec^.X then MinRec:=CurrentRec;
 end;
end;

procedure Del(minRec:mass);
begin
 if MinRec=endlist then writeln('Ошибка! Минимальный элемент на последнем месте!')
 else
 begin
  CurrentRec:=List;
  for I:=1 to N do
  begin
   If CurrentRec = MinRec then
   Begin
    CurrentRec:=CurrentRec^.Next;
    repeat
     inc(I);
     if (CurrentRec^.X>=0) AND (I mod 2=0) then
     begin
      temppre:=CurrentRec^.pre;
      tempnext:=currentrec^.next;
      if currentrec=list then list:=list^.next;
      dispose(currentrec);
      tempnext^.pre:=temppre;
      temppre^.next:=tempnext;
      currentrec:=tempnext;
     end
     else
      Currentrec:=Currentrec^.next;
      until CurrentRec=nil;
      writeln;
   end
   else
    Currentrec:=Currentrec^.next;
  end;
 end;
end;

procedure DisposeRec;
begin
 CurrentRec:=List;
 while CurrentRec<>nil do
 begin
  Temp:=CurrentRec^.next;
  Dispose(CurrentRec);
  CurrentRec:=Temp;
 end;
end;

begin
 randomize;
 clrscr;
 writeln(' ╔═══════════════════════════════════════════════════════════════════════════╗');
 writeln(' ║ В массиве А=(а1,а2,...,аn) удалить все положительные  элементы, имеющие   ║');
 writeln(' ║ четный порядковый номер, идущие после минимального элемента массива.      ║');
 writeln(' ╚═══════════════════════════════════════════════════════════════════════════╝');
 writeln(' Кол-во свободной памяти: ', memavail);
 write(' Введите кол-во элементов в массиве: ');
 readln(N);
 NewListRec;
 Write(' Исходный массив:  ');
 WriteList;
 Writeln;
 MinimRec;
 writeln(' минимальный элемент массива: ',minrec^.X);
 del(minrec);
 Write(' Конечный массив:  ');
 WriteList;
 writeln;
 writeln(' Кол-во свободной памяти: ', memavail);
 writeln(' Освобождение памяти...');
 DisposeRec;
 writeln(' Кол-во свободной памяти: ', memavail);
 readln;
end.
0
3064 / 724 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
09.05.2009, 21:18 8
Молодец.
0
3 / 3 / 4
Регистрация: 17.11.2008
Сообщений: 54
09.05.2009, 21:40  [ТС] 9
Цитата Сообщение от lexus_ilia Посмотреть сообщение
Молодец.
весь день угробил, главное результат)))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.05.2009, 21:40

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Динамический список
android studio - java Привет. Есть в as какая нибудь удобная штука, чтоб можно было просто...

динамический список
Всем здраствуйте . В проге надо создать динамический список и реализовать всякие функции для...

Динамический список
1.Организовать связный список из m элементов, используя функцию создания списка спомощью генератора...

Динамический список и ТЧ
Есть документ &quot;ЗаказПокупателя&quot;. У него есть табличная часть &quot;Товары&quot; (интересует столбец...

Динамический список
В общем я в тупике. Вот моя задача: Элементами динамического списка являются записи, в которых...

Динамический список
Справочник документы, произвольная форма, в ней динамический список..... как мне программно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.