Вопрос задан 01.08.2023 в 03:34.
Предмет Информатика.
Спрашивает Шамшидин Рамазан.
Напишите программу которая будет переводить из 10 системы с счисления в любую другую ( в том числе
должны быть отрицательные числа и не только целые) было бы неплохо ещё засчиту от дебилов(чтобы можно было упасть на клаву и программа не сломалась) очень прошу.Ответы на вопрос
Отвечает Воробьёва Алена.
PascalABC.NET 3.3.5, сборка 1644 от 23.03.2018
Внимание! Если программа не работает, обновите версию!
function DecToa(n:string;k:integer):string;
// Перевод из десятичной системы в систему по основанию k
begin
var s:='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
Result:='';
var PointPos:=Pos('.',n);
var IntPart:integer;
if PointPos>0 then begin // есть дробная часть
var FracPart:=Frac(n.ToReal);
var m:=0;
while True do begin
var r:=FracPart*k;
Result+=s[Trunc(r)+1];
FracPart:=Frac(r);
m+=1;
if (m=15) or (FracPart=0) then break
end;
IntPart:=n[:PointPos].ToInteger;
end
else IntPart:=n.ToInteger;
if Result<>'' then Result:='.'+Result;
while IntPart>0 do begin
Result:=s[IntPart mod k+1]+Result;
IntPart:=IntPart div k
end;
if Result='' then Result:='0';
if Result[1]='.' then Result:='0'+Result
end;
begin
var n:=ReadlnString('Какое число перевести?');
var p:real;
if not real.TryParse(n,p) then Writeln('Такая запись недопустима')
else
if n.Contains('e') or n.Contains('E') then
Writeln('Запись в экспоненциальном формате не разрешена')
else begin
var k:=ReadInteger('Укажите основание системы:');
if k.Between(2,36) then
Writeln(n,'(10) = ',n[1],DecToA(n[2:],k),'(',k,')')
else Writeln('Допустимы основания 2..36')
end
end.
Примеры
Какое число перевести? 123,5433
Такая запись недопустима
Какое число перевести? -353.093234
Укажите основание системы: 21
-353.093234(10) = -GH.1K2951B0DJAH1BI(21)
Какое число перевести? 6523
Укажите основание системы: 8
6523(10) = 61013(8)
Какое число перевести? 1.2e-18
Запись в экспоненциальном формате не разрешена
Внимание! Если программа не работает, обновите версию!
function DecToa(n:string;k:integer):string;
// Перевод из десятичной системы в систему по основанию k
begin
var s:='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
Result:='';
var PointPos:=Pos('.',n);
var IntPart:integer;
if PointPos>0 then begin // есть дробная часть
var FracPart:=Frac(n.ToReal);
var m:=0;
while True do begin
var r:=FracPart*k;
Result+=s[Trunc(r)+1];
FracPart:=Frac(r);
m+=1;
if (m=15) or (FracPart=0) then break
end;
IntPart:=n[:PointPos].ToInteger;
end
else IntPart:=n.ToInteger;
if Result<>'' then Result:='.'+Result;
while IntPart>0 do begin
Result:=s[IntPart mod k+1]+Result;
IntPart:=IntPart div k
end;
if Result='' then Result:='0';
if Result[1]='.' then Result:='0'+Result
end;
begin
var n:=ReadlnString('Какое число перевести?');
var p:real;
if not real.TryParse(n,p) then Writeln('Такая запись недопустима')
else
if n.Contains('e') or n.Contains('E') then
Writeln('Запись в экспоненциальном формате не разрешена')
else begin
var k:=ReadInteger('Укажите основание системы:');
if k.Between(2,36) then
Writeln(n,'(10) = ',n[1],DecToA(n[2:],k),'(',k,')')
else Writeln('Допустимы основания 2..36')
end
end.
Примеры
Какое число перевести? 123,5433
Такая запись недопустима
Какое число перевести? -353.093234
Укажите основание системы: 21
-353.093234(10) = -GH.1K2951B0DJAH1BI(21)
Какое число перевести? 6523
Укажите основание системы: 8
6523(10) = 61013(8)
Какое число перевести? 1.2e-18
Запись в экспоненциальном формате не разрешена
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.
Хорошо, я могу предоставить вам пример простой программы на Python, которая выполняет перевод чисел из десятичной системы счисления в любую другую, включая возможность работы с отрицательными числами и не только целыми.
pythondef convert_to_base(n, base):
digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
if n == 0:
return "0"
result = ""
negative = n < 0
n = abs(n)
while n > 0:
remainder = n % base
result = digits[remainder] + result
n //= base
if negative:
result = "-" + result
return result
def convert_from_base(number, base):
digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
negative = False
if number[0] == "-":
negative = True
number = number[1:]
result = 0
power = 0
for digit in reversed(number):
if digit in digits:
value = digits.index(digit)
result += value * (base ** power)
power += 1
else:
raise ValueError("Invalid digit in number.")
return -result if negative else result
def main():
try:
number = input("Введите число: ")
from_base = int(input("Введите систему счисления исходного числа: "))
to_base = int(input("Введите систему счисления, в которую необходимо перевести число: "))
if from_base < 2 or to_base < 2 or from_base > 36 or to_base > 36:
print("Ошибка: система счисления должна быть в диапазоне от 2 до 36.")
return
decimal_number = convert_from_base(number, from_base)
result = convert_to_base(decimal_number, to_base)
print(f"Результат: {result}")
except ValueError as e:
print("Ошибка: неверный ввод. Проверьте правильность введенных данных.")
if __name__ == "__main__":
main()
Программа запросит у пользователя ввод числа, системы счисления исходного числа и системы счисления, в которую необходимо перевести число. Она будет работать с числами в диапазоне от -2^31 до 2^31-1 и системами счисления от 2 до 36.
Обратите внимание, что ввод числа должен быть в виде строки, например, "101" или "1A7". Также, программа будет обрабатывать некорректный ввод и сообщит об ошибке, если что-то пойдет не так.
Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili
