Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2008, 21:10   #1
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию Конструкция case of работает некорректно! Как исправить?

Добрый день!

Вот конструкция кода:

type
TSampleType = (stX, stY, stZ);
TSampleTypes = set of TSampleType;

private
FstX; FstY; FstZ : String;
FSampleType : TSampleTypes;

procedure Form1.Create(Sender : TObject);
begin
FSampleType := [stX];
...............................
end;

function GetInfoAboutSampleType() : String;
begin
case Integer(FSampleType) of // компилятор выдает ошибку здесь, когда заменяю Integer(FSampleType) на Byte(FSampleType) ошибки нет
0 : Result := FstX;
1 : Result := FstY;
2 : Result := FstZ;
0, 1 : Result := FstX + FstY; // компилятор выдает ошибку здесь
0, 2 : Result := FstX + FstZ; // компилятор выдает ошибку здесь
1, 2 : Result := FstY + FstZ; // компилятор выдает ошибку здесь
else Result := FstX + FstY + FstZ;
end;
end;
Как исправить, чтобы код работал корректно?
Все спасибо!
SkAndrew вне форума Ответить с цитированием
Старый 05.04.2008, 21:23   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Тип множество не может быть более 255 элементов, поэтому byte подходит, а integer или скажем Word не подойдут.
Кроме того один и тот же указатель не может указывать на разные команды (0,1,2 у вас по два раза).

Последний раз редактировалось puporev; 05.04.2008 в 21:26.
puporev вне форума Ответить с цитированием
Старый 05.04.2008, 21:38   #3
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию Спасибо за ответ, но как тогда прописать оставшиеся строки?

Спасибо за ответ, но как тогда прописать строки иначе:
0, 1 : Result := FstX + FstY; // компилятор выдает ошибку здесь
0, 2 : Result := FstX + FstZ; // компилятор выдает ошибку здесь
1, 2 : Result := FstY + FstZ; // компилятор выдает ошибку здесь
мне нужно именно такие значения Result?
Спасибо!
SkAndrew вне форума Ответить с цитированием
Старый 05.04.2008, 23:06   #4
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Во-первых, строку FstX; FstY; FstZ : String; нужно записать правильно, используя запятые FstX, FstY, FstZ : String;

Во-вторых, раз уж идет работа с множествами, так нужно использовать команды множеств, а не перечислений. Например, так:
Код:
Result := '';
if stX in FSampleType then Result := Result + FstX;
if stY in FSampleType then Result := Result + FstY;
if stZ in FSampleType then Result := Result + FstZ;
Jeni вне форума Ответить с цитированием
Старый 05.04.2008, 23:40   #5
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию Возможно ли получить все варианты Result функции?

Спасибо за ответ, но возможно ли при конструкции в последнем ответе получить возможные варианты для предложенной к обсуждению мной функции?
SkAndrew вне форума Ответить с цитированием
Старый 06.04.2008, 00:08   #6
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Цитата:
Сообщение от SkAndrew Посмотреть сообщение
Спасибо за ответ, но возможно ли при конструкции в последнем ответе получить возможные варианты для предложенной к обсуждению мной функции?
Честно говоря, не уверен, что полностью уловил смысл этой фразы. Могу только сказать, что тот код, который я привел, выдаст любой вариант сочетаний строк в зависимости от значения FSampleType - от пустой строки до суммы всех трех строк FstX, FstY и FstZ.
Jeni вне форума Ответить с цитированием
Старый 06.04.2008, 00:21   #7
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию

Спасибо я все пронял!
SkAndrew вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
IdHTTP1 некорректно работает nike-p Работа с сетью в Delphi 9 23.07.2008 23:13
скажите почему работает некорректно pimiento Общие вопросы C/C++ 6 29.05.2008 17:21
Задача на case klop.92 Помощь студентам 4 28.04.2008 21:17
Конструкция файла SunKnight Общие вопросы Delphi 4 23.04.2008 08:26
Case из STRING. HELP! Altera Компоненты Delphi 12 24.02.2008 12:17