Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8

Можно ли создать множества?

27.10.2015, 18:01. Показов 3745. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я подумал. Вот в Паскале есть множества. А чем хуже VB?
И придумал. По крайней мере можно создать числовые
множества и даже лучше чем на паскале.
Суть дела в том, что мы задаем массив. Например A(1 To 10000)
2) в этот массив мы будем помещать натуральные числа,
принадлежащие сегменту [1; 10000]
3) принцип следующий: числу N соответствует А(N).
Иными словами. Индекс элемента массива равен
самому элементу массива N = A(N) !!
4) это значит в массиве-множестве в принципе не
будет равных элементов.
5) а как быть например с отрицательными числами?
Например дано множество: (-10; 0; 20)
Сдвинется индексы для этого множества на постоянное
целое число. Например на 20 и множество расположится
по индексам 10; 20; 40
Вопросы.
А можно ли образовать множества для вещественных чисел?
А как поступить с буквами и сочетаниями букв?
Что еще можно сказать?
Настоящему программисту всегда есть что сказать,
если он настоящий программист.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.10.2015, 18:01
Ответы с готовыми решениями:

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

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

Как можно реализовать отрицание множества на с++?
Как можно реализовать отрицание множества на с++? .Имеется два множества A и В, как сделать отрицание?

9
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
27.10.2015, 18:38
Цитата Сообщение от geh Посмотреть сообщение
А чем хуже VB?
VB лучше. Там есть Dictionary
Кликните здесь для просмотра всего текста
Основное назначение Dictionary состоит в том, чтобы создавать коллекции - наборы однородных данных, в которых далее можно организовывать процедуры поиска или выполнять какие-то другие манипуляции с данными. Объект Dictionary имеет структуру, известную в языке Perl как ассоциативный массив (associative array). Каждый элемент данных в Dictionary ассоциируется с соответствующим ключом, эти связанные структуры получили название "пара ключ-значение" (key-value pair). В принципе можно привести массу аргументов в пользу применения Dictionary в качестве альтернативы обычному одномерному массиву, но самое главное, пожалуй, то, что при работе с Dictionary отпадает необходимость в использовании оператора ReDim при добавлении в него очередного элемента данных. Кроме того, следует отметить, что объект Dictionary имеет много полезных свойств и методов, недоступных для обычных массивов. В частности, здесь можно удалять элементы данных без образования пропусков в середине коллекции, а также задействовать в качестве ключей строковые значения.
1
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
27.10.2015, 19:51
Уважаемый geh, у меня есть книжка «VBA для „чайников”», и там довольно подробно разъясняется использование и словарей (Dictionary), и семейств объектов (коллекций: http://wm-help.net/lib/b/book/267992846/359).

Актуально и для простого VB (без A), только с подключением Dictionary не знаю как там.

Добавлено через 2 минуты
Вот живой пример словаря (не считая кодировки русских букв), пробуйте: Во всех словах удалить повторяющиеся буквы.
1
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
27.10.2015, 21:28
Лучший ответ Сообщение было отмечено Sasha_Smirnov как решение

Решение

geh, прочитал я немного про множества в Паскале: http://comp-science.narod.ru/Progr/mn.htm
Множество в памяти хранится как массив битов, в котором каждый бит указывает является ли элемент принадлежащим объявленному множеству или нет. Максимальное число элементов множества 256, а данные типа множество могут занимать не более 32 байт.
В VB массив бит можно хранить в массиве типа Long, один элемент массива = 32 бита. Операции объединения и пересечения множеств можно эмулировать побитовыми логическими операторами Or, And, Imp. Ну а что подразумевать под каждым битом - дело программиста
1
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
28.10.2015, 12:12  [ТС]
Ребята, спасибо!
Я тут еще подумал, что из отдельных символов
тоже можно создать множество. Допустим нас
интересует множество, которое может состоять
из заглавных символов латинского алфавита.
Тогда мы зададим строку длиной 26 единиц.
Где каждому символу отводится только одно место.
Если такой символ отсутствует, то заменим его
пробелом или иным другим знаком. В этом множестве
в принципе не может быть повтора. Ибо добавление
например буквы А (А стоит на первом месте) будет означать
что А заменит А и не более того.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,736
Записей в блоге: 14
28.10.2015, 21:46
Лучший ответ Сообщение было отмечено echs как решение

Решение

Разумеется, Казанский (как всегда!) прав. Словари здесь не при чем. Множества - это битовые поля. Вот мои "5 коп"
(В качестве хранилища битов используются строки, но лучше переделать на массивы байтов):
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
':::         Установить бит в логической шкале              :::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Public Sub SetBit(LScale$, N&, B%)
    L& = Len(LScale$)
    '::: Если номер бита слишком велик
    If N& > L& * 8 Then Error 250
    '::: Рассчитаем номер байта шкалы
    NByte& = N& / 8
    If (N& - NByte& * 8) <= 0 Then NByte& = NByte& - 1
    NBit% = N& - NByte& * 8
    NByte& = NByte& + 1
    '::::  Установка нужного бита
    S$ = Mid$(LScale$, NByte&, 1)
    i% = Asc(S$)
    If B% <> 0 Then
       i% = (i% Or 2 ^ (8 - NBit%))
    Else
       i% = (i% And (255 - 2 ^ (8 - NBit%)))
    End If
    S$ = Chr$(i%)
    Mid$(LScale$, NByte&, 1) = S$
End Sub
 
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
':::            Опросить бит в логической шкале             :::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Public Sub GetBit(LScale$, N&, B%)
       L& = Len(LScale$)
       ':::: Если номер бита слишком велик
       If N& > L& * 8 Then Error 250
       ':::: Рассчитаем номер байта шкалы
       NByte& = N& / 8
       If (N& - NByte& * 8) <= 0 Then Decr NByte&
       NBit% = N& - NByte& * 8
       Incr NByte&
       '::::    Чтение нужного бита
       S$ = Mid$(LScale$, NByte&, 1)
       i% = Asc(S$)
       B% = (i% And 2 ^ (8 - NBit%))
       If B% <> 0 Then B% = 1
End Sub
Этот код работает в моих программах уже почти 20 лет...
1
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
29.10.2015, 07:54
Цитата Сообщение от Catstail Посмотреть сообщение
Множества - это битовые поля.
Я так подозреваю, что главное преимущество множеств в Паскале это скорость манипуляций с ними. Массив битов в памяти это ракета и велосипед по сравнению с работой со строками?
1
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
29.10.2015, 08:11
Windows предоставляет набор функций для работы с битовыми полями любой длины. Это используется при работе с кластерами, tls и т.д. Поиск по слову RTL_BITMAP.
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,736
Записей в блоге: 14
29.10.2015, 09:20
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Массив битов в памяти это ракета и велосипед по сравнению с работой со строками?
- фраза не вполне понятна. Но в любом случае, в первую очередь важен интерфейс, во вторую - эффективность.
1
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
29.10.2015, 09:58  [ТС]
Ребята. Спасибо! Я всем вам очень благодарен.
Но особая благодарность Вам!
Славный Catstail,
Вы мой Ангел-хранитель. Вы так интересно и просто
излагаете довольно сложные вещи.
PS.
Особая благодарность за программу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.10.2015, 09:58
Помогаю со студенческими работами здесь

Как можно получить все подмножества множества?
Например из множества, представлнного массивом должны получиться подмножества:

Определить, можно ли из множества S составить слово Харьков.
Множество S состоит из букв, которые содержатся хотя бы в одном из слов Киев, Днепропетровск, Запорожье, Севастополь. Определить, можно ли...

Сколькими способами можно занумеровать элементы множества
Вопрос стоит так: Сколькими способами можно занумеровать элементы множества {{{1,2,...,2n}}} при парном n так, чтобы Каждое число, кратное...

можно ли и если можно, то как в сессии создать двумерный массив ?&
нужен сабж

Каким числом способов можно выбрать три множества?
Дано множество U из n элементов. Каким числом способов в нём можно выбрать три множества A, B, C так, чтобы выполнялись заданные условия?...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru