Помощь - Поиск - Пользователи - Календарь
Полная версия: Вывод множеств
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
pank
Добрый день, извините за, возможно, глупый вопрос - как вывести на экран множество, оператор write не работает. У меня множество чисел от 1 до N, я формирую из него подмножество элементов( m1), не превышающих 10, как их вывести на экран? Печатать команду:
for i:=1 to N do
if (i in m1) then write(i)

или есть другой способ?
volvo
Нет... Только этот. Вывод множества - только полным перебором элементов и проверкой на наличие...

Кстати, и математически понятие "извлечение элемента из множества" не определено ...
pank
В продолжение темы...
Я так понимаю, что операция сравнения m1[1]>m1[2] со множеством m1 тоже не проходит? Как тогда можно подмнжество, состоящее только из гласных букв отсортировать по алфавиту? Я извиняюсь за настойчивость, но я раньше со множествами работала очень мало, а в faq тоже материла не много.
volvo
smile.gif А ко множествам ВООБЩЕ неприменимы такие понятия, как "сортировка" или "порядок следования элементов"... Множество просто хранит некоторое значение из некоторого определенного набора. Поэтому, чтобы вывести на печать множество букв латинского алфавита, отсортированное, например, по возрастанию, достаточно проверять на вхождение отсортированные элементы:
for ch := 'a' to 'z' do begin
if ch in myset then write(ch);
end;

так как в цикле перебираются значения от 'a' до 'z' в порядке возрастания, то и вывод будет отсортирован по возрастанию...
pank
А если задание: из вводимой строки создать множество гласных букв и напечатать их в алфавитном порядке? Как создать цикл?
Задача простая, но что - то меня на ней заклинило. mega_chok.gif
volvo
А что, тот же самый цикл не пойдет? Или гласные буквы не являются подмножеством ВСЕХ букв? Тебе надо только позаботиться о том, чтобы ВНОСИТЬ во множество только гласные буквы, тогда будут выводиться отсортированные гласные. Ну, если хочешь, сделай так:
for ch := #0 to #255 do begin
if ch in myset then write(ch);
end;


и начинай пользоваться поиском, только сегодня ТОЧНО такое же решение уже приводилось. Сколько можно дублировать коды???
Lapp
pank, разговор останется беспредметным, если ты не приведешь весь код (или то, что относится к множествам, о которых речь).
У меня есть конкретное подозрение, что ты хотя и организовала переменные для множеств m и m1, на самом деле ничего туда не положила, то есть они у тя пустые. Вот ниже код, который той же самой конструкцией, что и у тебя, печатает то, что требуется.

const
N=20;

var
m1:set of 1..N;
i:integer;

begin
m1:=[1,2,3];
for i:=1 to N do if i in m1 then Write(i,' ');
ReadLn;
end.


Обрати внимание на присвоение m1 конкретных элементов.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.