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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2014, 23:16   #1
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию Ограничить входной параметр

Что то я затупил совсем, но все же: Есть функция
Код:
function NLineFunction(AModelFunction: Integer; var FX: array of Real): Boolean;
Параметр "AModelFunction" может быть задан как 0 или 1 или 2 или 3.
Как прописать ограничения что бы функция не воспринимала другие значения, ну что то типа TMyType = (0,1,2,3); AModelFunction: TMyType;
kta87 вне форума Ответить с цитированием
Старый 10.07.2014, 23:27   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от kta87 Посмотреть сообщение
Параметр "AModelFunction" может быть задан как 0 или 1 или 2 или 3.
Как прописать ограничения что бы функция не воспринимала другие значения, ну что то типа TMyType = (0,1,2,3); AModelFunction: TMyType;
Можно описать AModelFunction как перечисление. Например:
Код:
type
TAModelFunction=(0,1,2,3);
Streletz вне форума Ответить с цитированием
Старый 10.07.2014, 23:56   #3
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию

Объявляю так:
Код:
TATypeFunction = (PowerFunctionModel, ExponentialFunctionModelOne, ExponentialFunctionModelTwo, LogarithmicFunctionModel);
...
function NLineFunction(AModelFunction: TATypeFunction; var FX: array of Real): Boolean;
...
Дальше по коду нужно бы использовать
Код:
Сase AModelFunction of 
0: код;
1: код;
и т.д.
end;
Но получаю несовпадение типов! Хотя из литературных азов следует: "Можно утверждать, что объявление перечисляемого типа — это сокращенная форма записи объявления именованных констант. Например, приведенное выше объявление типа TDayOfWeek равносильно следующему объявлению:
const
MON=0; TUE=1; WED=2; THU=3; FRI=4; SAT=5; SUN=6;
"
Ладно, упустил обыкновение порядковых номеров, т.е. следует писать Сase Ord(AModelFunction) of
Streletz, спасибо за помощь!
Тему можно закрывать!

Последний раз редактировалось kta87; 11.07.2014 в 01:07.
kta87 вне форума Ответить с цитированием
Старый 11.07.2014, 07:46   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А так нельзя что-ли, и визуально понятней
Код:
Сase AModelFunction of 
PowerFunctionModel: код;
ExponentialFunctionModelOne: код;
и т.д.
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.07.2014, 09:18   #5
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию

Аватар, согласен!
kta87 вне форума Ответить с цитированием
Старый 11.07.2014, 22:49   #6
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

В предельном случае, нельзя доверять входным данным функции, и нужно проверить на допустимость этих данных - в ветке else кейса или просто проверкой, например if Ord(inputvalue) in [Ord(Low(TEnum))..Ord(High(TEnum))] .
Просто можно не увидеть ошибки при каком-либо действии с приведением некоего числа (получаемого извне, например) к данному перечислимому типу, и тогда в переменной будет лежать невалидное значение (в рантайме , да и в компайлтайме с кастом это никак не ограничивается)
phomm вне форума Ответить с цитированием
Старый 11.07.2014, 23:36   #7
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

А что, если использовать тип-диапазон, то есть:
Код:
type TMyType = 0..3;
............
AModelFunction: Ttype;...
?
Вадим Мошев вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
здравствуйте нужно построить список символов, содержащих входной пакет. Vitlii Помощь студентам 1 03.03.2014 07:38
Построить список символов, содержащий входной текст. Pascal ABC _T_A_H_K_ Помощь студентам 1 12.01.2014 12:52
Входной информацией является строка - последовательность слов,разделенных пробелами. borntank Помощь студентам 3 26.04.2013 20:30
Входной и выходной файл DreamMZ Помощь студентам 2 19.12.2011 22:03
СИ Проверка того что каждый символ во входной строке является цифрой Super_Hornet Помощь студентам 2 03.11.2011 10:32