Jater

Elena_function

Nov 27th, 2012
82
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. {Дано число в шестнадцатеричной  системе счисления.
  2. Проверить правильность ввода этого числа.
  3. При правильном вводе перевести число в десятичную систему счисления.}
  4. program Gde_to_tam_daleko_est_ty;
  5. var s,i:integer; c,f:real; h:string;
  6. {s-счетчик корректно введенных символов; i-для шагов циклов; c-число, переведенное в 10 с.с.;
  7.     f-для получения числа 16 в степени n; h-вводимая строка}
  8.  
  9. function Hex1(he:string):boolean;{функция Hex1, принимающая значение типа строкового из основной программы,
  10.             возвращающая значение логического типа}
  11. begin
  12.     s:=0;{счетчик верно введенных символов обнуляется}
  13.     for i:=1 to length(he) do {цикл от начала до конца строки с шагом в 1 символ}
  14.         if ((ord(he[i])>47) and (ord(he[i])<58)) {если символ входит в диапазон [0..9] или}
  15.         or ((ord(he[i])>64) and (ord(he[i])<71)) {входит в [A..F] или}
  16.         or ((ord(he[i])>96) and (ord(he[i])<103)) {входит в [a..f], то}
  17.         then
  18.             s:=s+1;{счетчик увеличивает значение}
  19. {если значение счетчика, после выполнения цикла, равно длине строки(все символы строки введены корректно),
  20.  подпрограмма(функция) возвращает в основную программу значение true}
  21.     if s=length(he) then Hex1:=true
  22.     else Hex1:=false;{иначе, false}
  23. end;{конец описания функции}
  24.  
  25. function pow(n:integer):real;{функция возведения числа 16 в степень,
  26.                 принимает целочисленные значения, возвращает вещественные}
  27. begin
  28. pow:=exp(ln(16)*n);{функция pow возвращает значение экспаненты ln(16), умноженного на принятое значение n}
  29. end;{конец описания функции}
  30.  
  31. begin
  32.     write('Vvedi chislo: ');
  33.     readLN(h); {ввод 16-ричного числа(0..f)}
  34.     c:=0;{зануляем сумму, в которую будем прибавлять переведенные из 16-ричной с.с. цифры}
  35.     if Hex1(h) then {в if сразу вызывается функция проверки числа на правильность ввода.
  36.             если возвращено true, то}
  37.         begin
  38.         for i:=1 to length(h) do {циклом от начала до конца строки каждую цифру переводим
  39.                     из 10-ричной с.с и прибавляем к сумме}
  40.             begin
  41.             f:=pow(length(h)-i);{вызов функции возведения в степень,
  42.             передается значение длинны строки минус значение текущего шага цикла}
  43.             if ((ord(h[i])>47) and (ord(h[i])<58)) then {если символ входит в диапазон [0..9]}
  44.                 c:=(ord(h[i])-48)*f+c;{к сумме прибавляется число символа-48,
  45.                     умноженное на степень 16}
  46.             if ((ord(h[i])>64) and (ord(h[i])<71)) then {если символ входит в [A..F]}
  47.                 c:=(ord(h[i])-55)*f+c;
  48.             if ((ord(h[i])>96) and (ord(h[i])<103)) then {если символ входит в [a..f]}
  49.                 c:=(ord(h[i])-87)*f+c;
  50.             end;
  51.         writeLN(h,'(16) =',c:10:0,'(10)');{вывод на экран числа в 16-ричной с.с. и в 10-ричной с.с.}
  52.         end
  53.     else writeLN('Ne pravelnuy vvod! =\');{если возвращенное функцией проверки числа на
  54.                 корректность значение равно false}
  55.     read;
  56. End.
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×