Форум программистов, компьютерный форум, киберфорум
Наши страницы
Pascal ABC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
ed8009
7 / 7 / 2
Регистрация: 31.08.2011
Сообщений: 135
#1

Построение сложных структур в динамической памяти

04.12.2013, 18:39. Просмотров 784. Ответов 6
Метки нет (Все метки)

Объясните пожалуйста задание. Обычные структуры я строил, а вот подобное нет. Даже не знаю с чего начать. Помогите хотя бы словесно объяснить.
Задание:
Построить структуру в динамической памяти. Элементы с двумя связями содержат строковые данные, с одной - символьные или целочисленные. Выполнить просмотр структуры и поиск в структуре: по заданному строковому элементу найти связанные с ним символьные или целочисленные элементы. Вывод элементов списка организовать в графическом виде. Результат поиска выделить цветом на выведенном списке.
Картинка прилагается.

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

0
Миниатюры
Построение сложных структур в динамической памяти  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2013, 18:39
Ответы с готовыми решениями:

Очистка динамической памяти.
О, гуру, помогите мне, несведущему! Не получается полностью освободить...

Очистка динамической памяти
Как очистить память в таком случае? Выдаёт ошибку 204. Ошибочная операция с...

Разместить элементы файла в динамической памяти
Создать файл, содержащий сведения о владельцах автомобилей: фамилия владельца,...

Не могу вывести элементы из динамической памяти
написал прогу заполняет список 16ю элементами (динамическая память)потом должна...

Запушить в ячейку динамической памяти через модуль
Не получается запушить в ячейку динамической памяти через модуль, постоянно...

6
sanechek_sanya
1 / 1 / 2
Регистрация: 05.12.2013
Сообщений: 7
05.12.2013, 02:33 #2
У меня такой же вопрос.
Это всё, что смог пока что сделать.
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
uses
  GraphABC;
type
  pbelem=^belem;
  pselem=^selem;
    belem=record
  data:integer;
  next:pbelem;
  down:pselem;
  end;
  
  selem=record 
data:string;
down:pselem;
        end;
 
var
  last:pbelem;
 
procedure add;
var
  pb:pbelem;
  ps:pselem;
begin
  new(pb);
pb^.data:=Random(100);
  new(ps);
   ps^.data:=Random(20);
   pb^.down:=ps;
    new(ps);
     PS^.data:=Random(20);
     pb^.down^.down:=ps;
     ps^.down:=nil;
     pb^.next:=nil;
  if last=nil then
last:=pb
  else
    begin
      pb^.next:=last;
      last:=pb;
  end;
end;
0
sanechek_sanya
1 / 1 / 2
Регистрация: 05.12.2013
Сообщений: 7
18.12.2013, 20:52 #3
Вроде всё работает,но преподу, я так и не понял что именно,но не понравилось что-то в массивах. Если кто знает в чём проблема, укажите на ошибку.

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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
uses
  GraphABC;
 
type
  pbelem = ^belem;
  pselem = ^selem;
  belem = record
    data: integer;
    next: pbelem;
    down: pselem;
  end;
  selem = record
    data: char;
    down: pselem;
  end;
 
var
  last: pbelem;
  first: pbelem;
  y1, a: integer;
  b: string;
 
 
 
procedure Add(t: integer; randoms: array of char);
var
  pb: pbelem;
  prev, current: pselem;
  i : integer;
begin
  new(pb);
  pb^.data := t;
  i:=0;
  while (i < length(randoms)) do begin
    new(current);
    current^.data := randoms[i];
 
    if (pb^.down = nil) then begin
      pb^.down := current;
    end;
 
    if (prev <> nil) then
      prev^.down := current;
 
    prev := current;
 
    inc(i);  
  end;
  if last = nil then 
  begin
    last := pb;
    first := pb;
  end
  else
  begin
    last^.next := pb;
    last := pb;
  end;
end;
 
procedure AddRandoms(t: integer; num: integer);
var
  randoms: array of char;
begin
  randoms := new char[num];
 
  while (num > 0) do begin
    randoms[num-1] := chr(random(80, 90));
    dec(num)
  end;
 
  add(t, randoms);
end;
 
procedure Show;
var
  p: pbelem;
  ps: pselem;
  j, x, y: integer;
begin
  p := first;
  x := 0;
  y := 0;
 
  window.Clear;
 
  while p <> nil do begin // цикл, рисующий pbelem (горизонталь)
        ps := p^.down;
 
    if inttostr(p^.data) = b then 
      pen.Color := clred
    else
      pen.Color := clblack;
 
    DrawRectangle(x, y, x + 50, y + 50);
    line(x + 25, y + 50, x + 25, y + 100);
    line(x + 50, y + 25, x + 100, y + 25);
    textout(x + 20, y + 17, IntToStr(p^.data));
 
    if p^.next = nil then
      textout(x + 120, y1 + 16, 'nil');
 
    j := 100;
 
    while (ps <> nil) do begin // цикл, рисующий pselem (вертикаль)
      DrawRectangle(x, j, x + 50, j + 50);
      textout(x + 20, j + 20, ps^.data);
      if (ps^.down <> nil) then
        line(x + 25, j + 50, x + 25, j + 100);
      
      j := j + 100;
        ps := ps^.down;
        
    end;
    
    x := x + 100;
    p := p^.next;
  end; 
end;
 
procedure Search ;
begin
  b := IntToStr(a);
  show;
  
end;
 
 
procedure kdown(key: integer);
begin
  case key of
    VK_F1: 
    begin
      addRandoms(random(5), 2);
      addRandoms(random(5), 1);
      addRandoms(random(5), 3);
      Search;
    end;
  end;
end;
 
begin
  writeln('введите число от 0 до 4');
  readln(a);
  window.Clear;
  y1 := 0;
  onkeydown := kdown;
  
end.
Добавлено через 23 часа 12 минут
Вот рабочая.
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
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
uses
  GraphABC;
 
type
  pbelem = ^belem;
  pselem = ^selem;
  belem = record
    data: integer;
    next: pbelem;
    down: pselem;
  end;
  selem = record
    data: char;
    down: pselem;
  end;
 
var
  last: pbelem;
  first: pbelem;
  y1, a: integer;
  b: string;
 
 
procedure Add;
var
  pb: pbelem;
  ps,k_ps: pselem;
begin
    new(pb);
  pb^.data := random(5);
  pb^.next:=nil;
    new(ps);
  ps^.data := chr(random(80, 90));
  ps^.down := nil;
  pb^.down:=ps;
  k_ps:=ps;
    new(ps);
  ps^.data := chr(random(80, 90));
  ps^.down := nil;
  k_ps^.down:=ps;
 
  if last = nil then 
  begin
    last := pb;
    first := pb;
  end
  else
  begin
    last^.next := pb;
    last := pb;
  end;
  
    new(pb);
  pb^.data := random(5);
  pb^.next:=nil;
  new(ps);
  ps^.data := chr(random(80, 90));
  ps^.down := nil;
  pb^.down:=ps;
  k_ps:=ps;
 
 
    last^.next := pb;
    last := pb;
 
 
    new(pb);
  pb^.data := random(5);
  pb^.next:=nil;
    new(ps);
  ps^.data := chr(random(80, 90)); 
  ps^.down := nil;
  pb^.down:=ps;
  k_ps:=ps;
    new(ps);
  ps^.data := chr(random(80, 90));
  ps^.down := nil;
    k_ps^.down:=ps;
  k_ps:=ps;
    new(ps);
  ps^.data := chr(random(80, 90));
  ps^.down := nil;
    k_ps^.down:=ps;
 
 
    last^.next := pb;
    last := pb;
  
  end;
 
procedure Show;
var
  p: pbelem;
  ps: pselem;
  j, x, y: integer;
begin
  p := first;
  x := 0;
  y := 0;
 
  window.Clear;
 
  while p <> nil do begin 
        ps := p^.down;
 
    if inttostr(p^.data) = b then 
      pen.Color := clred
    else
      pen.Color := clblack;
 
    DrawRectangle(x, y, x + 50, y + 50);
    line(x + 25, y + 50, x + 25, y + 100);
    line(x + 50, y + 25, x + 100, y + 25);
    textout(x + 20, y + 17, IntToStr(p^.data));
 
    if p^.next = nil then
      textout(x + 120, y1 + 16, 'nil');
 
    j := 100;
 
    while (ps <> nil) do begin // цикл, рисующий pselem (вертикаль)
      DrawRectangle(x, j, x + 50, j + 50);
      textout(x + 20, j + 20, ps^.data);
      if (ps^.down <> nil) then
        line(x + 25, j + 50, x + 25, j + 100);
      
      j := j + 100;
        ps := ps^.down;
        
    end;
    
    x := x + 100;
    p := p^.next;
  end; 
end;
 
procedure Search ;
begin
  b := IntToStr(a);
  show;
  
end;
 
 
procedure kdown(key: integer);
begin
  case key of
    VK_F1: 
    begin 
      add; 
        Search;;
    end;
  end;
end;
 
begin
  writeln('введите число от 0 до 4');
  readln(a);
  window.Clear;
  onkeydown := kdown;
  
end.
1
ed8009
7 / 7 / 2
Регистрация: 31.08.2011
Сообщений: 135
18.12.2013, 21:22  [ТС] #4
Спасибо))
0
sanechek_sanya
1 / 1 / 2
Регистрация: 05.12.2013
Сообщений: 7
18.12.2013, 21:24 #5
Цитата Сообщение от ed8009 Посмотреть сообщение
Спасибо))
Да на здоровье)
0
AkulPavel
1 / 1 / 0
Регистрация: 25.04.2015
Сообщений: 66
08.12.2016, 18:04 #6
А зачем вводить от 0 до 4?
0
DENIS228
0 / 0 / 0
Регистрация: 26.04.2016
Сообщений: 15
13.12.2016, 10:36 #7
можете для такой структуры помочь?
0
Изображения
 
13.12.2016, 10:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2016, 10:36

Определить, сколько места занимает в динамической памяти массив
Заполнить массив целых чисел случайным образом. Размерность массива не...

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

Разместить в динамической памяти элементы, встречающиеся в текстовом файле один раз
Дан текстовый файл, содержащий целые числа, разделенные пробелом. Разместить в...


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

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

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