Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Упростить выражение   Найти похожие ветки 

 
Гость   (2010-03-03 10:26) [0]

Добрый день. подскажите, пожалуйста, как можно сократить вот такую запись, при этом неувеличив размер программы:
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


 
И. Павел ©   (2010-03-03 10:42) [1]

CompareMem?


 
И. Павел ©   (2010-03-03 10:43) [2]

При этом делать второй сравниваемый массив глобальным - тогда сам нулями заполнится.


 
12 ©   (2010-03-03 10:44) [3]

Longword() = 0


 
Ega23 ©   (2010-03-03 11:01) [4]


> Longword() = 0


Не хватит два нужно


 
12 ©   (2010-03-03 11:11) [5]


> of byte

аа..сори


 
Palladin ©   (2010-03-03 11:48) [6]

8 нужно )

type
  TBlok = array[1..32] of byte;
  TAlexandr = array [0..3] of int64;
var
  B: TBlok;
  A: TAlexandr absolute B;

if (a[0] or a[1] or a[2] or a[3]) = 0 then
 ShowMessage("Alexandr Blok is zero");


 
Agrh   (2010-03-03 12:21) [7]

type
TBlok = array[1..32] of byte;

var Block: TBlok;
   i: byte;
   B: Boolean;
begin
      Block[31] := 2;
      for i := 15 to 32 do
         B := Block[i] = 0;
      if B then  ShowMessage("Agrh Blok is zero");
end

А, кстати, можно наверное через указатели как-то сделать?


 
Palladin ©   (2010-03-03 12:28) [8]

неверные решения просьба не выкладывать


 
Ega23 ©   (2010-03-03 12:40) [9]


> 8 нужно )


Н-да, чё-то я на двоечку ошибся....


> Agrh   (03.03.10 12:21) [7]


Как минимум Break не поставил.


 
Agrh   (2010-03-03 13:00) [10]

Palladin, почему неверное?


 
Плохиш ©   (2010-03-03 13:05) [11]


> Agrh   (03.03.10 13:00) [10]
>
> Palladin, почему неверное?

Потому что проверяешь только последний элемент массива.


 
Ega23 ©   (2010-03-03 13:15) [12]


> 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


 
Palladin ©   (2010-03-03 13:19) [13]


> 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 ?


 
Agrh   (2010-03-03 13:40) [14]

Да ступил, признаю.. :)


 
brother ©   (2010-03-03 14:20) [15]

может так? ;)
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


 
картман ©   (2010-03-03 14:21) [16]


> brother ©   (03.03.10 14:20) [15]

там же "или"


 
brother ©   (2010-03-03 14:23) [17]

те так:

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:26) [18]


> brother ©   (03.03.10 14:23) [17]

Продолжай, это опять не верно.
Там все проверяемые должны быть равны нулю.


 
12 ©   (2010-03-03 14:41) [19]

да, похоже проще

> CompareMem


 
Игорь Шевченко ©   (2010-03-03 14:52) [20]

не надо ничего сокращать, запись достаточно понятная, очевидная и легко изменяемая в будущем


 
brother ©   (2010-03-03 15:10) [21]

;)
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;


 
brother ©   (2010-03-03 15:11) [22]

блин, туплю


 
12 ©   (2010-03-03 15:13) [23]

if 1=0 then {Что-то делаем..}
else {отдыхаем..}


 
Гость   (2010-03-03 15:14) [24]

Игорь Шевченко, согласен с Вами, но как-то оно смотриться не очень... хочется компактности.. а если бы там сотня этих элементов бы была или 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:17) [25]

Ё..

bb:=true
for i:= 15 to 32 do bb := bb and b[i]=0
if bb then {Что-то делаем..}
else {отдыхаем..}


 
12 ©   (2010-03-03 15:21) [26]

а ежели матрицу const ввести?
const
MatrixRule : array [1..32] of byte = (0,0,00,0,1,2,,,4,4,33,);
ее довольно хорошо можно править, а код сравнения везде будет одинаковый


 
Игорь Шевченко ©   (2010-03-03 16:44) [27]

Гость   (03.03.10 15:14) [24]

Очевидно, что если их сотня или две, то нужно данные иначе организовать.


 
MBo ©   (2010-03-03 17:09) [28]

Задачу опишите подробнее


 
oldman ©   (2010-03-03 20:13) [29]


> 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

:)


 
123   (2010-03-04 11:39) [30]

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


 
grammar-nazi   (2010-03-04 11:56) [31]

i := 15; v := 0;
while (i <= 32) and (v = 0) do begin v := v or B[i]; inc(i) end;



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.047 c
15-1268978113
oldman
2010-03-19 08:55
2010.08.27
Драйвер для Xerox Phaser 3117 под МЕ


2-1273577748
Shyrick
2010-05-11 15:35
2010.08.27
MainMenu &amp; WinAPI


2-1269469596
s_t_d
2010-03-25 01:26
2010.08.27
Ступор при редактировании поля VARCHAR с пом. FIBPLus


2-1272537853
12
2010-04-29 14:44
2010.08.27
WNetAddConnection2. В чем могут быть проблемы?


15-1271921592
АлександрВторой
2010-04-22 11:33
2010.08.27
Отчеты в базах данных в Delphi 2009