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.