Написать и протестировать функцию. Функция преобразует десятичную дробь без знака в строку, содержащую его 16-ричное представление.
Например:
Исходное число0.75
Строка результата ‘C’
в delphi
Буду очень благодарна!
Другие языки программирования и технологии
Помогите пожалуйста с задачей в delphi !
Создается 3 объекта:
1. Edit1, который принимает десятичное число типа integer.
2. Edit2, в котором будет показывается преобразованное десятичное число в шестнадцатеричное.
3. Кнопка Button1, после нажатия на которую идет преобразование из Edit1 и записывается результат в виде строки в Edit2.
Следующий код вешается на клик по кнопке:
var i,ost,des,n,l:integer;
s,s1,sbox:string;
begin
des := StrToInt(Edit1.text);
n:=0;
i:=0;
s:='';
repeat
inc(n);
inc(i);
ost:=des mod 16;
des:=des div 16;
if ost>=10 then
begin
if ost=10 then s:=s+'A';
if ost=11 then s:=s+'B';
if ost=12 then s:=s+'C';
if ost=13 then s:=s+'D';
if ost=14 then s:=s+'E';
if ost=15 then s:=s+'F';
end
else
begin
s:=s+IntToStr(ost);
end;
until des=0;
n:=1;
l:=length(s);
for i:=1 to (l div 2) do
begin
sbox:=s[n];
s[n]:=s[l+1-n];
s[l+1-n]:=sbox[1];
inc(n);
end;
Edit2.Text := s;
end;
Исходник можно взять тут и посмотреть поподробнее (протестировать) .
http://zalil.ru/33423750
--------------------------------------------------------------------------------------------------------
Вот примеры работоспособности программы:
123 = 7B
456 = 1C8
789 = 315
123456789 = 75BCD15
1. Edit1, который принимает десятичное число типа integer.
2. Edit2, в котором будет показывается преобразованное десятичное число в шестнадцатеричное.
3. Кнопка Button1, после нажатия на которую идет преобразование из Edit1 и записывается результат в виде строки в Edit2.
Следующий код вешается на клик по кнопке:
var i,ost,des,n,l:integer;
s,s1,sbox:string;
begin
des := StrToInt(Edit1.text);
n:=0;
i:=0;
s:='';
repeat
inc(n);
inc(i);
ost:=des mod 16;
des:=des div 16;
if ost>=10 then
begin
if ost=10 then s:=s+'A';
if ost=11 then s:=s+'B';
if ost=12 then s:=s+'C';
if ost=13 then s:=s+'D';
if ost=14 then s:=s+'E';
if ost=15 then s:=s+'F';
end
else
begin
s:=s+IntToStr(ost);
end;
until des=0;
n:=1;
l:=length(s);
for i:=1 to (l div 2) do
begin
sbox:=s[n];
s[n]:=s[l+1-n];
s[l+1-n]:=sbox[1];
inc(n);
end;
Edit2.Text := s;
end;
Исходник можно взять тут и посмотреть поподробнее (протестировать) .
http://zalil.ru/33423750
--------------------------------------------------------------------------------------------------------
Вот примеры работоспособности программы:
123 = 7B
456 = 1C8
789 = 315
123456789 = 75BCD15
Допустим есть переменная типа integer содержащая десятичное число 123
---
var a:integer;
begin
a:=123;
---
Делим это число на 16 до тех пор пока ответ не будет меньше основания системы счисления, тоесть 16ти
---
var a,b,m:integer;
begin
a:=123;
b:=a div 16;
m:=a mod 16; //остаток от деления
---
123 / 16 = 7 и остаток 11
7 меньше 16 дальше делить нельзя
остается собрать все остатки от деления с конца и если нужно перевести в букву
Вопрос, почему результат нужно получить в виде строки?
потому что шестнадцатеричная система счисления содержит символы ABCDEF
Значит так, остаток у нас один, это число 11
Заменяем число 11 на букву B!
Почему именно B?
числа на буквы нужно заменить в соответствии с этой таблицей
0 - 0
1 - 1
2 - 2
3 - 3
4 - 4
5 - 5
6 - 6
7 - 7
8 - 8
9 - 9
10 - A
11 - B
12 - C
13 - E
14 - F
Результат: десятичная 123 равнается шестнадцатеричной 7B
Там все просто, нужно еще создать переменную C типа string
и после каждого деления на 16, добавлять в переменную С результат деления
c:=c+inttostr(a);
inttostr - переводит число из переменной типа integer в string
Напишу еще пример перевода 10 в 16
Например число 456
456 / 16 = 28 ост. 8
28 / 16 = 1 ост. 12 меняю на С
дальше не делится собираем остатки с конца и берем конечный результат
получится 1С8
---
var a:integer;
begin
a:=123;
---
Делим это число на 16 до тех пор пока ответ не будет меньше основания системы счисления, тоесть 16ти
---
var a,b,m:integer;
begin
a:=123;
b:=a div 16;
m:=a mod 16; //остаток от деления
---
123 / 16 = 7 и остаток 11
7 меньше 16 дальше делить нельзя
остается собрать все остатки от деления с конца и если нужно перевести в букву
Вопрос, почему результат нужно получить в виде строки?
потому что шестнадцатеричная система счисления содержит символы ABCDEF
Значит так, остаток у нас один, это число 11
Заменяем число 11 на букву B!
Почему именно B?
числа на буквы нужно заменить в соответствии с этой таблицей
0 - 0
1 - 1
2 - 2
3 - 3
4 - 4
5 - 5
6 - 6
7 - 7
8 - 8
9 - 9
10 - A
11 - B
12 - C
13 - E
14 - F
Результат: десятичная 123 равнается шестнадцатеричной 7B
Там все просто, нужно еще создать переменную C типа string
и после каждого деления на 16, добавлять в переменную С результат деления
c:=c+inttostr(a);
inttostr - переводит число из переменной типа integer в string
Напишу еще пример перевода 10 в 16
Например число 456
456 / 16 = 28 ост. 8
28 / 16 = 1 ост. 12 меняю на С
дальше не делится собираем остатки с конца и берем конечный результат
получится 1С8
Похожие вопросы
- помогите пожалуйста решить задачу по Delphi
- Помогите плз решить задачу в Delphi.
- Помогите пожалуйста решить задачу в Turbo Delphi.
- помогите пожалуйста составить программу на Delphi/
- помогите пожалуйста решить задачу по работе компьютера!
- Помогите пожалуйста разобрать задачу по програмированию на C++.
- Pascal. Помогите пожалуйста решить задачу в паскале !
- Помогите пожалуйста решить задачу по программированию. В чем я ошибаюсь?
- Помогите пожалуйста с программой на DELPHI
- срочно помогите пожалуйста доделать прогу в delphi!!! дана символьная матрица. подсчитать количество различных элементов