Vous êtes sur la page 1sur 4

Université Cadi Ayyad Année universitaire 2012/2013

Faculté des Sciences Semlalia


Département de Physique

Contrôle de Programmation
Filière SMP S4
(Durée: 2h)
Exercice 1: (5 points)

1) Ecrire un algorithme qui permet de lire deux nombres réels a et b et d’afficher leur somme
dans le cas où les deux variables sont strictement positives.
2) Ecrire sur la feuille d’examen les affichages attendus pour les programmes suivants :

a) b) c)
main() main() main()
{ { {
int i; int a,i=5; int i,j;
for(i=0;i<10;i++); a=(2,i,i+1); for(i=0,j=0;i<2,j<4;i++,j++)
printf("%d\n",i*i); printf("%d\n",a); printf("%d %d\n",i,j);
} } }

Exercice 2: (4 points)
Soit le programme suivant :
#include<stdio.h>
main( )
{
int i, n, som = 0 ;
for(i=0;i<4;i++)
{
printf("Donner un entier:");
scanf("%d",&n);
som +=n;
}
printf("somme = %d\n",som);
}
Ecrire un programme réalisant exactement la même chose, en employant à la place de l’instruction for :
a) une instruction while
b) une instruction do … while

Exercice 3: (11 points)


1) Ecrire le programme qui permet de déclarer un tableau A[4] de 4 entiers et un tableau T[1000] de 1000
entiers ; et de réaliser les opérations suivantes :
2) Affecter à tous les éléments du tableau T la valeur -1.
3) lire au clavier 4 chiffres (à choisir parmi : 0, 1, 2, 3 ...9) et les enregistrer dans le tableau A[4]. Afficher
ensuite les éléments du tableau A.
4) Trouver toutes les combinaisons à deux chiffres que l’on peut faire
avec les 4 chiffres saisis précédemment. Compter et afficher ces combinaisons.
Par exemple : si on a saisi un tableau A[4]={ 7, 1, 3, 5} on va avoir les 16 combinaisons suivantes :
(7,7) (7,1) (7,3) (7,5) (1,7) (1,1) (1,3) (1,5) (3,7) (3,1) (3,3) (3,5) (5,7) (5,1) (5,3) (5,5)
5) Trouver toutes les combinaisons à trois chiffres : que l’on peut
faire avec les 4 chiffres saisis précédemment. Transformer chacune de ces combinaisons (A[i],A[j],A[k])
en un nombre entier a=A[i]*100+A[j]*10+A[k], puis enregistrer ces nombres dans T. Compter le nombre
de combinaisons qu’on notera par NC.
6) Trier le tableau T en ordre croissant.
7) On veut affecter des valeurs aux éléments du tableau T qui n’ont pas été remplis par les combinaisons
précédentes (question 5). Pour cela, parcourir la suite de nombres 0, 1, 2 … 999 ; et pour chaque nombre
vérifier s’il existe dans T ou pas. S’il n’existe pas, alors le copier dans T. S’il existe déjà, passer à la valeur
suivante.
8) Si on affiche le tableau T final après le tri, quel résultat obtient-on ? Répondre avec une phrase (sans le
programmer).

exosup.com page facebook


Corrigé Contrôle de programmation SMP S4
Session Mai 2013

NB : Prière de compter toute autre réponse correcte


Exercice 1 : (5pts)
1) Algorithme somme
DebutDeclaration
Variable Som, a, b : réel
FinDeclaration
DebutAlgorithme
2 pts
Ecrire("Entrer les nombres a et b: ")
pop
Lire (a,b)
ts
Si (a>0 ET b>0) alors
DebutSi
Som <- a+b
Ecrire(" Leur somme est :", Som)
FinSi
FinAlgorithme

2)
a) b) c)
100 6 0 0
1 pts
1 1
1 pts
pop 1 pts 2 2
pop
ts pop 3 3
ts
ts

Exercice 2: (4pts)

a) En employant while: b) En employant do…while:

#include<stdio.h> 2 pts #include<stdio.h>


main( ) pop main( ) 2 pts
{ ts { pop
int i=0, n, som = 0 ; int i=0, n, som = 0 ; ts
while(i<4) do
{ {
printf("Donner un entier:"); printf("Donner un entier:");
scanf("%d",&n); scanf("%d",&n);
som +=n; som +=n;
i++ ; i++ ;
} }while(i<4) ;
printf("somme = %d\n",som); printf("somme = %d\n",som);
} }

exosup.com page facebook


Exercice 3: (11pts)
#include<stdio.h>
main()
{
int A[4],T[1000];; 0.5 pts
int i,j,k,L,N=4,tmp,exist; popts
///affectation de -1 a T
for(i=0;i<1000;i++) T[i]=-1; 0.5 pts
popts
///lecture tab A:
for(i=0;i<N;i++)
do
1.5 pts { printf("\nEntrez chiffre %dieme elem du tab A : ",i);
popts scanf("%d",&A[i]);
}
1 pts si pas de
do…while while(A[i]<0 || A[i]>9);

///affichage de A
printf("\n");
for(i=0;i<N;i++) printf("%d\t",A[i]); 0.5 pts
puts("\n"); popts

///combin a deux
for(i=0;i<N;i++)
1.5 pts
for(j=0;j<N;j++)
popts
printf("(%d,%d)\t",A[i],A[j]);
puts("\n");

///combin a trois
NC=0;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
for(k=0;k<N;k++)
2.5 pts
{ popts
T[NC]=A[i]*100+A[j]*10+A[k];
NC++;
}
printf("\nNC=%d",NC);
puts("\n");
///tri croissant
for(i=0;i<NC-1;i++)
for(j=i+1;j<NC;j++)
1 pts {
popts if(T[i]>T[j]) tmp=T[i],T[i]=T[j],T[j]=tmp;}

exosup.com page facebook


puts("\n");

///completer T de 0 à 999
k=NC;
for(i=0;i<1000;i++)
{
for(exist=1,j=0;j<NC;j++)
if(i==T[j]) exist =0; 3 pts
if(exist) popts
{
T[k]=i;
k++;
}
}
puts("\n");
}

0.5 pts // Si on affiche le tableau T final après le tri, On aura un tableau


popts allant de 0 jusqu'à 999.

exosup.com page facebook

Vous aimerez peut-être aussi