Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
Гость   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.108 c
3-1240229501
Wood
2009-04-20 16:11
2010.08.27
Помогите с приложение для работы через ADO с бд.


6-1217065389
Надуев Алексей
2008-07-26 13:43
2010.08.27
Соединение Internet


15-1270648471
Mozart
2010-04-07 17:54
2010.08.27
Seagate...того?


2-1266162841
azatsh
2010-02-14 18:54
2010.08.27
как установить компонент из пакета


2-1267595287
allrussia
2010-03-03 08:48
2010.08.27
Перекодировка русского текста DOS+ANSI в ANSI





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский