Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Двоичная система на Delphi

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Веб-программинг] >> Двоичная система на Delphi
Имя
Сообщение << Старые топики   Новые топики >>
Двоичная система на Delphi - 2005-11-06 15:20:21   
Maslo

Сообщений: 717
Оценки: 0
Присоединился: 2005-08-11 21:51:47
Нужно написать прогу на Delphi, на форме расположено 2 edit''а: в первый вводиш число в десятичной системе, жмеш на кнопку и она переводит десятичные числа в двоичные(они появляютса во втором edit''е). А вторая кнопка делает все наоборот: переводит двоичные в десятичные. Поможете?
Post #: 1
Двоичная система на 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.
Post #: 2
Двоичная система на Delphi - 2005-11-07 16:57:10   
Maslo

Сообщений: 717
Оценки: 0
Присоединился: 2005-08-11 21:51:47
Спасибо, но твой исходник не пашет. Вылетает ошибка и приложение закрываетса.[sm=8.gif]
Post #: 3
Двоичная система на Delphi - 2005-11-07 19:40:11   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
ты *пойми* что там написано, иначе не заработает… а чтоб понимание пришло, возьми в руки ручку, бумажку и переводи все числа подряд (от 0 до +inf) из двоичной в десятичную и обратно. Для обобщения методы можешь каждое третье число переводить в двенадцатиричную, а каждое пятьдесят седьмое в сорокатрёхричную систему.
Post #: 4
Двоичная система на 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 ;)
Post #: 5
Двоичная система на 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]
Post #: 6
Двоичная система на Delphi - 2005-11-09 16:56:32   
Anti_Hacker

Сообщений: 5
Оценки: 0
Присоединился: 2005-11-04 23:54:15
Да там был mod .Сорри заработался просто :)

Тебе может всю прогу написать и исходник еще прислать?

Я тебе кинул как пример написания, у меня нету на работе Делфи.
Post #: 7
Двоичная система на 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&lt;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&gt;=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]
Post #: 8
Двоичная система на 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;amp;lt;2)break; //выйти, если нужно<BR> }<BR> *sp='0'+a; // записать последнюю цифру<BR> sp++;<BR> *sp=0; // завершить строку нулем (<BR><BR><BR>Спасибо. На C++ тоже пойдет…[sm=2.gif]
Post #: 9
Двоичная система на 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;
Post #: 10
Двоичная система на 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;amp;gt; 0<BR> then result := '1' + result<BR> else result := '0' + result;<BR> end;<BR>end;
—————-




И тебе тоже респект![sm=1.gif]
Post #: 11
Двоичная система на 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>
Post #: 12
Двоичная система на 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]
Post #: 13
Двоичная система на 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 единиц, все работает только надо заставить ее работать чуть быстрее…
Post #: 14
Двоичная система на 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;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 единиц, все работает только надо заставить ее работать чуть быстрее…
—————-





Но это уже в большей части не от исходника зависит.
Post #: 15
Страниц:  [1]
Все форумы >> [Веб-программинг] >> Двоичная система на Delphi







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.