Vous êtes sur la page 1sur 4

Université Cadi Ayyad ‫جامعة القــاضـي عيــاض‬

Faculté des sciences


‫كــمـيـة العمــوم السـمـالليــة‬
Semlalia-Marrakech
‫مـراكـــش‬
Le candidat doit inscrire, ci-dessous, toutes les informations demandées
et signer lisiblement son nom à la fin de sa copie d’examen.

N° de table : N° APPOGEE Nom : ……………………………………………. Note :


…………… …………………. Prénom : ……………………………………………. ……………
Né(e) le : ……/……/…….. à : …………………...

Filière : SMP S4 Epreuve de : Informatique/Programmation C++ Date : 15 Juin 2016


Durée 2h

I. Questions de cours (14 pts )


N.B. : dans cette partie, les programmes ne sont pas donnés intégralement ; seules les instructions en rapport
avec les questions posées sont données.

1. Barrer les identificateurs invalides :


int 3a, using, A_, B2, switch, a$;
0.5

2. Donner les résultats, ou les affichages attendus après exécution des programmes suivants :

a) int a=5, b=3,c=2; b) int i = 1, j = 2; c) int i = 3, j = 5, n;

float x ; n = i *= --j ;
cout << "1 : " << i++ <<endl;
cout << "i = " << i;
x = a + b / c ; cout << "2 : " << ++j * --i ; 0.75
cout << "j = " << j;
cout << "x= " << x; 1 : 1 cout << "n = " << n;
1
x= 6 0.5
2 : 3 i= 12 j= 4 n= 12

d) int j=2, i=3, k; e) int i, j;


for( i=0, j=18; i<j; i=i+2, j=j-3 ) f) bool x,y,z,w;
bool b;
{
b=i ; cout << "i= " << i
x = 10>2; x= 1
k=i+j+b ; << "j= " << j << endl; y = 'a'<='p'; y= 1
cout <<b<<"\t"<<k; } 1
i= 0 j= 18 z = !(10==1); z= 1
1 6 i= 2 j= 15 1
1 w = 2 != 'a'; w= 1
i= 4 j= 12
i= 6 j= 9
g) int x, y, a=0, b=5; h) int i; i) int i=1, n = 7 ;
while (n % ++i != 0)
x = (5<10) && (6>3); for( i=0; i <3; i++ ) {
cout << i << "\t"; cout << i << "\t";
y = a && b ;
}
cout << i*i <<endl; { cout << "Hello ! " <<
x = 1 1
1.5
0 1 2 9 2 3 4 5 6
y = 0 1

j) Le programme suivant permet d’échanger les


valeurs de deux variable n et p en utilisant une …………………………………………………………………………………
fonction " echange".
Compléter le code suivant : …………………………………………………………………………………
int main()
…………………………………………………………………………………
{
…………………………………………………………………………………
void echange(int &a, int &b); ;
int n=10, p=-17 ;
Affichage obtenu : -17 10
echange(n,p) ;
k) int A[10]={1,5,7,6,3,9};
cout<< n <<"\t"<<p; 2
int *p, *q;
}
p = A;
void echange(int&a, int&b)
cout << *p << endl;
{ cout << *(p+2) << endl;
int c ; cout << *(++p) << endl;
c = a, a = b, b = c; 1 0.75

} 7
5

3.
Le programme ci-dessous, permet de copier dans Ici votre réponse :
un tableau B[] ; les éléments strictement positifs
d’un tableau initial A*+. Sachant qu’il est écrit avec
les pointeurs constants. int A[10]= {-3, 4, 0, -7, 3, 8, 0, -1, 4, -9};
Réécrire ce programme avec les pointeurs int B[10];
variables (L’usage des indices i et j doit disparaitre). int *p,*q;
for (p=A,q=B ; p<A+10 ; p++)
int A[10]= {-3, 4, 0, -7, 3, 8, 0, -1, 4, -9}; if (*p>0)
int B[10];
{
int n,i;
for (i=0,n=0 ; i<10 ; i++)
*q = *p;
2
if (*(A+i)>0) q++;
{ }
*(B+n) = *(A+i); for (p=B ; p<q ; p++)
n++; cout<<p-B<<"\t"<<*p<<endl;
}
for (i=0; i<n ; i++)
cout<<i<<"\t"<<*(B+i)<<endl;
II. Exercice (6pts+1)
On souhaite saisir un temps t en seconde et le convertir en jours, heures, minutes et secondes.
t (secondes) = J (jours) : H (heures) : M (minutes) : S (secondes)
Ou encore :
𝑡 𝑠 = 𝑆 + 60 × 𝑀 + 60 × 𝐻 + 24 × 𝐽
J : est le nombre de jours entiers contenus dans t, J0.
H: est le nombre d’heures restant, 0H<24.
M: le nombre de minutes restant, 0M<60.
S: le nombre de secondes restant, 0S<60.
Dans la suite du programme ces conditions doivent être toujours vérifiées.
Exemple :92436 s = 1 j : 1 h : 40 mn : 36 s

Ecrire un programme qui permet d’effectuer les tâches suivantes :


1) a)Lire un temps t1 en secondes.
b)Convertir t1 en J(jours), H(heures), M(minutes) et S(secondes) ; puis l’affectation de ces valeurs au
tableau T1[4] dans l’ordre suivant :
T1[0] = J , T1[1] = H, T1[2] = M et T1[3] = S.
2) a) Lire 4 autres valeurs : J, H, M et S et les stocker dans un second tableau T2[4], dans le même ordre
que T1[]
b) Calculer t2(en secondes) à partir de T2[4].
3) a) calculer la somme des deux tableaux T1[] et T2[] dans un tableau TS[4].
b) Calculer la différence positive entre les deux tableaux T1[] et T2[] dans un tableau TD[4].
N.B. : dans la question 3 veillez à respecter les conditions ci-dessus sur J, H, M et S

Réponse :
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main ()
{
int J,H,M,S,T1[4],T2[4],TS[4],TD[4]; 0.5
int t1,t2,t,i;

///1 a :
cout << "\nsaisir t1:";
cin >>t1; 0.25

///1 b :
t=t1;
0.5
S=t%60;
t/=60;

M=t%60;
t/=60; 0.5
H=t%24; 0.5
J=t/24;

T1[0]=J, T1[1]=H, T1[2]=M, T1[3]=S; 0.25

///2 a :
do{
cout << "\nentrez J: ";
0.5 cin >>J;
T2[0]=J;
}while(J<0 );

do{
cout << "\nentrez H: ";
0.5 cin >>H;
T2[1]=H;
}while(H>24 ||H<0 );

do{
cout << "\nentrez M: ";
0.5 cin >>M;
T2[2]=M;
}while(M>60 ||M<0 );

do{
0.5 cout << "\nentrez S: ";
cin >>S;
T2[3]=S;
}while(S>60 ||S<0 );

///2 b :
t2=S+60*(M+60*(H+24*J));
0.5 cout << "\nt2 : " <<t2<< endl;

///3 a :
for(i=0;i<4;i++) TS[i]=T1[i]+T2[i];
if (TS[3]>=60) TS[2]+=TS[3]/60, TS[3]%=60;
1 if (TS[2]>=60) TS[1]+=TS[2]/60, TS[2]%=60;
if (TS[1]>=24) TS[0]+=TS[1]/24, TS[1]%=24;
for(i=0;i<4;i++) cout << T1[i]<<'\t'<< T2[i]<<'\t'<<TS[i]<<endl;

///3 b :
if(t1>t2)
for(i=0;i<4;i++) TD[i]=T1[i]-T2[i];
else
for(i=0;i<4;i++) TD[i]=T2[i]-T1[i];
1

if (TD[3]<0) TD[2]-=1, TD[3]+=60;


if (TD[2]<0) TD[1]-=1, TD[2]+=60;
if (TD[1]<0) TD[0]-=1, TD[1]+=24;

for(i=0;i<4;i++) cout << T1[i]<<'\t'<< T2[i]<<'\t'<<TD[i]<<endl;


return 0;
}

Vous aimerez peut-être aussi