Jater

Elena_function

Nov 27th, 2012
91
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