Exercice 52
Écrire une fonction qui permet de calculer le prix TTC , cette fonction va
recevoir un paramètre de type Réel dont le nom est "prixHT" et un second
paramètre de type Réel dont le nom est "tva".
Réponse
fonction calculPrixTTC( prixHT, tva: réel): réel
Variables prixTTC : réel
Début
prixTTC ← prixHT * (1 + tva / 100)
retourner prixTTC
Fin
Exercice 53
Écrire une procédure qui permet d'afficher si un nombre entier passé en
paramètre est pair ou impair.
Réponse
procédure parite (nb:entier)
Début
if(nb mod 2 = 0) alors
Ecrire (nb,"est impair")
Sinon
Ecrire (nb," est pair")
Fin
Exercice 54
Écrire une fonction qui permet de retourner le nombre de caractères d’une
chaîne de caractères passée en paramètre.
Réponse
Fonction longueurChaine (chaine[]: tableau de caractères) : entier
Variables longueur : entier
longueur ← 0
tant que (chaine [longueur] ≠ '\0') faire
longueur ← longueur. + 1
FinTantque
retourner longueur
Fin
Exercice 55
Écrire une fonction qui cherche combien de fois un caractère est présent
dans une chaîne de caractères. Le caractère à chercher et la chaîne seront
passés en paramètres.
Réponse
Fonction nombreOccurence(texte[] : tableau de caractères , c : caractère) :
entier
Début
Variables nbCar, i : entiers
nbCar ← 0 i ←0
Tantque (texte[i] ≠ '\0') faire
Si (texte[i] = c)
nbCar ←nbCar + 1
. i ←i + 1
FinSi
FinTantque
retourner. nbCar
Fin
Exercice 56
Ecrire une fonction ou procédure qui calcule la valeur absolue d’un
nombre.
Réponse
Fonction absolue (x : réel) : réel
Debut
Si ( x > 0 ) alors
retourner x
Sinon
retourner - x
Fin
Exercice 57
Ecrire une procédure qui affiche le tableau de multiplication d’un entier
positif x.
Réponse
Procedure Multipl (x: entier)
Variables
i : entier
Debut
Pour i de 1 à 10 faire
Ecrire (x, ‘X’, i, ‘= ‘, x*i)
FinPour
Fin
Exercice 58
Ecrire une fonction qui calcule le PGCD de deux entiers strictement
positifs.
Réponse
Fonction PGCD (a , b : entier) : entier
Début
Tantque (a * b ≠ 0) Faire
Si ( a > b ) Alors
a← a-b
Sinon
b← b - a
FinSi
FinTantque
Si (a = 0) alors
retourner b
Sinon
retourner a
FinSi
Fin
Exercice 59
Ecrire une procédure qui permet de lire deux nombres, calculer la somme
et le produit et affiche
si ces derniers sont positifs ou négatifs.
Réponse
Procedure calcul (a,b: réel)
variables
som, prod : réels
Debut
Lire (a, b)
som ← a + b
prod ← a * b
Si (som ≥ 0) Alors
Ecrire ("la somme est positive")
Sinon
Ecrire ("la somme est négative")
FinSi
Si (prod ≥ 0 ) Alors
Ecrire ("le produit est positif ")
Sinon
Ecrire (" le produit est négatif ")
FinSi
Fin
Exercice 60
Ecrire une procédure qui permet de lire une liste de nombres entiers (N
nombres) dont la dernière valeur = -1
et affiche le nombre d’entiers pairs et leur pourcentage par rapport au
nombre d’entiers donnés.
Réponse
Procedure Nombres
Variables
x, N, N_pairs: entiers
pourcent : reel
Debut
N ← 0
N_pairs ← 0
Repeter
Lire (x)
N← N +1
Si (x mod 2 = 0 ) alors
N_pairs ← N_pairs + 1
FinSi
Jusqu’à (x = -1)
pourcent ← N_pairs * 100 / N
Ecrire ("Nombre de valeurs paires = ", N_pairs, "et leur pourcentage = ",
pourcent)
Fin
Exercice 61
Ecrire une procédure qui permet d’entrer deux valeurs M et N et
d’afficher toutes les valeurs paires entre M et N si M < N.
Réponse
Procedure paires (M,N: entiers)
Variables
Debut
Si (M >= N) Alors
Ecrire ("Erreur !!!!")
Sinon
Tantque (M < N) Faire
Si (M mod 2 = 0 ) Alors
Ecrire (M)
FinSi
M← M+1
FinTantque
FinSi
Fin
Exercice 62
Ecrire une procédure qui affiche si un nombre est premier ou non.
Réponse
Procedure premier (a : entier)
Variables
test : booleen
d : entier
Debut
test ← vrai
d← 2
Tantque ( d ≤ a/2 et test = vrai ) Faire
Si (a mod d = 0) Alors
test ← Faux
Sinon
d← d+1
FinSi
FinTantque
Si ( test = vrai) Alors
Ecrire (a, "est premier")
Sinon
Ecrire (a, "n'est pas premier")
FinSi
Fin
Exercice 63
Écrire une fonction récursive qui permet de calculer le factorielle d'un
entier saisi par l'utilisateur.
Fonction factorielle (n: entier): entier
Début
Si (n=0 ou n= 1) alors
retourner 1
Sinon retourner factorielle (n-1)*n
FinSi
Fin
Exercice 64
Écrire une fonction récursive qui permet de calculer la somme 1+2+3+...+
N. où N saisi par l'utilisateur.
Fonction somme ( n: entier): entier
Début
Si (n=0) alors
retourner 0
Sinon
retourner somme (n-1)+n
FinSi
Fin
Exercice 65
Écrire une fonction récursive permettant, à partir d'un réel x et d'une
valeur entière positive n, de calculer x puissance n .
Fonction puissance (r: réel, n: entier): réel
Début
Si (n=0) alors retourner 1
Sinon retourner puissance (r,n-1)*r
FinSi
Fin
Exercice 66
Écrire une fonction récursive qui permet d'afficher les entiers de 0 à
10 .utilisant un seul paramètre.
Procédure compteur (i: entier)
Début
Ecrire (10-i,"\n")
Si (i>0) alors
i← i+1 compteur (i)
FinSi
Fin
Exercice 67
Écrire une fonction récursive qui permet d'afficher les entiers de A à B .
Où A et B sont des paramètres de cette fonction.'
Procédure compteur (i: entier, n: entier)
Début
Ecrire (i,"\n")
Si (i<n) alors
i← i+1
compteur (i,n)
FinSi
Fin
Exercice 68
Écrire une fonction récursive qui permet de calculer le PGCD de deux
entiers passés en paramètres,( utiliser l'algorithme d'Euclide).
Fonction Euclide(a: entier,b:entier): entier
Début
Si( b = 0) alors
retourner a
FinSi
retourner Euclide (b, a mod b)
Fin
Exercice 69
Écrire une fonction récursive qui permet d'afficher les éléments d'une
matrice passée en paramètre
Procédure affiche(tab[3][4]: tableau d'entiers, a: entier, b: entier)
Début
Si( a < 3 ) alors
Si(b < 4) alors
Ecrire (tab[a][b])
affiche(tab,a,b+1)
Sinon
printf("\n")
affiche(tab,a+1,0)
FinSi
FinSi
Fin
Exercice 70
Écrire une fonction récursive qui permet de calculer l'image d'un entier
(passé en paramètre) par une suite de Fibonacci. Suite de Fibonacci est une
suite d'entiers dans laquelle chaque terme est la somme des deux termes qui
le précèdent. F(0)=F(1)=1
Fonction Fibonacci (n: entier): entier
Début
Si(n =0 ou n =1) alors
Retourner 1
Sinon
Retourner Fibonacci(n-2)+ Fibonacci(n-1)
FinSi
Fin
AccueilswitchExercice 28
Exercice 28
******** En Algorithme ********
Algorithme Variables Tab[10],nb_rech:réels nb_occ,i:entiers nb_occ ← 0
pour i de 1 jusqu'à 10 faire Ecrire("Entrer un entier:") Lire(Tab[i]) FinPour
Ecrire("Entrer Le nombre recherché:") Lire(nb_rech) pour i de 1 jusqu'à 10
faire Si( Tab[i] = nb_rech ) alors nb_occ ← nb_occ +1 FinSi FinPour
Ecrire("Nombre d'occurences de",nb_rech,"est",nb_occ) Fin Résultat ==> 7
6 3 7 5 6 9 0 7 1 Entrer Le nombre recherché: 7 Nombre d’occurrences de 7
est 3
Retour vers la liste d'exercices
******** En C ********
#include <stdio.h> int main(){ int Tab[10],nb_occ=0,i,nb_rech; for( i=0; i <
10; i++){ printf("Entrer un entier:"); scanf("%d",&Tab[i]); } printf("Entrer
Le nombre recherché:"); scanf("%d",&nb_rech); for( i=0; i < 10; i++){ if
( Tab[i] == nb_rech ) nb_occ ++ ; } printf("Nombre d'occurences de %d est
%d",nb_rech,nb_occ); return 0; }
Retour vers la liste d'exercices
******** En C++ ********
#include <iostream> using namespace std; int main(){ int
Tab[10],nb_occ=0,i,nb_rech; for( i=0; i < 10; i++){ cout<<"Entrer un
entier:"; cin>>Tab[i]; } cout<<"Entrer Le nombre recherché:");
cin>>nb_rech; for( i=0; i < 10; i++){ if (Tab[i] == nb_rech) nb_occ ++ ; }
cout<<"Nombre d'occurences de"<<nb_rech<<"est"<<nb_occ; return 0; }
Retour vers la liste d'exercices
******** En JAVA ********
import java.util.Scanner;
class Main {
public static void main(String[] args){
Scanner sc = new Scanner (System.in);
int[] Tab=new int [10];
int nb_occ=0,i,nb_rech;
for( i=0; i < 10; i++){
System.out.print("Entrer un entier :");
Tab[i] = sc.nextInt();
}
System.out.print("Entrer Le nombre recherche:");
nb_rech = sc.nextInt();
for( i=0; i < 10; i++){
if ( Tab[i] == nb_rech )
nb_occ ++ ;
}
System.out.print("Nombre doccurences de "+nb_rech+" est "+nb_occ);
}
}
Retour vers la liste d'exercices
******** En C# ********
public class Ex28{
public static void Main(string[] args)
{ int nb_occ=0,i,nb_rech;
int [] Tab = new int [10];
for( i=0; i < 10; i++){
Console.Write("Entrer un entier :");
Tab[i]=int.Parse(System.Console.ReadLine());
}
Console.Write("Entrer Le nombre rechercheé:");
nb_rech = int.Parse(System.Console.ReadLine());
for( i=0; i < 10; i++){
if ( Tab[i] == nb_rech )
nb_occ ++ ;
}
Console.Write("Nombre doccurences de "+nb_rech+" est "+nb_occ);
}
}
AccueilswitchEx29(Algorithme, C, C++, java, Python, C#)
Ex29(Algorithme, C, C++, java, Python, C#)
******** En Algorithme ********
Algorithme Variables Tab[10],auxilaire,i,j:entiers pour i de 1 jusqu'à 10
faire Ecrire("Entrer un entier:") Lire(Tab[i]) FinPour pour i de 1 jusqu'à 9
faire pour j de i+1 jusqu'à 10 faire Si ( Tab[j] < Tab[i]) alors auxilaire ←
Tab[i] Tab[i] ← Tab[j] Tab[j] ← auxilaire FinSi FinPour FinPour pour i de
1 jusqu'à 10 faire Ecrire(Tab[i]) FinPour Fin Résultat ==> 7 6 3 5 4 2 8 0 7
10123456778
Retour vers la liste d'exercices
******** En C ********
#include <stdio.h> int main(){ int Tab[10],auxilaire,i,j; for( i=0; i < 10; i++){
printf("Entrer un entier:"); scanf("%d",&Tab[i]); } for( i=0; i < 9; i++)
{ for( j=i+1; j < 10; j++){ if ( Tab[j] < Tab[i]) { auxilaire = Tab[i] ; Tab[i] =
Tab[j] ; Tab[j] = auxilaire ; } } } for( i=0; i < 10; i++) printf("%d\t",Tab[i]);
return 0; }
Retour vers la liste d'exercices
******** En C++ ********
#include <iostream> using namespace std; int main(){ int
Tab[10],auxilaire,i,j; for( i=0; i < 10; i++){ cout<<"Entrer un entier:";
cin>>Tab[i]; } for( i=0; i < 9; i++){ for( j=i+1; j < 10; j++){ if ( Tab[j] <
Tab[i]) { auxilaire = Tab[i] ; Tab[i] = Tab[j] ; Tab[j] = auxilaire ; } } }
for( i=0; i < 10; i++) cout<<Tab[i]<<" "; return 0; }
Retour vers la liste d'exercices
******** En JAVA ********
import java.util.Scanner;
class Main {
public static void main(String[] args){
Scanner sc = new Scanner (System.in);
int[] Tab = new int[10];
int auxilaire,i,j;
for( i=0; i < 10; i++){
System.out.print("Entrer un entier :");
Tab[i] = sc.nextInt();
}
for( i=0; i < 9; i++){
for( j=i+1; j < 10; j++){
if ( Tab[j] < Tab[i])
{ auxilaire = Tab[i] ;
Tab[i] = Tab[j] ;
Tab[j] = auxilaire ;
}
}
}
for( i=0; i < 10; i++)
System.out.print(Tab[i]+"\t");
}
}
Retour vers la liste d'exercices
******** En C# ********
using System;
public class Ex29 {
public static void Main(string[] args)
{ int auxilaire,i,j;
int [] Tab = new int[10];
for( i=0; i < 10; i++){
Console.Write("Entrer un entier:");
Tab[i]=int.Parse(System.Console.ReadLine());
}
for( i=0; i < 9; i++){
for( j=i+1; j < 10; j++){
if ( Tab[j] < Tab[i])
{ auxilaire = Tab[i] ;
Tab[i] = Tab[j] ;
Tab[j] = auxilaire ;
}
}
}
for( i=0; i < 10; i++)
Console.Write(Tab[i]+"\t");
}
}
AccueilswitchExo38 (algorithme C C++)
Exo38 (algorithme C C++)
******** En Algorithme ********
Algorithme Variables i,tab[10],Nb_pair, Nb_impair :entiers Debut Nb_pair
← 0 ; Nb_impair ← 0 pour i de 1 à 10 faire Ecrire("donner un entier:")
Lire(tab[i]) FinPour pour i de 1 à 10 faire ( Si( tab[i] mod 2 = 0 ) alors
Nb_pair ← Nb_pair + 1 else Nb_impair ← Nb_impair + 1 FinSi FinPour
Ecrire("Nombre de paires:",Nb_pair) Ecrire("Nombre
d'impaires:",Nb_impair) Fin Résultat ==> 1 4 3 6 6 9 0 9 7 1 Nombre de
paires : 4 Nombre d'impaires: 6
Retour vers la liste d'exercices
******** En C ********
#include<stdio.h> int main(){ int i,tab[10],Nb_pair=0,Nb_impair=0;
for(i=0;i<10;i++){ printf("Donner un entier : "); scanf("%d",&tab[i]); }
for(i=0;i<10;i++){ if( tab[i]%2==0 ) Nb_pair ++; else Nb_impair++ ; }
printf("Nombre de paires:%d\n",Nb_pair); printf("Nombre d'impaires:
%d",Nb_impair); return 0; }
Retour vers la liste d'exercices
******** En C++ ********
#include <iostream> using namespace std; int main(){ int
i,tab[10],Nb_pair=0,Nb_impair=0; for(i=0;i<10;i++){ cout<<"Donner un
entier:"; cin>>tab[i]; } for(i=0;i<10;i++){ if( tab[i]%2==0 ) Nb_pair ++; else
Nb_impair++ ; } cout<<"Nombre de paires:"<<Nb_pair<<endl;
cout<<"Nombre d'impaires:"<<Nb_impair; return 0; }
******** En JAVA ********
import java.util.Scanner;
class Main {
public static void main(String[] args){
int[] tab = new int [10];
int i,Nb_pair=0,Nb_impair=0;
Scanner sc = new Scanner (System.in);
for(i=0;i<10;i++){
System.out.print("Entrer un entier:");
tab[i] = sc.nextInt();
for(i=0;i<10;i++){
if( tab[i]%2==0 ) Nb_pair ++;
else Nb_impair++ ;
System.out.println("les paires: "+Nb_pair);
System.out.print("Les impaires: "+Nb_impair);
Retour vers la liste d'exercices
AccueilswitchExo40 (algorithme C C++)
Exo40 (algorithme C C++)
******** En Algorithme ********
Algorithme Variables i,j,k:entiers T[10],T1[10],T2[10]:tableaux d'entiers
Debut j ← 1 k ← 1 Pour i de 1 à 10 faire Lire(T[i]) FinPour Pour i de 1 à 10
faire Si(T[i] mod 2 = 0)alors T1[j]← T[i] j← j+1 SiNon T2[k] ← T[i] k ←
k+1 FinSi FinPour Pour i de 1 à j faire Ecrire(T1[i]) FinPour Pour i de 1 à
k faire Ecrire(T2[i]) FinPour Fin
Résultat ==> 2 0 9 8 7 8 6 5 4 1 2 0 8 8 6 4 9 7 5 1
Retour vers la liste d'exercices
******** En C ********
#include<stdio.h> int main(){ int i,j=0,k=0,T[10],T1[10],T2[10];
for(i=0;i<10;i++) { printf("Enter un entier:"); scanf("%d",&T[i]); }
for(i=0;i<10;i++) { if(T[i]%2 ==0){ T1[j]= T[i]; j++; }else { T2[k]=T[i]; k++;
} } for(i=0;i<j;i++) printf("%d ",T1[i]); printf("\t"); for(i=0;i<k;i++)
printf("%d ",T2[i]); return 0 ; }
Retour vers la liste d'exercices
******** En C++ ********
#include <iostream> using namespace std; int main(){ int
i,j=0,k=0,T[10],T1[10],T2[10]; for(i=0;i<10;i++) { cout<<"Enter un
entier:"; cin>>T[i]; } for(i=0;i<10;i++) { if(T[i]%2 ==0){ T1[j]= T[i]; j+
+; }else { T2[k]=T[i]; k++; } } for(i=0;i<j;i++) cout<<T1[i]<<" "; printf("\
t"); for(i=0;i<k;i++) cout<<T2[i]<<" "; return 0 ; }
******** En JAVA ********
import java.util.Scanner;
class Main {
public static void main(String[] args){
int [] T = new int [10];
int [] T1 = new int [10];
int [] T2 = new int [10];
int i,j=0,k=0;
Scanner sc = new Scanner (System.in);
for(i=0;i<10;i++) {
System.out.print("Enter un entier:");
T[i]= sc.nextInt();
}
for(i=0;i<10;i++) {
if(T[i]%2 ==0){
T1[j]= T[i]; j++;
}else { T2[k]=T[i]; k++; }
}
for(i=0;i<j;i++)
System.out.print(T1[ i]);
System.out.print("\t");
for(i=0;i<k;i++)
System.out.print(T2[i]);
}
}
Retour vers la liste d'exercices
AccueilPythonExo45 (algorithme C C++)
Exo45 (algorithme C C++)
Ecrire un programme qui permet de tester l'égalité entre deux tableaux
d'entiers (tailles 10). Le programme affiche VRAI si les composants des
deux tableaux sont correspondent position par position, sinon il affiche
FAUX.
******** En Algorithme ********
Algorithme Variables T1[10],T2[10],i,test: entiers Debut test ← 1 pour i de
1 à 10 faire Lire(T1[i]) FinPour pour i de 1 à 10 faire Lire(T2[i]) FinPour
pour i de 1 à 10 faire Si( T1[i] ≠ T2[i]) alors test ← 1 FinSi FinPour Si( test
= 0) alors Ecrire("VRAI") SiNon Ecrire ("FAUX") FinSi Fin Résultat ==>
1 2 7 9 0 3 1 8 4 6 1 2 7 5 0 3 1 8 4 6 FAUX
Retour vers la liste d'exercices
******** En langage C ********
#include <stdio.h> int main () { int T1[10] ,T2[10], i, test=0, M ; for(i=0 ;
i<10 ; i++){ printf("Entrer T1[%d]=",i); scanf ("%d",&T1[i]); } printf("\
n"); for(i=0 ; i<10 ; i++){ printf("Entrer T2[%d]=",i); scanf
("%d",&T2[i]); } for(i=0 ; i<10 ; i++) { if ( T1[i] != T2[i]) test =1 ; } if (test
== 0) printf(" ** VRAI **"); else printf (" ** FAUX **"); return 0 ; }
Retour vers la liste d'exercices
******** En C++ ********
#include <iostream> using namespace std; int main () { int T1[10] ,T2[10], i,
test=0, M ; for(i=0 ; i<10 ; i++){ cout<<"Entrer T1["<<i<<"]="; cin>>T1[i];
} cout<<endl; for(i=0 ; i<10 ; i++){ cout<<"Entrer T2["<<i<<"]=";
cin>>T2[i]; } for(i=0 ; i<10 ; i++) { if ( T1[i] != T2[i]) test =1 ; } if (test == 0)
cout<<" ** VRAI **"; else cout<<" ** FAUX **"; return 0 ; }
Retour vers la liste d'exercices
AccueilPythonExo46 (algorithme C C++)
Exo46 (algorithme C C++)
Écrire un programme qui compte le nombre d'éléments en double ( deux
éléments ou plus ) dans un tableau d'entiers saisie par l'utilisateur.
******** En Algorithme ********
Algorithme Variables test,compteur,i,j: entiers Debut pour i de 1 à 10 faire
Ecrire("Enter un entier:") Lire(tab[i]) FinPour pour i de 1 à 10 faire test ←
0 pour j de 1 à 10 faire Si ( tab[i] = tab[j] )alors test ← test+1 FinSi FinPour
Si (test > 1) alors compteur ← compteur+1 FinSi FinPour Ecrire("Les
elements en double sont:",compteur/2) Fin Résultat ==> 1 6 8 0 6 3 6 0 1 4
Les elements en double sont: 3
Retour vers la liste d'exercices
******** En langage C ********
#include<stdio.h> int main(){ int i,j,tab[10],test,compteur=0;
for(i=0;i<10;i++){ printf("Enter un entier:"); scanf("%d",&tab[i]); }
for(i=0;i<10;i++){ test=0; for(j=0;j<10;j++){ if ( tab[i] == tab[j] ) test++; } if
(test > 1) compteur++ ; } printf("Les elements en double sont
%d",compteur/2) ; return 0; }
Retour vers la liste d'exercices
******** En C++ ********
#include <iostream> using namespace std; int main(){ int
i,j,tab[10],test,compteur=0; for(i=0;i<10;i++){ cout<<"Enter un entier:";
cin>>tab[i]; } for(i=0;i<10;i++){ test=0; for(j=0;j<10;j++){ if ( tab[i] ==
tab[j] ) test++; } if (test > 1) compteur++ ; } cout>>"Les elements en double
sont:"<<compteur/2; return 0; }
Retour vers la liste d'exercices
AccueilPythonExo49 (algorithme C C++)
Exo49 (algorithme C C++)
Écrire un programme permettant de décaler les valeurs nulles vers la fin du
tableau , en gardant l'ordre des éléments.
Exemple 1 2 0 6 9 0 0 8 0 3
Résultat 1 2 6 9 8 3 0 0 0 0
******** En Algorithme ********
Algorithme Variables Tab[10],aide,i,j: Entiers Debut pour i de 1 à 10 faire
Lire(Tab[i]) FinPour pour i de 1 à 10 faire Ecrire(Tab[i]) FinPour pour i de
1 à 9 faire Si(Tab[i]=0)alors j←i+1; TantQue(Tab[j]=0 et j<9)faire j← j+1
FinTantQue aide ← Tab[i] Tab[i]← Tab[j] Tab[j]← aide FinSi FinPour
pour i de 1 à 10 faire Ecrire(Tab[i]) FinPour Fin Résultat ==> 0 9 5 7 0 3 0 1
309573130000
Retour vers la liste d'exercices
******** En langage C ********
#include<stdio.h> #include<conio.h> int main(){ int Tab[10],aide,i,j;
for(i=0;i<10;i++) { printf("Element[%d]=",i); scanf("%d",&Tab[i]); }
for(i=0;i<10;i++) printf("%d ",Tab[i]); for(i=0;i<9;i++) { if(Tab[i]==0)
{ j=i+1; while(Tab[j]==0 && j<9) {j++;} aide = Tab[i]; Tab[i]= Tab[j];
Tab[j]= aide ; } } printf("\n"); for(i=0;i<10;i++) printf("%d ",Tab[i]);
return 0; }
Retour vers la liste d'exercices
******** En C++ ********
#include <iostream> using namespace std; int main(){ int Tab[10],aide,i,j;
for(i=0;i<10;i++) { cout<<"Element["<<i<<"]="; cin>>Tab[i]; }
for(i=0;i<10;i++) cout<<Tab[i]<<" "; for(i=0;i<9;i++) { if(Tab[i]==0)
{ j=i+1; while(Tab[j]==0 && j<9) {j++;} aide = Tab[i]; Tab[i]= Tab[j];
Tab[j]= aide ; } } cout<<endl; for(i=0;i<10;i++) cout<<Tab[i]<<" "; return
0; }
Retour vers la liste d'exercices
< Passage par référence >
Exercice 52
Ecrire un programme C++ qui
1)déclare un entier a
2) déclare une référence vers cet entier ref_a
3) déclare un pointeur vers cet entier p_a
4) affiche les variables, leurs adresses, la valeur pointée.
Corrigé
#include<iostream>
using namespace std;
int main()
int i;
int *p_i; //pointeur
cout<<"Donner un entier : ";
cin>>i;
int &ref_i=i; //Reference
p_i=&i;
cout<<"Le contenu des variables:"<<endl;
cout<<"- variable i : "<<i<<endl;
cout<<"- variable ref_i : "<<ref_i<<endl;
cout<<"- variable p_i : "<<p_i<<endl;
cout<<"Leur adresse: "<<endl;
cout<<"- adresse de i : "<<&i<<endl;
cout<<"- adresse de ref_i : "<<&ref_i<<endl;
cout<<"- adresse de p_i : "<<&p_i<<endl;
cout<<"La valeur pointee : "<<*p_i<<endl;
return 0;
Exercice 53
Écrire une fonction nommée incrementer() permettant d’incrémenter la
valeur d’une variable passée en paramètre et une fonction nommée
permuter() permettant d’échanger les contenus de 2 variables de type int
fournies en argument :
1) En transmettant l’adresse des variables concernées (seule méthode
utilisable en C).
2) En utilisant la transmission par référence.
Corrigé
#include<iostream>
using namespace std;
//Passage par adresse
void permuter(int * x,int * y)
int p;
p = *x;
*x = *y;
*y = p;
void incrementer(int * x)
(*x)++;
//Passage par référence
void incrementer(int & x)
x++;
void permuter(int & x,int & y)
int p;
p = x;
x = y;
y = p;
int main()
int a, b;
cout<<"Donner la valeur de A : ";
cin>>a;
cout<<"Donner la valeur de B : ";
cin>>b;
//Appel par adresse
incrementer(&a);
cout<<"la valeur de A : "<<a<<endl;
permuter(&a,&b);
cout<<"la valeur de A: "<<a<<endl;
cout<<"la valeur de B: "<<b<<endl;
// Appel par référence
cout<<"la valeur de A est: "<<a<<endl;
cout<<"la valeur de B est: "<<b<<endl;
incrementer(a);
cout<<"la valeur de A: "<<a<<endl;
permuter(a,b);
cout<<"la valeur de A: "<<a<<endl;
cout<<"la valeur de B: "<<b<<endl;
return 0;
POO En C++
Exercice 54: Classe Rectangle
Écrire une classe «Rectangle» ayant deux variables « a » et « b » et une
fonction membre « surface() » qui retournera la surface du rectangle.
Corrigé
#include <iostream>
using namespace std;
class Rectangle {
public:
int a,b;
int surface(){
return a*b;
}
};
int main() {
Rectangle rectangle;
cout<<"Entrez la largeur(a) du rectangle :"<<endl;
cin>>rectangle.a;
cout<<"Entrez la longueur(b) du rectangle:"<<endl;
cin>>rectangle.b;
cout<<"Surface : "<< rectangle.surface();
return 0;
}
Exercice 55 : Classe Somme
Écrire une classe « Somme » ayant deux variables « n1 » et « n2 » et une
fonction membre « som() » qui calcule la somme. Dans la méthode
principale main demandez à l’utilisateur d’entrez deux entiers et passez-les
au constructeur par défaut de la classe « Somme » et afficher le résultat de
l’addition des deux nombres.
Corrigé
#include <iostream>
using namespace std;
class Somme{
public:
int n1, n2;
Somme(int nbr1, int nbr2){
n1=nbr1;
n2=nbr2;
}
int som(){
return n1 + n2;
}
};
int main (){
int n1, n2;
cout<<"Entrez le premier nombre :";
cin>>n1;
cout<<"Entrez le deuxième nombre :";
cin>>n2;
Somme obj(n1,n2);
cout<<"Le résultat de l'addition est :"<< obj.som() <<"\n";
return 0;
}
Exercice 56 : Classe Etudiant
Écrire une classe C++ appelée « Etudiant » avec les membres suivant :
nom : (de type char),
note1, note2 : (de type float)
calc_moy() : calcule la note moyenne.
afficher () : affiche le nom et la note moyenne.
Le programme principal (main) demande à l’utilisateur d’entrer le nom et
les notes d'un étudiant. et affiche leur nom et la note moyenne.
Corrigé
#include <iostream>
using namespace std;
class Etudiant {
public:
string nom;
float note1, note2;
Etudiant(string _nom, float _note1, float _note2){
nom = _nom;
note1 = _note1;
note2 = _note2;
}
float calc_moy(){
return (note1 + note2)/2;
}
void afficher (){
cout << "Étudiant: " << nom << " \n moyenne: "<< calc_moy() << endl;
}
};
int main(){
string nom;
int note1, note2;
cout << "Entrez le nom: ";
cin >> nom;
cout << "Entrez la première note: ";
cin >> note1;
cout << "Entrez la deuxième note: ";
cin >> note2;
Etudiant E (nom, note1, note2);
E.afficher();
return 0;
}
Exercice 57 : Classe point
Réaliser une classe point permettant de manipuler un point d'un plan.on
prévoira :
1) un point est définit par ses coordonnées x et y (des membres privés)
2) un constructeur (vous pouvez également implémenter les trois types de
constructeur)
3) une fonction membre déplace effectuant une translation définie par ses
deux arguments dx et dy (double)
4)une fonction membre affiche se contentant d'afficher les coordonnées
cartésiennes du point.
5)une fonction membre saisir se contentant de saisir les coordonnées
cartésiennes du point.
6)une fonction membre distance effectuant calculant la distance entre deux
point.
7)une fonction membre milieu donnant le milieu d'un segment.
on écrira séparément:
8) un ficher source constituant la déclaration et la définition de la classe.
9)un petit programme d'essai (main) gérant la classe point.
Corrigé
#include <iostream>
#include <math.h>
using namespace std;
class point {
double x;
double y;
public:
point();
point(double,double);
point(point &);
~point();
double get_x();
double get_y();
void set_x(double x1);
void set_y(double y1);
point deplace(double dx, double dy);
void affiche();
void saisir();
double distance(point &);
point milieu(point &);
};
point::point(){ }
point::point(double a,double b) { x=a; y=b; }
point::point(point &p) {
set_x(p.get_x());
set_y(p.get_y());
point::~point() {}
double point::get_x() {return x; }
double point::get_y() { return y; }
void point::set_x(double a) { x=a; }
void point::set_y(double a) { y=a; }
point point::deplace(double dx,double dy) {
set_x(get_x()+dx);
set_y(get_y()+dy);
return *this;
double point::distance (point &p) {
double p1,x1,x2;
x1=(get_x()-p.get_x())*(get_x()-p.get_x());
x2=(get_y()-p.get_y())*(get_y()-p.get_y());
//p1=sqrt(((get_x()-p.x)*((get_x()-p.x))+((get_y()-p.y)*(get_y()-p.y)));
p1=sqrt(x1+x2);
return p1;
void point::affiche()
cout<<"les coordonnées sont:"<<endl;
cout<<"x="<<get_x()<<endl;
cout<<"y="<<get_y()<<endl;
void point::saisir()
cout<<"donnée les coordonnées:"<<endl;
cout<<"x="<<endl;
cin>>x;
cout<<"y="<<endl;
cin>>y;
point point::milieu(point &p)
point p1;
p1.x=(get_x()+p.get_x())/2;
p1.y=(get_y()+p.get_y())/2;
return p1;
int main()
point p(1,1);
point x(5,5);
point c;
p.affiche();
p.deplace(5,5);
p.affiche();
cout<<"la distance est : "<<p.distance(x)<<endl;
c=p.milieu(x);
c.affiche();
Exercice 58 : Classe Compte
Écrire un programme qui simule la gestion d’un simple compte bancaire.
Le compte est créé avec un solde initial. Il est possible de déposer et de
retirer des fonds, d’ajouter des intérêts et de connaître le solde actuel. Cela
devrait être implémenté dans une classe nommée Account qui comprend:
1) Un constructeur par défaut qui met le solde initial à zéro.
2) Un constructeur qui accepte une balance initial comme paramètre.
3) Une fonction getBalance qui renvoie le solde actuel.
4) Une méthode deposer pour déposer un montant spécifié.
5) Une méthode retirer pour retirer un montant spécifié.
6) Une méthode ajouter_Interet pour ajouter de l’intérêt au compte.
La méthode ajouter_Interet prend le taux d’intérêt comme paramètre et
modifie le solde du compte en solde * (1 + taux d’intérêt).
Corrigé
#include <iostream>
using namespace std;
class Compte {
private:
double balance = 0;
public:
Compte() : balance(0) {}
Compte(double initial_balance) : balance(initial_balance) {}
double getBalance() const { return balance; }
void deposer(double amount) { balance += amount; }
void retirer (double amount) { balance -= amount; }
void ajouter_Interet (double rate) { balance = balance*(1 + rate); }
};
int main() {
Compte compte1;
Compte compte2(3000);
compte1.deposer(100);
compte2.retirer(1000);
compte1.ajouter_Interet (0.3);
cout << compte1.getBalance() << "\n";
cout << compte2.getBalance();
return 0;
}
Exercice 59 : Classe temps
Créer une classe appelée Temps, qui a des membres de type int tels que
heures, minutes et secondes.(rendez-les private)
1) Un constructeur doit initialiser ces données à 0
2) Un autre constructeur devrait l’initialiser à des valeurs fixes.
3) Une fonction membre devrait l’afficher, au format 17h 59min 59s.
4) Une autre fonction pour renvoyer les données de chaque membre
nommez-les getheurs, getMin et getSec
5) Une fonction membre doit ajouter deux objets de type Temps passé en
arguments.
Corrigé
#include <iostream>
using namespace std;
class Temps {
private:
int heures;
int minutes;
int seconds;
public:
Temps() { setTemps(0, 0, 0); }
Temps(int h, int m, int s) { setTemps(h, m, s); }
void setTemps(int h, int m, int s) {
heures = h; minutes = m; seconds = s;
}
void getTemps(void) const {
cout <<heures << "h "<<minutes << "min "
<<seconds <<"s"<< endl;
}
int getHours() const { return heures; }
int getMin() const { return minutes; }
int getSec() const { return seconds; }
void ajouterTemps(Temps t1, Temps t2) {
this->seconds= t1.seconds + t2.seconds;
this->minutes = t1.minutes + t2.minutes + (this->seconds/60);
this->heures = t1.heures + t2.heures + (this->minutes/60);
this->minutes %= 60;
this->seconds %= 60;
}
};
int main() {
Temps t1(4,43, 59), t2(1, 20, 32);
Temps t3;
t1.getTemps();
t2.getTemps();
t3.ajouterTemps(t1, t2);
t3.getTemps();
}
Exercice 60: Classe rectangle
Écrire un programme utilisant une classe rectangle dont le constructeur
prend deux paramètres, largeur et hauteur et qui offre les fonctions
suivantes :
1) calcul du périmètre
2) calcul de la surface
3) affichage
ainsi que les accesseurs et mutateurs triviaux (lecture et modification de la
largeur et de la hauteur).
Corrigé
#include<iostream>
#include <cstdlib>
using namespace std;
class Rectangle {
private:
int largeur;
int hauteur;
public:
Rectangle(int initLargeur,int initHauteur);
~Rectangle();
int getLargeur() const { return largeur; };
int getHauteur() const { return hauteur; };
int perimetre() const { return 2*(largeur+hauteur); };
int surface() const { return largeur * hauteur; };
void setLargeur(int newLargeur) { largeur = newLargeur; };
void setHauteur(int newHauteur) { hauteur = newHauteur; };
void afficher();
};
Rectangle::Rectangle(int initLargeur, int initHauteur)
largeur = initLargeur;
hauteur = initHauteur;
}
Rectangle::~Rectangle(){ }
void Rectangle::afficher() {
for( int i=0; i < hauteur; i++)
for(int j=0; j < largeur; j++)
cout << "*";
cout << endl;
int main()
Rectangle monRectangle(0,0);
char choix = '0';
int value;
while(true)
do
{
cout << " Rectangle - Menu" << endl;
cout << "1 - Modifier largeur du rectangle" << endl;
cout << "2 - Modifier hauteur du rectangle" << endl;
cout << "3 - Calculer les propriétés du rectangle" << endl;
cout << "4 - Afficher le rectangle" << endl;
cout << "5 - Quitter" << endl;
cin >> choix;
}while(choix < '1' || choix > '5');
switch(choix)
case '1':
cout << "Nouvelle largeur : "; cin >> value;
monRectangle.setLargeur(value); break;
case '2':
cout << "Nouvelle hauteur : "; cin >> value;
monRectangle.setHauteur(value); break;
case '3':
cout << "Périmètre : " << monRectangle.perimetre() << endl;
cout << "Surface : " << monRectangle.surface() << endl; break;
case '4':
monRectangle.afficher(); break;
case '5':
exit(0); break;
default:
cout << "Erreur ! Choix invalide." << endl;
exit(1);
return 0;
Exercice 61 : L'héritage
Écrivez un programme qui définit une classe appelée Forme avec un
constructeur qui donne de la valeur à la largeur(x) et à la hauteur(y).
Définir la méthode aire() dans les deux sous-classes Triangle et Rectangle,
qui calculent l’aire. Dans la méthode principale main, définissez deux
variables, un triangle et un rectangle, puis appelez la fonction aire() dans
ces deux variables.
Notez que:
l’aire du triangle est = largeur * hauteur / 2
l’aire du rectangle est = largeur * hauteur.
Corrigé
#include <iostream>
using namespace std;
class Forme {
protected:
float x, y;
public:
Forme(float x, float y)
{
this->x = x;
this->y = y;
}
};
class Rectangle: public Forme
{
public:
Rectangle(float x, float y) : Forme (x, y) {}
float aire()
{
return (x * y);
}
};
class Triangle: public Forme
{
public:
Triangle(float x, float y): Forme (x, y) {}
float aire()
{
return (x * y / 2);
}
};
int main (){
Rectangle rectangle(2,3);
Triangle triangle(2,3);
cout << rectangle.aire() << endl;
cout << triangle.aire() << endl;
return 0;
}
Exercice 62: fonction amie
Écrire une classe «Personne» ayant deux variables « nom » et « âge » sont
privées et un constructeur avec paramètres, Puis écrire une fonction amie
(fonction Friend) à l'extérieur de la classe qui permet d'afficher les
informations d'une personne (nom et l'âge).
Corrigé
#include <iostream>
using namespace std;
class Personne {
private:
string nom;
int age;
public:
Personne (string n,int a)
{ nom=n ; age=a; }
friend void affiche (Personne p);
};
void affiche (Personne p)
{
cout<<"votre nom est: "<<p.nom<<endl;
cout<<"votre âge est:"<<p.age;
}
int main()
{ Personne p("mohamed",32);
affiche(p);
}
Exercice 63: Polymorphisme
1)Écrire une classe Forme ayant une fonction aire ()
2) Écrire la classe triangle qui hérite de la classe Forme et comporte les
attributs
(base et hauteur de type réel) et les méthodes ( constructeur et aire() ).
3) Écrire la classe Cercle qui hérite de la classe Forme et comporte
l'attribut rayon
de type réel et les méthodes ( constructeur et aire() ).
4) Écrire la classe Rectangle qui hérite de la classe Forme et comporte les
attributs
(Longueur et largeur de type réel) et les méthodes ( constructeur et aire() ).
4) Écrire la classe Carre qui hérite de la classe Forme et comporte l'attribut
(côté de type réel) et les méthodes ( constructeur et aire() ).
6) Écrire une fonction main() qui permet de déclarer un tableau des
pointeurs de type Forme puis remplir ce tableau avec les instances de types
(Cercle, Rectangle, Triangle, Carré) et après afficher la surface de chaque
objet.
Corrigé
#include <iostream>
using namespace std;
class Forme{
public:
virtual void aire() {cout<<"Forme"<<endl;}
};
class Triangle : public Forme
{ int base;
int hauteur ;
public:
Triangle (int b,int h){ base=b; hauteur=h;}
void aire() {cout<<"aire de triangle"<<endl;}
};
class Cercle : public Forme
{ int rayon ;
public:
Cercle (int r){ rayon=r;}
void aire() {cout<<"aire de cercle"<<endl;}
};
class Carre : public Forme
{ int cote;
public:
Carre(int c){ cote=c;}
void aire() {cout<<"aire de Carré"<<endl;}
};
class Rectangle : public Forme
{ int longueur;
int largeur;
public:
Rectangle (int l,int L){ longueur=l; largeur=L;}
void aire() {cout<<"aire de rectangle"<<endl;}
};
int main()
Forme * T[4];
T[0]= new Triangle(6,5);
T[1]= new Carre(5);
T[2]= new Cercle(6);
T[3]= new Rectangle(3,4) ;
T[0]->aire();
T[1]->aire();
T[2]->aire();
T[3]->aire();
return 0;
Exercice 64: Classe abstraite
1)Écrire une classe A abstraite ayant 3 méthodes: deux méthodes sont des
fonctions virtuelles purs (afficher1() et afficher2() et la troisième bien
définie s'appelle afficher3().
2) Écrire une classe B qui hérite de la classe A dans cette classe redéfinir les
deux fonctions virtuelles précédentes.
2) Écrire une fonction main() qui permet de déclarer un objet (b) de la
classe B, puis tester les trois méthodes sur cet objet.
Corrigé
#include <iostream>
using namespace std;
// Classe abstraite
class A {
public:
virtual void afficher1()=0; //Fonction virtuelle pure
virtual void afficher2()=0; //Fonction virtuelle pure
void afficher3()
cout << " C'est la méthode afficher3 de la classe mére" << endl;
};
class B : public A
public:
void afficher1()
cout << " C'est la méthode afficher1 de la classe fille" << endl;
void afficher2()
cout << " C'est la méthode afficher2 de la classe fille" << endl;
};
int main()
B b;
b.afficher1();
b.afficher2();
b.afficher3();
return 0;
Exercice 65: Surcharge des opérateurs
L'objectif de cet exercice corrigé en C++ est de définir les opérateurs de
comparaisons et les opérateurs arithmétiques d'une classe Fraction en
utilisant les fonctions membres et les fonctions amies
1) Créer la classe Fraction possédant deux données membres
« numérateur » et « dénominateur » qui correspondent respectivement au
numérateur et au dénominateur de la fraction
2) Définir un constructeur d'initialisation
3) Définir une fonction membre afficher()
4) Définir les opérateurs arithmétiques (+, - , * et /) entre deux fractions
5) Définir les opérateurs arithmétiques (+, - , * et /) entre une fraction et un
nombre
6) Définir les opérateurs de comparaison (==, !=, <, >, <=, >=) sur deux
fractions
7) Créer un programme de test
Corrigé
#include <iostream>
using namespace std;
class fraction {
int num;
int den;
public:
fraction(int a = 1, int b = 1)
num = a;
den = b;
void afficher()
cout << num << "/" << den << endl;
fraction inverse()
fraction r;
r.num = den;
r.den = num;
return r;
}
fraction operator+(fraction f)
fraction s;
s.num = num * f.den + den * f.num;
s.den = den * f.den;
return s;
fraction operator-(fraction f)
fraction s;
s.num = num * f.den - den * f.num;
s.den = den * f.den;
return s;
fraction operator*(fraction f)
fraction s;
s.num = num * f.num;
s.den = den * f.den;
return s;
}
fraction operator/(fraction f)
return *this * (f.inverse());
fraction operator+(int x)
fraction r(x, 1);
return *this + r;
/* Ou
fraction s;
s.num = num + den * x;
s.den = den;
return s;
*/
fraction operator-(int x)
{
fraction r(x, 1);
return *this - r;
fraction operator*(int x)
fraction r(x, 1);
return *this * r;
fraction operator/(int x)
fraction r(x, 1);
return *this / r;
friend fraction operator+(int, fraction);
friend fraction operator-(int, fraction);
friend fraction operator*(int, fraction);
friend fraction operator/(int, fraction);
bool operator>(fraction f)
return (num * f.den > den * f.num);
bool operator>=(fraction f)
return (num * f.den >= den * f.num);
bool operator==(fraction f)
return (num * f.den == den * f.num);
bool operator<(fraction f)
return !(*this >= f);
bool operator<=(fraction f)
{
return !(*this > f);
bool operator!=(fraction f)
return !(*this == f);
};
fraction operator+(int x, fraction f)
return f + x;
fraction operator-(int x, fraction f)
return f - x;
fraction operator*(int x, fraction f)
return f * x;
}
fraction operator/(int x, fraction f)
return f / x;
int main()
fraction f1(1, 2), f2(2, 3);
cout << "Fraction F1 : ";
f1.afficher();
cout << "Fraction F2 : ";
f2.afficher();
cout << "F1 + F2 = ";
(f1 + f2).afficher();
cout << "F1 - F2 = ";
(f1 - f2).afficher();
cout << "F1 * F2 = ";
(f1 * f2).afficher();
cout << "F1 / F2 = ";
(f1 / f2).afficher();
cout << "F1 + 5 = ";
(f1 + 5).afficher();
cout << "3 * F2 = ";
(3 * f2).afficher();
if (f1 == f2)
cout << "Les deux fractions sont egales" << endl;
else
cout << "Les deux fractions ne sont pas egales" << endl;
if (f1 > f2){
cout << "La fraction la plus grande est : ";
f1.afficher();
else if(f1 < f2){
cout << "La fraction la plus grande est : ";
f2.afficher();
/*
cout << "La fraction la plus petite: ";
if (f1 < f2)
f1.afficher();
else if(f1 > f2)
f2.afficher();
if (f1 != f2)
cout << "les deux fractions ne sont pas egales" << endl;
else
cout << "Les deux fractions sont egales" << endl;
*/