tete du loic

 Loïc YON [KIUX]

  • Enseignant-chercheur
  • Référent Formation Continue
  • Responsable des contrats pros ingénieur
  • Référent entrepreneuriat
  • Responsable de la filière F2 ingénieur
  • Secouriste Sauveteur du Travail
mail
loic.yon@isima.fr
phone
(+33 / 0) 4 73 40 50 42
location_on
ISIMA
  • twitter
  • linkedin
  • viadeo

[C] Structures particulières

Date de première publication : 2023/10/25

Dans ce TP, il s'agit de tester les "structures particulières" que permet le C.

Enumérations

Définir une énumération semaine et vérifier que l'on peut faire une petite boucle (mais attention, elle ne marche que parce que les valeurs sont consécutives :-)).

Vous pouvez afficher une valeur d'une énumération mais vous aurez une valeur entière. Pour débogage, il faut utiliser un tableau de chaines de caractères ou une macro de génération.

Définir une deuxième énumération pour les mois de l'année. Vérifier qu'il n'est pas possible de faire :

enum semaine jour = FEVRIER;

Vous pouvez également vérifier que deux énumérations différentes ne peuvent définir la même valeur.

Champs de bits

Cette structure qui s'applique uniquement sur des champs entiers permet de spécifier préciser le nombre de bits nécessaires pour coder une information.

En général, on spécifie la couleur d'un pixel d'un écran en mélangeant trois couleurs : le rouge, le vert et le bleu (auxquelles on peut associer une transparence encore nommée alpha. Ça tombe bien nos yeux auraient au moins trois types de récepteurs : un pour chacune de ces couleurs (les cônes). On discrétise les niveaux de couleurs en 256 niveaux, ce qui fait tout de même plus de 16 millions de couleurs possibles, ce qui est pas mal du tout !

Déclarer une structure de 3 entiers et calculer la taille nécessaire pour stocker une image décompressé affichée sur un écran de dimensions 3024 pixels de large par 1964 pixels de haut ?

struct couleur {
    int r:8;
    int v:8;
    int b:8;
};

Calculer maintenant la taille requise si on utilise un champ de bits avec la même configuration et le gain obtenu

Unions

Vérifications

Définir les variables suivantes :


struct paire_s { int a; double b;} s1;
union  paire_u { int a; double b;} u1;

Afficher l'espace mémoire nécessaire pour stocker s1 et u1 et comparer...

Afficher les champs a et b après ces affectations :


s1.a = 5;
s1.b = 10.0;

u1.a = 5;
u1.b = 10.0;

Que constatez-vous ?

De la manipulation...

Il s'agit de coder le type de donnée "point" vue en cours. Un point peut être représenté sous forme cartesienne ou polaire


struct cartesien {
    double x;
    double y;
};

et


struct polaire {
    double r;
    double t;
};

la structure point doit mémoriser le type de coordonnées et les coordonnées..

Vous vérifierez que l'on ne peut pas créer une structure ou une union avec le même "nom" :


struct nom {};
union  nom {};

Coder ensuite une fonction qui prend un point en parametre et qui renvoie le point en coordonnées polaires

Coder une fonction qui prend un point en parametre et qui renvoie un point exprimé en coordonnés cartésiennes.

Coder une fonction qui renvoie la distance entre deux points. Essayer par exemple :

Les constantes mentionnées ci-dessus sont définies dans maths.h, ainsi que les fonctions trigonométriques dont on a besoin pour les conversions. Il ne faut pas oublier de compiler avec l'option -lm