Isup 1 - Programmation TD no7 Matthieu Journault 1 d´ecembre 2020 Il est assez rare en programmation de ne devoir manipuler que des types atomiques, comme les entiers, les chaˆınes de caract`eres, les flottants, etc... Pour cette raison tous les langages de programmation fournissent `a l’utilisateur un moyen de d´efinir de nouveaux types plus complexes, comprendre : compos´es.
Exercice 1 : Types structur´ es
Q. 1 D´efinir une structure struct complex; permettant de repr´esentant un nombre complexe z au moyen de deux float, x ety tel que z =x+iy.
Q. 2D´efinir un type C, complexcomme ´etant une structurestruct complex.
Q. 3D´efinir une fonctionvoid print_complex(complex c);, affichant un nombre complexe
Q. 4D´efinir une fonctioncomplex add(complex a, complex b);, retournant a+b.
Q. 5D´efinir une fonctioncomplex opp(complex a);, retournant −a.
Q. 6D´efinir une fonctioncomplex sub(complex a, complex b);, retournant a−b.
Q. 7D´efinir une fonctioncomplex mul(complex a, complex b);, retournant le produit ab.
Q. 8 D´efinir une fonction complex scal(float alpha, complex a);, retournant le produit scalaire alpha.a.
Q. 9D´efinir une fonctioncomplex sq_norm(complex a);, retournant |a|2.
Q. 10D´efinir une fonction complex conjugate(complex a);, retournant le conjugu´e de a : a.
Q. 11D´efinir une fonction complex inv(complex a);, retournant 1
a.
Q. 12D´efinir un nouveau typecomplex2contenant deux flottantsretthetaet repr´esentant le nombre complexereitheta.
Q. 13D´efinir une fonction void print_complex2(complex2 c);, affichant un nombre complexe
Q. 14D´efinir deux fonctions de conversions complex to_complex(complex2 c);et
complex2 of_complex(complex c); permettant les traductions d’une repr´esentation en l’autre.
Exercice 2 : Types ´ enum´ er´ es
Dans cet exercice nous voulons repr´esenter un jeu de carte par un tableau contenant toutes les cartes. Les cartes ´etant d´efinies par un type structur´e (carte, couleur), chacune de ces deux entit´es ´etant
1
elle-mˆeme un type ´enum´er´e.
Q. 15D´efinir un enum color pouvant ˆetre Pique, Coeur, Carreau, ou Trefle
Q. 16D´efinir un enum value pouvant ˆetre Roi,Dame, Valet.
Q. 17D´efinir un type structur´e card´etant compos´e d’une couleur et d’une valeur.
Q. 18D´efinir des fonctions d’affichage pour les couleurs, valeurs et finalement cartes.
Q. 19D´efinir une fonctionvoid fill_all_card(card carr[12]) prenant en argument un tableau de carte et le remplissant avec chacune des 12 cartes de notre jeu de carte.
Q. 20 D´efinir une fonction void print_deck(card carr[12]); permettant l’affichage d’un jeu de carte.
Q. 21 D´efinir une fonction void shuffle(card carr[12]) impl´ementant l’algorithme de Fisher et Yates pour m´elanger un tableau :
— Pour i allant de n `a 1 ;
— Choisir j uniform´ement dans 0, . . . , i
— Inverser le contenu du tableau des cases i etj
Q. 22Afficher un jeu de carte m´elang´e.
2