Двоичная система на Delphi
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Двоичная система на Delphi - 2005-11-06 15:20:21
|
|
|
Maslo
Сообщений: 717
Оценки: 0
Присоединился: 2005-08-11 21:51:47
|
Нужно написать прогу на Delphi, на форме расположено 2 edit''а: в первый вводиш число в десятичной системе, жмеш на кнопку и она переводит десятичные числа в двоичные(они появляютса во втором edit''е). А вторая кнопка делает все наоборот: переводит двоичные в десятичные. Поможете?
|
|
|
Двоичная система на Delphi - 2005-11-06 18:17:19
|
|
|
Anti_Hacker
Сообщений: 5
Оценки: 0
Присоединился: 2005-11-04 23:54:15
|
Ну из деситисной в бинарное число не так уж сложно. Вообще помниться уже были готовые функции дле перевода.
Ну к прмиеру 255 - 11111111. как это получаеться: 255 div 2 =1 127 div 2 =1 63 div 2 =1 31 div 2 =1 15 div 2 =1 7 div 2 =1 3 div 2 =1 1 div 2 =1 И с низу вверх получаеться 11111111.
Напиши вроде этого :
procedure TForm1.Button1Click(TSender:TоЬjесt) Var result:string; chislo:integer; sTemp:string; Begin chislo:=StrToInt(Trim(Edit1.Text)); While not StrToInt(result)<1 do Begin result:=IntToStr(chislo div 2); sTEmp:=Edit2.Text; Edit2.Clear; Edit2.Text:=result+sTemp; End; end.
|
|
|
Двоичная система на Delphi - 2005-11-07 16:57:10
|
|
|
Maslo
Сообщений: 717
Оценки: 0
Присоединился: 2005-08-11 21:51:47
|
Спасибо, но твой исходник не пашет. Вылетает ошибка и приложение закрываетса.[sm=8.gif]
|
|
|
Двоичная система на Delphi - 2005-11-07 19:40:11
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
ты *пойми* что там написано, иначе не заработает… а чтоб понимание пришло, возьми в руки ручку, бумажку и переводи все числа подряд (от 0 до +inf) из двоичной в десятичную и обратно. Для обобщения методы можешь каждое третье число переводить в двенадцатиричную, а каждое пятьдесят седьмое в сорокатрёхричную систему.
|
|
|
Двоичная система на Delphi - 2005-11-07 20:55:27
|
|
|
nobody-HH
Сообщений: 95
Оценки: 0
Присоединился: 2005-05-15 22:36:39
|
woobshe to eto ne div a mod bylo, kogda s ostatkom delish ;)
|
|
|
Двоичная система на Delphi - 2005-11-07 21:02:42
|
|
|
Maslo
Сообщений: 717
Оценки: 0
Присоединился: 2005-08-11 21:51:47
|
quote:
—————-<BR>Цитата: Дата:07.11.2005 20:55:27, Автор:nobody-HH :: woobshe to eto ne div a mod bylo, kogda s ostatkom delish ;) —————-
Насчет mod это я сразу понял.[sm=1.gif]
|
|
|
Двоичная система на Delphi - 2005-11-09 16:56:32
|
|
|
Anti_Hacker
Сообщений: 5
Оценки: 0
Присоединился: 2005-11-04 23:54:15
|
Да там был mod .Сорри заработался просто :)
Тебе может всю прогу написать и исходник еще прислать?
Я тебе кинул как пример написания, у меня нету на работе Делфи.
|
|
|
Двоичная система на Delphi - 2005-11-09 19:16:51
|
|
|
Great
Сообщений: 1046
Оценки: 0
Присоединился: 2005-08-11 19:41:36
|
Да блин, не можете накодить простую прогу, вы что?[sm=2.gif] Действительно, перевод числа из 10-чной системы в двоичную производится последовательным делением на 2. Например: число 13: 13 / 2 = 6 13 % 2 = [1]
6 / 2 = 3 6 % 2 = [0]
3 / 2 = [1] 3 % 2 = [1]
Берем цифры, которые у меня в скобках в обратном порядке и получаем, что 15 (10) = 1101 (2)
Из-за своей жуткой ненависти к дельфям написал прогу на С++ (пашет 100%, проверено): char* convert(unsigned int a) // переводим 10-чные числа в двиочные<BR>{<BR> char* res=new char[64]; // для результата, но потом строку перевернем<BR><BR> char* sp=res; // итератор<BR><BR> while(1)<BR> {<BR> *sp='0'+a%2; // записать очередную цифру<BR> sp++; // сдвинуть итератор<BR> a/=2;<BR> if(a<2)break; //выйти, если нужно<BR> }<BR> *sp='0'+a; // записать последнюю цифру<BR> sp++;<BR> *sp=0; // завершить строку нулем (\0)<BR> // строка есть, осталось перевернуть<BR><BR> char* rev=new char[64]; // место для перевернутой строки<BR><BR> for(int i=strlen(res);i>=0;i–) // стандартный способ переворота строки<BR> rev[strlen(res)-i]=res[i-1];<BR> rev[strlen(res)]=0;<BR> delete res; // удалить исходную строку (не нужна)<BR> return rev; // возвратить перевернутую<BR>}<BR>
Кому нада, прокомментирую.
Вот так[sm=9.gif]
|
|
|
Двоичная система на Delphi - 2005-11-09 20:14:06
|
|
|
Maslo
Сообщений: 717
Оценки: 0
Присоединился: 2005-08-11 21:51:47
|
quote:
—————-<BR>Цитата: Дата:09.11.2005 19:16:51, Автор:Great :: Да блин, не можете накодить простую прогу, вы что?[sm=2.gif]<BR>Действительно, перевод числа из 10-чной системы в двоичную производится последовательным делением на 2.<BR>Например:<BR>число 13:<BR>13 / 2 = 6<BR>13 % 2 = [1]<BR><BR>6 / 2 = 3<BR>6 % 2 = [0]<BR><BR>3 / 2 = [1]<BR>3 % 2 = [1]<BR><BR>Берем цифры, которые у меня в скобках в обратном порядке и получаем, что 15 (10) = 1101 (2)<BR><BR>Из-за своей жуткой ненависти к дельфям написал прогу на С++ (пашет 100%, проверено):<BR>char* convert(unsigned int a) // переводим 10-чные числа в двиочные<BR>{<BR> char* res=new char[64]; // для результата, но потом строку перевернем<BR><BR> char* sp=res; // итератор<BR><BR> while(1)<BR> {<BR> *sp='0'+a%2; // записать очередную цифру<BR> sp++; // сдвинуть итератор<BR> a/=2;<BR> if(a&amp;lt;2)break; //выйти, если нужно<BR> }<BR> *sp='0'+a; // записать последнюю цифру<BR> sp++;<BR> *sp=0; // завершить строку нулем (<BR><BR><BR>Спасибо. На C++ тоже пойдет…[sm=2.gif]
|
|
|
Двоичная система на Delphi - 2005-11-10 11:04:32
|
|
|
Nex^or
Сообщений: 6
Оценки: 0
Присоединился: 2005-09-22 12:17:10
|
Вот неплохая функция перевода из десятичной в двоичную на delphi:
function IntToBin(Value: integer; Digits: integer): string; var i: integer; begin result := ''; for i := 0 to Digits - 1 do begin if Value and (1 shl i) > 0 then result := '1' + result else result := '0' + result; end; end;
|
|
|
Двоичная система на Delphi - 2005-11-10 21:01:06
|
|
|
Maslo
Сообщений: 717
Оценки: 0
Присоединился: 2005-08-11 21:51:47
|
quote:
—————-<BR>Цитата: Дата:10.11.2005 11:04:32, Автор:Nex^or :: Вот неплохая функция перевода из десятичной в двоичную на delphi:<BR><BR>function IntToBin(Value: integer; Digits: integer): string;<BR>var<BR> i: integer;<BR>begin<BR> result := ';<BR> for i := 0 to Digits - 1 do begin<BR> if Value and (1 shl i) &amp;gt; 0<BR> then result := '1' + result<BR> else result := '0' + result;<BR> end;<BR>end; —————-
И тебе тоже респект![sm=1.gif]
|
|
|
Двоичная система на Delphi - 2005-11-12 03:59:53
|
|
|
-ddd-
Сообщений: 4918
Оценки: 42
Присоединился: 2005-05-23 17:20:41
|
function Base10(Base2:Integer) : Integer; assembler; asm
cmp eax,100000000 // проверка максимального значения jb @1 // значение в пределах допустимого mov eax,-1 // флаг ошибки jmp @exit // вЫход если -1 @1:
push ebx // сохранение регистров push esi xor esi,esi // результат = 0 mov ebx,10 // вЫчисление десятичного логарифма mov ecx,8 // преобразование по формуле 10^8-1 @2:
mov edx,0 // удаление разницЫ div ebx // eax - целочисленное деление на 10, edx - остаток от деления на 10 add esi,edx // результат = результат + разность<BR>ror esi,4 // перемещение разряда<BR>loop @2 // цикл для всех 8 разрядов<BR>mov eax,esi // результат функции<BR>pop esi // восстанавление регистров<BR>pop ebx<BR>@exit:<BR>end;<BR>
|
|
|
Двоичная система на Delphi - 2005-11-12 13:38:23
|
|
|
Maslo
Сообщений: 717
Оценки: 0
Присоединился: 2005-08-11 21:51:47
|
quote:
—————-<BR>Цитата: Дата:12.11.2005 3:59:53, Автор:-ddd- :: function Base10(Base2:Integer) : Integer; assembler;<BR>asm<BR><BR>cmp eax,100000000 // проверка максимального значения<BR>jb @1 // значение в пределах допустимого<BR>mov eax,-1 // флаг ошибки<BR>jmp @exit // вЫход если -1<BR>@1:<BR><BR>push ebx // сохранение регистров<BR>push esi<BR>xor esi,esi // результат = 0<BR>mov ebx,10 // вЫчисление десятичного логарифма<BR>mov ecx,8 // преобразование по формуле 10^8-1<BR>@2:<BR><BR>mov edx,0 // удаление разницЫ<BR>div ebx // eax - целочисленное деление на 10, edx - остаток от деления на 10<BR>add esi,edx // результат = результат + разность<BR>ror esi,4 // перемещение разряда<BR>loop @2 // цикл для всех 8 разрядов<BR>mov eax,esi // результат функции<BR>pop esi // восстанавление регистров<BR>pop ebx<BR>@exit:<BR>end;<BR> —————-
Люди, меня от радости аж на слезу пробило. А -ddd- вообще в 4 утра напостил пример.
P.S. Я выставляю! ))[sm=sm203.gif]
|
|
|
Двоичная система на Delphi - 2005-11-17 18:44:20
|
|
|
Kann
Сообщений: 66
Оценки: 0
Присоединился: 2004-12-09 15:30:28
|
Народ помогите если не трудно, вобшем есть прога на паскале var s,e:text; a,b,i,t,r:longint; k,c:byte; begin assign(s,'d.in'); reset(s); read(s,a,b,k); close(s); for i:=a to b do begin c:=0; t:=i; while t>0 do begin c:=c+(t mod 2); t:=t div 2; end; if c=k then inc(r); end; assign(e,'d.out'); rewrite(e); write(e,r); close(e); halt(0); end.
вобшем она ишет числа в диапазоне от a до b в двоичной записи которых k единиц, все работает только надо заставить ее работать чуть быстрее…
|
|
|
Двоичная система на Delphi - 2005-11-19 13:32:35
|
|
|
Maslo
Сообщений: 717
Оценки: 0
Присоединился: 2005-08-11 21:51:47
|
quote:
—————-<BR>Цитата: Дата:17.11.2005 18:44:20, Автор:Kann :: Народ помогите если не трудно, вобшем есть прога на паскале<BR>var s,e:text;<BR> a,b,i,t,r:longint;<BR> k,c:byte;<BR>begin<BR>assign(s,'d.in');<BR>reset(s);<BR>read(s,a,b,k);<BR>close(s);<BR>for i:=a to b do<BR>begin<BR>c:=0;<BR>t:=i;<BR>while t&amp;gt;0 do<BR>begin<BR>c:=c+(t mod 2);<BR>t:=t div 2;<BR>end;<BR>if c=k then inc(r);<BR>end;<BR>assign(e,'d.out');<BR>rewrite(e);<BR>write(e,r);<BR>close(e);<BR>halt(0);<BR>end.<BR><BR>вобшем она ишет числа в диапазоне от a до b в двоичной записи которых k единиц, все работает только надо заставить ее работать чуть быстрее… —————-
Но это уже в большей части не от исходника зависит.
|
|
|
|
|