Вопрос задан 26.07.2023 в 01:24. Предмет Информатика. Спрашивает Кузьминов Никита.

Написать программу в паскале - вводится латинское число (любое) выдать его в текстовой форме,

например вводится( MDCLX\/I ), вадать (тысяча шестьсот шесдисят шесть).
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Ушканова Вика.

Не стал писать проверку на правильность введения римского числа. Так что вводить нужно аккуратно, без ошибок, в верхнем регистре.


var a, stroka:string;

   i,n,t,s,d,e,x : Integer;

   b:array[1..20] of integer;

type slova = array[0..9] of String[15];

const

edinit : slova = ('',' один',' два',' три',' четыре',' пять',' шесть',' семь', ' восемь',' девять');

desyat : slova = ('',' десять',' двадцать',' тридцать',' сорок',' пятьдесят',  ' шестьдесят',' семьдесят',' восемьдесят ',' девяносто');

sotnya : slova = ('',' сто',' двести',' триста',' четыреста',' пятьсот',' шестьсот',' семьсот',' восемьсот',' девятьсот');

teeeen : slova = ('',' одинадцать',' двенадцать',' тринадцать',' четырнадцать', ' пятнадцать',' шестнадцать',' семнадцать',' восемьнадцать', ' девятнадцать');

tyscha : slova = ('','одна тысяча','две тысячи','три тысячи','четыре тысячи','пять тысяч','шесть тысяч','семь тысяч',  'восемь тысяч','девять тысяч');

begin

 writeln('Введите римское число: ');

 readln(a);

{записываем число как сумму арабских эквивалентов в массив}

 for i:=1 to length(a) do

   case a[i] of

     'I': b[i]:=1;

     'V': b[i]:=5;

     'X': b[i]:=10;

     'L': b[i]:=50;

     'C': b[i]:=100;

     'D': b[i]:=500;

     'M': b[i]:=1000;

   end;

{суммируя элементы массива, находим число в 10-м виде}

n:=0;

 for i:=1 to length(a) do

   begin

     n:=n+b[i];

     if(i>1)and( b[i-1]<b[i]) then n:=n-2*b[i-1];  //если меньшая римская цифра идёт перед большей, то она вычитается

   end;

{преобразовываем число в текст}

stroka:='';

t:=n div 1000;

if t>0 then stroka:=stroka+tyscha[t];  

s:=n div 100 mod 10;

stroka:=stroka+sotnya[s];

x:=n mod 100;  

d:=X div 10;  

e:=X mod 10;  

if (d=1) and (e<>0) then stroka:=stroka+teeeen[e]

else stroka:=stroka+desyat[d]+edinit[e];

writeln(stroka);

end.

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Для написания программы на Паскале, которая будет преобразовывать латинское число в текстовую форму, нужно создать процедуру или функцию, которая будет выполнять это преобразование. В данном случае, будем использовать функцию. Ниже представлена примерная реализация программы на Паскале:

pascal
program LatinToText; uses SysUtils; const // Определяем соответствия между латинскими цифрами и их значениями RomanNumerals: array[1..13] of string = ('M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I'); DecimalValues: array[1..13] of integer = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1); function RomanToDecimal(const RomanNumber: string): integer; var i, pos: integer; begin Result := 0; pos := 1; for i := 1 to Length(RomanNumber) do begin if RomanNumber[i] = 'M' then begin Result := Result + 1000; Inc(pos); end else if RomanNumber[i] = 'D' then begin Result := Result + 500; Inc(pos); end else if RomanNumber[i] = 'C' then begin if (pos < Length(RomanNumber)) and (RomanNumber[i + 1] = 'M') then begin Result := Result + 900; Inc(i); end else if (pos < Length(RomanNumber)) and (RomanNumber[i + 1] = 'D') then begin Result := Result + 400; Inc(i); end else Result := Result + 100; Inc(pos); end else if RomanNumber[i] = 'L' then begin Result := Result + 50; Inc(pos); end else if RomanNumber[i] = 'X' then begin if (pos < Length(RomanNumber)) and (RomanNumber[i + 1] = 'C') then begin Result := Result + 90; Inc(i); end else if (pos < Length(RomanNumber)) and (RomanNumber[i + 1] = 'L') then begin Result := Result + 40; Inc(i); end else Result := Result + 10; Inc(pos); end else if RomanNumber[i] = 'V' then begin Result := Result + 5; Inc(pos); end else if RomanNumber[i] = 'I' then begin if (pos < Length(RomanNumber)) and (RomanNumber[i + 1] = 'X') then begin Result := Result + 9; Inc(i); end else if (pos < Length(RomanNumber)) and (RomanNumber[i + 1] = 'V') then begin Result := Result + 4; Inc(i); end else Result := Result + 1; Inc(pos); end; end; end; function DecimalToText(DecimalNumber: integer): string; const // Определяем текстовые формы чисел от 1 до 1000 TextForms: array[1..20] of string = ('один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять', 'десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать', 'двадцать'); TextTens: array[1..9] of string = ('двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто'); TextHundreds: array[1..9] of string = ('сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот'); var TextNumber: string; Hundreds, Tens, Ones: integer; begin TextNumber := ''; Hundreds := DecimalNumber div 100; Tens := (DecimalNumber mod 100) div 10; Ones := DecimalNumber mod 10; if Hundreds > 0 then TextNumber := TextHundreds[Hundreds] + ' '; if DecimalNumber mod 100 <= 20 then TextNumber := TextNumber + TextForms[DecimalNumber mod 100] else begin if Tens > 0 then TextNumber := TextNumber + TextTens[Tens] + ' '; if Ones > 0 then TextNumber := TextNumber + TextForms[Ones]; end; Result := Trim(TextNumber); end; var RomanNumber: string; DecimalNumber: integer; begin Write('Введите латинское число: '); ReadLn(RomanNumber); DecimalNumber := RomanToDecimal(AnsiUpperCase(RomanNumber)); if DecimalNumber > 0 then WriteLn('Текстовая форма числа: ', DecimalToText(DecimalNumber)) else WriteLn('Неверный формат латинского числа.'); ReadLn; end.

Программа предлагает пользователю ввести латинское число, затем она преобразует его в десятичное число, а затем в текстовую форму и выводит результат на экран. Обратите внимание, что данная реализация работает только с числами от 1 до 1000.

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос