Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
198 / 10 / 3
Регистрация: 30.04.2016
Сообщений: 732

Конструктор множества

09.02.2020, 18:46. Показов 1136. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Конструктор множества – список элементов
Множества, обрамлённый квадратными скобками, например:
[1, 2, 4 . . 7, 12]
[blue, red]
[ ]
[true]
И что с этими данными можно сделать? Вот написал такую программу, чтобы напечатать это множество. Но она отказала
(в строке Const A).
Pascal
1
2
3
4
5
6
Uses Crt;
Const A = [1, 2, 4 .. 7, 12]:  Integer;
Begin ClrScr;
   Write(` `,A);
   ReadLn
End.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.02.2020, 18:46
Ответы с готовыми решениями:

Сформировать множества А и В по заданному числу элементов для каждого множества
2)Сформировать множества А и В, базовый тип которых -70..30, по заданному числу элементов для каждого множества. Найти наибольший элемент,...

Множества. Из множества латинских букв выделить множество символов, не входящих в ваше имя
из множества латинских букв выделить множество состоящее из символов не входящих в множество символов составляющее ваше имя. вывести это...

Множества: Задано множество целых чисел C. Создать два множества, содержащие числа больше 5 и меньше 5.
Задано множество целых чисел C. Создать два множества, содержащие числа больше 5 и меньше 5. Добавлено через 16 минут Прошу Вас...

10
2374 / 776 / 561
Регистрация: 15.01.2019
Сообщений: 2,394
10.02.2020, 05:25
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
program Project1;
uses
  Crt;
const
  A = [1, 2, 4 .. 7, 12];
var
  i: integer;
begin
  ClrScr;
  for i:= 0 to 255 do
  if i in A then
    write(i,' ');
  ReadLn;
end.
Добавлено через 19 минут
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
program Project1;
uses
  Crt;
type
  TCol = (white, black, blue, green, red, yellow);
var
  c: TCol;
  a: set of TCol = [blue,red];
begin
  ClrScr;
  for c in a do
    write(c,' ');
  ReadLn;
end.
0
Модератор
10440 / 5729 / 3405
Регистрация: 17.08.2012
Сообщений: 17,438
10.02.2020, 05:56
Вторая строка дважды ошибочна: множество объявлено неверно, и множество не может быть типа integer.
Четвёртая строка просто ошибочна: множество не может быть напечатано. Для того, чтобы напечатать содержимое множества, нужно проверить, присутствует ли тот или иной элемент во множестве, и, если присутствует, то напечатать значение элемента.

Множество в паскале - это модель конечного неупорядоченного математического множества. Практически во всех диалектах паскаля (за исключением, по-моему, Pascal ABC.NET) мощность множества не может превосходить 256. Множество может быть основано на типах byte и char (но не ansichar и не unicodechar, поскольку мощность этих типов превосходит 256), а также на пользовательских типах, основанных на типах-диапазонах от byte и char, и перечисляемых не числовых пользовательских типах, мощность которых не превосходит 256.

Иными словами, в паскалевское множество не может быть включено более 256 различных элементов.

Что можно делать с множеством?

Пусть есть три множества a, b и c, объявленных как set of byte, и переменная f типа boolean.

Множеству можно присвоить другое множество того же типа, либо пустое множество:
Pascal
a := [1..5, 8];
b := a;
a := [];
Во множество можно включить элемент.
Pascal
include(a, 10);
или, с помощью объединения множеств:
Pascal
a := a + [10];
Из множества можно исключить элемент
Pascal
exclude(a, 10);
или, с помощью разности множеств:
Pascal
a := a - [10];
Множества можно сравнить
Pascal
f := a = b; //f = true, если множества совпадают
f := a <> b; //f = true, если множества не совпадают
f := a <= b; //f = true, если множество a является подмножеством b
f := a >= b; //f = true, если множество b является подмножеством a
Можно определить, содержит ли множество заданный элемент
Pascal
f := 5 in a; //f = true, если множество a содержит элемент 5
Над множествами заданы три операции:

Объединение множеств:
Pascal
c := a + b; //множество c будет содержать все элементы, которые есть во множестве a или во множестве b
Пересечение множеств:
Pascal
c := a * b; //множество c будет содержать все элементы, которые есть во множестве a и во множестве b
Разность множеств:
Pascal
c := a - b; //множество c будет содержать все элементы множества a, которые не входят во множество b
Множество, по сути, это список всех возможных элементов, в котором помечены те элементы, которые входят во множество. Применяется множество тогда, когда нужно определить факт наличия где-либо набора каких-либо однородных элементов, причём сколько раз эти элементы встречаются, для множества безразлично.

Исправленная программа:
Pascal
1
2
3
4
5
6
7
8
9
10
const
  a: set of byte = [1, 2, 4 .. 7, 12];
var 
  b: byte;
begin
  for b := 0 to 255 do
    if b in a then
      write(' ', b);
  readln
end.
Для того, чтобы что-то сделать с данными типа "множество", сначала изучите, что такое множество.
0
198 / 10 / 3
Регистрация: 30.04.2016
Сообщений: 732
29.03.2020, 10:57  [ТС]
Один пример сработал как надо, а вот со вторым что-то не то.
Pascal
1
2
3
4
5
6
7
8
9
10
uses Crt;
type
   TCol = (white, black, blue, green, red, yellow);
Var  c: TCol;
        a: set of TCol = [blue, red];
begin ClrScr;
   for c in a do
     Write(c, ' ');
   ReadLn
end.
В строке: a: set of TCol = [blue, red}; компилятор отказал.
Исправить не сумел. Вы бы исправили?

Был ответ и от модератора Cyborg Drone в виде лекции на тему множества (с пожеланием мне – изучить)
А пока попытка расшифровать заданные в Самоучителе примеры в таком виде:
Пусть задано множество а, описанное, как set of Byte. Будем пробовать уменьшать его на все элементы подряд, от 1 до 255, и каждый раз, когда это удаётся, распечатывать соответствующее число. Подходящий фрагмент, в котором понадобится «для транзита» ещё одно множество b. (Дана такая заготовка):
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
for i:= 1 to 255 do begin
    b:= a – [i];
if a <> b then begin WriteLn(i);  a:= b  end
end  {for}
Вот гораздо более короткий и естественный путь.
             for i:= 0 to 255 do if I in a then WriteLn(i)
   Из первой заготовки я сделал такую программу:
Error 113: Error in statement.
Const a = [11, 21, 30];
           b = [11];
Var i: Integer;
begin ClrScr;
   for i:= 1 to 255 do begin
      b:= a – [i];
     if a <> b then  begin  WriteLn(i);
        a:= b end
   end;  {Для for}
   ReadLn
end.
Отказ в строке: b:= a – [i]; . Где же тут ошибка?
По второй заготовке программа сработала. Вот она:
Pascal
1
2
3
4
5
6
7
8
uses Crt;
const a = [11, 21, 30];
Var i: Integer;
begin ClrScr;
    for i:= 0 to 255 do if I in a then
      Write(' ', i);
   ReadLn
end.
На выходе имеем:
Pascal
1
11  21  30
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
29.03.2020, 15:34
По первому коду
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
type
   TCol = (white, black, blue, green, red, yellow);
const cv:array[0..5] of string=('белый','черный','синий','зеленый','красный','желтый');
Var  c: TCol;
     a: set of TCol;
begin ClrScr;
a:=[blue,red];
for c:=white to yellow do
if c in a then  Write(ord(c), ' ');
writeln;
for c:=white to yellow do
if c in a then  Write(cv[ord(c)], ' ');
end.
Вывести можно только индексы или какие-то данные из массива по этим индексам
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
29.03.2020, 22:13
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
Множество может быть основано на типах byte и char (но не ansichar и не unicodechar, поскольку мощность этих типов превосходит 256
Тут необходимо уточнить кое-что:
1) AnsiChar всегда 1-байтовый и поэтому на нем может быть основано множество,
2) в некоторых реализациях Паскаль Char уже не всегда однобайтовый, может быть AnsiChar или UnicodeChar; в первом случае Char может быть основой множества, а во втором -- нет.
0
198 / 10 / 3
Регистрация: 30.04.2016
Сообщений: 732
03.05.2020, 10:43  [ТС]
На этот пример Puporev дал работающую программу, но уж больно она громоздкая (дополнительные строки с русскими цветами, два цикла …)
Вот фрагмент текста из Самоучителя (стр. 121):
«Пусть задано множество а, описанное, как set of Byte. Будем пробовать уменьшать его на все элементы подряд, от 1 до 255, и каждый раз, когда это удаётся, распечатывать соответствующее число. Вот подходящий фрагмент, в котором мне понадобится «для транзита» ещё одно множество b:»
Pascal
1
2
3
4
     for i:= 1 to 255 do begin
      b:= a – [i];
   if a <> then brgin WriteLn(i)l  a:= b end
    end  {for}
А вот моя попытка превратить этот фрагмент в работающую программу. Причём, неудачная попытка.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
uses Crt;
Const kol  = 102;
Var a: set of Byte;
        b: Byte;
         i: Integer;
begin ClrScr;
   for i:= 1 to 255 do begin
      b:= a – [i];
   if a <> b then WriteLn(i);  a:= b end
   end  {for}
   ReadLn
end.
Как бы её превратить в работающую программу?
0
2374 / 776 / 561
Регистрация: 15.01.2019
Сообщений: 2,394
03.05.2020, 14:27
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
program fff;
var
  a: set of Byte; {Переменная для хранения множества}
  i: integer; {Переменная для организации цикла}
begin
  a:= [2,22,9,13,5,56,34]; { Заданное множество}
  for i:= 1 to 255 do
    begin
      write('i= ',i:3,'; a= '); {Вывод в консоль номера итерации}
      a:= a - [i];              {Операция вычитания из множества}
      for j:= 1 to 255 do       {Вывод в консоль элементов множества}
        if j in a then
          Write(j:3);
      writeln;
    end;  {for}
  ReadLn;
end.
0
198 / 10 / 3
Регистрация: 30.04.2016
Сообщений: 732
15.07.2020, 11:44  [ТС]
Вот фрагмент текста из Самоучителя (стр. 121):
Задано множество а, описанное как set of Byte. Уменьшаем его на все элементы подряд, от 1 до 255, и каждый раз, когда это удаётся, распечатывать соответствующее число. Вот фрагмент, в котором понадобится «для транзита» ещё одно множество b:
Pascal
1
2
3
4
     for i:= 1 to 255 do begin
      b:= a – [i];
   if a <> then brgin WriteLn(i)l  a:= b end
    end  {for}
Напечатал код от ValentinNemo,
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
      uses Crt;
Var a: set of Byte; {Программа для хранения множества}
       i:: Integer; {Переменная для организации цикла}
begin
   a:= [2, 32, 9, 13, 5, 56, 34]; {Заданное множество}
   for i:= 1 to 255 do
begin
  write(',i:3, '; a= '); {Вывод в консоль номера итерации}
   a:= a – [i];  {Операция вычитания  множества}
   for i:= 1 to 255 do {Вывод в консоль эл-в множества}
     if j in a then
      Write(j:3);
         WriteLn;
     end; {для for}
   ReadLn
end.
Не указана переменная j. Без неё отказ. Добавил в раздел Var переменных i j: Integer; В результате получил такой выход:
Pascal
1
2
3
4
5
6
i= 232;  a=
i= 233;  a=
i= 234;  a=
…………
i= 254  a=
i= 255;  a=
И что это?
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
15.07.2020, 12:20
Цитата Сообщение от Petro29 Посмотреть сообщение
if a <> then brgin
Это что?
0
2374 / 776 / 561
Регистрация: 15.01.2019
Сообщений: 2,394
15.07.2020, 13:05
Цитата Сообщение от Petro29 Посмотреть сообщение
«Пусть задано множество а, описанное, как set of Byte. Будем пробовать уменьшать его на все элементы подряд, от 1 до 255, и каждый раз, когда это удаётся, распечатывать соответствующее число.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
program fff;
var
  a: set of Byte; {Переменная для хранения множества}
  i,j: integer; {Переменная для организации цикла}
begin
  a:= [2,22,9,13,5,56,34]; { Заданное множество}
  for i:= 1 to 255 do
    if i in a then
      begin
        a:= a - [i];              {Операция вычитания из множества}
        write(i:4,',');           {Распечатывание найденного и вычтенного числа}
      end;  {if i in a then}
  ReadLn;
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.07.2020, 13:05
Помогаю со студенческими работами здесь

Сформировать два множества, первое из которых содержит все простые числа из данного множества, а второе все составные
Имеется множество, содержащее натуральные числа из некоторого диапазона. Сформировать два множества, первое из которых содержит все простые...

Даны два множества М и N, состоящие из 10 целых чисел из диапазона 1.100. Из данных множеств выделить соответственно под-множества М1 чисел
Даны два множества М и N, состоящие из 10 целых чисел из диапазона 1..100. Из данных множеств выделить соответственно под-множества М1...

Образовать множество, которое бы содержало один из элементов множества A и один из элементов множества числа B
кто знает как решить Даны множества A; B. Образовать множество, которое бы содержало один из элементов множества A и один из элементов...

Конструктор множества
Верно ли что конструкцию вида относительно множеств называют конструктором множества? (Это придумал не я, на лекциях в универе у нас так...

Множества в модулях. Вывести все элементы множества А, которые не входят в множество В
Помогите пожалуйста, совсем ничего не понимаю во множествах. Задача! Пусть заданы множество А и множество В целых чисел, вывести...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru