![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Упростить выражение
Гость © (2010-03-03 10:26:00)Добрый день. подскажите, пожалуйста, как можно сократить вот такую запись, при этом неувеличив размер программы:
type
TBlok = array[1..32] of byte;
var
B: TBlok;
begin
{Что-то делаем..}
if (B[16] or B[17] or B[18] or B[19] or B[20] or
B[21] or B[22] or B[23] or B[24] or B[25] or
B[26] or B[27] or B[28] or B[29] or B[30] or
B[31] or B[32] or B[15]) = 0 then {Что-то делаем..}
end
grammar-nazi (2010-03-04 11:56:00) [1]i := 15; v := 0;
while (i <= 32) and (v = 0) do begin v := v or B[i]; inc(i) end;
123 (2010-03-04 11:39:00) [2]for i -> Бн = random
b15 = 0
> B[15]*B[16]*B[17]*B[18]*B[19]*B[20]*B[21]*B[22]*B[23]*B[24]*B[25]*B[27]*B[28]*B[
> 29]*B[30]*B[31]*B[32]=0
oldman (2010-03-03 20:13:00) [3]
> if (B[16] or B[17] or B[18] or B[19] or B[20] or
> B[21] or B[22] or B[23] or B[24] or B[25] or
> B[26] or B[27] or B[28] or B[29] or B[30] or
> B[31] or B[32] or B[15]) = 0 then
if B[15]*B[16]*B[17]*B[18]*B[19]*B[20]*B[21]*B[22]*B[23]*B[24]*B[25]*B[27]*B[28]*B[ 29]*B[30]*B[31]*B[32]=0 then
:)
MBo (2010-03-03 17:09:00) [4]Задачу опишите подробнее
Игорь Шевченко (2010-03-03 16:44:00) [5]Гость (03.03.10 15:14) [24]
Очевидно, что если их сотня или две, то нужно данные иначе организовать.
12 (2010-03-03 15:21:00) [6]а ежели матрицу const ввести?
const
MatrixRule : array [1..32] of byte = (0,0,00,0,1,2,,,4,4,33,);
ее довольно хорошо можно править, а код сравнения везде будет одинаковый
12 (2010-03-03 15:17:00) [7]Ё..
bb:=true
for i:= 15 to 32 do bb := bb and b[i]=0
if bb then {Что-то делаем..}
else {отдыхаем..}
Гость (2010-03-03 15:14:00) [8]Игорь Шевченко, согласен с Вами, но как-то оно смотриться не очень... хочется компактности.. а если бы там сотня этих элементов бы была или 2 сотни?
Вроде бы так можно, но все равно 2 лишние переменные и лишние операции..
Bool := false;
for i := 15 to 32 do
Bool := Bool or (Block[i] <> 0);
if not Bool then .....
12 (2010-03-03 15:13:00) [9]if 1=0 then {Что-то делаем..}
else {отдыхаем..}
brother (2010-03-03 15:11:00) [10]блин, туплю
brother (2010-03-03 15:10:00) [11];)
type
TBlok = array[1..32] of byte;
var
B: TBlok;
i: integer;
begin
{Что-то делаем..}
if b[15] = 0 then
for i:= 16 to 32 do
if (b[i-1] = b[i]) and (i=32) then {Что-то делаем..}
end;
Игорь Шевченко (2010-03-03 14:52:00) [12]не надо ничего сокращать, запись достаточно понятная, очевидная и легко изменяемая в будущем
12 (2010-03-03 14:41:00) [13]да, похоже проще
> CompareMem
Плохиш (2010-03-03 14:26:00) [14]
> brother © (03.03.10 14:23) [17]
Продолжай, это опять не верно.
Там все проверяемые должны быть равны нулю.
brother (2010-03-03 14:23:00) [15]те так:
type
TBlok = array[1..32] of byte;
var
B: TBlok;
i: integer;
ok: boolean;
begin
{Что-то делаем..}
ok:= false;
for i:= 15 to 32 do
if B[i] = 0 then
begin
ok:= true;
Break;
end;
if ok then {Что-то делаем..}
end
картман (2010-03-03 14:21:00) [16]
> brother © (03.03.10 14:20) [15]
там же "или"
brother (2010-03-03 14:20:00) [17]может так? ;)
type
TBlok = array[1..32] of byte;
var
B: TBlok;
i: integer;
ok: boolean;
begin
{Что-то делаем..}
ok:= true;
for i:= 15 to 32 do
if B[i] = 0 then
begin
ok:= false;
Break;
end;
if ok then {Что-то делаем..}
end
Agrh (2010-03-03 13:40:00) [18]Да ступил, признаю.. :)
Palladin (2010-03-03 13:19:00) [19]
> Agrh (03.03.10 13:00) [10]
на кой городить цикл если все зависит от состояния последнего элемента?
type
TBlok = array[1..32] of byte;
var Block: TBlok;
i: byte;
B: Boolean;
begin
Block[31] := 0;
Block[32] := 2;
for i := 15 to 32 do
B := Block[i] = 0;
if B then ShowMessage('Agrh Blok is zero');
end
и все, результат не верный. ты точно верно понимаешь логику операции or ?
Ega23 (2010-03-03 13:15:00) [20]
> Palladin, почему неверное?
type
TBlok = array[1..32] of byte;
var Block: TBlok;
i: byte;
B: Boolean;
begin
Block[31] := 2;
Block[32] := 0;
for i := 15 to 32 do
B := Block[i] = 0;
if B then ShowMessage('Agrh Blok is zero');
end