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

Вниз

Создание алгоритма для 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.006 c
14-50510
Vertex3f
2003-05-31 14:41
2003.06.16
inherited, override


8-50410
sashok
2003-03-04 18:17
2003.06.16
Работа с файлами графики


14-50517
Gor
2003-05-31 16:11
2003.06.16
Чем грозит трепанация черепа ?


7-50528
Dimaz-z
2003-04-10 15:23
2003.06.16
Как созжать и поместить ярлык?


3-50205
alextov
2003-05-26 10:26
2003.06.16
Запросом выбрать клиентов с днем рожд. в ближайшие 10 дн.





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