UNIVERSITE CADI AYYAD
FACULTE DES SCIENCES
SEMLALIA-MARRAKECH
Nom Prénom Note
…………………………….. ……………………………..
N° de table N° Apogée
…………………………….. ………………………………
Filière :SMA-S3 Epreuve de :Informatique 3 Date :17/01/2017
8h 10h
N.B : Chaque étudiant doit rédiger ses réponses dans la feuille de l’épreuve. Le nombre
disponible des feuilles des épreuves est très limité alors il est presque impossible de la
changer, sauf dans le cas jugé favorable par le professeur surveillant.
Exercice 1: 4 pts
1- Quels sont les valeurs de x et y après les instructions suivantes : 1pt
int x = 12 ; x= 14
++x ; y= 13
int y=x++;
2- Quelle est la valeur de la variable Z après les deux instructions suivantes : 1pt
int x = 30, y = 20;
int Z = (x > y) ? (y > 10) ? y % 10 : y * 2 : x ; Z= 0
3- Le code suivant a pour rôle de permettre à un utilisateur de remplir un tableau
de deux dimensions, mais il contient des erreurs. Quelles sont-elles ? Répondre
par réécrire le code correct. 2pts
int tab[2][3];i,j; int tab[2][3],i,j;
for(i=0,i<2,i++) { for(i=0;i<2;i++) {
j==0; j=0;
do { do {
print("tab[%][]= ",i,j), printf("tab[%d][%d]= ",i,j);
scan("%d", tab[i][j]), j++; scanf("%d", &tab[i][j]); j++;
} while(j<3) } while(j<3);
} }
Exercice 2: 8pts
On veut réaliser une application qui permet d’effectuer un ensemble d’opérations
mathématiques. Cette application sera découpée en fonctions suivantes :
1- Ecrire une fonction, appelée SOMME qui permet de calculer la somme de deux
nombres réels. 1pt
double SOMME(double x, double y)
{
return x+y;
}
2- Ecrire une fonction, appelée DIVISION, qui permet de calculer la division de
deux entiers (discuter les cas possibles). 1.5pts
void DIVISION(int x, int y)
{
if(y==0) printf("Division Impossible");
else printf("La division est: %.2lf",(double)x/y);
}
3- Ecrire une fonction, appelée PGCD, qui permet de calculer le plus grand
commun diviseur de deux entiers. 1.5pts
int PGCD(int x, int y)
{
while(x!=y){
if(x>y) x=x-y;
else y=y-x;
}
return x;
} 4- Ecrire une fonction, appelée PARFAIT, qui permet de dire si un entier est parfait ou non. Un
entier est dit parfait s’il égale la somme de ses diviseurs.
4- Ecrire une fonction, appelée PARFAIT, qui permet de dire si un entier est parfait
ou non. Un entier est dit parfait s’il égale la somme de ses diviseurs. 1.5pts
void PARFAIT(int x)
{
int i,s=0;
for(i=1;i<=x/2;i++)
{
if(x%i==0) s+=i;
}
if (s==x) printf("%d est parfait",x);
else printf("%d n'est pas parfait",x);
}
5- Dans la fonction main(), écrire un menu rassemblant toutes ces fonctions en les
numérotant. L’utilisateur doit choisir le numéro correspondant à l’opération
qu’il veut effectuer et le programme lui retourne le résultat trouvé. Les
paramètres de l’opération à effectuer sont à saisir par l’utilisateur. 2.5pts
int main()
{
int ch; int x,y; double a,b;
printf("***** Menu des Operations *****\n");
printf("* 1---> SOMME de 2 entiers *\n");
printf("* 2---> DIVISION de 2 reels *\n");
printf("* 3---> PGCD de 2 entiers *\n");
printf("* 4---> Test PARFAIT *\n");
printf("\n Choisir le numero correspondant a l'operation: "); scanf("%d",&ch);
switch (ch){
case 1:
printf("Saisir le 1er nombre: ");scanf("%lf",&a); printf("Saisir le 2eme nombre: ");scanf("%lf",&b);
printf("La somme de %.lf et %.lf est: %.lf",a,b,SOMME(a,b));
break;
case 2:
printf("Saisir le 1er nombre: ");scanf("%d",&x); printf("Saisir le 2eme nombre: ");scanf("%d",&y);
DIVISION(x,y);
break;
case 3:
printf("Saisir le 1er nombre: ");scanf("%d",&x); printf("Saisir le 2eme nombre: ");scanf("%d",&y);
printf("Le PGCD de %d et %d est: %d",x,y,PGCD(x,y));
break;
case 4:
printf("Saisir le 1er nombre: ");scanf("%d",&x); PARFAIT(x);
break;
default:
printf("ERROR");
}
return 0;
Exercice 3:
1- Ecrire une fonction qui permet de convertir un entier décimal en représentation
binaire. 2pts
void Conv_Bin(int n)
{
int T1[100], i=0,j;
do {
T1[i]=n%2; n=n/2; i++;
}while(n!=0);
for(j=i-1;j>=0;j--)
printf("%d",T1[j]);
}
2- Ecrire un programme qui permet de calculer le nombre de 0 existant dans une
matrice après l’avoir remplit. Ce programme doit calculer la transposé de cette
matrice et l’afficher.
6pts = 1 :remp+ 1 :cal zero+ 1.5 :cal tran+ 1.5 :affich+ 1 :struc générale
#include <stdio.h>
#include <stdlib.h>
int main(){
int Mat[50][50], Mat_Tran[50][50];
int i,j,N,M,Nbre_Zero=0;
printf("Nbre de lignes= ");scanf("%d",&N);printf("Nbre de colonnes= ");scanf("%d",&M);
// Les calculs
for(i=0;i<N;i++)
for(j=0;j<M;j++) {
printf("Mat[%d][%d]= ",i,j); scanf("%d",&Mat[i][j]);// Remplissage
if(Mat[i][j]==0) Nbre_Zero++;// calcul du nombre des zéros
Mat_Tran[j][i]=Mat[i][j];//Calcul de la transposée
}
printf("La matrice saisie\n");
for(i=0;i<N;i++) {
for(j=0;j<M;j++)
printf(" %d",Mat[i][j]);
printf("\n");
}
printf("Le nbre de zero dans cette matrice est: %d",Nbre_Zero);
printf("\nLa matrice transposee est:\n");
for(i=0;i<M;i++) {
for(j=0;j<N;j++)
printf(" %d",Mat_Tran[i][j]);
printf("\n");
}
return 0;
}