Форум программистов, компьютерный форум CyberForum.ru

По массивам - Lazarus

Восстановить пароль Регистрация
 
Hretgir
173 / 70 / 1
Регистрация: 25.01.2012
Сообщений: 2,506
Записей в блоге: 17
26.12.2016, 15:16     По массивам #1
Возникла проблема:
В ходе написания программы удобно использовать локальные переменные - они помогают ориентироваться в чтении программы (когда имя одно - ты знаешь что содержит эта переменная или массив).
В общем надо как-то инициализировать массивы при объявлении в процедурах.
в глобальных переменных и типах есть это
Pascal
1
2
type tproc = procedure is nested;/////////////////////////////////////////////
  arr = array of TProc;
но последующее объявление в процедуре выдает ошибку
Pascal
1
arr1: arr[6]=(@snulya,@spervogo,@svtorogo,@stretiego,@schetvyortogo,@spyatogo);
как это сделать правильно? подскажите. в учебниках именно такого нет.

Добавлено через 3 минуты
Прошу прощения, нашёл
Pascal
1
2
3
procedure TForm1.filteringByY;
const
  arr : array[1 .. 3] of TProc =  (@smaller, @average, @bigger);
Добавлено через 5 минут
Но выдает ошибку.
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
163
164
165
166
167
168
169
170
171
172
173
 procedure TForm1.vyvedetTablicu;//выведет таблицу
 
procedure snulya;
var
counter1, counter2,counter1R, counter2R, y : integer;
begin
counter1R:= high(arraygrid);
 with StringGrid1 do
  begin
  y:=2;
  ColCount :=counter1R+2;
  RowCount :=y;
  end;
for counter1:=0 to counter1R do  // заполнять ячейкм
 begin
 counter2R := high(arraygrid[counter1]);
 StringGrid1.Cells[counter1+1,0]:=IntToStr(counter2R+1);
  if y<counter2R+2 then
 y:=counter2R+2;
 with StringGrid1 do
  begin
  RowCount :=y;
 end;
 for counter2:=0 to counter2R do
 begin
 with StringGrid1 do
  begin
 StringGrid1.Cells[counter1+1,counter2+1]:=IntToStr(length(arraygrid[counter1,counter2]));//////////////////////////////////////////////
 //Writeln(izmerenie[0],'=izmerenie[0]; ', counter1,'=counter1; ',counter2,'=counter2');////////////////////////////////////////////////////////////////////
  end;
 end;
end;
end;
procedure spervogo;
var
counter1, counter2,counter1R, counter2R, y : integer;
begin
 counter1R:= high(arraygrid[izmerenie[0]]);
 with StringGrid1 do
  begin
  y:=2;
  ColCount :=counter1R+2;
  RowCount :=y;
  end;
 for counter1:=0 to counter1R do  // заполнять ячейкм
 begin
 counter2R := high(arraygrid[izmerenie[0],counter1]);
 StringGrid1.Cells[counter1+1,0]:=IntToStr(counter2R+1);
 if y<counter2R+2 then
 y:=counter2R+2;
 begin
 with StringGrid1 do
  begin
  RowCount :=y;
  end;
 end;
 for counter2:=0 to counter2R do
 begin
 with StringGrid1 do
  begin
 StringGrid1.Cells[counter1+1,counter2+1]:=IntToStr(length(arraygrid[izmerenie[0], counter1,counter2]));
  end;
 end;
 end;/////////////////////////////////////////////
 end;
procedure svtorogo;
var
counter1, counter2,counter1R, counter2R, y : integer;
begin
counter1R := high(arraygrid[izmerenie[0],izmerenie[1]]);
with StringGrid1 do
  begin
  y:=2;
    ColCount :=counter1R+2;
    RowCount :=y;
  end;
for counter1:=0 to counter1R do  // заполнять ячейкм
begin
counter2R :=  high(arraygrid[izmerenie[0],izmerenie[1],counter1]);
StringGrid1.Cells[counter1+1,0]:=IntToStr(counter2R+1);
 if y<counter2R+2 then
   y:=counter2R+2;
 begin
 with StringGrid1 do
  begin
  RowCount :=y;
  end;
 end;
for counter2:=0 to counter2R do
begin
with StringGrid1 do
 begin
StringGrid1.Cells[counter1+1,counter2+1]:=IntToStr(length(arraygrid[izmerenie[0],izmerenie[1], counter1,counter2]));
end;
end;
end;
end;
 
procedure stretiego;
var
counter1, counter2,counter1R, counter2R, y : integer;
begin
counter1R := high(arraygrid[izmerenie[0],izmerenie[1],izmerenie[2]]);
with StringGrid1 do
  begin
   y:=2;
    ColCount :=counter1R+2;
    RowCount :=y;
  end;
for counter1:=0 to counter1R do  // заполнять ячейкм
begin
counter2R := high(arraygrid[izmerenie[0],izmerenie[1],izmerenie[2],counter1]);
StringGrid1.Cells[counter1+1,0]:=IntToStr(counter2R+1);
 if y<counter2R+2 then   y:=counter2R+2;
 begin
 with StringGrid1 do
  begin
  RowCount :=y;
  end;
 end;
for counter2:=0 to counter2R do
begin
with StringGrid1 do
 begin
StringGrid1.Cells[counter1+1,counter2+1]:=IntToStr(arraygrid[izmerenie[0],izmerenie[1], izmerenie[2],counter1,counter2]);
end;
end;
end;
end;
procedure schetvyortogo;
var
counter1, counter2,counter1R, counter2R, y : integer;
begin
counter1R := high(arraygrid[izmerenie[0],izmerenie[1],izmerenie[2],izmerenie[3]]);
with StringGrid1 do
  begin
  ColCount :=counter1R+2;
  RowCount :=2;
  end;
for counter1:=1 to counter1R do  // заполнять ячейкм
begin
with StringGrid1 do
 begin
StringGrid1.Cells[counter1+1,2]:=IntToStr(arraygrid[izmerenie[0],izmerenie[1],izmerenie[2],izmerenie[3], counter1]);
end;
end;
//end;
// writeln(UTF8ToConsole('это данные, таблица не выводится'));
end;
procedure spyatogo;
begin
//writeln(UTF8ToConsole('это данные, таблица не выводится'));
end;
 type tproc = procedure is nested;
 const
   arr1: array[1 .. 6] of TProc=(@snulya,@spervogo,@svtorogo,@stretiego,@schetvyortogo,@spyatogo);
begin
case navigation of
  0: Image1.Picture.loadfromfile('spervogo.jpg');
  1: Image1.Picture.loadfromfile('svtorogo.jpg');
  2: Image1.Picture.loadfromfile('stretiego.jpg');
  3: Image1.Picture.loadfromfile('schetvjortogo.jpg');
  4: Image1.Picture.loadfromfile('spjatogo.jpg');
  end;
// SetLength(arr1,6);
//arr1[0]:=@snulya;
//arr1[1]:=@spervogo;
//arr1[2]:=@svtorogo;
//arr1[3]:=@stretiego;
//arr1[4]:=@schetvyortogo;
//arr1[5]:=@spyatogo;
arr1[navigation];
end;
как её обойти? в строке 156
вот эта запись имеется и в глобальных переменных и типах
Pascal
1
2
type tproc = procedure is nested;/////////////////////////////////////////////
  arr = array of TProc;
Добавлено через 34 минуты
Или в такой последовательности нельзя?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2016, 15:16     По массивам
Посмотрите здесь:

По массивам... C++
Лабораторная по массивам C++
По массивам.... C++
Matlab Задачи по массивам
Visual C++ Задача по массивам
C++ по массивам
Pascal Задача по массивам
Тест по массивам C#
Java SE Задачи по массивам
По массивам процедур Lazarus
C++ Задача по массивам

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
volvo
Супер-модератор
 Аватар для volvo
22078 / 14383 / 4044
Регистрация: 22.10.2011
Сообщений: 25,450
Записей в блоге: 2
26.12.2016, 16:32     По массивам #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Так - нельзя:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{$modeswitch nestedprocvars}
procedure p;
 
  procedure p1;
  begin
  end;
  procedure p2;
  begin
  end;
 
type
  tproc = procedure is nested;
var
  arr : array[1 .. 2] of tproc = (@p1, @p2);
 
begin
end;
 
begin
  p;
end.
Так - можно:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{$modeswitch nestedprocvars}
procedure p;
 
  procedure p1;
  begin
  end;
  procedure p2;
  begin
  end;
 
type
  tproc = procedure is nested;
var
  arr : array[1 .. 2] of tproc;
 
begin
  arr[1] := @p1;
  arr[2] := @p2;
end;
 
begin
  p;
end.
Чувствуешь разницу?
Hretgir
173 / 70 / 1
Регистрация: 25.01.2012
Сообщений: 2,506
Записей в блоге: 17
27.12.2016, 14:09  [ТС]     По массивам #3
я всё понял, просто надо процедуры, которые нужно занести в массив при инициализации, вынести за пределы процедуры в которой работает массив.

Добавлено через 4 часа 13 минут
и вообще, я так понял, что организация программы должна быть несколько иной чем у меня. сейчас переструктурирую её.
Hretgir
173 / 70 / 1
Регистрация: 25.01.2012
Сообщений: 2,506
Записей в блоге: 17
29.12.2016, 15:13  [ТС]     По массивам #4
Сделал, выбрал структуру, теперь вообще весь процесс представляется намного проще и код визуабельнее значительно становится, с которым работаю.
Yandex
Объявления
29.12.2016, 15:13     По массивам
Ответ Создать тему
Опции темы

Текущее время: 14:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru