Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2011, 13:44   #1
Едік
Пользователь
 
Регистрация: 27.12.2011
Сообщений: 20
Сообщение перевод числа из шестнадцатеричной системы счисления в десятичную

перевод числа из шестнадцатеричной системы счисления в десятичную (pascal)
Хто знаэ напиш1ть програму!
Срочно нада!
Треба програму!Срочно
Едік вне форума Ответить с цитированием
Старый 27.12.2011, 13:49   #2
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

А в гугле Вас видимо забанили?
Код:
program hex_to_dec;
type binmas = array [1..10000] of integer;
var hex_str:string;
    bin_str:string;
	bin:binmas;
    i,j:longint;
    t,n:int64;
begin
readln (hex_str);

bin_str:='';
for i:=1 to length (hex_str) do
  begin
    case hex_str [i] of
      '0' : bin_str := bin_str + '0000';
      '1' : bin_str := bin_str + '0001';
      '2' : bin_str := bin_str + '0010';
      '3' : bin_str := bin_str + '0011';
      '4' : bin_str := bin_str + '0100';
      '5' : bin_str := bin_str + '0101';
      '6' : bin_str := bin_str + '0110';
      '7' : bin_str := bin_str + '0111';
      '8' : bin_str := bin_str + '1000';
      '9' : bin_str := bin_str + '1001';
      'A' : bin_str := bin_str + '1010';
      'B' : bin_str := bin_str + '1011';
      'C' : bin_str := bin_str + '1100';
      'D' : bin_str := bin_str + '1101';
      'E' : bin_str := bin_str + '1110';
      'F' : bin_str := bin_str + '1111';
     END;
  end;

for j:=1 to length (bin_str) do
  begin
   if ord (bin_str [j]) = ord ('1') then bin [i]:=1
                                    else bin [i]:=0;
   inc (i);
  end;

t:=1;
N:=0;
for j:=i-1 downto 1 do
  begin
    N:=N+bin [j]*t;
    if i <> j then t:=t*2;
  end;
writeln (N);
end.
P.S. Решение не самое красивое, но сами просили побыстрее
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 27.12.2011, 14:15   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

ну, если так уж срочно, то никто не мешает нам воспользоваться тем, что стандартная функция Паскаля VAL "понимает" шестнадцатеричную запись:
Код:
var s : string;
   N : longint;
   kErr : integer;
begin
  WriteLn('Введите шестнадцатеричное число: ');
  Readln(s);
  while Pos(' ',s)>0 do Delete(s,1, Pos(' ',s));
  val('$'+s, N, kErr);
  if kErr<>0 
    then WriteLn('Вы ввели неверное число!')
    else WriteLn('Десятичное число - ',N);
  readln
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.12.2011, 14:22   #4
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

Serge, не знал про такую фичу)
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 27.12.2011, 15:12   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Zer0
не знал про такую фичу)


я думаю, что у этой фичи "ноги растут" отсюда:
Код:
  var  N : integer;
...
  N := $100;
  WriteLn(N);
т.е. компилятор Паскаля в константах "понимает" шестнадцатеричные числа. и отсюда уже полшажка до того, чтобы функция преобразования строки в число тоже это понимала (что борладновцы и сделали)...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.12.2011, 15:41   #6
Едік
Пользователь
 
Регистрация: 27.12.2011
Сообщений: 20
Радость

Zer0 програма вибиває ошибку!
Serge_Bliznykov дуже гарно дякую програма робитЬ!
Вона годиться для здачі практики із нею?
чи треба більш замудронну??
Едік вне форума Ответить с цитированием
Старый 27.12.2011, 16:02   #7
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> Вона годиться для здачі практики із нею?

не думаю, что препод оценит, как ловко вы переложили задание с себя на Val()

http://ideone.com/9alsl
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 27.12.2011, 16:05   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Вона годиться для здачі практики із нею?
ну, не знаю... это от вашего преподавателя зависит. но, боюсь, что может не принять (ибо алгоритма перевода здесь, как такового НЕТ (используется особенность встроенной функции Паскаля).

Но, если сходить внизу в "похожие темы", то легко найти ещё КУЧУ вариантов перевода.

например, попробуйте код от безумного кота ТУТ


ну, или, такой код можно использовать:
Код:
function StrHexToInt(S :  string; var Err : integer) : Longint;
const  Digits : array[0..$F] of Char = '0123456789ABCDEF';
var
  D    : LongInt;
  i, k : integer;
begin
  D := 0;
  Err := 0;
  i := 1;
  while (i<=Length(S)) and (Err=0) do begin
    k := Pos(Upcase(S[i]), Digits);
    if k=0 then Err := i
    else
      D := D * 16 + (k-1);
    inc(i);
  end;
  StrHexToInt := D;
end;


var
  s : string;
  d, err : integer;
begin
  WriteLn;
  Write('Введите число в шестнадцатеричной системе: ');
  ReadLn(s);
  d := StrHexToInt(s, err);
  if err<>0 then WriteLn('Ошибка ввода, число '+s+' не является верной записью шестнад/числа')
  else WriteLn('Десятичное значение числа равно ',d);
  readln;
end.
задачка, с одной стороны - очень простая, с другой - классика жанра.
решений может быть много разных...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.12.2011, 16:12   #9
Едік
Пользователь
 
Регистрация: 27.12.2011
Сообщений: 20
По умолчанию

http://ideone.com/9alsl
цьої програми шо тута я воопше непоняв як вона робить!
обясниш малость??
я ще не такий прошарений
Едік вне форума Ответить с цитированием
Старый 27.12.2011, 16:18   #10
Едік
Пользователь
 
Регистрация: 27.12.2011
Сообщений: 20
По умолчанию

Serge_Bliznykov ця програма шо ти мен1 скинув та тоже робить!
вона врод1 досить сложна я думаю можна її на практику здавати нє?
потяне вона на 4 бала по 5 бальн1й ??
Едік вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод из шестнадцатеричной системы в десятичную AnderoN Общие вопросы Delphi 3 07.05.2011 19:55
Перевод числа из шестнадцатеричной(hex) в десятичную(dec) Alex1991 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 15.11.2010 14:57
си++ перевод числа из шестнадцатиричной системы в десятичную. Bonne Помощь студентам 1 18.04.2010 19:19
си++ перевод числа из двоичной системы в десятичную. Bonne Помощь студентам 1 13.04.2010 22:07
Перевод числа из двоичной системы в десятичную С++ kontroller Помощь студентам 2 15.02.2010 20:39