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

Вниз

Создание алгоритма для CheckBox   Найти похожие ветки 

 
Jaxtor   (2003-06-03 11:32) [0]

Всем День добрый!!! В программе моей должна быть визуализация значений CheckBox"ов используя двоичную систему исчисления. Привожу кусок программы для визуализации 3-х CheckBox"ов, для значения 2:

var CheckBoxVariable:TCheckBox;
...
CheckBoxVariable:=TCheckBox.Create(MainForm);
...

begin
n:=1;
PropertiesArray[2]:=2;
DescriptionCount:=3;
If (PropertiesArray[n+1]>2*(DescriptionCount-1)) or (PropertiesArr
ay[n+1]=2*(DescriptionCount-1)) then
CheckBoxVariable.Checked:=true else
CheckBoxVariable.Checked:=false;
dec(DescriptionCount);
end;


У меня стоит значение 2.
Если 2>=2^2; CheckBox1=Unchecked
Если 2>=2^1; CheckBox2=Checked
Если 2-2^1>=2^0; CheckBox3=UnChecked

Все бы хорошо, но как реализовать строчку 2-2^1?
Т.е. пока у меня считается последняя строчка как 2>=2^0, а надо
как 2-2^1>=2^0.


 
Sandman25   (2003-06-03 11:39) [1]

>надо как 2-2^1>=2^0.

Почему? Надо именно value >= 2^N, где N от 0 до 2
В чем смысл визуализации? Битовое представление?


 
Jaxtor   (2003-06-03 11:44) [2]

Вот, допустим, визуализация числа 3:

3>=2^2 Unchecked
3>=2^1 Checked
3-2^1>=2^0 Checked.

Двоичная арифметика!


 
Jaxtor   (2003-06-03 11:50) [3]

Тупо можно сделать:
Занести в массив значения(3,3,3)
и для последнего значения массива сделать как
3-2^1>=2^0. А для других значений: просто 3>=2^1 , 3>=2^2...

А по другому можно?


 
Sandman25   (2003-06-03 12:01) [4]

CB0.Checked := Value and (1 shl 0) > 0;
CB1.Checked := Value and (1 shl 1) > 0;
CB2.Checked := Value and (1 shl 2) > 0;

CB2 CB1 CB0


 
Jaxtor   (2003-06-03 12:19) [5]

>Sandman25 Вроде правильно. Спасибо!

Еще маленький вопрос, а как заносить эти значения для твоего варианта?

Я сделал так:

MaxColumnCount:=50;

For i:=1 to 20 do begin
Ch[1]:=0;
Ch[2]:=0;
Ch[3]:=0;
Ch[4]:=0;
Cycle:=False;
For j:=1 to MaxColumnCount do
If not (ParametersForm.FindComponent("CheckBox"+ IntToStr(i)+LettersArray[j])=nil) then begin
If (ParametersForm.FindComponent("CheckBox"+ IntToStr(i)+LettersArray[j]) as TCheckBox).checked then Ch[j]:=1
else Ch[j]:=0;
Cycle:=True;
end;

If Cycle then CharacteristicsArray[i]:=1*Ch[1]+2*Ch[2]+4*Ch[3];

end;

Как избавиться от ошибки?


 
Jaxtor   (2003-06-03 12:26) [6]

If Cycle then CharacteristicsArray[i]:=4*Ch[3]+2*Ch[2]+1*Ch[1];

При таком коде все работает для 3-х CheckBox"ов...

Проще нельзя?


 
Sandman25   (2003-06-03 12:26) [7]

for i:= 1 to 20 do
begin
CharacteristicsArray[i] := 0;
for j := 0 to MaxColumnCount-1 do
If ParametersForm.FindComponent("CheckBox"+ IntToStr(i)+LettersArray[j])<>nil then begin
If (ParametersForm.FindComponent("CheckBox"+ IntToStr(i)+LettersArray[j]) as TCheckBox).checked then
CharacteristicsArray[i]:= CharacteristicsArray[i] + 1 shl j;
end;

end;


 
Sandman25   (2003-06-03 12:28) [8]

Там немного подправить надо, но общую идею Вы можете понять.


 
Jaxtor   (2003-06-03 12:35) [9]

>Sandman25
Спасибо. Операция shl почему-то напроч вылетела из моей головы...


 
Sandman25   (2003-06-03 12:37) [10]

Можно и без shl.
Перед внутренним циклом factor := 1;
внутри цикла factor := factor * 2; Хотя быстрее factor := factor shl 1;



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

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

Наверх




Память: 0.46 MB
Время: 0.006 c
3-50218
Крот
2003-05-26 11:26
2003.06.16
Формат полной даты в Access


14-50464
Style
2003-05-28 08:13
2003.06.16
Тут мою музыку на студии обработали :)


1-50285
AbrosimovA
2003-06-04 14:27
2003.06.16
Помогите разобраться с типизиров. и нетипизир. файлами


1-50276
Johnyk
2003-06-04 15:37
2003.06.16
Инсталятор BDE


14-50500
SPeller
2003-05-30 15:10
2003.06.16
Matrix Reload





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