Возвращение функцией множества - Turbo Pascal
Формулировка задачи:
Всем привет, есть программа написанная на паскальабс и прекрасно там работающая. Но при переносе ее в турбо паскаль, множество set возвращаемое функцией vvod не хочет определяться. А теперь вопрос: Как вернуть множество из функции в турбо паскале?
Текст проги в паскальабс - кому интересно вводит 3 множества х1, х2, х3 мощностью 10(элементов), затем по формуле yy находится множество y, апасля из y вынимается еще одно множество четных чисел:
Листинг программы
- program mnogestva;
- Uses Crt; //грузим модуль
- var
- x1, x2, x3, y: set of 1..100;//объявили три множества содержащие целые числа из диапазона 1..100
- //--------------------функция ввода значений множества------------------------------------
- function vvod(): set of integer;
- var
- mn: set of 1..100; //создаем множество из диапазона 1..100
- b, i: integer;//описываем вспомогательные элементы
- begin
- mn := []; //создаем пустое множесто
- i := 0;
- writeln('Введите значения элементов исходных множеств x1, x2, x3');
- repeat//цикл ввода элементов для множества
- read(b); //вводим значение элемета
- {определяем входит элемент в множество}
- if b in mn then
- begin
- writeln('Tакой элемент уже есть, введите еще раз');
- continue;
- end;
- mn += [b]; //добавляем элемент множеству
- i += 1;
- until i >= 10; //когда мощность равена 10 выходим из цикла
- vvod := mn; //возвращаем множество с мощность=10
- end;
- //-----------------функция формирования нового множества----------------------------
- function yyy(xx1, xx2, xx3: set of integer): set of integer;
- begin
- yyy := (xx1 + xx2) - (xx2 * xx3);
- end;
- //-----------------процедура подсчета подмножества четных чисел и его мощности--------
- procedure chet(yy: set of integer);
- var
- b: integer;
- mn: set of 1..100;
- i: integer;
- begin
- mn := []; i := 0;
- foreach b in yy do //цикл перебора всех элементов множества Y
- begin
- if (b mod 2) = 0 then //если четно
- begin
- mn += [b]; //пишев в множество
- i += 1; //считаем мощность
- end;
- end;
- writeln('Подмножество четных чисел=', mn, ', его мощность =', i); //выводим результат
- end;
- //-----------------основная программа------------------------------------------------
- begin
- Clrscr;
- TextBackground(1);
- {вводим множества x1, х2, х3}
- x1 := vvod();
- x2 := vvod();
- x3 := vvod();
- {выводим множества х1, х2, х3}
- writeln('x1=', x1);
- writeln('x2=', x2);
- writeln('x3=', x3);
- {формируем новое множество у и выводим на экран}
- y := yyy(x1, x2, x3);
- writeln('y=', y);
- {процедура выделения из множества "у" подмножества четных чисел и подсчет его мощности}
- chet(y);
- ReadKey;
- end.
Решение задачи: «Возвращение функцией множества»
textual
Листинг программы
- type
- TRange = 1..100;
- TSet = set of TRange;
- procedure vvod(var s: TSet);
- var e: TRange; n: Integer;
- begin
- s:=[]; n:=0;
- while n<=10 do begin
- Read(e);
- if not (e in s) then begin
- Include(s,e); Inc(n);
- end;
- end;
- end;
Объяснение кода листинга программы
- В начале объявляются типы данных
TRange
иTSet
. - Затем объявляется процедура
vvod
, которая принимает в качестве параметра переменнуюs
типаTSet
. - Внутри процедуры объявляются две переменные
e
иn
типаTRange
иInteger
соответственно. - Затем идет цикл
while
, который выполняется до тех пор, пока значение переменнойn
не превысит 10. - Внутри цикла считывается значение переменной
e
с помощью функцииRead
. - Затем проверяется, содержится ли значение переменной
e
в множествеs
с помощью оператораin
. - Если значение
e
не содержится в множествеs
, то оно добавляется в множество с помощью функцииInclude
. - После этого увеличивается значение переменной
n
на единицу с помощью функцииInc
. - Цикл
while
повторяется до тех пор, пока значение переменнойn
не превысит 10. - По завершении цикла значение переменной
s
будет содержать все уникальные значения из входного множества.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д