| Séance d'exercices 9, Programmation I |
| Sciences et Technologies du Vivant, Semestre 1 |
Dans cet exercice, vous allez écrire quelques fonctions permettant
la manipulation de nombres complexes. Déclarez le type
Complexe, qui sera une structure représentant un nombre
complexe. Cette structure aura donc deux champs de type
float, que nous appelerons re et im, et qui
contiendront respectivement les parties réelles et imaginaire du
nombre complexe.
struct Complexe {
float re, im;
};
init_comp et afficher_comp qui
initialise et affiche respectivement une variable de type
Complexe. Ces fonctions auront l'en-tête suivant:
Complexe init_comp(float re, float im)
et
void afficher_comp(Complexe c)
main permettant de tester les deux
fonctions que vous venez d'écrire.
add_comp permettant de calculer la
somme de deux complexes, qui aura comme en-tête
Complexe add_comp(Complexe C1, Complexe C2)
Complexe mult_comp(Complexe C1, Complexe C2)
Complexe mult_scal_comp(float s, Complexe C)
Complexe sqrt_comp(float r)
qui renvoient respectivement
module qui renvoie le
module d'un complexe passé en paramètre.
Nous allons définir une structure Fraction, qui permettra de
représenter des fractions:
struct Fraction
{
int numerateur;
int denominateur;
};
qui correspondra à la fraction
.
Nous voulons que les fractions soient toujours irréductibles, même
après un calcul. Par exemple, le produit des fractions
et
devra donner la fraction
, et non pas la fraction
. Pour cela, on
pourra utiliser la fonction pgcd:
int pgcd(int a, int b) {
int m;
if (a < b)
m = a;
else
m = b;
while ((a % m != 0) || (b % m != 0))
m--;
return m;
}
Ainsi, la fonction init_frac s'écrit:
Fraction init_frac(int num, int den)
{
int div = pgcd(num, den);
Fraction resultat;
resultat.numerateur = num / div;
resultat.denominateur = den / div;
return resultat;
}
Comme pour l'exercice sur les complexes, écrivez les fonctions
afficher_frac, add_frac, mult_frac,
mult_scal_frac, dont le but est, respectivement, d'afficher une
fraction, d'additioner 2 fractions, de multiplier 2 fractions et de
multiplier une fraction par un scalaire..
En utilisant la fonction init_frac, les fonctions
add_frac, mult_frac, mult_scal_frac peuvent
s'écrire très simplement, en une seule ligne.
Dans cet exercice, vous allez écrire un programme permettant de gérer une petite base de données de numéros de téléphone.
Personne dont les
champs seront une chaîne de caractères pour le nom et une
autre pour le numéro de téléphone.
Personne dans main
puis initialisez-la en demandant à l'utilisateur d'entrer un nom
et un numéro de téléphone. Faites afficher ensuite le nom et
le numéro de téléphone contenus dans la structure:
Le numero de Pierre est 123456.
nouveau_numero qui reçoit un pointeur sur Personne en paramètre. La fonction
doit demander à l'utilisateur d'entrer un nouveau nom ainsi que
le numéro de téléphone correspondant. Elle placera les
nouvelles valeurs dans le pointeur passé en paramètre. Il
faut aussi s'assurer que le nom commence bien par une majuscule,
et modifier le nom en conséquence si ce n'est pas le cas.
recherche qui reçoit un
tableau de Personne ainsi que sa taille en paramètres. La
fonction doit demander à l'utilisateur le nom qu'il désire
chercher puis effectuer une recherche dans le tableau de
personne. Si le nom est trouvé, la fonction affichera le
numéro de téléphone de la personne, sinon elle imprimera un
message d'erreur.
liste, qui prend
un tableau de Personne ainsi que la taille du tableau en
paramètres. Comme son nom l'indique, cette fonction affichera la
liste de toutes les valeurs présentes dans le tableau.
main (vous pouvez
supprimer le code écrit au point 2). Il vous
faudra tout
d'abord déclarer un tableau de Personne qui sera votre
base de données. Ensuite, une boucle while affichera le
menu suivant
1) Nouveau numero
2) Recherche
3) Liste
4) Quitter
et attendra une entrée de l'utilisateur. Une fois que l'utilisateur a entré son choix, il ne vous restera plus qu'à appeler la bonne fonction.
Indices:
db.cpp:13: error: request for member `nom' in `nouveau',
which is of non-class type `Personne*'
cela signifie probablement que vous utilisez le symbole
'.' pour accéder aux champs d'un pointeur sur une
structure, au lieu d'utiliser '->'. Par exemple, si on
déclare un pointeur sur la structure Personne
Personne *nouveau;
la syntaxe correcte pour accéder au champ nom est
nouveau->nom et pas nouveau.nom.