Операции с (над) множествами символьного типа, получение множества по заданному условию - PascalABC.NET

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

Вложение 667205 Задано пять множеств А, В, С, D, E символьного типа. Получить множество Х, которая вычисляется по "формуле 1", если выполняется указанное "Условие", или по "формуле 2", если условие не выполняется. Варианты "условия", "формула 1", "формула 2" и тип множеств указанные в таблице 1. В таблице используются следующие сокращения: обозначения: АВ - А есть подмножество В ("in", "<=" - содержится в) АВ - А не является подмножеством В АВ - А включает в себя В ("> =" - содержит) А  В - А не содержит в себе В А = В - множества А и В равны АВ - множества А и В не равны АВ - объединение множеств А и В АВ - пересечение множеств А и В А \ В - разность множеств А и В А--В - симметрическая разность А и В  - конъюнкция (логическая операция "и") V- дизъюнкция (логическая операция "или") 1). Умова ((АВ)С) V (D=E) 2). Формула 1 A\BCDE 3). Формула 2 ABC--D--E 4). Тип символьний Запись в Pascal 1). ((А+В)<= С) or (D=E) 2). A-B+C+D+E 3). A+B+((C+D+E)-(C*D*E)) 4). char Эту задачу я сделал, но как тип множества численный или отрезок, а нужно как символьный - "char". Есть идеи, как это реализовать? Чтоб выводились всякие символы в множествах РАНДОМНО (буквы например или по таблице символов 866 (ASCII, OEM, DOS)) или брались из файла. Ну и так далее, выполнялись условие (формулы). Помогите пожалуйста поправить код.
type symbol = set of byte;//устанавливаем тип множества
//Type symbol= >set of char;
var
  A, B, C, D, E, X1, X2: symbol ;
begin
  writeln('Условие: (A + B)<=C or (D=E) '); //Условие
  writeln();
  randomize; //заполняем каждое множество случайными значениями
  A:=[random(10)..random(100)+10];
  writeln('Множество А: ', A); //выводим каждое множество
  writeln();
  B:=[random(15)..random(35)+15];
  writeln('Множество B: ', B);
  writeln();
  C:=[random(22)..random(25)+22];
  writeln('Множество C: ', C);
  writeln();
  D:=[random(35)..random(40)+35];
  writeln('Множество D: ', D);
  writeln();
  E:=[random(17)..random(22)+17];
  writeln('Множество E: ', E);
  writeln();
  //A := [1..20];
  //B := [0..15];
  //C := [0..10];
  //D := [0..15];
  //E := [3..21];
    
  if ((A + B) <= C) or (D = E) then //Проверяем соответствует ли решение значению true, если да, то  выполняется следующее условие
  begin
    X1 := A - B + C + D + E;
    writeln('Условие истинно, для вычисления используется формула X1: A-B+C+D+E ');
    //writeln ();
    writeln('Множество X1: ', X1);
  end
  else //если нет - выполняется следующее условие
  begin
    X2 := A + B + ((C + D + E) - (C * D * E));
    writeln('Условие ложно, для вычисления используется формула X2: A+B+((C+D+E)-(C*D*E))');
    //writeln();
    writeln('Множество X2: ', X2);
  end;
end.

Код к задаче: «Операции с (над) множествами символьного типа, получение множества по заданному условию - PascalABC.NET»

textual
begin
  var A, B, C : Set of Char;
  Randomize;
  // Случайными символами
  A := []; for var i := 1 to Random(10, 20) do A += [Chr(Random(Ord('A'), Ord('Z')))];
  B := []; for var i := 1 to Random(10, 20) do B += [Chr(Random(Ord('A'), Ord('Z')))];
  // Диапазоном символов
  C := [ Chr(Random(Ord('A'), Ord('E'))) .. Chr(Random(Ord('G'), Ord('L'))) ];
 
  WriteLn('A = ', A);
  WriteLn('B = ', B);
  WriteLn('C = ', C);
  
  WriteLn('A U B = ', A + B);
  WriteLn('A n B = ', A * B);
end.

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


СОХРАНИТЬ ССЫЛКУ