Печать
Просмотров: 271

В прилагаемом файле можно найти процедуры и функции, которые расширяют стандартные возможности Pascal:
Печать множества, определение длины множества (количества элементов в множестве), преобразование множества в массив и обратно.

Оказывается, элементами множества могут быть либо символы (тип char), либо числа, умещающие в тип byte (т.е. от 0 по 255). Элементами множеcтва в Pascal не могут быть типы String, shortint, integer, int64, real.

Объявление множеств производится директивой set of.

var
  m: set of integer;
  digits: set of 0..9;
  digits_str: set of '0'..'9';
  symbols: set of 'a'..'z', '0'..'9', '.', '-', '_';

Примеры команд используемых со множествами:

if s[i] in ['0'.. '9'] then 
  count:= count + 1;

if s[i] in ['a'..'z', '0'..'9', '.', '-', '_'] then 
  { символ правильный }

Задача. Вывести все различные цифры, присутствующие в символьной строке s. (В пустое множество добавляется элемент)

var s: string;
    i: integer;
    c: char;
    digits: set of '0'..'9';
begin
 readln(s);
 digits:=[]; { пустое множество }
 for i:=1 to Length(s) do
   if s[i] in ['0'..'9']
   then digits:= digits + [s[i]]; { добавление в множество }
 for c:='0' to '9' do
   if c in digits then writeln(c)
end.

Таблица "Методы множеств"

Метод Что делает
union = my_set1 + my_set2 объединение множеств
intersection = my_set1 * my_set2 пересечение множеств
diff = my_set1 - my_set2 разность множеств (дополнение)
include(имя_множества, элемент)
include(my_set1, element);
include(chs1, 'g');
включение элемента в множество (аналогично chs1 + ['g'])
exclude(имя_множества, элемент)
exclude(my_set1, element);
exclude(chs2, 'a');
включение элемента в множество (аналогично chs2 - ['a'])
= сравнение множеств (тождество)
<> неравенство множеств (не тождественно)
>= означает «является надмножеством» (содержит другое множество)
<= означает «является подмножеством» (содержится в другом множестве)
in принадлежит ли элемент множеству

include(chs1, 'g');  { аналогично chs1 + ['g'] }
exclude(chs2, 'a');  { аналогично chs2 - ['a'] }


var
  ms: set of char;
  ch: char;
begin
  . . .

  ch := ' ';
  ms := [];
  for i := 1 to n do
     ms := ms + [element[i]];
  for i := 0 to 9 do  begin
    Str(i, s);
    ch := s[1];
    if ch in ms then
      write(ch, ', ');
    end;

  . . .
end.

Реализованные функции по работе с множествами (в библиотеке во вложении):

    type
        mn_char = set of char;
        mn_byte = set of byte;
        charArray = array of char;
        byteArray = array of byte;

ФункцияОписание
function array_to_mn(_carr: charArray): mn_char; Преобразовать массив символов в множество символов
function array_to_mn(_barr: byteArray): mn_byte; Преобразовать массив байт в множество байт
function string_to_mn(_str: String): mn_char; Преобразовать строчку в множество символов
function mn_to_array(_mn: mn_char): charArray; Преобразовать множество символов в массив символов
function mn_to_array(_mn: mn_byte): byteArray; Преобразовать множество байт в массив байт
procedure mn_print(_mn: mn_char; _mode: integer); Распечатать множество
procedure mn_print(_mn: mn_byte; _mode: integer); Распечатать множество
function mn_length(_mn: mn_char): integer; Определить длину множества (кол-во элементов)
function mn_length(_mn: mn_byte): integer; Определить длину множества (кол-во элементов)

Вложения:
Скачать этот файл (mn_methods.pas)mn_methods.pas[ ]4 Кб