Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Сложности с пониманием темы "Множества" в Turbo Pascal. (http://forum.oszone.net/showthread.php?t=222539)

lenaustkz84 09-12-2011 17:54 1812282

Сложности с пониманием темы "Множества" в Turbo Pascal.
 
Здравствуйте!
Снова обращаюсь к знатокам :)

Вопрос от новичка, который только-только начал
изучать Turbo Pascal и постепенно добрался
до темы «Множества».

Тема в общем смысле кажется понятной, но, в то же
время кажется, что… ничего совсем не понятно.
Если честно, в голове уже каша от изученного материала…
Но очень хочется понять эту тему, прежде, чем идти
в изучении дальше.

Ниже я привожу вопросы, на которые прошу Вас ответить.

Вопросов много. Я понимаю, что ответы на них могут
быть утомительными… Но если уж не на все, то хоть
на некоторые из них, ответьте, пожалуйста.


Правильно ли я понимаю, что:

1. В памяти отводится по 1 биту под каждый элемент,
находящийся во множестве.

2. Перечислимый тип данных сам по себе является
множеством.

3. Не совсем понятно объявление множеств в программе.

а) type SetByte = set of byte;
var sb : SetByte;


Правильно ли я понимаю в данном случае, что:

а1) Множество задается в разделе type, потому что
по сути, создается необходимый пользовательский тип?

а2) В разделе var нужно объявить специальную переменную,
которая будет являться «представителем» того пользовательского
типа, который был создан в разделе type. Т.е. переменной
созданного множества.

а3) В программе можно будет выполнять все
обычные операции, предусмотренные ЯП, над
переменной, которая является «представителем»
множества.

a4) В данном случае sb ялвяется одним из элементов
множества SetByte. И таких элементов (переменных)
можно создать столько, сколько может вместить в
себя множество.


б) type SetChisla = set of 10..20;
var Index : SetChisla=[12,15,17];


б1) Понятно, что задается множество в диапазоне от
10 до 20. Но почему здесь не указывается какого
типа это множество? Или итак понятно, что это
целочисленный тип?

б2) Если уже определено, что множество задано
в диапазоне от 10 до 20, что значат цифры в
квадратных скобках? Здесь прописывается то,
что в заданном множестве будут присутствовать
именно эти три элемента: 12, 15 и 17? Т.е. происходит
обычная операция присваивания?

б3) Почему в качестве идентификатора переменной
множественного типа участвует ключевое слово index?
Может быть это опечатка автора учебного пособия?


в) type Symbol = set of char;
var Letter, Digits, Sign : Symbol;


в1) Почему можно создавать несколько переменных,
являющихся представителями одного и того же
множества? Как они взаимодействуют друг с другом?


г) type Month = (January, February, March, April, May, June, July, August,
September, October, November, December);
Season : set of Month;

var Winter, Spring, Summer, Autumn, Vacation, WarmSeason : Season;


г1) Здесь создано множество Season на основе перечислимого
типа?

г2) Какими тогда будут элементы этого множества?
January, February… December ? Или Winter…WarmSeason?
Или множество будет содержать
и отдельно заданные элементы и элементы, входящие
в перечислимый тип Month?

г3) Почему в строчке Season : set of Month;
стоит двоеточие, а не знак равно? Или это просто
опечатка в пособии?

д) var Operation : set of (Plus, Minus, Mult, Divid);

д1) Почему в данном случае происходит объявление
множества в разделе переменных? И почему опять
через : , а не через знак = ?

д2) После set of должен быть прописан тип данных,
которому принадлежат элементы множества. Тогда
в этом случае мне не понятно, какому типу принадлежат
элементы заданного множества?

е) var Param : set of 0..9=[0, 2, 4, 6, 8];

е1) Здесь задано множество целого типа?

е2) Во множество записали элементы
0, 2, 4, 6, 8 ?

4. В пособии написано, что множества часто используются
как константы. Тогда, определив множество в разделе
const, нужно ли его прописывать в разделе type?

5. Что значит пересечение множеств?

Прошу, пожалуйста, объясните доступным, понятным языком :)

PhilB 12-12-2011 17:24 1813853

Цитата:

Цитата lenaustkz84
1. В памяти отводится по 1 биту под каждый элемент,
находящийся во множестве. »

Если мне не изменяет память, то да.
Цитата:

Цитата lenaustkz84
2. Перечислимый тип данных сам по себе является
множеством. »

Нет, не является. Но может использоваться как баз для множества.
Например
var Operation : set of (Plus, Minus, Mult, Divid);
Здесь (Plus, Minus, Mult, Divid) - перечислимый тип, а set of (Plus, Minus, Mult, Divid) - множество, элементы которого принадежат перечислимому типу.

3 вопрос не осилил... Будет время и силы, отвечу.

Цитата:

Цитата lenaustkz84
4. В пособии написано, что множества часто используются
как константы. Тогда, определив множество в разделе
const, нужно ли его прописывать в разделе type? »

Не очень ясно, что имеется ввиду.
Перечислимый тип - да, часто используется как константы.
Константные множества тоже никто не отменял.
В чем фича здесь?
Цитата:

Цитата lenaustkz84
5. Что значит пересечение множеств? »

Это множество, содержащее только те элементы, которые содержаться в обоих исходных множествах.

А вообще, поняти множества в паскале есть довольно естественная реализация математического понятия множества. Для общего понимания, очень советую почитать Кузнецов "Дискретная математика для инженера".(Моя любимая техническая книга. Просто шедевр.:)). Первая глава очень хорошо расрывает понятие множества.


Время: 12:05.

Время: 12:05.
© OSzone.net 2001-