mnoshtext
.docТип данных множество
Множество определяют как совокупность (набор) однотипных логически связанных друг с другом элементов. Характер связей между элементами подразумевается программистом, но никак не контролируется.
Описание типа множества выглядит следующим образом:
Type <имя типа>=set of <базовый тип>;
Количество элементов в множестве (мощность множества) может находиться в интервале от 0 до 256. Это определяется внутренним представлением элементов множества: вхождение элемента в множество определяется значением двоичного разряда (бита). Нулевое значение означает, что соответствующий элемент отсутствует в множестве, единичное значение означает, что элемент присутствует в множестве. Для хранения этой информации всегда отводится 32 байта (256 бит) и нумерация ведется от 0 до 255, поэтому всегда в множестве могут присутствовать элементы с номерами, лежащими в указанном диапазоне (от 0 до 255).
Способ представления элементов множества самым существенным образом влияет на выбор базового типа множества. В качестве базового типа может фигурировать, во-первых, только порядковый тип, во-вторых, тип, у которого максимальный номер элемента не превышает значения, равного 255. Таким образом, в качестве базового типа могут выступать только следующие типы: Byte, Boolean, Char, перечисляемый тип с количеством элементов не более 256.
В множестве элементы повторяться не могут.
Примеры правильных описаний типов:
Type Mn1=set of Byte;
Mn2=set of Boolean;
Mn3=set of Char;
Mon=(jan,feb,mar,apr,mai,jun,jul,aug,sep,okt,nov,dez);
Mn4=set of Mon;
Пример неправильного описания типа:
Mn5=set of 2..257;
В последнем случае формально количество элементов равно 256, но элементы имеют значения от 2 до 257, для представления элементов со значениями 256, 257 в множестве просто отсутствует место, так как нумерация элементов ведется с нуля и первые два бита не будут задействованы, а для представления двух последних значений не хватит разрядов.
Для задания множества используется конструктор множества – квадратные скобки, в которых размещается через запятую список спецификаций элементов множества. Спецификациями элементов могут быть константы или выражения базового типа или тип-диапазон того же базового типа. Множество может быть пустым, в этом случае внутри квадратных скобок спецификации отсутствуют.
Пример:
Var A:Mn1; B:Mn2; C:Mn3; D:Mn4;
Begin
A:=[0,22..40, 50+K div 2..88,250,255];
B:=[true];
C:=[Chr(10)..Chr(15),'A'..'G', 'К'.. 'Я', '%', '#'];
D:=[jan,mar,jun..aug,dez];
A:=[]; //пустое множество
……
End.
Над множествами допускается выполнять следующие операции.
Пересечение множеств, обозначается символом * (звездочка). Результатом выполнения этой операции является множество, включающее общие элементы двух множеств. Например, var A1,A2,A3:Mn1; A1:=[2,3,4,7..10]; A2:=[3,7,9,12,13]; A3:=A1*A2; В результате множество A3 будет содержать следующие элементы [3,7,9].
Объединение множеств, обозначается символом + (плюс). Результатом выполнения объединения двух множеств является множество, состоящее из элементов обоих множеств, т.е. элементы первого множества дополняются теми элементами второго множества, которых нет в первом. Если выполнить объединение A3:=A1+A2 множеств из предыдущего примера, то получим множество [2,3,4,7..10,12,13].
Разность множеств, обозначается символом – (минус). Результатом выполнения этой операции является множество, состоящее из элементов первого множества, которых нет во втором. Например, в результате выполнения оператора A3:=A1-A2; получим множество, состоящее из следующих элементов [2,4,8,10].
Операции отношения. Проверка эквивалентности двух множеств, обозначается символом = (равенство). Результат операции истина, если два множества содержат одинаковые элементы, и ложь, если два множества содержат неодинаковые элементы. Например, var B:Boolean; B:=A1=A2; переменная B получит значение false. Если же выполнить оператор B:=[1,3,..9]=[1,3,..9]; переменная B получит значение true.
Проверка неэквивалентности двух множеств, обозначается символами <> (символы меньше, больше). Результат операции истина, если два множества содержат несовпадающие элементы, и ложь, если множества содержат одинаковые элементы. Например, после выполнения оператора присваивания B:=A1<>A2; переменная B получит значение true. Если же выполнить оператор B:=[1,3,..9]<>[1,3,..9]; переменная B получит значение false.
Проверка вхождения первого множества во второе, обозначается символами <= (символы меньше, равно). Результат операции истина, если все элементы первого множества присутствую во втором, и ложь, если не все элементы первого множества присутствуют во втором множестве. Например, если A1:=[2,3,4,7..10]; A2:=[2,3..5,7..13]; , то результатом выполнения оператора B:=A1<=A2; будет true. Если A1:=[2,3,4,7..10]; A2:=[2,3..5,7..9]; , то результатом выполнения оператора B:=A1<=A2; будет false.
Проверка вхождения второго множества в первое, обозначается символами >= (символы больше, равно). Результат операции истина, если все элементы второго множества присутствуют в первом, и ложь, если не все элементы второго множества присутствуют в первом множестве. Например, если A1:=[2,3,4,7..10]; A2:=[2,3,7..9]; , то результатом выполнения оператора B:=A1>=A2; будет true. Если A1:=[2,3,4,7..10]; A2:=[2,3..5,7..9]; , то результатом выполнения оператора B:=A1>=A2; будет false.
Проверка вхождения элемента в множество, обозначается in. Первый операнд операции – выражение того же базового типа, что и базовый тип множества, являющегося вторым операндом. Результат выполнения операции истина, если элемент входит в множество, и ложь, если элемент отсутствует в множестве. Например, после выполнения оператора B:=5+6 div 2 in A1; переменная B получит значение true (A1:=[2,3,4,7..10];). Если будет выполнен оператор B:=5+6 div 2-7 in A1;, то переменная B получит значение false.
Для работы с множествами предназначены две процедуры. Процедура Include(M,L); позволяет включить в множество M элемент L. Элемент L должен принадлежать тому же типу, что и базовый тип множества M.
Процедура Exclude(M,L); позволяет исключить из множества M элемент L. Элемент L должен принадлежать тому же типу, что и базовый тип множества M.
Значения множественного типа нельзя вводить и выводить. Выход из положения состоит в том, что можно вводить значения элементов множества (если они не принадлежат перечисляемому или булевскому типу) и включать затем их в множество.
Вывод элементов множества можно организовать путем проверки принадлежности всех возможных значений, которые могут образовывать множество рассматриваемого типа, в множество и выводить очередное значение в случае его вхождения в множество. Ввод и вывод элементов множества демонстрирует следующий фрагмент программы:
type Mn=set of char;
var M1:Mn;
Ch:char;
begin
M1:=[];
Writeln(Rus('Введите символ'));
ReadLn(Ch);
Ch:=RusIn(Ch);
while Ch<>'?' do
begin
M1:=M1+[Ch];
writeln(Rus('Введите символ'));
readLn(Ch);
Ch:=RusIn(Ch);
end;
for Ch:=Chr(0) to Chr(255) do
if Ch in M1 then Write(Rus(Ch));
end.
В приведенном фрагменте ввод символов (элементов множества) производится до тех пор, пока не будет введен символ вопросительного знака. В качестве символа-признака окончания ввода можно выбрать любой символ, вводимый с клавиатуры. Можно при вводе каждый раз выводить пользователю запрос о продолжении ввода, но это неудобно, так как вместо одного символа требуется вводить два символа – ответ на запрос и сам вводимый символ.
repeat
writeln(Rus('Введите символ'));
readLn(Ch);
Ch:=RusIn(Ch);
M1:=M1+[Ch];
writeln(Rus('Продолжить ввод (Y/N)'));
Ch:=RusIn(Ch);
until UpCase(Ch)<>’Y’;
Поскольку множество может содержать максимально 256 элементов, то сфера применения этого типа данных достаточно ограничена. Наиболее удачной сферой применения множеств является использование их при обработке символьных и строковых данных.
Пример 1 использования множеств. Найти в строке все символы, которые встретились в ней ровно по два раза. Найденные символы распечатать в алфавитном порядке, алгоритм упорядочения не использовать.
При написании программы будем использовать три множества. Первое множество будут образовывать все символы, которые присутствуют в строке. Второе множество будет содержать только те символы, которые встретились не менее двух раз. В третьем множестве будут присутствовать те символы, которые встретились в строке более, чем по два раза. Во второе множество очередной символ строки заносится только в том случае, если он присутствует в первом множестве и отсутствует во втором. Если анализируемый символ строки уже присутствует во втором множестве, это означает, что он встретился более, чем во второй раз, и заносится в третье множество. Результирующее множество символов получается в результате вычитания третьего множества из второго.
program mnosh2;
{$APPTYPE CONSOLE}
uses
SysUtils;
type Mn=set of char;
Var A,B,C:Mn;
Ch:char;
S:string;
I,N:integer;
function Rus(S:String):String;
var I:Byte;
begin
Result:='';
for I:=1 to Length(S) do
case S[I] of
'А'..'п': Result:=Result+Chr(Ord(S[I])-64);
'р'..'я': Result:=Result+Chr(Ord(S[I])-16);
'Ё': Result:=Result+Chr(240);
'ё': Result:=Result+Chr(241);
else
Result:=Result+S[I];
end;
end;
function RusIn(S:String):String;
var I:Integer;
begin
Result:='';
for I:=1 to Length(S) do
case Ord(S[I]) of
128..175: Result:=Result+Chr(Ord(S[I])+64);
224..239: Result:=Result+Chr(Ord(S[I])+16);
240: Result:=Result+Chr(168);
241: Result:=Result+Chr(184);
else
Result:=Result+S[I];
end;
end;
begin
A:=[];
B:=[];
C:=[];
WriteLn(Rus('Введите строку'));
ReadLn(S);
S:=RusIn(S);
N:=Length(S);
for I:=1 to N do
begin
if S[I] in A then
if not(S[I] in B) then B:=B+[S[I]]
else C:=C+[S[I]]
else A:=A+[S[I]];
end;
B:=B-C;
WriteLn(Rus('Символы, встретившиеся ровно по два раза в строке'));
for Ch:=Chr(0) to Chr(255) do
if Ch in B then Write(Rus(Ch));
Readln;
end.
Пример 2 использования множеств. Во втором примере рассмотрим использование множеств для работы с числовыми (целыми) значениями. Задача состоит в том, чтобы определить все простые числа из заданного диапазона целых чисел, причем максимальное число не должно превышать 3000.
Для определения простых чисел можно использовать алгоритм, названный решетом Эратосфена. Для этого сначала следует сформировать множество всех целых чисел в диапазоне от 1 до n, где n – максимальное число. Во второе множество заносятся простые числа. Для этого в него сначала помещаются два первых простых числа 1 и 2. Из исходного множества исключаются эти числа и все другие числа, кратные двум. Затем в исходном множестве находится минимальное число, которое является следующим простым числом. Это число включается в результирующее множество, а из исходного множества опять исключаются все числа, кратные найденному, включая само это число. Описанная процедура повторяется до тех пор, пока исходное множество не станет пустым.
Для решения поставленной задачи необходимо использовать массив множеств, так как все исходные числа не могут быть представлены в одном множестве. Если в одном множестве будут представлены mm чисел, то всего потребуется ]3000/mm[ элементов (множеств) массива. В этом случае j-ый элемент i-го множества будет соответствовать числу (i-1)*mm+j.
{Определение простых чисел в диапазоне от 0 до 3000}
program mnosh3;
{$APPTYPE CONSOLE}
uses
SysUtils;
const Mm=255;// количество значений, заносимых в множество
Nn=3000 div Mm +1;//количество элементов в массиве
type Mn=set of 1..Mm;
Mas=array[1..Nn] of Mn;
var A,B:mas;// массивы исходного и получаемого множества чисел
I,J,N,K,L,M,Kb,Ib,Jb,S,Si,Sj,Kp:integer;
function Rus(S:String):String;
var I:Byte;
begin
Result:='';
for I:=1 to Length(S) do
case S[I] of
'А'..'п': Result:=Result+Chr(Ord(S[I])-64);
'р'..'я': Result:=Result+Chr(Ord(S[I])-16);
'Ё': Result:=Result+Chr(240);
'ё': Result:=Result+Chr(241);
else
Result:=Result+S[I];
end;
end;
begin
WriteLn(Rus('Введите максимальное число диапазона (не более 3000)'));
ReadLn(N);
WriteLn('N=',N:4);
//цикл присваивания начальных значений массивам множеств
for I:=1 to Nn do
begin
A[I]:=[];
B[I]:=[];
end;
{формирование массива множеств из чисел заданного диапазона}
K:=N div Mm;//количество используемых элементов массива мно-
//жеств
L:=N mod Mm;//количество чисел в последнем элементе массива
//множеств
//цикл заполнения исходного массива множеств
for I:=1 to K do
for J:=1 to Mm do
A[I]:=A[I]+[J];
//цикл заполнения последнего элемента исходного массива мно-
//жеств
if L<>0 then //L – количество элементов в последнем множестве
for I:=1 to N-K*Mm do //N-K*Mm-количество элементов в
//предыдущих элементах массива множеств
A[K+1]:=A[K+1]+[I];
{Печать чисел исходного множества}
WriteLn(Rus('Исходное множество'));
for I:=1 to K do
for J:=1 to Mm do
if J in A[I] then Write((I-1)*Mm+J:4,' ');
if L<>0 then
for I:=1 to N-K*Mm do
if I in A[K+1] then Write((K*Mm+I):4,' ');
ReadLn;
//Поиск простых чисел
B[1]:=B[1]+[1];//добавление единицы в результат
A[1]:=A[1]-[1];//удаление единицы из исходного множества
M:=2; //очередное простое число
if L<>0 then K:=K+1;//количество непустых элементов массива A
while A[K]<>[ ] do //цикл поиска простых чисел (пока исходное
begin //множество не станет пустым
S:=M; //установка начального значения очередного удаляемого
//из исходного множества числа
while S<=N do //цикл удаления из исходного множества
begin //непростых чисел
Si:=S div Mm; //номер элемента массива множеств, содержа-
//щего удаляемый элемент
Sj:=S mod Mm; //номер удаляемого элемента в множестве
if Sj=0 then A[Si]:=A[Si]-[Mm] //исключение числа из
else A[Si+1]:=A[Si+1]-[Sj];//исходного множества
S:=S+M; //вычисление очередного удаляемого числа
end;
Ib:=M div Mm;//номер элемента массива множеств для добавле-
//ния очередного простого числа
Jb:=M mod Mm;// номер добавляемого элемента в множестве
if Jb=0 then B[Ib]:=B[Ib]+[Mm] //добавление простого числа
else B[Ib+1]:=B[Ib+1]+[Jb];//в множество-результат
repeat // цикл нахождения минимального числа, содержащегося
M:=M+1;// в исходном множестве – нового простого числа
Si:=M div Mm;
Sj:=M mod Mm;
if Sj=0 then I:=Si else I:=Si+1;
until (M>N)or(Sj in A[I]);
end;
{Печать полученного множества}
WriteLn(Rus('Простые числа из заданного диапазона'));
for I:=1 to Ib do
begin
for J:=1 to Mm do
if J in B[I] then Write((I-1)*Mm+J:4,' ');
ReadLn;
end;
if Jb<>0 then
for J:=1 to Mm do
if J in B[Ib+1] then Write (Ib*Mm+J:4,' ');
WriteLn;
ReadLn;
end.
Задания на обработку множеств
Вариант 1
Подсчитать по каждой строке символьной матрицы S(N,M), N<=12, M<=15 количество символов, входящих в множество символов Z, которое вводится с клавиатуры. Упорядочить строки матрицы по убыванию количества подсчитанных символов. Новых матриц не вводить. Отпечатать исходную, преобразованную матрицы и введенное множество символов. Ввод и вывод матриц осуществлять в виде матриц.
Вариант 2
Даны две символьные матрицы A(N,M), B(K,L), N<=15, M<=12, K<=14, L<=13. Получить множество символов, одновременно присутствующих в обеих матрицах. Из полученного множества составить одномерный массив, упорядоченный по алфавиту. Отпечатать исходные матрицы и полученный массив. Ввод и вывод матриц осуществлять в виде матриц.
Вариант 3
Даны две символьные матрицы C(N,M), D(K,L), N<=15, M<=12, K<=14, L<=13. Получить множество символов, присутствующих в первой матрице, но отсутствующих во второй матрице. Из полученного множества составить одномерный массив, который упорядочить по алфавиту. Отпечатать исходные матрицы и полученный массив. Ввод и вывод матриц осуществлять в виде матриц.
Вариант 4
Даны две символьные матрицы E(N,M), F(K,L), N<=15, M<=12, K<=14, L<=13. Получить множество символов, присутствующих либо в первой матрице, либо во второй матрице. Из полученного множества составить одномерный массив, который упорядочить по алфавиту. Отпечатать исходные матрицы и полученный массив. Ввод и вывод матриц осуществлять в виде матриц.
Вариант 5
Подсчитать по каждой строке символьной матрицы S(N,M), N<=12, M<=15 количество символов, входящих в множество символов Z, которое вводится с клавиатуры. Упорядочить строки матрицы по возрастанию количества подсчитанных символов. Новых матриц не вводить. Отпечатать исходную, преобразованную матрицы и введенное множество символов. Ввод и вывод матриц осуществлять в виде матриц.
Вариант 6
Дана символьная матрица V(M,N), M<=14, N<=16. С клавиатуры вводятся два множества символов M1 и M2. Сформировать из матрицы одномерный массив символов, принадлежащих пересечению двух введенных множеств, который должен быть упорядочен по алфавиту. Отпечатать исходную матрицу, введенные множества символов, полученный массив символов. Ввод и вывод матрицы осуществлять в виде матрицы.
Вариант 7
Дана символьная матрица V(M,N), M<=14, N<=16. С клавиатуры вводятся два множества символов M1 и M2. Сформировать из матрицы одномерный массив символов, принадлежащих объединению двух введенных множеств, который должен быть упорядочен по алфавиту. Отпечатать исходную матрицу, введенные множества символов, полученный массив символов. Ввод и вывод матрицы осуществлять в виде матрицы.
Вариант 8
Подсчитать по каждой строке символьной матрицы S(N,M), N<=12, M<=15 количество символов, не входящих в множество символов Z, которое вводится с клавиатуры. Упорядочить строки матрицы по возрастанию количества подсчитанных символов. Новых матриц не вводить. Отпечатать исходную, преобразованную матрицы и введенное множество символов. Ввод и вывод матриц осуществлять в виде матриц.
Вариант 9
Подсчитать по каждому столбцу символьной матрицы S(N,M), N<=12, M<=15 количество символов, входящих в множество символов Z, которое вводится с клавиатуры. Упорядочить столбцы матрицы по возрастанию количества подсчитанных символов. Новых матриц не вводить. Отпечатать исходную, преобразованную матрицы и введенное множество символов. Ввод и вывод матриц осуществлять в виде матриц.
Вариант 10
Подсчитать по каждому столбцу символьной матрицы S(N,M), N<=12, M<=15 количество символов, не входящих в множество символов Z, которое вводится с клавиатуры. Упорядочить столбцы матрицы по возрастанию количества подсчитанных символов. Новых матриц не вводить. Отпечатать исходную, преобразованную матрицы и введенное множество символов. Ввод и вывод матриц осуществлять в виде матриц.
Вариант 11
Даны две символьные матрицы A(N,M), B(K,L), N<=15, M<=12, K<=14, L<=13. Получить множество символов, одновременно присутствующих в обеих матрицах. Из полученного множества составить одномерный массив, упорядоченный в порядке, обратном алфавитному. Отпечатать исходные матрицы и полученный массив. Ввод и вывод матриц осуществлять в виде матриц.
Вариант 12
Даны две символьные матрицы C(N,M), D(K,L), N<=15, M<=12, K<=14, L<=13. Получить множество символов, присутствующих в первой матрице, но отсутствующих во второй матрице. Из полученного множества составить одномерный массив, который упорядочить в порядке, обратном алфавитному. Отпечатать исходные матрицы и полученный массив. Ввод и вывод матриц осуществлять в виде матриц.
Вариант 13
Даны две символьные матрицы E(N,M), F(K,L), N<=15, M<=12, K<=14, L<=13. Получить множество символов, присутствующих либо в первой матрице, либо во второй матрице. Из полученного множества составить одномерный массив, который упорядочить в порядке, обратном алфавитному. Отпечатать исходные матрицы и полученный массив. Ввод и вывод матриц осуществлять в виде матриц.
Вариант 14
Подсчитать по каждой строке символьной матрицы S(N,M), N<=12, M<=15 количество символов, входящих в множество символов Z, которое вводится с клавиатуры. Упорядочить строки матрицы по убыванию количества подсчитанных символов. Новых матриц не вводить. Отпечатать исходную, преобразованную матрицы и введенное множество символов. Ввод и вывод матриц осуществлять в виде матриц.
Вариант 15
Дана символьная матрица V(M,N), M<=14, N<=16. С клавиатуры вводятся два множества символов M1 и M2. Сформировать из матрицы одномерный массив символов, принадлежащих пересечению двух введенных множеств, который должен быть упорядочен в порядке, обратном алфавитному. Отпечатать исходную матрицу, введенные множества символов, полученный массив символов. Ввод и вывод матрицы осуществлять в виде матрицы.
Вариант 16
Дана символьная матрица V(M,N), M<=14, N<=16. С клавиатуры вводятся два множества символов M1 и M2. Сформировать из матрицы одномерный массив символов, принадлежащих объединению двух введенных множеств, который должен быть упорядочен в порядке, обратном алфавитному. Отпечатать исходную матрицу, введенные множества символов, полученный массив символов. Ввод и вывод матрицы осуществлять в виде матрицы.
Вариант 17
Подсчитать по каждой строке символьной матрицы S(N,M), N<=12, M<=15 количество символов, не входящих в множество символов Z, которое вводится с клавиатуры. Упорядочить строки матрицы по убыванию количества подсчитанных символов. Новых матриц не вводить. Отпечатать исходную, преобразованную матрицы
и введенное множество символов. Ввод и вывод матриц осуществлять в виде матриц.
Вариант 18
Подсчитать по каждому столбцу символьной матрицы S(N,M), N<=12, M<=15 количество символов, входящих в множество символов Z, которое вводится с клавиатуры. Упорядочить столбцы матрицы по убыванию количества подсчитанных символов. Новых матриц не вводить. Отпечатать исходную, преобразованную матрицы и введенное множество символов. Ввод и вывод матриц осуществлять в виде матриц.
Вариант 19
Подсчитать по каждому столбцу символьной матрицы S(N,M), N<=12, M<=15 количество символов, не входящих в множество символов Z, которое вводится с клавиатуры. Упорядочить столбцы матрицы по убыванию количества подсчитанных символов. Новых матриц не вводить. Отпечатать исходную, преобразованную матрицы и введенное множество символов. Ввод и вывод матриц осуществлять в виде матриц.
Вариант 20
Подсчитать по каждой строке символьной матрицы S(N,M), N<=12, M<=15 количество символов, входящих в множество А1, в множество А2 и принадлежащих пересечению множеств А1 и А2 (множества символьные, элементы множеств вводятся с клавиатуры). Полученные количества записать в матрицу К(N,3). Упорядочить строки матрицы по убыванию количества символов, входящих в пересечение множеств. Новых матриц не вводить. Отпечатать исходную, преобразованную матрицы и введенные множества символов. Ввод и вывод матриц осуществлять в виде матриц.
Вариант 21
Подсчитать по каждой строке символьной матрицы S(N,M), N<=12, M<=15 количество согласных букв, не входящих в множество символов Z, которое вводится с клавиатуры. Упорядочить строки матрицы по возрастанию количества подсчитанных символов. Новых матриц не вводить. Отпечатать исходную, преобразованную матрицы и введенное множество символов. Ввод и вывод матриц осуществлять в виде матриц.
Вариант 22
Подсчитать по каждой строке символьной матрицы S(N,M), N<=12, M<=15 количество небуквенных символов, входящих в множество символов Z, которое вводится с клавиатуры. Упорядочить строки матрицы по возрастанию количества подсчитанных символов. Новых матриц не вводить. Отпечатать исходную, преобразованную матрицы и введенное множество символов. Ввод и вывод матриц осуществлять в виде матриц.
Вариант 23
Подсчитать по каждой строке символьной матрицы S(N,M), N<=12, M<=15 количество цифр, не входящих в множество сим-
волов Z, которое вводится с клавиатуры. Упорядочить строки матрицы по возрастанию количества подсчитанных символов. Новых матриц не вводить. Отпечатать исходную, преобразованную матрицы и введенное множество символов. Ввод и вывод матриц осуществлять в виде матриц.
Вариант 24
Подсчитать по каждой строке символьной матрицы S(N,M), N<=12, M<=15 количество строчных согласных букв, для которых в множестве символов Z есть соответствующая заглавная буква, множество Z вводится с клавиатуры. Упорядочить строки матрицы по возрастанию количества подсчитанных символов. Новых матриц не вводить. Отпечатать исходную, преобразованную матрицы и введенное множество символов. Ввод и вывод матриц осуществлять в виде матриц.
Вариант 25
Подсчитать по каждой строке символьной матрицы S(N,M), N<=12, M<=15 количество строчных гласных букв, для которых в множестве Z (вводится с клавиатуры) нет соответствующей заглавной буквы. Упорядочить строки матрицы по возрастанию количества подсчитанных символов. Новых матриц не вводить. Отпечатать исходную, преобразованную матрицы и введенное множество символов. Ввод и вывод матриц осуществлять в виде матриц.
Вариант 26
Подсчитать по каждой строке символьной матрицы S(N,M), N<=12, M<=15 количество небуквенных символов, не входящих в множество символов Z, которое вводится с клавиатуры. Упорядочить строки матрицы по возрастанию количества подсчитанных символов. Новых матриц не вводить. Отпечатать исходную, преобразованную матрицы и введенное множество символов. Ввод и вывод матриц осуществлять в виде матриц.
