![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 11.06.2008
Сообщений: 2
|
![]()
Я начинающий "Программист" на дельфи, и решил озадачить себя воплащением простейшего арифметически-логического алгоритма в код. Задача такая, перевести двоичное восьмизначное число в десятичное, и так же любое десятичное в двоичное. В форме эксперимента, я взял две тетрады - 8 бит, то есть число не может превысить значение 256, ну и соответсвенно 11111111 в двоичной системе.
начиная с первого бита с правой стороны, начинается отсчёт степеней числа два, и единица стоящая на первом(с правой стороны) месте будет обозначать 2^0=1, второй бит при наличии положительного значения означает 2^1, третий бит соотвественно 2^2, сощитая сумму всех степеней двойки обозначенные в байте единицей, и будет деситизначным значением байта. Вот посмотрите мой алгоритм, да и сам код решения этой задачи.... Делаем калькулятор который будет переводить из двузнака в десятизнак и обратно: unit calcXXX1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type //ну эта батва автаматом тута TForm1 = class(TForm) Edit1: TEdit; Label1: TLabel; Button1: TButton; RadioButton1: TRadioButton; RadioButton2: TRadioButton; Label2: TLabel; procedure RadioButton2Click(Sender: TObject); procedure RadioButton1Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.RadioButton2Click(Sender: TObject); begin label1.caption:='Введите число в двоичной системе'; end; procedure TForm1.RadioButton1Click(Sender: TObject); begin label1.Caption:='Введите число в 10ичной системе'; end; procedure TForm1.Button1Click(Sender: TObject); var sstr:string[8]; sint:integer; sint1:integer; xx:array[1..8] of boolean; n:integer; len:integer; begin if radiobutton1.Checked then begin sint:=strtoint(edit1.text); if sint>256 then showmessage('Ошибка - трансперируемое число не может быть болье 256') else if sint=256 then begin sint:=0; for n:=1 to 8 do begin xx[n]:=true; end; end else begin if sint>=128 then begin xx[8]:=true; sint:=sint-128;sstr:=sstr+'1';end else sstr:=sstr+'0'; if sint>=64 then begin xx[7]:=true; sint:=sint-64;sstr:=sstr+'1';end else sstr:=sstr+'0'; if sint>=32 then begin xx[6]:=true;sint:=sint-32;sstr:=sstr+'1';end else sstr:=sstr+'0'; if sint>=16 then begin xx[5]:=true;sint:=sint-16;sstr:=sstr+'1';end else sstr:=sstr+'0'; if sint>=8 then begin xx[4]:=true;sint:=sint-8;sstr:=sstr+'1';end else sstr:=sstr+'0'; if sint>=4 then begin xx[3]:=true;sint:=sint-4;sstr:=sstr+'1';end else sstr:=sstr+'0'; if sint>=2 then begin xx[2]:=true;sint:=sint-2;sstr:=sstr+'1';end else sstr:=sstr+'0'; if sint=1 then begin xx[1]:=true;sstr:=sstr+'1';end else sstr:=sstr+'0'; label2.caption:=sstr; end end; if radiobutton2.checked then begin len:=length(edit1.Text); if len<>8 then showmessage('неверный формат ввода, вводите двоичное число в 8 символах') else begin sint:=0; sstr:=copy(edit1.text,1,1); sint1:=strtoint(sstr); case sint1 of 1: sint:=sint+128; 0: sint:=sint+0; end; sstr:=copy(edit1.text,2,1); sint1:=strtoint(sstr); case sint1 of 1: sint:=sint+64; 0: sint:=sint+0; end; sstr:=copy(edit1.text,3,1); sint1:=strtoint(sstr); case sint1 of 1: sint:=sint+32; 0: sint:=sint+0; end; sstr:=copy(edit1.text,4,1); sint1:=strtoint(sstr); case sint1 of 1: sint:=sint+16; 0: sint:=sint+0; end; sstr:=copy(edit1.text,5,1); sint1:=strtoint(sstr); case sint1 of 1: sint:=sint+8; 0: sint:=sint+0; end; sstr:=copy(edit1.text,6,1); sint1:=strtoint(sstr); case sint1 of 1: sint:=sint+4; 0: sint:=sint+0; end; sstr:=copy(edit1.text,7,1); sint1:=strtoint(sstr); case sint1 of 1: sint:=sint+2; 0: sint:=sint+0; end; sstr:=copy(edit1.text,8,1); sint1:=strtoint(sstr); case sint1 of 1: sint:=sint+1; 0: sint:=sint+0; end; sstr:=inttostr(sint); label2.Caption:=sstr; end end; end; end. <<<<<<<Комментарии приветствуются, кто как бы , по своему обмутил код?>>>>>> |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
Учите Pascal и обязательно используйте циклы!!!
а вот эта строчка: 0: sint:=sint+0; вообще не нужна (она ничего не делает! |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 22.04.2008
Сообщений: 28
|
![]() Код:
|
![]() |
![]() |
![]() |
#4 |
Новичок
Джуниор
Регистрация: 11.06.2008
Сообщений: 2
|
![]() |
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
ну, во-первых, постом выше GenAcid привёл пример кода с использованием цикла..рекомендую разобраться с ним.
а во вторых, вот, на примере Вашего кода (выделяете повторяющиеся части и смотрите, что надо исправить, чтобы в их можно было бы повторять в цикле: Код:
1) цифры брать не слева направо, а наоборот! тогда можно не проверять, чтобы было ровно восемь цифр. xbase в начале цикла := 1 потом не уменьшается в два раза, а увеличивается в два раза: xbase := xbase * 2 2) и просто просится код... :-)) sint:=sint + xbase*strtoint(copy(edit1.text,n,1) ); и ещё - используйте тэг CODE при оформлении кода!! удачи. |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 24.05.2008
Сообщений: 25
|
![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Необходимо представить десятичное число в двоичном виде | Xardas | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 26.01.2008 00:54 |
Помогите сдать экзамен!!! Нужен код деревьев двоичного поиска и еще 2 програмки | Девчонка | Помощь студентам | 8 | 18.01.2008 19:02 |
ВВести десятичное число N и вывести таблицу чисел от 1 до N и их двоичный эквивалент | XpideX | Общие вопросы C/C++ | 5 | 04.01.2008 19:30 |
как перевести из integer в real(и обратно), и из real в string(и обратно) | Ga-sergey | Общие вопросы Delphi | 2 | 08.06.2007 21:13 |
нужна функция WinApi, которая переводит десятичное число в шестнадцатиричное??? | Morskoivolk | Win Api | 3 | 02.04.2007 18:14 |