• Aucun résultat trouvé

Exercice 2 : Types ´ enum´ er´ es

N/A
N/A
Protected

Academic year: 2022

Partager "Exercice 2 : Types ´ enum´ er´ es"

Copied!
5
0
0

Texte intégral

(1)

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.

Solution struct complex {

float x ; float y ; };

Q. 2D´efinir un type C, complexcomme ´etant une structurestruct complex.

Solution typedef struct complex complex;

Q. 3D´efinir une fonctionvoid print_complex(complex c);, affichant un nombre complexe Solution

void print_complex(complex c) { printf("%f + %f i", c.x, c.y);

}

Q. 4D´efinir une fonctioncomplex add(complex a, complex b);, retournant a+b.

Solution complex add(complex a, complex b) {

complex res;

res.x = a.x + b.x;

res.y = a.y + b.y;

return res;

}

Q. 5D´efinir une fonctioncomplex opp(complex a);, retournant −a.

Solution complex opp(complex a) {

(2)

}

Q. 6D´efinir une fonctioncomplex sub(complex a, complex b);, retournant a−b.

Solution complex sub(complex a, complex b) {

return add(a, opp(b));

}

Q. 7D´efinir une fonctioncomplex mul(complex a, complex b);, retournant le produit ab.

Solution complex mul(complex a, complex b) {

return (complex) {a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x};

}

Q. 8 D´efinir une fonction complex scal(float alpha, complex a);, retournant le produit scalaire alpha.a.

Solution complex scal(float alpha, complex a) {

return (complex) {alpha * a.x, alpha * a.y};

}

Q. 9D´efinir une fonctioncomplex sq_norm(complex a);, retournant |a|2. Solution

float sq_norm(complex a) {

return (a.x * a.x + a.y * a.y);

}

Q. 10D´efinir une fonction complex conjugate(complex a);, retournant le conjugu´e de a : a.

Solution complex conjugate(complex a) {

return (complex) {a.x, - a.y};

}

Q. 11D´efinir une fonction complex inv(complex a);, retournant 1a. Solution

complex inv(complex a) {

return scal(1/(sq_norm(a)), conjugate(a));

(3)

Q. 12D´efinir un nouveau typecomplex2contenant deux flottantsretthetaet repr´esentant le nombre complexereitheta.

Solution struct complex {

float x ; float y ; };

Q. 13D´efinir une fonction void print_complex2(complex2 c);, affichant un nombre complexe Solution

void print_complex2(complex2 c) { printf("%f e^{i %f}", c.r, c.theta);

}

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.

Solution complex to_complex(complex2 c) {

complex res;

res.x = c.r * cos(c.theta);

res.y = c.r * sin(c.theta);

return res;

}

complex2 of_complex(complex c) { complex2 res;

res.r = sqrt(sq_norm(c));

res.theta = atan2(c.y, c.x);

return res;

}

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 elle-mˆeme un type ´enum´er´e.

Q. 15D´efinir un enum color pouvant ˆetre Pique, Coeur, Carreau, ou Trefle Solution

enum color {Pique, Coeur, Carreau, Trefle};

(4)

Q. 16D´efinir un enum value pouvant ˆetre Roi,Dame, Valet.

Solution enum value {Roi, Dame, Valet};

Q. 17D´efinir un type structur´e card´etant compos´e d’une couleur et d’une valeur.

Solution typedef struct card {

enum color c;

enum value v;

} card;

Q. 18D´efinir des fonctions d’affichage pour les couleurs, valeurs et finalement cartes.

Solution void print_card(card c) {

print_value(c.v); printf(" de "); print_color(c.c);

}

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.

Solution void fill_all_card(card carr[12]) {

for (int i = 0 ; i < 4; i++) { for (int j = 0 ; j < 3 ; j++) {

carr[i*3+j].c = i;

carr[i*3+j].v = j;

} } }

Q. 20 D´efinir une fonction void print_deck(card carr[12]); permettant l’affichage d’un jeu de carte.

Solution void print_deck(card carr[12]) {

for (int i = 0 ; i < 12 ; i ++) { print_card(carr[i]);

printf("\n");

} }

(5)

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 Solution void shuffle(card carr[12]) {

int n = 12;

int i, j;

card tmp;

for (i = n - 1; i > 0; i--) { j = rand() % (i + 1);

tmp = carr[j];

carr[j] = carr[i];

carr[i] = tmp;

} }

Q. 22Afficher un jeu de carte m´elang´e.

Solution int main() {

card carr[12];

fill_all_card(carr);

shuffle(carr);

print_deck(carr);

}

Références

Documents relatifs

Carrier SMPP Gateway forwards TN to Routing Service to determine routing information (some carriers skip this step and route directly to Aggregator A) 2. Routing Service responds

Le triangle CAS est ´ equilat´ eral, puisque AC = AS avec angle π/3

100 of the egg shell calcium derived from labelled calcium ; only half of that was analyzed in the 2 nd eggs when the hens were z 5 months old. The deposition of Ca *

D´ efinition g´ en´ erale : Un type ´ enum´ er´ e (appel´ e souvent ´ enum´ eration ou juste enum, parfois type ´ enum´ eratif ou liste ´ enum´ erative) est un type de

Viviane Pons ´ Enum´ eration des intervalles du treillis de Tamari... Tamari lattice

I Une ´enum´eration connaˆıt l’ensemble de ses valeurs (values(), permet d’it´erer) et est capable d’associer un nom `a une valeur (valueOf()).. I On peut en plus y ajouter

• Versatility: Service providers and operators are starting to embrace the ENUM mechanism, first of all to help them in the routing decision of calls between PSTN and IP

= suivi d’une constante enti`ere), les ´el´ements suivants ´etant alors incr´ement´es `a partir de cette valeur. Par exemple si on d´eclare :.. enum jour {lundi, mardi, mercredi =