PASCAL. String task. Write a program that converts an integer N (1 ≤ |N| < 10^9) from a number system with base K

  • 37
PASCAL. String task. Write a program that converts an integer N (1 ≤ |N| < 10^9) from a number system with base K (2 ≤ K ≤ 36) to a number system with base M (2 ≤ M ≤ 36).

Input: The first input line contains the representation of the number N in a number system with base K. The second line contains the numbers K and M separated by a space.

Output: The program should output the representation of the number N in a number system with base M.

Example:
Input: AB 16 8
Output: 253

Input: -253 8 16
Output: -AB

Input: 1031343142212 5 7
Output: 6601563462
Zhuzha
69
Добро пожаловать в мир программирования!

Для решения этой задачи нам понадобится написать программу на языке Pascal. Программа должна будет принимать входные данные и преобразовывать число из одной системы счисления в другую. Давайте разберемся, как это можно сделать.

\[!\text{Шаг 1:}\]
Прежде всего, нам необходимо прочитать входные данные. В нашем случае, входные данные состоят из трех значений: число N в системе счисления с основанием K, а также значения K и M, разделенные пробелом. Для этого мы должны воспользоваться командой ReadLn, как показано ниже:

\[
\text{{ReadLn}}(N, K, M);
\]

\[!\text{Шаг 2:}\]
В следующем шаге нам нужно преобразовать число N из системы счисления с основанием K в десятичную систему счисления. Это можно сделать с помощью следующего кода:

\[
\text{{decimal\_number}} := 0;
\]
\[
\text{{power}} := \text{{Length}}(N) - 1;
\]
\[
\text{{for}}\ i:= 1\ \text{{to}}\ \text{{Length}}(N)\ \text{{do}}
\]
\[
\begin{{align*}}
\text{{begin}} \\
\text{{if}}\ \text{{N}}[i]\ \text{{in}}\ \text{{["0".."9"]}}\ \text{{then}} \\
\text{{temp}} :=\ \text{{Ord}}(\text{{N}}[i])\ -\ \text{{Ord}}("0") \\
\text{{else}} \\
\text{{temp}} :=\ \text{{Ord}}(\text{{UpCase}}(\text{{N}}[i]))\ -\ \text{{Ord}}("A") +\ 10; \\
\text{{decimal\_number}} :=\ \text{{decimal\_number}}\ +\ \text{{temp}}\ *\ \text{{Round}}(\text{{Power}}(K, power)); \\
\text{{power}} :=\ \text{{power}}\ -\ 1; \\
\text{{end}};
\end{{align*}}
\]

\[!\text{Шаг 3:}\]
Теперь, когда у нас есть число в десятичной системе счисления, нам нужно преобразовать его в систему счисления с основанием M. Это можно сделать с помощью следующего кода:

\[
\text{{result}} :=\ "";
\]
\[
\text{{while}}\ \text{{decimal\_number}} > 0\ \text{{do}}
\]
\[
\begin{{align*}}
\text{{begin}} \\
\text{{remainder}} :=\ \text{{decimal\_number}}\ \%\ M; \\
\text{{decimal\_number}} :=\ \text{{decimal\_number}}\ \div M; \\
\text{{if}}\ \text{{remainder}}\ <\ 10\ \text{{then}}\ \\
\text{{result}} :=\ \text{{Chr}}(\text{{remainder}}\ +\ \text{{Ord}}("0"))\ +\ \text{{result}}\ \\
\text{{else}}\ \\
\text{{result}} :=\ \text{{Chr}}(\text{{remainder}}\ +\ \text{{Ord}}("A")\ -\ 10)\ +\ \text{{result}}; \\
\text{{end}}; \\
\end{{align*}}
\]

\[!\text{Шаг 4:}\]
И наконец, мы должны вывести полученный результат. Для этого воспользуемся командой WriteLn:

\[
\text{{WriteLn}}(\text{{result}});
\]

Полный код программы выглядит следующим образом:

\[
\begin{{align*}}
\text{{program BaseConversion;}} \\
\text{{var}} \\
\text{{N: string;}} \\
\text{{K, M: integer;}} \\
\text{{decimal\_number, power, temp: integer;}} \\
\text{{result: string;}} \\
\text{{remainder: integer;}} \\
\text{{begin}} \\
\text{{ReadLn}}(N, K, M); \\
\text{{decimal\_number := 0;}} \\
\text{{power := Length(N) - 1;}} \\
\text{{for i := 1 to Length(N) do}} \\
\text{{begin}} \\
\text{{if N[i] in ["0".."9"] then}} \\
\text{{temp := Ord(N[i]) - Ord("0")}} \\
\text{{else}} \\
\text{{temp := Ord(UpCase(N[i])) - Ord("A") + 10;}} \\
\text{{decimal\_number := decimal\_number + temp * Round(Power(K, power));}} \\
\text{{power := power - 1;}} \\
\text{{end;}} \\
\text{{result := "";}} \\
\text{{while decimal\_number > 0 do}} \\
\text{{begin}} \\
\text{{remainder := decimal\_number \% M;}} \\
\text{{decimal\_number := decimal\_number div M;}} \\
\text{{if remainder < 10 then}} \\
\text{{result := Chr(remainder + Ord("0")) + result}} \\
\text{{else}} \\
\text{{result := Chr(remainder + Ord("A") - 10) + result;}} \\
\text{{end;}} \\
\text{{WriteLn(result);} \\
\text{{end.}} \\
\end{{align*}}
\]

Теперь, когда вы знаете, как решить эту задачу на языке Pascal, вы можете использовать этот код для написания своей программы. Удачи!