Опубликовано 28.06.2018 по предмету Информатика от Гость

Pascal ABC.net - модули
Даны два массива натуральных чисел. В одном из них числа записаны в десятичной системе счисления, в другом — в римской. Выписать числа, которые встречаются и в том, и в другом массиве, или сообщить об их отсутствии. В случае положительного ответа результат представить в римской и десятичной системах счисления.

Решить с использованием модулей с помощью подпрограмм (или несколько подпрограмм), а потом обратиться из своей программы к этому модулю

Ответ оставил Гость

Решение в PascalABC.NET 3.4

*** этот файл мы должны назвать nekkit20.pas ***
*** после его компиляции будет создан модуль ***

unit nekkit20;

type
  tra=(string,integer);

function RomeToArab(s:string):integer;
// Перевод римских чисел (не больших MMMCMXCIX) в арабские
begin
  var ar:='IVXLCDM';
  var aa:=Arr(1,5,10,50,100,500,1000);
  var n:=0;
  Result:=0;
  foreach var c in s do
  begin
    var c1:=n;
    n:=aa[Pos(c,ar)-1];
    Result+=n+(n>c1?-2*c1:0)
  end;
end;

function Equal(r:array of string; a:array of integer):sequence of tra;
// Возвращает последовательность кортежей
// из массива римских чисел (массив r),
// для которых есть соответствие в массиве арабских чисел (массив a) 
begin
  foreach var q in r do
  begin
    var n:=RomeToArab(q);
    if a.IndexOf(n)>-1 then yield((q,n))
  end
end;

end.

*** а это другой файл с любым именем, кроме nekkit20 ***
*** он обращается к молулю nekkit20 ***

uses nekkit20;

begin
  var sr:=Arr('DXVIII','LXIII','MII','XIV','LXXXVIII','CXCVI');
  var ar:=Arr(14,98,196,1002,518,64,87);
  var R:=Equal(sr,ar);
  if R.Count=-1 then Writeln('Нет совпадений')
  else
    foreach var t in R do
      Writeln(t[0],' = ',t[1])
end.

*** Контрольный пример ***

DXVIII = 518
MII = 1002
XIV = 14
CXCVI = 196

Не нашел нужный ответ?

Если ответ по предмету Информатика отсутствует или он оказался неправильным, то попробуй воспользоваться поиском других ответов во всей базе сайта.


Найти другие ответы
Самые новые вопросы