Перевод из 2-ой СС в 10-ую, 8-ую и 7-ую СС - Free Pascal
Формулировка задачи:
Задание таково: перевести ТОЛЬКО из 2-ой СС в 10-ую, 8-ую и 7-ую СС. При этом необходимо по запросу программы ввести бинарный код, а на выходе должны быть сразу 3 результата: в 7-ой, 8-ой и 10-ой СС.
Я накалякал код, но он считает из любой СС по желанию пользователя в любую другую, так же по желанию пользователя, что не соответствует заданию.
Вот, собственно, код:
program ir1;
uses crt;
var cs1,cs2,res,change:integer;
TD:string;
function FromDec(n,r:longint):string;
var
s:string;
const
digit:string[16]='0123456789ABCDEF';
begin
s:='';
repeat
s:=digit[(n mod r)+1]+s;
n:=n div r;
until n=0;
FromDec:=s;
end;
function ToDec(n:string; r:longint):longint;
var
m,i:longint;
const digit:string[16]='0123456789ABCDEF';
begin
m:=0;
while n[1]='0' do delete(n,1,1);
for i:=1 to length(n) do m:=m*r+pos(n[i],digit)-1;
ToDec:=m;
end;
begin
clrscr;
writeln('Из какой СС перевод:');
repeat
readln(cs1);
until
(cs1>=2) and (cs1<=36);
writeln('Введите число соответствующее СС:');
readln(TD);
writeln('Введите в какую СС переводить:');
repeat
readln(cs2);
until
(cs2>=2) and (cs2<=36);
writeln('Перевод из ',cs1,' СС в ',cs2,' СС:');
writeln(FromDec(ToDec(TD,cs1),cs2));
readln
end.Решение задачи: «Перевод из 2-ой СС в 10-ую, 8-ую и 7-ую СС»
textual
Листинг программы
function Convert(k,aD:integer):string;
var t:integer;
c:char;
m:string;
begin
m:='';
While aD<>0 do
begin
t:=aD mod k;
aD:=aD div k;
c:=Char(t+Ord('0'));
Insert(c,m,1);
end;
Convert:=m;
end;
var st,V,S:string;
i,D:integer;
begin
Write('Dvoicnoe = ');
Readln(st);
Writeln;
D:=0;
for i:=1 to Length(st) do
D:=2*D+Ord(st[i])-Ord('0');
V:=Convert(8,D);
S:=Convert(7,D);
Writeln('Desyaticnoe = ',D);
Writeln('Vosmericnoe = ',V);
Writeln('Semericnoe = ',S);
Readln;
end.
Объяснение кода листинга программы
- В коде определена функция Convert, которая принимает два аргумента: k и aD типа integer и возвращает строку.
- Внутри функции определен цикл While, который выполняется до тех пор, пока значение переменной aD не станет равным нулю.
- В каждой итерации цикла значение переменной aD делится на k, а остаток от деления присваивается переменной t.
- Затем значение переменной aD обновляется как результат деления.
- Значение переменной t преобразуется в символ, используя функцию Ord, и добавляется в начало строки m с помощью функции Insert.
- После завершения цикла переменная m возвращается как результат выполнения функции Convert.
- В основной части программы определены три строки: st, V и S, а также две переменные: i и D типа integer.
- Пользователю предлагается ввести двузначное число, и это число считывается в переменную st.
- Затем значение переменной D вычисляется как сумма двойки, умноженная на количество цифр в числе, и вычитается значение '0' в соответствии с полученным символом.
- Значения переменной D затем преобразуются в строки с помощью функции Convert, используя основания 8 и 7, и сохраняются в переменных V и S соответственно.
- Значения переменных D, V и S выводятся на экран.
- Программа завершается, когда пользователь нажимает любую клавишу.