Vous êtes sur la page 1sur 5

ECOLE PRÉPARATOIRE DES SCIENCES ET TECHNIQUES – ANNABA

Année Universitaire 2011-2012

Informatique 2eme année

Solutions Travaux Dirigés No 3

1. Exécuter le fragment de code suivant et donner la valeur de x pour chaque changement.

float x = 4.15;
for (int i=0; i < 3; i++)
x *= 2;

4.15, 8.3, 16.6, 33.2

2. Convertir la boucle for en boucle while


for (int i=1; i <= n; i++)
cout << i*i << " ";

int i=1;
while (i<=n)
{ cout << i*i << “ “;
i++
}

3. Qu’affiche le programme suivant:

Affichage
11395977

1
4. Qu’affiche le programme suivant:

Affichage
End of program.
End of program.
3
End of program.
5
End of program.
End of program.

5. Écrire un programme qui emploie une boucle while pour calculer et imprimer la somme
des carrés des nombres inferieurs a un nombre donné. Par exemple, si 5 est entré, le
programme imprimera 55, qui égale 1 2 + 22 + 32 + 42 + 52.

int main()
{ int n;
cout << "Entrer un entier positif: ";
cin >> n;
int sum=0,i=0;
while (i++ < n)
sum += i*i;
cout << "La somme des " << n << " premiers carrés est" << sum << endl;
}
Entrer un entier positif:: 6
La somme des 6 premiers carrés est 91

7. Qu’est-ce-qui est erroné dans la boucle suivante:


while (n <= 100)
sum += n*n;

C’est une boucle infinie car n ne change pas

8. Qu’est-ce-qui est erroné dans le fragment de code suivant ?


int main()
{ const double PI;
int n;
PI = 3.14159265358979;
n = 22;
}
La constante Pi n'est pas initialisée. Toute constante doit être initialisée à sa
déclaration.

8. Ecrire un programme qui demande à l’utilisateur de taper 10 entiers et qui affiche leur somme.

#include<iostream>
using namespace std;

int main()
{
int i,s=0,x;

for(i=0;i<10;i++)
{
cout<<"Tapez un entier : ";cin>>x;
s=s+x;
}

cout<<"La somme vaut : "<<s<<endl;

return 0;
}

9. Ecrire un programme qui demande à l'utilisateur de taper un entier N et qui calcule u(N) défini par :
u(0)=3
u(n+1)=3.u(n)+4
#include<iostream>
using namespace;
int main()
{
int i,u=3,N;

cout<<"Tapez N : ";cin>>N;

for(i=0;i<N;i++)
u=u*3+4;

cout<<"u("<<N<<")="<<u<<endl;

return 0;
}

10. Ecrire un programme qui demande à l'utilisateur de taper un entier N et qui calcule u(N) défini
par :
u(0)=1
u(1)=1
u(n+1)=u(n)+u(n-1)
#include<iostream>
using namespace std;

int main()
{
int i,u=1,v=1,w,N;

cout<<"Tapez N : ";cin>>N;

w=1;

3
for(i=2;i<=N;i++)
{
w=u+v;
u=v;
v=w;
}

cout<<"u("<<N<<")="<<w<<endl;

return 0;
}

11. Qu’affiche ce fragment de programme ?

for (int compteur = 0; compteur < 10; compteur++);


cout << compteur << "\n ";

Ce programme affiche 10. Car le ; virgule après la parenthèse de la boucle for


empêche l’instruction cout<< compteur d’appartenir à la boucle for.

12. Qu’affiche ce fragment programme ?


for (int i=0 ;i<10 ;i++)
for (int j=0 ;j<10 ;j++)
cout << ((i*10)+j) << endl ;

Donnez un fragment de code équivalent mais plus performant.

Ce fragment de programme affiche les nombre de 0 à 99. On peut remplacer les deux
boucles par une seule boucle qui va de 0 jusqu’à 99 comme suit :

for (int i=0 ;i<100 ;i++)


cout << i << endl ;

13. En utilisant une boucle for, écrire un programme qui calcule et affiche la somme des
entiers jusqu’à un nombre donnée. Par exemple, si l’on entre 4, le programme doit afficher
10 qui est égale à 1+2+3+4.
En vous basant sur vos connaissances en suites arithmétiques. Écrire un programme qui fait
la même chose mais sans utiliser une boucle.
Quelle solution est la plus performante ? Pourquoi ?

En utilisant une boucle for


#include<iostream.h>
int main() {
int n,s=0;
cin >> n;
for (int i=1;i<=n;i++)
s = s+i;
cout << s;
}
Sans utiliser une boucle for :
La somme des entiers de 1,2,3,…,n est égale à la somme de la suite arithmétique
U n+ 1=U n +r U 1=1 et r =1
( U 1+ U n ) ×n
avec . Cette somme est calculée par 2 ce qui

donne le programme suivant :


#include<iostream.h>
int main() {
int n,s=0;
cin >> n;
s = ((1+n)*n)/2;
cout << s;
}

La deuxième solution est la plus performante.


Explication :
Le nombre d’instructions exécutées par la première solution dépend de n. Plus la
valeur de n est grande plus le nombre d’itération de la boucle for augmente (si n est
égal à un milliard, on fera un milliard d’itération dans la boucle for). Par contre, le
nombre d’instructions exécutées par la deuxième solution est constant et ne dépends
pas de la valeur de n.