Форум: "Начинающим";
Текущий архив: 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.065 c