Помощь - Поиск - Пользователи - Календарь
Полная версия: множества(set)
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
compiler
можно ли выводить (печатать) множества. КАК?
почему нельзя написать Write(set1); ?
klem4
var
s: Set of byte;
i: Byte;

begin
...
s := [3, 1, 12];
for i := 0 to 255 do
if i in s then writeln(i);
...
end.


Только так ...
Malice
Цитата(compiler @ 21.01.2007 20:23) *

можно ли выводить (печатать) множества. КАК?

Только вот так:
var s: set of byte;
i:byte;
begin
s:=[1,2,6,9];
for i:=1 to 255 do if i in s then write (i);
end.


Цитата
почему нельзя написать Write(set1); ?


А если будет set of (Sun, Mon, Tue, Wed, Thu, Fri, Sat) ? Что печатать ? Множества в памяти хранится как набор бит (1-входит/ 0 - не входит). Так предыдущий пример занимает 7 бит, названия элементов нигде не хранятся..
ps опоздал smile.gif

М
smile.gif И ноль потерял smile.gif
Цитата
for i:=1 to


compiler
Цитата(klem4 @ 21.01.2007 19:33) *

Только так ...

код мне не нравится но ладно...

А как быть со словами???
volvo
Цитата
код мне не нравится
В чем проблема? Пиши такой, который нравится... Только вот то, что тебе будет нравиться - не будет работать... "Тебе шашечки, или ехать?" (С)

Цитата
А как быть со словами?
С какими словами? Вопрос ставь так, чтобы его понимал не только ты один...
compiler
Цитата(volvo @ 21.01.2007 20:11) *

В чем проблема? Пиши такой, который нравится... Только вот то, что тебе будет нравиться - не будет работать... "Тебе шашечки, или ехать?" (С)

С какими словами? Вопрос ставь так, чтобы его понимал не только ты один...


я имел ввиду как печатать слова с множества. ведь этот алгоритм практически(СЛИШКОМ медлинный если использывать не счетчик, а словарь) неприменим.

А код мне все равно не нравитсяsmile.gif
Malice
Цитата(compiler @ 21.01.2007 21:19) *

я имел ввиду как печатать слова с множества.

Это ты имел ввиду ?
type days=(Sun, Mon, Tue, Wed, Thu, Fri, Sat);
const ndays:array [days] of string=
('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
var s:set of days;
dd:days;
begin
s:=[Sun, Mon, Wed, Thu, Fri, Sat];
for dd:=sun to sat do
if dd in s then write (ndays[dd],' ');
end.


Цитата
ведь этот алгоритм практически(СЛИШКОМ медлинный если использывать не счетчик, а словарь) неприменим.

Не понял sad.gif Поясни.
Множество может занимать максимум 32 байта, а обработка 32-х байт не может быть слишком медленной, как бы это не делали smile.gif
Цитата
А код мне все равно не нравитсяsmile.gif

Покажи свой.
compiler
Цитата(Malice @ 21.01.2007 20:25) *

Это ты имел ввиду ?
type days=(Sun, Mon, Tue, Wed, Thu, Fri, Sat);
const ndays:array [days] of string=
('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
var s:set of days;
dd:days;
begin
s:=[Sun, Mon, Wed, Thu, Fri, Sat];
for dd:=sun to sat do
if dd in s then write (ndays[dd],' ');
end.

Не понял sad.gif Поясни.
Множество может занимать максимум 32 байта, а обработка 32-х байт не может быть слишком медленной, как бы это не делали smile.gif

Покажи свой.


А если мы заранее не знаем какие будут слова в множество?

А код напишу...позже...

Всем пока инет отключают
klem4
Цитата
А код напишу...позже...


Ждем с нетерпением ...
Archon
А если изначально элементы задать в массиве, а в начале программы на его основе сгенерировать множество? Массив проще вывести.
volvo
Цитата
а в начале программы на его основе сгенерировать множество?
Множество ЧЕГО? Строк? У автора проблемы, похоже, с пониманием того, что строка (слово - это строка, правда, compiler?) не может быть базовым типом для множества... Такие вещи реализуются вручную...
мисс_граффити
Если бы автор объяснил, что такое слово, разговор был бы продуктивнее...
Может, это тип words=(slovo1,slovo2,slovo3)?
Хотя как-то не согласуется с
Цитата
А если мы заранее не знаем какие будут слова в масиве?
compiler
Не судите меня строго, я ведь не волшебник, а только учусь :=)
Я понял свою ошибку из-за которой возникло <<недорозумение>> в одном из сообщений я перепутал термин множество(Set) с масивом(Array). Прошу прощение mega_chok.gif

Теперь по поводу предложеного кода
Дело в том что этот код не учитывает возможности присутствия в множестве повторяющихся элементов
****Пример Входные Данные(Элементы множества): 1,22,333
***************Печать: 1,2,3
*********** Входные Данные: 1,2,3
***************Печать: 1,2,3
Вторая (субьективуная) причина -- нечетаемость кода
[code]
Насчет слов
Допустим существует программа:
пользыватель вводит фамилии сотрудников (программа должна вспомосчю цыкла записывать фамилии в множество до тех пор пока ввод не будет<<хватит>>), а потом выводит фамилии на экран.
Следующий вопрос возможно ли чтобы фамилии выводились в алфавитном порядке.

И напоследок повторяю: Не судите меня строго
мисс_граффити
Цитата
Дело в том что этот код не учитывает возможности присутствия в множестве повторяющихся элементов

Разумеется. А в множестве их и не может быть!
Цитата
Вторая (субьективуная) причина -- нечетаемость кода

Очень субъективно. Ничего такого не заметила.
Цитата
Не судите меня строго

Строго, не строго....
Базовым типом множества может быть только порядковый тип. Строка к такому не относится...
Поэтому осуществить это так, как ты собираешься - имхо, невозможно.
Можно создать свой тип "Фамилии" и записать туда ВСЕХ сотрудников. А потом в множество выбрать (пусть путем ввода с клавиатуры) некоторых. Понадобится преобразование из строки в фамилию...
Но ради чего такое извращение - не понимаю... Можно же воспользоваться более подходящими структурами данных!
compiler
блогадарю за помощ give_rose.gif
Жаль что моё понимание программирования на маленьком уравне (иначе бы б такой коллизии не возникло) mega_chok.gif
а код мне НЕ НРАВИТСЯ!!! dry.gif
мисс_граффити
Ну напиши другой - разве кто-то против? smile.gif
Я, например, только рада буду увидеть более оптимальное (коряво сказала... но смысл понятен) решение.
volvo
Цитата
Вторая (субьективуная) причина -- нечетаемость кода
Угу... Очень просто обвинить ВСЕХ в том, что ИХ код нечитаем. Особенно, когда ни одной строки ТВОЕГО кода никто так и не увидел... dry.gif Покажи же нам этот шедевр, достойный всяческого внимания...
compiler
Цитата(volvo @ 22.01.2007 17:53) *

Угу... Очень просто обвинить ВСЕХ в том, что ИХ код нечитаем. Особенно, когда ни одной строки ТВОЕГО кода никто так и не увидел... dry.gif Покажи же нам этот шедевр, достойный всяческого внимания...


Я невкоем случае не хотел некого обвинить
Разве стремление к лучшему -- негативно
Свой шедевр написатт НЕ МОГУ по причине слабых знаний в математики и программировании (как я говорил:<<только учусь>>) однако к опытным программистам читая эти строки может прийти гениальный МЕМ.
мисс_граффити
Цитата
Разве стремление к лучшему -- негативно

Конструктивное стремление - позитивно. Когда оно выражается в форме: "Вот так будет лучше, чем у вас...". А когда речь о "у вас плохо, потому что я ничего не понял" - по-моему, это проявление стремления переложить вину за отсутствие знаний на кого-то. В данном случае наиболее позитивно - сесть и разобраться с этим кодом. Как 6 строк кода, из которых 2 - объявление переменных, 2 - операторные скобки и одна - присваивание, могут быть нечитаемыми?
compiler
Цитата(мисс_граффити @ 22.01.2007 18:07) *

Конструктивное стремление - позитивно. Когда оно выражается в форме: "Вот так будет лучше, чем у вас...". А когда речь о "у вас плохо, потому что я ничего не понял" - по-моему, это проявление стремления переложить вину за отсутствие знаний на кого-то. В данном случае наиболее позитивно - сесть и разобраться с этим кодом. Как 6 строк кода, из которых 2 - объявление переменных, 2 - операторные скобки и одна - присваивание, могут быть нечитаемыми?

Эту задачу я решу лучьше(Вопрос когда) и обязательно первым делом положу на этот форум
Malice
Цитата

Пример Входные Данные(Элементы множества): 1,22,333

Таких входных данных быть не может в принципе, не веришь - проверь.
Фамилии в множество тоже не добавишь..
Цитата

Следующий вопрос возможно ли чтобы фамилии выводились в алфавитном порядке.

Можно, отсортировав массив, в котором они находятся.
Цитата(compiler @ 22.01.2007 19:10) *

Эту задачу я решу лучыше(Вопрос когда) и обязательно первым делом положу на этот форум

Будем ждать. Только определимся так: Множество - это Set of , а не массив.
compiler
Цитата(Malice @ 22.01.2007 18:25) *

Будем ждать. Только определимся так: Множество - это Set of , а не массив.

Я уже просил прощение за допущенную коллизию
А код кто-то да напишет
volvo
Цитата
А код кто-то да напишет
Да? Чтобы ты и его тоже назвал неэффективным? Извини, код нужен тебе - ты и пиши... И радуйся, что твой код самый-самый. А для этого лучшее средство - НИКОМУ и НИКОГДА его не показывать... dry.gif Чтоб никто ничего не сказал...

В общем, как напишешь - обращайся в Приват к кому-нибудь из модеров/админов, а этот флейм я закрываю...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.