Операции с (над) множествами символьного типа, получение множества по заданному условию - 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.
Решение задачи: «Операции с (над) множествами символьного типа, получение множества по заданному условию»
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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д