Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {Дано число в шестнадцатеричной системе счисления.
- Проверить правильность ввода этого числа.
- При правильном вводе перевести число в десятичную систему счисления.}
- program Gde_to_tam_daleko_est_ty;
- var s,i:integer; c,f:real; h:string;
- {s-счетчик корректно введенных символов; i-для шагов циклов; c-число, переведенное в 10 с.с.;
- f-для получения числа 16 в степени n; h-вводимая строка}
- function Hex1(he:string):boolean;{функция Hex1, принимающая значение типа строкового из основной программы,
- возвращающая значение логического типа}
- begin
- s:=0;{счетчик верно введенных символов обнуляется}
- for i:=1 to length(he) do {цикл от начала до конца строки с шагом в 1 символ}
- if ((ord(he[i])>47) and (ord(he[i])<58)) {если символ входит в диапазон [0..9] или}
- or ((ord(he[i])>64) and (ord(he[i])<71)) {входит в [A..F] или}
- or ((ord(he[i])>96) and (ord(he[i])<103)) {входит в [a..f], то}
- then
- s:=s+1;{счетчик увеличивает значение}
- {если значение счетчика, после выполнения цикла, равно длине строки(все символы строки введены корректно),
- подпрограмма(функция) возвращает в основную программу значение true}
- if s=length(he) then Hex1:=true
- else Hex1:=false;{иначе, false}
- end;{конец описания функции}
- function pow(n:integer):real;{функция возведения числа 16 в степень,
- принимает целочисленные значения, возвращает вещественные}
- begin
- pow:=exp(ln(16)*n);{функция pow возвращает значение экспаненты ln(16), умноженного на принятое значение n}
- end;{конец описания функции}
- begin
- write('Vvedi chislo: ');
- readLN(h); {ввод 16-ричного числа(0..f)}
- c:=0;{зануляем сумму, в которую будем прибавлять переведенные из 16-ричной с.с. цифры}
- if Hex1(h) then {в if сразу вызывается функция проверки числа на правильность ввода.
- если возвращено true, то}
- begin
- for i:=1 to length(h) do {циклом от начала до конца строки каждую цифру переводим
- из 10-ричной с.с и прибавляем к сумме}
- begin
- f:=pow(length(h)-i);{вызов функции возведения в степень,
- передается значение длинны строки минус значение текущего шага цикла}
- if ((ord(h[i])>47) and (ord(h[i])<58)) then {если символ входит в диапазон [0..9]}
- c:=(ord(h[i])-48)*f+c;{к сумме прибавляется число символа-48,
- умноженное на степень 16}
- if ((ord(h[i])>64) and (ord(h[i])<71)) then {если символ входит в [A..F]}
- c:=(ord(h[i])-55)*f+c;
- if ((ord(h[i])>96) and (ord(h[i])<103)) then {если символ входит в [a..f]}
- c:=(ord(h[i])-87)*f+c;
- end;
- writeLN(h,'(16) =',c:10:0,'(10)');{вывод на экран числа в 16-ричной с.с. и в 10-ричной с.с.}
- end
- else writeLN('Ne pravelnuy vvod! =\');{если возвращенное функцией проверки числа на
- корректность значение равно false}
- read;
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement