09.01.2015 Views

Langage C - Pages de Michel Deloizy - Free

Langage C - Pages de Michel Deloizy - Free

Langage C - Pages de Michel Deloizy - Free

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

LICENCE SPI-EEA TRAVAUX PRATIQUES M. <strong>Deloizy</strong><br />

TP5 : STRUCTURES<br />

I. Définition d'une structure<br />

Définir la structure T_Quot <strong>de</strong> la manière suivante :<br />

type<strong>de</strong>f struct {<br />

int num ;<br />

int <strong>de</strong>n ;<br />

} T_Quot ;<br />

Cette structure permet <strong>de</strong> manipuler <strong>de</strong>s nombres rationnels en indiquant par la valeur du numérateur et la valeur du<br />

dénominateur.<br />

II. Encombrement mémoire<br />

Observer (avec l'opérateur sizeof) l'encombrement mémoire <strong>de</strong> cette structure.<br />

III. Tableau <strong>de</strong> structures<br />

Définir un tableau permettant <strong>de</strong> mémoriser 1000 structures, en initialisant les <strong>de</strong>ux premières structures avec les<br />

valeurs 16/9 et 4/3.<br />

Indiquer l'encombrement mémoire <strong>de</strong> ce tableau.<br />

IV. Acquisition et affichage <strong>de</strong>s champs<br />

Écrire une fonction permettant d'acquérir au clavier une structure T_Quot.<br />

Cette fonction posera les questions suivantes :<br />

Entrer le numérateur :<br />

Entrer le dénominateur :<br />

Le prototype <strong>de</strong> cette fonction sera :<br />

void AcqQuot(T_Quot *q);<br />

Écrire une fonction qui affiche la valeur <strong>de</strong> la structure sous la forme : nnn / ddd (Ex : 16/9)<br />

Le prototype <strong>de</strong> cette fonction sera :<br />

void AffQuot(T_Quot *q);<br />

Écrire une fonction qui affiche la valeur numérique <strong>de</strong> la structure sous la forme : xxx.xxx (Ex. : 1.778)<br />

Le prototype <strong>de</strong> cette fonction sera :<br />

void AffValQuot(T_Quot *q);<br />

V. Fonctions <strong>de</strong> manipulation associées :<br />

Écrire les fonctions suivantes :<br />

Multiplication <strong>de</strong> 2 rationnels :<br />

T_Quot *MulQuot(T_Quot *q1, T_Quot *q2) ;<br />

Multiplie (*q1) et (*q2). Range le résultat dans une mémoire interne à la fonction dont lřadresse est renvoyée.<br />

Addition <strong>de</strong> 2 rationnels :<br />

T_Quot *AddQuot(T_Quot *q1, T_Quot *q2) ;<br />

Ajoute (*q1) et (*q2). Range le résultat dans une mémoire interne à la fonction dont lřadresse est renvoyée.<br />

<br />

3 Simplification <strong>de</strong> rationnels :<br />

void SimplQuot(T_Quot *q) ;<br />

Simplifie la fraction contenue dans (*q). Range le résultat dans (*q).<br />

On utilisera un algorithme <strong>de</strong> recherche du pgcd :<br />

Algorithme d’Eucli<strong>de</strong><br />

ENTREE : Deux entiers a et b. - SORTIE : Leur plus grand diviseur commun, pgcd(a,b).<br />

1. Faire tant que le reste est non nul :<br />

Division entière avec reste <strong>de</strong> a et b : a = q · b + r<br />

a ← b; b ← r<br />

2. Retourner b, qui est alors le plus grand diviseur commun.<br />

Exemple : Calcul du pgdc <strong>de</strong> 2926 et 30030. On obtient le tableau suivant.<br />

a b q r<br />

2926 30030 0 2926<br />

30030 2926 10 770<br />

2926 770 3 616<br />

770 616 1 154<br />

616 154 4 0<br />

Le resultat est donc : pgdc(30030, 2926) = 154.<br />

3 Exercice optionnel<br />

-38-

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!