Построить массив по правилу - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

На входе даются два целочисленных массива x и y с размером n. Рассматривая массивы как конечные множества нужно построить третий массив z с размером не более 2n, где сам массив z это разность множеств x и y (y=x\y)

Решение задачи: «Построить массив по правилу»

textual
Листинг программы
  1. const m = 16;
  2.  
  3. type set_arr = array [1..m] of integer;
  4.  
  5. procedure read_set(s:string; var x: set_arr; k: integer);
  6. var i, j: integer;
  7.     b: boolean;
  8. begin
  9.   writeln('Введите элементы множества ', s);
  10.   for i := 1 to k do
  11.     repeat
  12.       write(i:2, ': ');
  13.       readln(x[i]);
  14.       b := true;
  15.       for j := 1 to i - 1 do
  16.         if x[i] = x[j]
  17.           then begin
  18.             b := false;
  19.             writeln('Это значение уже есть в множестве, повторите ввод.');
  20.             break
  21.           end;
  22.     until b
  23. end;
  24.  
  25. procedure prn_set(s:string; var x: set_arr; k: integer);
  26. var i: integer;
  27. begin
  28.   write('Элементы множества ', s, ': [');
  29.   if k > 1 then write(x[1]);
  30.   for i := 2 to k do write(', ', x[i]);
  31.   writeln(']')
  32. end;
  33.  
  34. var x, y, z: set_arr;
  35.     i, j, n, q: integer;
  36.     f: boolean;
  37.  
  38. begin
  39.   repeat
  40.     write('n в диапазоне 1..', m, ';  n = ');
  41.     readln(n)
  42.   until (n >= 1) and (n <= m);
  43.   read_set('X', x, n);
  44.   read_set('Y', y, n);
  45.   q := 0;
  46.   for i := 1 to n do
  47.     begin
  48.       f := true;
  49.       for j := 1 to n do
  50.         if x[i] = y[j]
  51.           then begin
  52.             f := false;
  53.             break
  54.           end;
  55.       if f
  56.         then begin
  57.           inc(q);
  58.           z[q] := x[i]
  59.         end
  60.     end;
  61.   prn_set('X', x, n);
  62.   prn_set('Y', y, n);
  63.   prn_set('Z=X\Y', z, q);
  64.   readln
  65. end.

Объяснение кода листинга программы

  1. В коде определена константа m, которая равна 16.
  2. Задано описание типа массива set_arr, который является одномерным массивом, содержащим целые числа, размером от 1 до m.
  3. Определена процедура read_set, которая считывает элементы множества s из стандартного ввода и сохраняет их в массиве x. При этом проверяется уникальность каждого введенного элемента.
  4. Определена процедура prn_set, которая выводит элементы множества s на экран.
  5. В основной части кода определены три массива x, y и z, а также четыре переменные i, j, n и q. Переменная f используется в цикле и инициализируется значением true.
  6. В цикле пользователю предлагается ввести число n в диапазоне от 1 до m.
  7. После корректного ввода числа n вызывается функция read_set, чтобы считать элементы двух множеств x и y по n элементов каждое.
  8. Переменная q инициализируется значением 0 и используется для подсчета количества общих элементов в двух множествах.
  9. В цикле по всем элементам первого множества x проверяется, есть ли такой же элемент во втором множестве y. Если такой элемент найден, то переменная f становится false и цикл прерывается. Если после цикла переменная f осталась true, то это значит, что текущий элемент множества x является общим для обоих множеств и его значение сохраняется в массиве z с индексом q.
  10. После заполнения массива z вызывается функция prn_set, чтобы вывести на экран элементы всех трех множеств.
  11. В конце программы предлагается ввести символ для завершения работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы