Полиморфный массив - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Как задать динамический массив из float и того, что было определено в typedef-e? typedef обычная структурка
typedef struct ComplexObj ComplexObj;
 
    struct ComplexObj {
        float RealValue;
        float ImaginValue;
        };
Никто не знает?

Решение задачи: «Полиморфный массив»

textual
Листинг программы
#include <stdio.h>
 
typedef struct ComplexObj ComplexObj;
 
struct ComplexObj {
    float RealValue;
    float ImaginValue;
};
 
struct Variant
{
    enum { Unknown, Double, ComplexObjStruct } type;
    
    union
    {
        double x;
        ComplexObj co;
    };
};
 
int main()
{
    struct Variant v;
    int t;
    scanf("%d", &t);
    
    if (t == 1) {
        v.type = Double;
        v.x = 3.14;
    }
    else if (t == 2) {
        v.type = ComplexObjStruct;
        v.co.RealValue = 1.2;
        v.co.ImaginValue = 3.4;
    } else {
        v.type = Unknown;
    }
    
    // ...
    
    switch (v.type)
    {
        case Double: printf("x = %g\n", v.x); break;
        case ComplexObjStruct: printf("%g + i*%g\n", v.co.RealValue, v.co.ImaginValue); break;
        default: printf("Error: unknown type.\n");
    }
}

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

  1. Объявлены структуры ComplexObj и Variant
  2. В структуре ComplexObj содержатся поля RealValue и ImaginValue типа float
  3. В структуре Variant определён тип данных с помощью enum
  4. В структуре Variant определён union, который позволяет хранить либо double, либо ComplexObj
  5. В функции main создаётся экземпляр структуры Variant v
  6. С помощью scanf вводится значение переменной t
  7. В зависимости от значения t, устанавливается тип данных в структуре v
  8. Если тип данных Double, то в v.x записывается значение 3.14
  9. Если тип данных ComplexObjStruct, то в v.co записывается значение RealValue=1.2 и ImaginValue=3.4
  10. Если тип данных Unknown, то ничего не делается
  11. Выполняется блок кода, который не виден в данном примере (комментарий // ...)
  12. С помощью switch выводится значение v.x или v.co в зависимости от типа данных
  13. Если тип данных не соответствует ни одному из известных, выводится сообщение об ошибке

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


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

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

11   голосов , оценка 3.909 из 5
Похожие ответы