Ошибка в преобразовании типов - Free Pascal
Формулировка задачи:
Здравствуйте! Помогите, пожалуйста, справиться со следующей задачей: необходимо проверить, принадлежат ли введенные данные к перечисляемому типу, и если принадлежат, то присвоить переменной этого перечисляемого типа введенные данные, а если не принадлежат, то запросить ввод данных еще раз. Т.е. например, задан тип:
Затем вводятся данные (например, переменная или это делается через предлог
Type ex = (ab, ba, ac, ad, bd, cd);
ans: string;
). Проверяется вышеуказанное условие (я так понимаю, что примерно так:if ans in ex
of
?). И уже дальше переменной типаex
(напримерs: ex
) присваивается значение переменнойans
. Но вот здесь у меня и возникла проблема: в силу того, что типы этих переменных различаются, невозможно присвоитьs
значениеans
невозможно, т.к. такое преобразование типов сделать невозможно. Можно ли как-то обойти это ограничение? Заранее спасибо, H@kerРешение задачи: «Ошибка в преобразовании типов»
textual
Листинг программы
uses typinfo; type ex = (ab, ba, ac, ad, bd, cd); var ans : string; b : boolean; s, item : ex; begin readln(ans); b := false; for item in ex do if GetEnumName(TypeInfo(ex), Ord(item)) = ans then begin s := item; b := true; break; end; // если b = true - то в s содержится значение типа ex, соответствующее введенной строке // если же false - значит, введенная строка не соответствует ни одному идентификатору из перечисления end.
Объяснение кода листинга программы
- Импортируется модуль TypInfo.
- Определяется тип перечисления ex с возможными значениями ab, ba, ac, ad, bd, cd.
- Объявлены переменные ans, b, s, item.
- Вводится строка с помощью функции readln(ans).
- Переменной b присваивается значение false.
- В цикле for перебираются все значения типа ex.
- С помощью функции GetEnumName(TypeInfo(ex), Ord(item)) проверяется, соответствует ли введенная строка текущему значению типа ex.
- Если соответствует, то переменной s присваивается текущее значение типа ex, переменной b присваивается значение true и цикл прерывается.
- После цикла проверяется значение переменной b. Если оно равно true, то в переменной s содержится значение типа ex, соответствующее введенной строке. Если же b равно false, то введенная строка не соответствует ни одному идентификатору из перечисления.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д