Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 704

Как считать n-ый элемент множества?

21.04.2015, 15:56. Показов 2322. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть вопроы по множествам, раньше я с ними не работал:

1) Как считать и-тый элемент множества? Например, я ввожу {29,56,98,104,185,203,247}, но при выводе мне всегда выдаёт псевдорандомную последовательность {203,185,98,29,247,56,104}. Я пробовал дописать к переменной множества индекс как для массива, но мне выдало ошибку, что индексов у множств по умолчанию нет. По идее, если нумерация будет начинаться с нуля, то элемент номер 4 будет равен 185. Можно, конечно, перебирать в цикле весь диапазон значений множества, вплоть до uint64 (0..18446744073709551615), но это же бред Х___х

2) Правильно ли я понимаю, что [1..6] >= [1..5], [1..5] <= [1..6] - правильно, [2..6] >= [1..5], [1..5] <= [2..6] - неправильно.

Я пытаюсь разобраться с задачей: даны множества А и Б, нужно получиь множество Ц из А, в котором будут только те значения, которые кратны одному из значений в множестве Б. Спасибо
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.04.2015, 15:56
Ответы с готовыми решениями:

Чем отличается максимальный элемент частично упорядоченного множества множества и его наибольший элемент
Хэй хэй! Друзья, пришлось быстро вспоминать теорию множеств и возник вопрос. Очень близкие по определению, но всё же несколько...

один элемент из множества А обменяли на элемент из множества В, вероятность, что множество А не изменилось?
одну букву из слова ВСЕЛЕННАЯ обменяли на букву из слова ВАСЯ найти вероятность того, что последовательность первого слова при этом не...

Как оптимально считать данные с множества TextBox'ов?
Вообщем такая ситуация: есть 40 текстбоксов с которых надо вывести числа. То есть они задаются при запуске программы и считываются в код. ...

7
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,910
Записей в блоге: 12
21.04.2015, 16:02
Цитата Сообщение от Ваю Посмотреть сообщение
Как считать и-тый элемент множества?
Сюда загляни: Достать из set по индексу
0
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 704
21.04.2015, 16:36  [ТС]
А мжно подробнее, мне тот код почти незнаком, сначала там из s переписывается значение в str как строка, с упорядочиванием по алфавиту, потом выделяется память для одного символа, зачем ковычки с запятой в конце напиханы я не знаю, там вроде бы формируется строка, в которой все симлолы перечислены в ковычках через запятую, потом от конца строки отрезается последний символ, хотя что меняет длину строки я не понял, потом последий символ пиштся в arr, а Split работает со строками, и там указано, что пусты е строки не отдавать обратно... Как это переделать для небуквеного типа данных? Я ещё не умею писать подобный код, пока буду разбираться дальше с foreach..do , что оно умеет и как работает.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,910
Записей в блоге: 12
21.04.2015, 17:26
Цитата Сообщение от Ваю Посмотреть сообщение
пока буду разбираться дальше с foreach..do , что оно умеет и как работает
Теряешь время. Foreach не гарантирует определенного порядка перечисления элементов множества. Только при преобразовании множества в строку и последующем выделении из этой строки элементов ты получаешь гарантированно одинаковое представление и, следовательно, гарантированно одинаковый порядок.

Итого, чтобы получить i-ый элемент множества, надо сделать так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
type 
  T = set of integer;
  
function getByIndex(s : T; index : integer) : integer;
begin
  var str := s.ToString;
  result := StrToInt(str.Substring(1, str.Length - 2).Split(',,'.ToCharArray())[Pred(index)]);
end;
 
var s : T;
begin
  s := [29,56,98,104,185,203,247];
  for var i : integer := 1 to 7 do writeln(i, ' -> ', getByIndex(s, i));
end.
1
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 704
21.04.2015, 19:40  [ТС]
Нашёл в инет такую вот писанину по обычному паскалю:
Количество элементов множества называется его мощностью. Множество может принимать все значения базового типа. Базовый тип не должен превышать 256 возможных значений. Поэтому базовым типом множества могут быть byte, char, boolean и производные от них типы.

Множество в памяти хранится как массив битов, в котором каждый бит указывает является ли элемент принадлежащим объявленному множеству или нет. Максимальное число элементов множества 256, а данные типа множество могут занимать не более 32 байт.

Число байтов, выделяемых для данных типа множество, вычисляется по формуле:

ByteSize = (max div 8) - (min div 8) + 1,
где max и min — верхняя и нижняя границы базового типа данного множества.
Номер байта для конкретного элемента Е вычисляется по формуле:

ByteNumber = (E div 8) - (min div 8),
номер бита внутри этого байта по формуле:
BitNumber = E mod 8
А как определить размер/мощьнось множества, если о нём ничего не известно?
l := Length(s); тут не работает.

Добавлено через 15 минут
Опять только в строку переделывать и мерять её размер?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,910
Записей в блоге: 12
21.04.2015, 19:47
Забудь про "обычный" Паскаль. Либо создавай тему в корне раздела "Паскаль" или в Турбо-Паскале. В PABC.NET совершенно другая работа с множествами.
Цитата Сообщение от Ваю Посмотреть сообщение
А как определить размер/мощьнось множества, если о нём ничего не известно?
В "обычном" Турбо Паскале - полный перебор элементов и подсчет среди них тех, которые входят во множество. В "не совсем обычном" FPC - проход for i in s с подсчетом количества итераций. В "совсем необычном" PABC.NET - преобразование в строку, удаление первого и последнего символов (квадратных скобок, как и сделано в коде выше), разбиение на айтемы по запятой, и подсчет количества элементов в полученном массиве (том, который возвращает Split).

Множества - самая больная тема. В разных Паскалях все реализовано по-разному.
0
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 704
21.04.2015, 19:50  [ТС]
Спасибо, к этому моменту времени я уже метдом тыка допёр как сделать
0
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 704
23.04.2015, 04:15  [ТС]
Может кому пригодится, но моя задача решается в 2 строчки, не выходя из можеств, долго сидел, потом вдруг дошло, шифт+дел весь готовый код строк в 35 на одних дин. массивах и за пару минут получилось это:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
type
  SiSet = set of Smallint;
 
var
  a, b, c, d : SiSet;
  i, j : Smallint;
 
Begin
Write('Множество A[-1023..1023] (ноль - конец ввода): '); j := Random(8, 96); 
Repeat i := Random(-1023, 1023); a += [i]; Dec(j); Until j = 0; a -= [0]; WriteLn(a); 
//Repeat Read(i); If i > 0 then a += [i]; Until i = 0; WriteLn(a); 
 
Write('Множество B[-1023..1023] (ноль - конец ввода): '); j := Random(8, 96); 
Repeat i := Random(-1023, 1023); b += [i]; Dec(j); Until j = 0; b -= [0]; WriteLn(b); 
//Repeat Read(i); If i > 0 then b += [i]; Until i = 0; WriteLn(b); 
 
ForEach i in a do begin ForEach j in b do begin 
  If (i mod j = 0) and (i div j > 0) then begin c += [i]; d += [j]; {Break;} end; end; end; 
 
WriteLn('Элементы A кратные одному из элементов B: ', c); WriteLn('Делители: ', d); 
a := []; b := []; c := []; d := []; 
 
End.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.04.2015, 04:15
Помогаю со студенческими работами здесь

В матрицу записать 1, если удвоенный элемент первого множества меньше элемента второго множества
Здравствуйте! Не могу понять, где ошибка в коде... Пользователь вводит размер первого множества, элементы, затем размер второго...

Удалить из множества А минимальный элемент множества В
Удалить из множества А минимальный элемент множества В. могу удалить из A все елементи B. а минимальний нет( #include...

Как из множества вывести элемент по его номеру?
Есть произвольное множество символьного типа &quot;RusLetters:= ;&quot;, в нём 33 элемента. Как можно определить, какой символ(элемент) будет...

Как считать какой-либо элемент из txt-файла?
Расскажите, как можно считать какой-либо элемент из txt-файла в Delphi. Заранее спасибо!

Как считать матрицу с textbox и умножить каждый элемент на определенное число
В textbox имеется матрица, размером i x j! Так вот, как мне скажем умножить каждый член этой матрицы на определенное число, а потом...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru