Консультация № 30343
28.11.2005, 00:09
0.00 руб.
0 8 8
Помогите составить программу для перевода числа шестнадцатиричной в десятичную систему исчисления, или киньте ссылку на сайт! Спасибо!

Обсуждение

Неизвестный
28.11.2005, 00:14
общий
это ответ
Здравствуйте, Мордовин Илья!
CONST HEX : ARRAY[‘A‘..‘F‘] OF INTEGER = (10,11,12,13,14,15);
VAR str : String;

Int,
i : integer;
BEGIN

READLN(str);
Int := 0;
FOR i := 1 TO Length(str) DO
IF str[i] < ‘A‘ THEN Int := Int * 16 + ORD(str[i]) - 48
ELSE Int := Int * 16 + HEX[str[i]];
WRITELN(Int);
READLN;
END.
Неизвестный
28.11.2005, 00:16
общий
это ответ
Здравствуйте, Мордовин Илья!
Если шестнадцатиричное число вводить в Edit, например, том можно так:
i:=StrToInt(‘$‘+Edit1.Text);
Неизвестный
28.11.2005, 00:21
общий
это ответ
Здравствуйте, Мордовин Илья!
Как 2 пальца!
procedure TForm1.Button1Click(Sender: TObject);
begin
label1.Caption := IntToStr(StrToInt(‘$4efe41‘)); //5176897
end;
Удачи в кодинге!
Неизвестный
28.11.2005, 00:56
общий
это ответ
Здравствуйте, Мордовин Илья!
Может это Вам поможет?

Приложение:
function HexToInt(S: string): integer;var i,j,k: integer;begin Result:=0; k:=1; for i:=Length(S) downto 1 do begin if S[i] in [‘0‘..‘9‘] then j:=Ord(S[i])-Ord(‘0‘) else if S[i] in [‘A‘..‘F‘] then j:=Ord(S[i])-Ord(‘A‘)+10 else if S[i] in [‘a‘..‘f‘] then j:=Ord(S[i])-Ord(‘a‘)+10 else raise ERangeError.Create(‘Неверный символ ‘‘‘+S[i]+‘‘‘‘); Result:=Result+k*j; k:=k*16; end;end;
Неизвестный
28.11.2005, 04:00
общий
это ответ
Здравствуйте, Мордовин Илья!
Делается это проще простого, все шестнадцатиричные числа в Delphi выгледят $число, а переводить не требуется вывод будет в десятичной(допустим функции)
Неизвестный
28.11.2005, 16:01
общий
это ответ
Здравствуйте, Мордовин Илья!
Вот пример программы. считывающей числа в 16-ричной системе и выводящая, соответствующие им 10-чныеЖ
program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

var
Hex:string;
dec:integer;
begin
readln(Hex);
Dec:=strtoint(‘$‘+Hex); //Собственнно перевод числа
writeln(Dec);
readln;
end.
Неизвестный
28.11.2005, 18:22
общий
это ответ
Здравствуйте, Мордовин Илья!
function HexToDec(Hex: String): Integer;
var i: Integer;
Buf: Integr;
L, Chislo: Integer;
begin
L := Length(Hex);
Buf := 0;
for i := 1 to L do
begin
if Hex[i] = ‘A‘ then
Chislo := 10
else if Hex[i] = ‘B‘ then
Chislo := 11
else if Hex[i] = ‘C‘ then
Chislo := 12
else if Hex[i] = ‘D‘ then
Chislo := 13
else if Hex[i] = ‘E‘ then
Chislo := 14
else if Hex[i] = ‘F‘ then
Chislo := 15
else Chislo := StrToInt(Hex[i]);
Buf := Buf + Chislo * Pow(16, L - i);
end;
Result := Buf;
end;
Вроде все верно. Писал по памяти, не судети плохо.
Неизвестный
29.11.2005, 07:32
общий
это ответ
Здравствуйте, Мордовин Илья!
Могу предложить исходник своего модуля для работы с двоичными и десятичными числами. Если нужны и шестнадцатиричные, и восьмиричные - процесс их перевода очень похож. Если нужно, обращайся, попробую написать и для них.

Приложение:
unit BinDecTranslate;interface{Проверяем, не содержит ли введенное двоичное число другие цифры, кроме 0 и 1}function BinCheck (a: string): boolean;{Проверяем, не содержит ли введенное десятичное число лишних знаков}function DecCheck (a: string): boolean;{Функция будет возвращать результат расчета a в степени b}function power (a,b: integer): integer;{Функция будет выводить максимальную целую степень двойки для данного числа}{Это нужно при переводе из десятичной в двоичную систему вычитанием степеней}function MaxPower (a: integer): integer;{Функция будет переводить числа из двоичной системы счисления в десятичную}functi[/b]on BinToDec (b: string): real;{Функция будет возвращать двоичную строку, соответвтвующую десятничному числу}function DecToBin (d: integer): string;implementation{------------------------------------------------------------------------------}function BinCheck (a: string): boolean;var i: word; {счетчик цикла}beginBinCheck := true; {сначала будет считаться, что число введено правильно}for i := 1 to length(a) do {затем проверяем каждый символ…}if (ord(a[i])<48) or (ord(a[i])>49) then BinCheck := false; {…по ASCII-коду}{и если хоть один из них отличен от 0 или 1, то функции присваиваем false}end;{------------------------------------------------------------------------------}function DecCheck (a: string): boolean;var i: word; {счетчик цикла}beginDecCheck := true; {сначала будет считаться, что число введено правильно}for i := 1 to length(a) do {затем проверяем каждый символ}if (ord(a[i])<48) or (ord(a[i])>57) then DecCheck := false;{и если хоть один из них отличен десятичных цифр, то функции присваиваем false}end;{------------------------------------------------------------------------------}function power (a,b: integer): integer;var i: integer; {это у нас будет счетчиком цикла}res: integer; {а это - промежуточный результат}beginres := 1; {ведь есть истина - любое число в нулевой степени равно единице!}for i := 1 to b do res := res*a; {вот и возведение в степень}power := res; {осталось лишь присвоить функции значение результата}if a=0 then power := 0; {любая степень нуля будет равна нулю}end;{------------------------------------------------------------------------------}function MaxPower (a: integer): integer;var i: word; {это счетчик цикла repeat…until}temp: integer; {промежуточный результат}begini := 0;repeat i := i+1; {будем увеличивать степень до тех пор…}temp := power(2,i);until temp > a; {…пока значение двойки в следующей степени не превысит число}MaxPower := i-1;end;{------------------------------------------------------------------------------}function BinToDec (b: string): real;var i, temp, pow: word; {значит так, здесь - счетчик, разряд (он будет выделятьсяиз двоичной строки) и степень двойки}res: real; {ну а это результат, как и в предыдущей функции}beginres := 0; {начальное значение результата}pow := 0; {степень двойки при первом разряде - нулевая}for i := length(b) downto 1 do {выделяем последовательно все разряды...}begintemp := StrToInt(b[i]); {...}res := res + temp*power(2,pow); {...и рассчитываем результат}pow := pow + 1; {степень двойки увеличим, т.к. номер разряда увеличивается}end;BinToDec := res; {опять-таки присваиваем функции значение результата}end;{------------------------------------------------------------------------------}function DecToBin (d: integer): string;var m, t: integer; i: integer; {максимальная степень, промежуточное число и счетчик}res: string; temp: char; {результат и промежуточные символы}begint := d; {присваиваем t само число, которое нужно перевести}res := ‘‘; {результат сначала будет равен пустой строке, т.к. его еще нет :)}m := MaxPower(d); {максимальная степень двойки для числа переводимого числа…}for i := m downto 0 do {…от нее и будем начинать обратный отсчет}begin{если i-тая степень двойки меньше, чем промежуточное число, то…}if power(2,i)<=t then temp := ‘1‘ else temp := ‘0‘; {добавляем 1, иначе - 0}{и вычитаем из числа другое число: 2 в степени i}{например, макс. степень двойки для 114 – это 6. Тогда отнимаем От 114 2 в степени 6. 114-64=50. Макс. степень этого нового числа находится при следующем прохождении цикла} if power(2,i)<=t then t := t-power(2,MaxPower(t));res := res+temp; {добавляем к результату полученный символ: 0 или 1}end;DecToBin := res; {после цикла результат готов}end;end.
Форма ответа