Vous êtes sur la page 1sur 8

Correction TD programmation procedurale en c++

I.

Exercice 1

1. Il manque un point-virgule à la fin de la première ligne :

if (a<b) cout << "ascendant" ;

else cout << "non ascendant" ;

2. Les valeurs suivant le mot case doivent obligatoirement être des « expressions

Constantes », c’est-à-dire des expressions calculables par le compilateur lui-même. Ce n’est pas le cas de
n.

3. Aucune erreur, les expressions telles que LIMITE-1 étant bien des expressions constantes (ce qui
n’était pas le cas en langage C).

Exercice 2

a.

Nul

Petit

b.

Petit

c.

Moyen

Grand

d.

Grand

e.

Moyen

Grand

1
Exercice 3

a. Il manque un point-virgule :

do cin >> c; while (c! = '\n');

b. Il manque une instruction (éventuellement « vide ») après le mot do. On pourrait écrire, par

exemple:

do {} while ((cin >> c, c! = '\n');

ou :

do ; while ( cin >> c, c != '\n') ;

c. Il n’y aura pas d’erreur de compilation (la valeur entière 1 est convertie en booléen, ce qui fournit la
valeur vrai) ; toutefois, il s’agit d’une « boucle infinie ».

d.

do

cout << donnez un nombre >0 " ;

while (cin >> n, n<=0) ;

ou, mieux :

do

cout << "donnez un nombre >0 " ;

cin >> n ;

while (n<=0);

Exercice4

a.

#include <iostream>

using namespace std ;

main()

2
{

int i, n, som ;

som = 0 ;

i=0;

while (i<4)

cout << "donnez un entier " ;

cin >> n ;

som += n ;

i++ ;

cout << "Somme : " << som ;

b.
#include <iostream>
using namespace std ;
main()
{
int i, n, som ;
som = 0 ;
i=0;
do
{ cout << "donnez un entier " ;
cin >> n ;
som += n ;
i++ ;
}
while (i<4) ;
cout << "Somme : " << som ;
}

Exercice 5

0 est pair

3 est multiple de 3

3
9 est multiple de 3

15 est multiple de 3

20 est multiple de 5

Exercice6

A:n=6

B : n = 10

C : n = 10

D : n = 15

E : n = 21

II.

Exercice1

#include <iostream>

using namespace std;

int mul2 (int n)

{if (n%2) return 0;

else return 1;

int mul3 (int n)

{if (n%3) return 0;

else return 1;

main()

{ int mul2 (int) ;

int mul3 (int) ;

int n ;

cout << "donnez un entier : " ;

cin >> n ;

4
if (mul2(n)) cout << "il est pair\n" ;

if (mul3(n)) cout << "il est multiple de 3\n" ;

if (mul2(n) && mul3(n)) cout << "il est divisible par 6\n" ;

Exercice2

Les cas a, b, c et d ne posent aucun problème. Il y a respectivement appel des fonctions I, II,

III et IV, sans qu’aucune conversion d’argument ne soit nécessaire.

e. Appel de la fonction I, après conversion de la valeur de c en int.

f. Appel incorrect, compte tenu de son ambiguïté ; deux possibilités existent en effet :

conserver n, convertir p en float et appeler la fonction III ou, au contraire, convertir n en

float, conserver p et appeler la fonction IV.

g. Appel de la fonction III, après conversion de c en float.

h. Appel de la fonction III, après conversion (dégradante) de z en float.

i. Appel incorrect, compte tenu de son ambiguïté ; deux possibilités existent en effet :

Convertir le premier argument en float et le second en int et appeler la fonction III ou, au
contraire, convertir le premier argument en int et le second en float et appeler la fonction IV.

Exercice3

#include <iostream>

using namespace std;

void tribulle (int [ ], int );

int main()

int tab[] = { 5, 2, 8, 1};

tribulle(tab,4);

// afficher

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

cout << tab[i]<< " ";

5
return 0;

void tribulle (int v [ ], int taillev)

int aux;

for (int i=1; i<taillev; i++)

for (int j=0; j<taillev-1; j++)

if (v[j]>v[j+1])

aux=v[j];

v[j]=v [j+1];

v [j+1]=aux;

Exercice 4

#include<iostream>

using namespace std;

template <class N> // T est un type indefini

N carre ( N val)

return val*val;

main()

int nbre;

cout << "entrez la valeur de nbre : " <<"\n";

cin >> nbre;

cout << "le carré de nbre est :" << carre(nbre) << "\n";

double s;

6
cout << "entrez la valeur de s : " <<"\n";

cin >> s;

cout << "le carré de s est :" << carre(s) <<endl;

Exercice 5

int i, j;
som = 0 ;
for (i=0 ; i<3 ; i++)
for (j=0 ; j<4 ; j++)
som += t[i] [j];

Exercice 6

L’instruction ad1 = "bonjour" place dans la variable ad1 l’adresse de la chaîne constante
"bonjour". L’instruction cout << ad1 se contente d’afficher la valeur de la chaîne dont l’adresse
figure dans ad1, c’est-à-dire en l’occurrence "bonjour". De manière comparable, l’instruction ad1
= "monsieur" place l’adresse de la chaîne constante "monsieur" dans ad1 ; l’instruction cout
<<ad1 affiche la valeur de la chaîne ayant maintenant l’adresse contenue dans ad1, c’est-à-dire
"monsieur".

Finalement, ce programme affiche tout simplement :


bonjour
monsieur
On aurait obtenu plus simplement le même résultat en écrivant :
cout << "bonjour\nmonsieur" ;

7
8

Vous aimerez peut-être aussi