
Université Mohammed Premier
Faculté des Sciences
Département d’Informatique
Oujda
Année universitaire : 2016 – 2017
Filière : SMA - SMI – S4
Module : Informatique (Language C)
Prof : Mohamed BOUDCHICHE
Examen du Module Informatique 4 / Programmation II
Session Ordinaire (Solution)
3
Exercice 2 :
Dans cet exercice, on va calculer la somme de deux rationnels (sous forme de fractions) et
le résultat de la somme sera aussi un rationnel (sous forme de fraction). (Par exemple :
2/5 + 3/4 = 23/20), pour cela, on va définir le type relationnel sous forme de structure
qui contient deux entiers (un numérateur et un dénominateur) et les fonctions
correspondantes comme suit :
a) Définir la structure permettant de représenter un nombre de type Rationnel
composé de deux entiers : un numérateur et un dénominateur.
b) Ecrire une fonction Rationnel Simplifie( Rationnel ) qui permet de simplifier
l'écriture d'un nombre rationnel (par exemple : la fonction permet de simplifier
le nombre rationnel 9/12 par le nombre rationnel 3/4).
c) Ecrire une fonction Rationnel LireRationnel() qui effectue la lecture d'un
nombre rationnel valide (c'est-à-dire le dénominateur est différent de zéro). Le
nombre rationnel mémorisé aura été simplifié.
d) Ecrire une fonction Rationnel SommeRationnel(Rationnel, Rationnel) qui
retourne la somme des deux nombres rationnels valides passés en argument. Le
nombre rationnel retourné aura été simplifié.
e) Ecrire une fonction void AfficheRationnel( Rationnel ) qui permet d'afficher un
nombre rationnel.
f) Ecrire un programme principal main() qui permet de :
1. Lire deux nombres rationnels via le clavier en utilisant la fonction
LireRationnel().
2. Calculer la somme des deux nombres relationnels entrés dans la question
précédente en utilisant la fonction SommeRationnel(Rationnel, Rationnel).
3. Afficher l'opération de la somme des deux nombres rationnels (par exemple :
2/5 + 3/4 = 23/20 )
Réponse 2 :
#include<stdio.h>
typedef struct {
int num;
int denum;
}Rationnel;
Rationnel Simplifie(Rationnel nb){
int i;
for(i=(nb.num<nb.denum)?nb.num:nb.denum; i>0; i--){
if(nb.num%i==0 && nb.denum%i==0){
Rationnel res;