Перевести число из произвольной системы исчисления в десятичную- Pascal(Паскаль)

uses crt;
const s:string='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';{цифры до СС 36}
//процедура перевода, к-основание системы, ss-число в этой системе, ch-число в СС 10
procedure ToDec(k:byte;ss:string;var ch:longint);
var c,i,j,os:byte;
    b,b2:string;
begin
c:=length(ss);//кол. цифр в исходном числе
for i:=1 to c do
 begin
  b:=copy(ss,i,1);//очередная цифра
  for j:=1 to 36 do //ищем ее среди всех цифр
   begin
    b2:=copy(s,j,1);
    if b=b2 then os:=j-1; //если есть такая, определяем ее значение в СС 10
   end;
  ch:=k*ch+os;//умножаем уже сформированное число на основание и прибавляе полученное значение
  end;
end;
var ns,k,i,j:byte;
    ss,sp:string;
    n:integer;
begin
clrscr;
repeat
writeln('Введите систему счисления 2..36 ns=');
readln(ns);
until ns in [2..36]; //если ввели правильно
sp:=copy(s,1,ns);//строка для проверки
repeat
writeln('Введите число в СС ',ns,' ss=');
readln(ss);
k:=0;
for i:=1 to length(ss) do //введенная строка
for j:=1 to length(sp) do  //проверочная
if sp[j]=ss[i] then k:=k+1;  //если символ совпал, считаем
if k<length(ss) then writeln('Введено некорректное число, повторите ввод.');
until k=length(ss);//если все совпали, Ок
ToDec(ns,ss,n); //вызываем процедуру
write('Число в СС 10=',n);
readln
end.

Leave a Comment

6 + 4 =