Главная страница
    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.51 MB
Время: 0.078 c
15-1265377108
vovko26
2010-02-05 16:38
2010.08.27
С чего начать?


2-1275805199
Denisrf
2010-06-06 10:19
2010.08.27
Не получается создать окно.


2-1275392674
defen
2010-06-01 15:44
2010.08.27
приоритет службы


15-1269207002
Юрий
2010-03-22 00:30
2010.08.27
С днем рождения ! 22 марта 2010 понедельник


3-1233731200
Mike Kouzmine
2009-02-04 10:06
2010.08.27
Не выполняется селект в хранимой процедуре





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский