Yurijnd.com
Четверг, 06.02.2025, 20:02
Меню сайта

Вход на сайт

Поиск

Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Статистика

    Онлайн всего: 6
    Гостей: 6
    Пользователей: 0

    Delphi. Pascal
    Урок 7. Множества и записи

    Множества

    Тип множества Описание множества Пример
    Постоянное множество (константа) [ тип-элемента ] const a = [ 0..100 ];
    Переменное множество (переменная) set of [ тип-элемента ] var a: set of [ '0'..'9', '+', '-' ];
    Пример описания постоянного множества Элементы множества
    const A = [ 'A'..'Z', 'a'..'z' ]; Буквы латинского алфавита
    const B = [ 'a'..'z' ]; Малые буквы латинского алфавита
    const C = [ 'А'..'Я', 'а'..'п', 'р'..'я', 'Ё', 'ё' ]; Буквы алфавита-кириллицы
    const D = [ 'А'..'Я' ]; Большие буквы алфавита-кириллицы
    const M = [ '0'..'9' ]; Цифровые символы от 0 до 9
    const N = [ 0..100 ]; Целые числа от 0 до 100
    Пример описания переменного множества Элементы множества
    var a set of [ 'A'..'Z', 'a'..'z' ]; Буквы латинского алфавита
    var b set of [ 'a'..'z' ]; Малые буквы латинского алфавита
    var c set of [ 'А'..'Я', 'а'..'п', 'р'..'я', 'Ё', 'ё' ]; Буквы алфавита-кириллицы
    var d set of [ 'А'..'Я' ]; Большие буквы алфавита-кириллицы
    var m set of [ '0'..'9' ]; Цифровые символы от 0 до 9
    var n set of [ 0..100 ]; Целые числа от 0 до 100
    Операция Результат операции Пример
    М1 + М2 Объединение множеств М1 и М2 ['0'..'9'] + ['+']
    М1 - М2 Разность множеств М1 и М2 ['a'..'z'] - ['x'..'z']
    М1 * М2 Пересечение множеств М1 и М2 ['a'..'m'] * ['c', 'i', 'n']
    Операция Когда результат операции равен true Пример
    значение in множество Значение является элементом множества not (s[i] in ['a'..'z'])
    М1 = М2 Множества М1 и М2 равны между собой  
    М1 <> М2 Множества М1 и М2 не равны  
    М1 < М2 Множество М1 является подмножеством множества М2  
    М1 <= М2 Множество М1 является подмножеством множества М2 или равно М2  
    М1 > М2 Множество М1 является надмножеством множества М2  
    М1 >= М2 Множество М1 является надмножеством множества М2 или равно М2  
     

    Множества и записи являются специфичными для Pascal'я типами. Сначала разберемся со множествами.

    С общей точки зрения множество представляет из себя некоторый набор (на самом деле это тавтология, но на это мы не будем обращать внимания) чего-либо. Для такого набора действуют два правила - во-первых, в нем не должно быть поторяющих элементов (вернее, повторяющийся элемент защитывается ттолько один раз) и, во-вторых, во множество порядок элементов не существенен. Два множества мы можем пересекать, объединять, вычитать из одного другое, проверать, не есть одно множество частью (подмножеством) другого и др. Кроме того, мы можем определять, является ли или нет некоторый конкретный элемент элементом данного множества.

    Для определения множества мы должны написать что-то вроде:

    type
     Color = (Red, Green, Yellow, Blue, Black);
     Colors = set of Color;
    var
     c1, c2, res: Colors; //Переменная c типа Colors

    Как вы видите, сначала мы в разделе type модуля оперделяем новый тип Color (название может быть любым). Тип Color мы определяем через набор возможных значений (красны, зеленый, желтый, синий и черный). Затем мы опеределяем новый тип Colors (название тоже может быть любым) как множество, состоящее из элементов типа Color. Colors мы объявляем множеством с помошью ключевых слов set of:

     Colors = set of Color;

    После того, как мы опеределили новый тип Colors, мы можем заводить переменные такого типа. Это м и делаем в разделе var модуля:

    var
     c1, c2, res: Colors; //Переменные типа Colors

    Теперь рассмотрим основные операции с множествами. Это суть:

    Объединение множеств. Обозначается как "+" . Получаем в результате множество, состоящее из элементов, которые входят или в первое, или во второе множества:

     c1:=[Red, Green, Yellow];
     c2:=[Green, Blue];
     //Теперь множество res состоит
     //из элементов Red, Green, Yellow и Blue
     res:=c1 + c2;

    Пересечение множеств. Обозначается как "*". Получаем в результате множество, состоящее из элементов, которые входят и в первое, и во второе множества:

     c1:=[Red, Green, Yellow];
     c2:=[Green, Blue];
     //Теперь множество res состоит
     //из элемента Green
     res:=c1 * c2;

    Разность множеств. Обозначается как "-" . Получаем в результате множество, состоящее из элементов первого множества, за исключением тех элементов, которые входят во второе:

     c1:=[Red, Green, Yellow];
     c2:=[Green, Blue];
     //Теперь множество res состоит
     //из элементов Red и Yellow
     res:=c1 - c2;

    Кроме того, для множеств существуют операции для определения, не является ли одно множество частью другого. Это операции "<=" (возвращает true, если каждый элемент первого множества является элементом и второго, и false в противоположном случае) и ">=" (возвращает true, если каждый элемент второго множества является элементом и первого, и false в противоположном случае). Вот пример использования:

     c1:=[Red, Green, Yellow];
     c2:=[Green, Red];
     if c1>=c2 then
     //c1 есть подмножество c2
     Writeln('c1 is a subset of c2')
     else
     //c1 не есть подмножество c2
     Writeln('c1 is not a subset of c2');

    Если в программе надо определить, входит ли некоторый элемент в множество или нет, то мы доджны использовать операцию in. Вот пример ее использования:

     c1:=[Red, Green, Yellow];
     if Red in c1 then
     //Элемент Red принадлежит множеству c1
     ...
     else
     //Элемент Red не принадлежит множеству c1
     ...

    Еще для множеств имееются операции "=" и "<>". Их использование вполне очевидно - первая возвращает true, если два множества равны, и false - если не равны, вторая: наоборот - true, если два множества не равны, и false - если равны.

    В Delphi для множеств есть ограничение - в множестве не может больше 256 элементов.

    Типы и записи

    Описание типа записи Пример
    имя типа = record type data = record
    имя-1: тип-1; x:integer;
    имя-2: тип-2; y:integer;
    имя-N: тип-N; t:string;
    end; end;
      var a1, a2, a3: data;
     

     

    Теперь поговорим кратко о записях. Запись представляет из себя новый, определенный пользователем, тип данных. Запись объединяет в себе некоторое (фиксированное) число переменных (которые официально наываются полями). Эти переменные могут быть разного типа. Например, вы можете создать новый тип для хранения данных о книге. В этот тип вы можете включить такие поля как Author (Автор), Title (Название), Pages (Количество страниц) и др. Доступ к отдельным полям мы получаем через точку, которую ставим после имени соответствующий переменной. Вот пример:

    var
     //Определяем переменную book как запись
     book: Record
     Title: String;
     Author:String;
     Pages: Integer;
     end;
     //Конец записи
     ...
     //Задаем название
     book.Title:='De machina computativa firmicis fundata.';
     //Задаем автора
     book.Author:='Osco do Casco';
     //Задаем количество страниц
     book.Pages:=212;

    Как вы видите, для задания записи используются ключевые слова Record и End.

    Copyright MyCorp © 2025
    Сделать бесплатный сайт с uCoz