profile
Опубликовано 6 лет назад по предмету Информатика от nekkit20

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

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

Помогите, завтра последний день !)

  1. Ответ
    Ответ дан DonPedro80
    Решение в 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

    1. Ответ
      Ответ дан DonPedro80
      Ох не с файлами, с массивами
    2. Ответ
      Ответ дан DonPedro80
      А то все время занимают поле для ответа какой то ерундой
    3. Ответ
      Ответ дан DonPedro80
      Готово
    4. Ответ
      Ответ дан DonPedro80
      Проваландался больше часа. Впредь подобное буду только за 50 баллов делать.
    5. Ответ
      Ответ дан nekkit20
      thank you!!
Самые новые вопросы