Telechargé par lamiae Arguig

SMA-S4-Examen-Normal-2016-2017-Solution

publicité
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)
Exercice 1 :
Ecrire les résultats de ce programme. Chaque résultat doit être justifié.
#include<stdio.h>
int tab[2][3] = { 2, -8, 7, 6, -9, 5};
int i, j;
int *PP = &tab;
void AfficheTableau(){
for(i=0; i<2; i++)
for(j=0; j<3; j++)
printf("tab[%d][%d]=%d\n", i, j, tab[i][j]);
}
int main(){
printf("TT=%d\n", sizeof(tab));
printf("TE=%d\n", sizeof(tab[1][2]));
printf("NE=%d\n", sizeof(tab)/sizeof(tab[1][2]));
printf("tab[0][4]=%d\n", tab[0][4]);
printf("T2=%d\n", *(tab[1]+2));
printf("T5=%d\n", *tab[1]+5);
printf("PAR=%d\n", *PP++);
printf("PAV=%d\n", *++PP);
for(i=0; i<2; i++)
for(j=0; j<2; j++) tab[i][j] = tab[i][j] * tab[j][i];
AfficheTableau();
getch();
return 0;
}
Réponse 1 :
TT=24
TT : Taille du Tableau en octets : 6 * 4 = 24
TE=4
TE : Taille d’un Elément en octets : 4 (type entiers)
NE=6
NE : Nombre Eléments : 6
tab[0][4]=-9
Valeur du 5éme élément : -9
T2=5
Valeur du 6ème élément : 5 (3ème colonne de la 2ème ligne)
T5=11
Valeur du 4ème élément + 5 = 11 (6+5)
PP point vers le 1er élément du tableau : *PP++  afficher 1er
élément après il incrémente le pointeur vers le 2ème élément.
1er élément = 2.
PAR=2
1
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)
PAV=7
tab[0][0]=4
tab[0][1]=-48
tab[0][2]=7
tab[1][0]=-288
tab[1][1]=81
tab[1][2]=5
PP point vers le 2ème élément du tableau *++PP  il
incrémente le pointeur vers le 3ème élément, après il affiche cet
élément 3ème élément = 7.
Avant :
2
6
-8
-9
7
5
Après calcule :
On a :
tab[0][0] = tab[0][0] * tab[0][0] = 2*2 = 4 ;
tab[0][1] = tab[0][1] * tab[1][0] = -8 * 6 = -48 ;
tab[1][0] = tab[1][0] * tab[0][1] = 6 * -48 = -288;
tab[1][1] = tab[1][1] * tab[1][1] = -9 * -9 = 81 ;
donc
4
-48
-288 81
7
5
2
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)
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;
3
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)
res.num = nb.num/i;
res.denum = nb.denum/i;
return res;
}
}
return nb;
}
Rationnel LireRationnel(){
Rationnel nb;
printf("Entrez le numerateur du nombre rationnel : \n");
scanf("%d", &nb.num);
printf("Entrez le denominateur du nombre rationnel (different de Zero): \n");
while(scanf("%d", &nb.denum) && nb.denum==0);
return Simplifie(nb);
}
Rationnel SommeRationnel(Rationnel nb1, Rationnel nb2){
Rationnel res;
res.num = nb1.num * nb2.denum + nb2.num * nb1.denum;
res.denum = nb1.denum * nb2.denum;
return Simplifie(res);
}
void AfficheRationnel( Rationnel nb){
printf("%d/%d", nb.num, nb.denum);
}
main(){
Rationnel nb1, nb2, som;
nb1 = LireRationnel();
nb2 = LireRationnel();
som = SommeRationnel(nb1, nb2);
AfficheRationnel(nb1); printf(" + ");
AfficheRationnel(nb2); printf(" = ");
AfficheRationnel(som);
}
4
Téléchargement