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
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
| {-------------------------------------------------------------------------------------------------------------------------------------}
{Перебор комбинаций по условиям ограничения выпадения числа}
procedure TForm1.BitBtn5Click(Sender: TObject);
Var
Start, Finish: Cardinal; {Переменные для подсчета времени выполнения процедуры}
{}
KombGrop: array of array of Integer; {Массив по таблице StringGrid14 - по столбцам c 0 по 7 - Варианты по Группам}
{}
KombSum : array of array of Integer; {Массив по таблице StringGrid10 - по столбцам c 0 по 3 - Варианты Сумм}
{}
i, j : Integer;
{}
N1, N2, N3, N4, N5, N6 : Integer; {Переменные для перебора чисел - отыскание комбинаций отвечающих условиям}
KolKomb : Integer; {Счетчик количества комбинаций по условию комбинациям в Массиве !-KombGrop-!}
NomGrup : Integer; {для записи номера комбинации в соответствии с группами в массиве !-KombGrop-!}
MasKomb : array[1..6] of integer; {Массив комбинации чисел во время перебора}
{}
Gruppa1, Gruppa2, Gruppa3, Gruppa4, Gruppa5: Integer; {Счетчики количества чисел в определенной группе}
Gruppa : array[1..5] of integer; {Массив распределения цифр в комбинации по группам}
N : Integer; {Переменная для проверки равенства комбинации}
NKomb : Integer; {№ комбинации найденной при сравнении}
{}
begin {0}
Start := GetTickCount; {Фиксируем время начала выполнение процедуры}
{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
{Задание размера массива KombGrop}
SetLength(KombGrop,StrToInt(LabeledEdit19.Text), 7); {Задание размера Массива KombGrop равного количеству записей в таблице, где 5 количество столбцов Групп1-5}
{Запись Массива KombGrop данными из таблицы StringGrid14}
for i:=0 to Length(KombGrop)-1 do {перебор по строкам Массива KombGrop для записи данных- количество строк}
begin {1}
For j:=0 to 6 do {Перебор по столбцам Таблицы и Массива}
Begin {2}
KombGrop[i,j]:=StrToInt(StringGrid14.Cells[j+1,i+1]); {Запись по строкам в Массив (KombGrop) данных из таблицы StringGrid14}
end; {2}
{Проверка записи данных из таблицы с данными Групп по тиражам в массив KombGrop}
LabeledEdit20.Text:=IntToStr(Length(KombGrop)); {Проверка количество записей в Массиве должно соответствовать количеству Записей}
end; {1}
{Запись данных из Массива KombGrop в таблицу StringGrid21}
StringGrid21.RowCount:=Length(KombGrop)+1; {Присвоение значения количество строк равное количеству записей в Массиве}
{Обозначение столбцов в таблице StringGrid21}
StringGrid21.Cells[0,0]:='№'; {№ ГРУППЫ количества комбинаций выпадения чисел по Группам из таблицы StringGrid21}
StringGrid21.Cells[1,0]:='01-09'; {Группа-1 от 01 до 09}
StringGrid21.Cells[2,0]:='10-19'; {Группа-2 от 10 до 19}
StringGrid21.Cells[3,0]:='20-29'; {Группа-3 от 20 до 29}
StringGrid21.Cells[4,0]:='30-39'; {Группа-4 от 30 до 39}
StringGrid21.Cells[5,0]:='40-45'; {Группа-5 от 40 до 45}
StringGrid21.Cells[6,0]:='КолВып'; {Количество выпадений комбинации}
StringGrid21.Cells[7,0]:='Среднее'; {Среднее}
for i:=0 to Length(KombGrop)-1 do {перебор по Массиву KombGrop - и запись данных из массива в таблицу StringGrid21}
begin {3}
For j:=0 to 6 do
Begin {4}
{Для Проверки Запись данных из Массива KombGrop вариантами распределения по Группам в таблицу StringGrid21}
StringGrid21.Cells[j+1,i+1]:=IntToStr(KombGrop[i,j]);
end; {4}
StringGrid21.Cells[0,i+1]:=IntToStr(i+1); {нумерация строк в таблице StringGrid21.}
{Количество записей должно соответствовать количеству записей}
end; {3}
LabeledEdit21.Text:=IntToStr(StringGrid21.RowCount-1); {Проверка количества записей в таблице}
{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
{Задание размера массива KombSum}
SetLength(KombSum,StrToInt(LabeledEdit22.Text), 2); {Задание размера Массива KombSum равного количеству записей в таблице, где 3 количество столбцов в Таблице}
{Запись Массива KombGrop данными из таблицы StringGrid14}
for i:=0 to Length(KombSum)-1 do {перебор по строкам Массива KombSum для записи данных- количество строк}
begin {1}
For j:=0 to 1 do {Перебор по столбцам Таблицы и Массива}
Begin {2}
KombSum[i,j]:=StrToInt(StringGrid10.Cells[j+1,i+1]); {Запись по строкам в Массив (KombGrop) данных из таблицы StringGrid14}
end; {2}
{Проверка записи данных из таблицы с данными Групп по тиражам в массив KombGrop}
end; {1}
{Запись данных из Массива KombSum в таблицу StringGrid22}
StringGrid22.RowCount:=Length(KombSum)+1; {Присвоение значения количество строк равное количеству записей в Массиве}
{Обозначение столбцов в таблице StringGrid21}
StringGrid22.Cells[0,0]:='№'; {№ количества комбинаций выпадения чисел по Группам из таблицы StringGrid21}
StringGrid22.Cells[1,0]:='СумТир'; {Сумма}
StringGrid22.Cells[2,0]:='КолВып'; {количество раз}
{}
for i:=0 to Length(KombSum)-1 do {перебор по Массиву KombGrop - и запись данных из массива в таблицу StringGrid21}
begin {3}
For j:=0 to 1 do
Begin {4}
{Для Проверки Запись данных из Массива KombGrop вариантами распределения по Группам в таблицу StringGrid21}
StringGrid22.Cells[j+1,i+1]:=IntToStr(KombSum[i,j]);
end; {4}
StringGrid22.Cells[0,i+1]:=IntToStr(i+1); {нумерация строк в таблице StringGrid22.}
{Количество записей должно соответствовать количеству выборок из LabeledEdit22}
end; {3}
{Сортировка данных в таблице LabeledEdit22 по столбцу - Сумма}
GridSort1(StringGrid22,1); {РАБОТАЕТ где 1- номер столбца по которому производиться сортировка}
{}
{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
{Перебор комбинаций чисел отвечающих правилу:}
{1. - Комбинация чисел соответствует выбранным комбинациям в Массиве !-KombGrop-!}
{2. - Найденная комбинация соответствует условию по сумме чисел равное массиву !-KombSum-!}
{}
StringGrid23.Cells[0,0]:='№'; {№ комбинации}
StringGrid23.Cells[1,0]:='№1'; {Число №1 Найденное отвечающее правилу комбинации по Группам}
StringGrid23.Cells[2,0]:='№2'; {Число №2 Найденное отвечающее правилу комбинации по Группам}
StringGrid23.Cells[3,0]:='№3'; {Число №3 Найденное отвечающее правилу комбинации по Группам}
StringGrid23.Cells[4,0]:='№4'; {Число №4 Найденное отвечающее правилу комбинации по Группам}
StringGrid23.Cells[5,0]:='№5'; {Число №5 Найденное отвечающее правилу комбинации по Группам}
StringGrid23.Cells[6,0]:='№5'; {Число №6 Найденное отвечающее правилу комбинации по Группам}
StringGrid23.Cells[7,0]:='№Комб'; {Количество выпадений комбинации}
// StringGrid23.Cells[7,0]:='Сумма'; {Сумма}
KolKomb:=0;
{}
For N1:=1 to 40 do
Begin {For N1}
MasKomb[1]:=N1;
For N2:= N1+1 to 41 do
Begin {For N2}
MasKomb[2]:=N2;
For N3:= N2+1 to 42 do
Begin {For N3}
MasKomb[3]:=N3;
For N4:= N3+1 to 43 do
Begin {For N4}
MasKomb[4]:=N4;
For N5:= N4+1 to 44 do
Begin {For N5}
MasKomb[5]:=N5;
For N6:= N5+1 to 45 do
Begin {For N6}
MasKomb[6]:=N6; {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
{Обнуление начальных значений счетчиков количества чисел в определенной группе}
Gruppa1:=0;
Gruppa2:=0;
Gruppa3:=0;
Gruppa4:=0;
Gruppa5:=0;
for i:=1 to 5 do
{перебор по столбцам Массива MasKomb - количество столбцов в MasKomb =(5)}
Begin {for i}
IF (MasKomb[i]>=1) AND (MasKomb[i]<=9) Then Gruppa1:=Gruppa1+1; {Число входит в Группу-1}
IF (MasKomb[i]>=10) AND (MasKomb[i]<=19) Then Gruppa2:=Gruppa2+1; {Число входит в Группу-2}
IF (MasKomb[i]>=20) AND (MasKomb[i]<=29) Then Gruppa3:=Gruppa3+1; {Число входит в Группу-3}
IF (MasKomb[i]>=30) AND (MasKomb[i]<=39) Then Gruppa4:=Gruppa4+1; {Число входит в Группу-4}
IF (MasKomb[i]>=40) AND (MasKomb[i]<=45) Then Gruppa5:=Gruppa5+1; {Число входит в Группу-5}
end; {for i}
Gruppa[1]:= Gruppa1; {Запись распределения в массив}
Gruppa[2]:= Gruppa2; {Запись распределения в массив}
Gruppa[3]:= Gruppa3; {Запись распределения в массив}
Gruppa[4]:= Gruppa4; {Запись распределения в массив}
Gruppa[5]:= Gruppa5; {Запись распределения в массив}
{Проверка на попадание Gruppa комбинации в Группу отобранную в массив KombGrop}
N:=0;
for i:=0 to Length(KombGrop)-1 do {Перебор массива KombGrop по строкам}
Begin {for i}
for j:=1 to 5 do
// Begin {for j}
If Gruppa[j]=KombGrop[i,j] then N:=N+1; {В случае совпадения комбинации N=5}
// end; {for j}
If N=5 Then
begin {If N=5}
{Присваиваем номер найденной комбинации}
{Найдена комбинация}
{Выполняем запись найденной комбинации в таблицу StringGrid23}
{Выполняем подсчет суммы чисел в найденной комбинации}
NKomb:=i;
KolKomb:=KolKomb+1; {Счетчик найденных комбинаций}
{Запись найденной комбинации в таблицу StringGrid23}
StringGrid23.Cells[0,KolKomb]:=IntToStr(KolKomb); {№ найденной комбинации отвечающая условию}
// StringGrid23.Cells[1,KolKomb]:=IntToStr(MasKomb[1]); {Число1 Найденное отвечающее правилу комбинации по Группам}
// StringGrid23.Cells[2,KolKomb]:=IntToStr(MasKomb[2]); {Число2 Найденное отвечающее правилу комбинации по Группам}
// StringGrid23.Cells[3,KolKomb]:=IntToStr(MasKomb[3]); {Число3 Найденное отвечающее правилу комбинации по Группам}
// StringGrid23.Cells[4,KolKomb]:=IntToStr(MasKomb[4]); {Число4 Найденное отвечающее правилу комбинации по Группам}
// StringGrid23.Cells[5,KolKomb]:=IntToStr(MasKomb[5]); {Число5 Найденное отвечающее правилу комбинации по Группам}
// StringGrid23.Cells[6,KolKomb]:=IntToStr(NKomb); {Количество выпадений комбинации}
StringGrid23.Cells[7,KolKomb]:=IntToStr(MasKomb[1]+MasKomb[2]+MasKomb[3]+MasKomb[4]+MasKomb[5]); {Сумма чисел комбинации}
// Break;
end; {If N=5}
{Найдена комбинация}
end; {for i}
{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
end; {For N6}
end; {For N5}
end; {For N4}
end; {For N3}
end; {For N2}
end; {For N1}
StringGrid23.RowCount:=KolKomb+1; {Количество строк в таблице=Количеству комбинаций чисел по Группам из таблицы StringGrid2}
{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
Finish := GetTickCount; {Засекаем время окончание выполнение процедуры}
{Вывод времени выполнения процедуры на Кнопку BitBtn1}
BitBtn5.Caption:='BitBtn5 Перебор комбинаций по условиям. ВРЕМЯ='+ FloatToStr((Finish - Start)/1000);
{}
end; {0} {BitBtn5Click - Перебор комбинаций по условиям ограничения выпадения числа}
{-------------------------------------------------------------------------------------------------------------------------------------} |