Вопрос задан 29.07.2023 в 13:09. Предмет Информатика. Спрашивает Серикжанулы Жансерик.

Pascal ABC.net - модули Даны два массива натуральных чисел. В одном из них числа записаны в

десятичной системе счисления, в другом — в римской. Выписать числа, которые встречаются и в том, и в другом массиве, или сообщить об их отсутствии. В случае положительного ответа результат представить в римской и десятичной системах счисления. Решить с использованием модулей спомощью подпрограмм (или несколько подпрограмм), а потом обратиться из своей программы к этому модулю Помогите, завтра последний день !)
0 0
Перейти к ответам

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

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Сагиндик Ботакоз.
Решение в 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

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

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

  1. Создание модуля для работы с числами в десятичной системе счисления (DecimalModule.pas):
pascal
unit DecimalModule; interface function DecimalExists(const decimalArray: array of Integer; decimalNumber: Integer): Boolean; implementation function DecimalExists(const decimalArray: array of Integer; decimalNumber: Integer): Boolean; var i: Integer; begin Result := False; for i := 0 to Length(decimalArray) - 1 do begin if decimalArray[i] = decimalNumber then begin Result := True; Exit; end; end; end; end.
  1. Создание модуля для работы с числами в римской системе счисления (RomanModule.pas):
pascal
unit RomanModule; interface function RomanExists(const romanArray: array of string; romanNumber: string): Boolean; implementation function RomanExists(const romanArray: array of string; romanNumber: string): Boolean; var i: Integer; begin Result := False; for i := 0 to Length(romanArray) - 1 do begin if romanArray[i] = romanNumber then begin Result := True; Exit; end; end; end; end.
  1. Основная программа (MainProgram.pas):
pascal
program MainProgram; uses SysUtils, DecimalModule, RomanModule; const MaxArraySize = 100; var decimalArray: array[0..MaxArraySize - 1] of Integer; romanArray: array[0..MaxArraySize - 1] of string; decimalCount, romanCount: Integer; i: Integer; procedure ReadDecimalArray(var arr: array of Integer; var count: Integer); var i: Integer; begin WriteLn('Введите количество чисел в десятичном массиве:'); ReadLn(count); WriteLn('Введите числа:'); for i := 0 to count - 1 do ReadLn(arr[i]); end; procedure ReadRomanArray(var arr: array of string; var count: Integer); var i: Integer; begin WriteLn('Введите количество чисел в римском массиве:'); ReadLn(count); WriteLn('Введите числа:'); for i := 0 to count - 1 do ReadLn(arr[i]); end; procedure FindCommonNumbers(); var i: Integer; commonDecimal, commonRoman: Boolean; begin WriteLn('Общие числа:'); for i := 0 to decimalCount - 1 do begin commonDecimal := DecimalExists(romanArray, decimalArray[i]); commonRoman := RomanExists(romanArray, IntToStr(decimalArray[i])); if commonDecimal and commonRoman then begin WriteLn('Десятичное: ', decimalArray[i], ', Римское: ', romanArray[i]); end; end; end; begin // Чтение массивов ReadDecimalArray(decimalArray, decimalCount); ReadRomanArray(romanArray, romanCount); // Поиск общих чисел и вывод результатов FindCommonNumbers(); WriteLn('Нажмите Enter для завершения программы.'); ReadLn; end.

В этой программе основная логика работы с числами в десятичной и римской системах счисления вынесена в отдельные модули DecimalModule и RomanModule соответственно. Основная программа MainProgram вызывает функции из этих модулей для выполнения задачи и вывода результата. Не забудьте сохранить каждый модуль в отдельный файл с соответствующим именем (например, DecimalModule.pas и RomanModule.pas), а главную программу сохранив в MainProgram.pas.

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

0 0

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

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

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

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