0 / -1 / 0
Регистрация: 30.03.2016
Сообщений: 27
1

Множества

07.01.2017, 17:14. Показов 508. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех!
Подскажите пожалуйста, что делаю не так?

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.Button3Click(Sender: TObject);
type TName = (маша, даша, клаша, саша);
     Tsee = set of TName;
var
   w: TSee;
   s: string;
begin
//w := ['маша', 'даша'];
   w := [маша, даша];
   s:= Edit1.Text;
   if s in w then
      Label1.Caption:= Edit1.Text + ' входит в список'
   else
      Label1.Caption:= Edit1.Text + ' НЕ входит в список';
end;
Ругается на строку "if s in w then"
Я понимаю, что что-то не так, но что?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.01.2017, 17:14
Ответы с готовыми решениями:

Из множества целых чисел от 1 до 30 выделить два множества
Помогите пожалуйста)) Из множества целых чисел от 1 до 30 выделить два множества: чисел, кратных 2...

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

Из множества целых чисел от 1 до 30 выделить два множества: чисел, кратных 2 и чисел, кратных 3
Из множества целых чисел от 1 до 30 выделить два множества: чисел, кратных 2 и чисел, кратных 3.

Множества
Вводится набор строк и набор чисел. Введенные числа показывают номера выбранных мест в строках....

13
botsik
262 / 262 / 140
Регистрация: 05.06.2016
Сообщений: 1,247
Записей в блоге: 1
07.01.2017, 17:39 2
строка и элемент типа, не сходится...
0
0 / -1 / 0
Регистрация: 30.03.2016
Сообщений: 27
07.01.2017, 17:53  [ТС] 3
Спасибо конечно, но ответ не помог. Понятно, что строка и свой тип - разные вещи, были б одинаковые - не было б вопроса.
0
Житель Земли
2999 / 2998 / 391
Регистрация: 26.07.2011
Сообщений: 11,463
Записей в блоге: 1
07.01.2017, 18:54 4
Delphi
1
2
3
4
TName: TStringlist;
 
if TName.IndexOf(Edit1.Text) = -1 then 'Не входит в список'
else 'Входит в список';
0
5610 / 4383 / 1397
Регистрация: 14.04.2014
Сообщений: 19,612
Записей в блоге: 19
07.01.2017, 19:16 5
строка в делфи оборачивается в апострофы -- -'строка'
TName = (маша, даша, клаша, саша); - это точно не строки, да ведь?
на самом деле компилятор пишет у себя
TName = (маша=0, даша=1, клаша=2, саша=3);
и тут:
TSee = set of TName тоже нигде строки не замечены

с какого ж бодуна тогда
Цитата Сообщение от MorpheyZ Посмотреть сообщение
if s in w then
s - строка сравнивается с множеством?

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

в результате мир строк и мир множеств не пересечется никогда
0
Почетный модератор
64291 / 47589 / 32740
Регистрация: 18.05.2008
Сообщений: 115,181
07.01.2017, 19:27 6
Цитата Сообщение от krapotkin Посмотреть сообщение
множества могут включать в себя только перечислимые типы размером не более байта
Это не так, например такое
Delphi
1
type name=(masha,dasha,klasha,sasha);
вполне корректно, а современных версиях видимо и слова из русских букв принимает.
0
5610 / 4383 / 1397
Регистрация: 14.04.2014
Сообщений: 19,612
Записей в блоге: 19
07.01.2017, 20:00 7
Puporev, о чем вы, какие "слова"?
идентификаторы с 2010 можно на русском писать, если не страшно)
masha, dasha - ничем не отличаются от red, green - это идентификаторы из набора латинских символов
никакого отношения не имеют к строкам (string)
и, как я уже написал, заменяются целыми константами, начиная с 0
если написать 257 таких идентификаторов, то тоже не влезут в множество по определению
0
0 / -1 / 0
Регистрация: 30.03.2016
Сообщений: 27
07.01.2017, 20:37  [ТС] 8
Ребята, я раньше (Delphi 5) точно помню как то делал: Месяца перечислял, масти карт, еще чегото, к сожалению архив не сохранился. И все это замечательно работало, а сейчас что то не врублюсь как сделать, в инете порылся тоже ничего толкового не нашёл...(
Может через массив как то будет проще, хотя казалось, что перечисления самое простое, что можно для этого придумать...
0
5610 / 4383 / 1397
Регистрация: 14.04.2014
Сообщений: 19,612
Записей в блоге: 19
07.01.2017, 21:36 9
еще раз
то, что в тексте программы не заключено в '', это совсем не строки.
для программы это перечисляемые типы данных, созданные программистом
и перевести red в 'red' нет никакой возможности.

в заголовке темы только один вопрос - что не так. Я объяснил.
Чтобы ответить на вопрос "что делать", нужно знать, а что нужно-то сделать?
0
0 / -1 / 0
Регистрация: 30.03.2016
Сообщений: 27
07.01.2017, 22:13  [ТС] 10
Что нужно сделать? Определить есть ли введеное в edit слово в списке. Каждый список постоянный, и менятся не будет, а проверок может быть тысячи и более на принадлежность какому то списку. Быстродействие имеет значение.
0
5610 / 4383 / 1397
Регистрация: 14.04.2014
Сообщений: 19,612
Записей в блоге: 19
07.01.2017, 23:58 11
String строка List список
StringList - список строк
у него есть поиск "в лоб" list.IndexOf
как вам и написал DenNik,
если слово берется из Edit
то откуда возьмутся тысячи?
0
0 / -1 / 0
Регистрация: 30.03.2016
Сообщений: 27
08.01.2017, 01:41  [ТС] 12
Добавлено через 8 минут
Понимаете ли тов. krapotkin, я упростил по максимуму вопрос, на самом деле в программе вместо Edit будет Memo и большой текст. И каждое слово будет проверятся в паре сотен разных списков. Не хотелось бы каждый раз создвать StringList-ы, а потом очищать память, хотелось бы однажды забить перечисления, и забыть про них. Т. к. в зависимости от текста нужны будут разные списки. Поэтому идея с StringList-ми мне не очень понравилась.
Сделал такой вариант (может кому пригодится), не знаю насколько быстр он будет по сравнению с вариантом на массивах:

Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.Button3Click(Sender: TObject);
var  i: Integer;
begin
for i := 0 to 3 do
   if GetEnumName(TypeInfo(TName), i) = Edit1.Text then
      begin Label1.Caption:= Edit1.Text + ' входит в список'; Break; end
   else
      Label1.Caption:= Edit1.Text + ' НЕ входит в список';
end;
За идею была взята ветка "https://www.cyberforum.ru/delphi-beginners/thread1752323.html" кстати с вашим участием.
0
пофигист широкого профиля
4682 / 3118 / 857
Регистрация: 15.07.2013
Сообщений: 17,980
08.01.2017, 01:50 13
Цитата Сообщение от MorpheyZ Посмотреть сообщение
я упростил по максимуму вопрос
Слишком уж по максимуму. Это во-первых.
А во-вторых смутил всех упоминанием термина множество.
Давай уж лучше ты задай вопрос без упрощений.
0
5610 / 4383 / 1397
Регистрация: 14.04.2014
Сообщений: 19,612
Записей в блоге: 19
08.01.2017, 08:30 14
если у нас где-то есть слово скорость, то в этом месте нет слова экранные(интерфейсные) компоненты
не
храните
данные
на
экране

формируйте структуры данных и производите работу с ними
чтобы ответить точнее, нужно полностью знать задачу
даже исключая использование компонентов, тупой перебор - это последнее, что можно придумать для быстрого поиска
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.01.2017, 08:30
Помогаю со студенческими работами здесь

Множества
Дана непустая последовательность слов из строчных латинских букв. Слова разделены запятой, за...

Множества
доброго времени суток, обращаюсь по такому вопросу: есть 9 эдитов, в 5 вводятся числа 1..5, а в 4...

Множества
Множества: Написать программу, вычисляющую значение выражения : ( + ) * * ( - )

Множества
Помогите, пожалуйста, с решением программы: Пусть дана непустая последовательность слов из...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru