1 / 1 / 0
Регистрация: 27.05.2012
Сообщений: 19
1

Линейные списки

29.05.2012, 20:01. Показов 1175. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется линейный список с последовательным хранением , элементами которого являются окружности.
Реализовать следующие функции.
1)add_item
2)insert_item
3)delete_itemAt
4)find_item
5)delete_item
6)sort_list

Delphi
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
program IntList;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
const nMaxSize=1000;
  type TIntList=array[0..nMaxSize] of integer;
  var rIntList:TIntList;
      i,count:integer;
 
   type TCircle = record
        x, y: double;
        r: double;
      end;
 
      pIntItem = ^tIntItem;
        tIntItem = record
        value: TCircle;
        next: pIntItem;
      end;
 
  procedure WriteTL(rIntList:TIntList; count:Integer);
    begin for i:= 1 to count-1 do write(rIntList[i],' ');
    end;
  //add_item [1]
  function add_item(rIntList: pIntItem; item: TCircle;count:integer):Integer;
    var
      rIntListEnd: pIntItem;
      begin
        if rIntList = nil then
          begin
            new(rIntList);
            rIntList.next := nil;
            rIntList.value := item;
            result := 1;
            exit;
          end;
 
        count := 1;
        rIntListEnd := rIntList;
          while (rIntListEnd.next <> nil) do
            begin
            rIntListEnd :=  rIntListEnd.next;
            inc(count);
            end;
        new(rIntListEnd.next);
        rIntListEnd := rIntListEnd.next;
        rIntList.next := nil;
        rIntList.value := item;
        result := count + 1;
      end;
  //insert_item  [2]
  function insert_item(item,pos:integer; rIntList:pIntItem;count:integer ):integer;
    var i:integer;
      begin result:=-1;
      if (count<nmaxsize)and(pos>=0)and(pos<count) then
          begin
              for i:= count downto pos+1 do rIntList[i]:=rIntList[i-1];
              rIntList[pos]:=item;
              result:=count+1;
          end;
      end;
  //Óäàëåíèå ýëåìåíòàèç ïîçèöèè ñ çàäàííûì íîìåðîì   [3]
  function delete_itemAt(pos:Integer; rIntList:pIntItem;count:integer):integer;
   begin result:=-1;
   if (count<nmaxsize)and(pos>=0)and(pos<count) then
      begin
          for i:=pos to (count-2) do
            rIntList[i]:=rIntList[i+1];
          result:=count-1;
      end;
   end;
  //find_item [4]
  function find_item(item:Integer; rIntList:pIntItem;count:Integer):Integer;
  begin result:=-1;
  if (count<nmaxsize)and(count>0)then
    for i:=0 to count-1 do
        if rIntList[i]=item then
          begin
            Result:=i;
            Exit;
          end;
  end;
  // delete_item [5]
  function delete_item(item:Integer; rIntList:pIntItem; count:Integer):Integer;
    var k:Integer;
      begin
        result:=1; k:=0;
          if (count<nmaxsize)and(count>0)then
            for i:=0 to count-1 do
              if rIntList[i]=item then
                begin
                    result:=delete_itemAt(i,rIntList,count);
                    k:=k+1;
                end;
        if k>1 then result:=count-k;
      end;
  // sort_list [6]
  function sort_list(rIntList:TIntItem;count:Integer):Boolean;
  var t,s:Integer;
    begin
        result:=(count<nMaxSize)and(count>1);
        s:=0;
          while Result do
            begin
                result:=False;
                for i:=1 to count-2 do
                if rIntList[i]>rIntList[i+1] then
                  begin
                      t:=rIntList[i];
                      rIntList[i]:=rIntList[i+1];
                      rIntList[i+1]:=t;
                      result:=true;
                      s:=s+1;
                  end;
            end;
        if s>0 then result:=True;
    end;
 var k:Tcircle;
begin
  Readln(count);
  Writeln('massive');
  for i:=0 to count-1 do
    begin
        rIntList[i]:=Random(100)+1;
        write(rIntList[i],' ');
    end;
    { произвольная окружность (2;5) радиус 1 }
  k.x:=2;
  k.y:=5;
  k.r:=1;
  //1
  Writeln;
  count:=add_item(k,rIntList,count);
  Writeln(count);
  WriteTL(rIntList,count);
  //2
  Writeln;
  count:=insert_item(k,4,rIntList,count);
  Writeln(count);
  WriteTL(rIntList,count);
  Writeln;
  //3
  Writeln;
  count:=delete_itemAt(6,rIntList,count);
  Writeln(count);
  WriteTL(rIntList,count);
  Writeln;
  //4
  Writeln;
  Writeln(find_item(5,rIntList,count);
  WriteTL(rIntList,count);
  Writeln;
  //5
  Writeln;
  count:=delete_item(4,rIntList,count);
  Writeln(count);
  WriteTL(rIntList,count);
  Writeln;
  //6
  Writeln;
  Writeln(sort_list(rIntList,count));
  Writeln(count);
  WriteTL(rIntList,count);
  Writeln;
 
  Readln;
 
end.
Помогите разобраться с ошибками.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2012, 20:01
Ответы с готовыми решениями:

Линейные списки
Вечер добрый! Видимо не далась мне тема про списки. Прошу помощи: Список вводится через...

Линейные списки
Помогите пожалуйста!!! Дан линейный список, содержащий имена,фамилии и отчества. Отсортировать...

Однонаправленные линейные списки
Помогите с одноправленным линейным списком.Происходит ошибка на этапе выполения.

Списки. Линейные массивы
Дано линейную таблицу A, которая состоит из целых чисел. Записать алгоритм и составить программу,...

8
70 / 69 / 13
Регистрация: 24.05.2012
Сообщений: 146
29.05.2012, 21:08 2
Во-первых, прочти наконец, что такое список. Хотя бы здесь. Во-вторых в предложенной программе ошибок нет, её просто надо всю удалить ко всем чертям. Кроме этих мест, разумеется:
Delphi
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
program IntList;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
   type TCircle = record
        x, y: double;
        r: double;
      end;
 
      pIntItem = ^tIntItem;
        tIntItem = record
        value: TCircle;
        next: pIntItem;
      end;
 
 
  //add_item [1]
  function add_item(rIntList: pIntItem; item: TCircle;count:integer):Integer;
    var
      rIntListEnd: pIntItem;
      begin
        if rIntList = nil then
          begin
            new(rIntList);
            rIntList.next := nil;
            rIntList.value := item;
            result := 1;
            exit;
          end;
 
        count := 1;
        rIntListEnd := rIntList;
          while (rIntListEnd.next <> nil) do
            begin
            rIntListEnd :=  rIntListEnd.next;
            inc(count);
            end;
        new(rIntListEnd.next);
        rIntListEnd := rIntListEnd.next;
        rIntList.next := nil;
        rIntList.value := item;
        result := count + 1;
      end;
Последующее написание рекомендую начать с
Delphi
1
2
var
  listStart: pIntItem;
и НЕ продолжать введением массивов.
1
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
29.05.2012, 21:13 3
Цитата Сообщение от vilag Посмотреть сообщение
её просто надо всю удалить ко всем чертям
Что-ж вы так категорично. Когда проходят динамические структуры данных иногда освещается раздел "реализация <любая дин. стр-ра> на базе массива". Вполне может быть, что именно это и требовалось.
0
70 / 69 / 13
Регистрация: 24.05.2012
Сообщений: 146
29.05.2012, 21:19 4
Можно реализовать список на массиве, но в программе откровенно используется массив вместо списка. Все равно всё переписывать.
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
29.05.2012, 21:47 5
Цитата Сообщение от vilag Посмотреть сообщение
в программе откровенно используется массив вместо списка
Массив целых чисел
Цитата Сообщение от vilag Посмотреть сообщение
в предложенной программе ошибок нет
Это, кстати, тоже не так.
hppnd, разберитесь в задании, чтоб мы тут на кофейной гуще не гадали.
0
1 / 1 / 0
Регистрация: 27.05.2012
Сообщений: 19
29.05.2012, 21:54  [ТС] 6
HighPredator, Задание выглядит вот так :

Имеется линейный список с последовательным хранением, элементами которого являются окружности. Для этого списка реализовать следующие функции:
1) добавление нового элемента в конец списка
function add_item(«нoвый элемент», «список элементов», «текущая длина списка»);
функция выдает в качестве результата новую длину списка или -1, если операция не удалась;
2) вставка элемента в позицию с заданным номером
function insert_item («новый элемент», «номер позиции», «список элементов», «текущая длина списка»);
функция выдает в качестве результата новую длину списка или -1, если операция не удалась;
3) удаление элемента из позиции с заданным номером
function delete_itemAt(«номер позиции», «список элементов», «текущая длина списка»);
функция выдает в качестве результата новую длину списка или -1, если операция не удалась;
4) поиск заданного элемента
function find_item(«заданный элемент», «список элементов», «текущая длина списка»);
функция выдает в качестве результата номер найденного элемента списка или -1, если операция не удалась;
5) удаление заданного элемента из списка
function delete_item(«удаляемый элемент», «список элементов», «текущая длина списка»);
функция выдает в качестве результата новую длину списка или -1, если операция не удалась;
6) упорядочивание списка в порядке возрастания радиусов окружности
function sort_list( «список элементов», «текущая длина списка»); функция выдает в качестве результата 1, если операция удалась, или 0, если операция не выполнена.
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
29.05.2012, 21:59 7
Тогда вам массив не нужен. Плюс, на форуме пруд-пруди тем про списки, поищите.
0
1 / 1 / 0
Регистрация: 27.05.2012
Сообщений: 19
29.05.2012, 22:02  [ТС] 8
HighPredator, пока я нашел только топик одногруппника с этим же заданием .
0
44 / 24 / 1
Регистрация: 22.05.2012
Сообщений: 669
29.05.2012, 22:46 9
Линейные списки и циклические списки

Добавлено через 25 секунд
смотри тут
Линейные списки и циклические списки
1
29.05.2012, 22:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2012, 22:46
Помогаю со студенческими работами здесь

Курсач, тема: линейные списки
Текст помощи для некоторой программы организован как линейный список. Каждая компонента текста...

Линейные списки \ Реализация некоторых функции
Прошу помощи : Имеется линейный список с последовательным хранением , элементами которого являются...

Delphi линейные списки и записи,не могу разобраться
Создать запись &quot;Станция&quot; (хранит номер или название). Создать запись &quot;Поезд&quot; (хранит номер поезда,...

Линейные списки(перевести вроде с Си++ на Delphi [console application])
Здравствуйте, переведите, пожалуйста, программу с вроде Си ++ на Delphi; Си еще не проходили(((.


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru