Ошибка в преобразовании типов - 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.

Объяснение кода листинга программы

  1. Импортируется модуль TypInfo.
  2. Определяется тип перечисления ex с возможными значениями ab, ba, ac, ad, bd, cd.
  3. Объявлены переменные ans, b, s, item.
  4. Вводится строка с помощью функции readln(ans).
  5. Переменной b присваивается значение false.
  6. В цикле for перебираются все значения типа ex.
  7. С помощью функции GetEnumName(TypeInfo(ex), Ord(item)) проверяется, соответствует ли введенная строка текущему значению типа ex.
  8. Если соответствует, то переменной s присваивается текущее значение типа ex, переменной b присваивается значение true и цикл прерывается.
  9. После цикла проверяется значение переменной b. Если оно равно true, то в переменной s содержится значение типа ex, соответствующее введенной строке. Если же b равно false, то введенная строка не соответствует ни одному идентификатору из перечисления.

ИИ поможет Вам:


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

Оцени полезность:

8   голосов , оценка 4 из 5