Vous êtes sur la page 1sur 10

Correction

Procedures&Fonctions

Exercice 1

Algorithme Exercice 1
CONST
NMAX = 50
TYPE
tab : Tableau [1..NMAX] d’entier
VAR
T : tab
N , N1: entier
/* Fonction SAISIE TAILLE*/
Fonction SAISIE_TAILLE ( ) : entier
VAR
N : entier
DEBUT
Répéter
Ecrire ("Donner un entier :")
Lire (N)
Jusqu’à ( N>0 et N<=NMAX)
SAISIE_TAILLE ← N
FIN
/*Procédure SAISIE_TAB*/

Procédure SAISIE_TAB ( VAR T : tab ; N :entier)

VAR i : entier

DEBUT
Pour i de 1 à N Faire
Ecrire ("T [" , i , "] :")
Lire (T[i])
Fin pour

FIN
/* Procédure AFFICHER */

Procédure AFFICHER ( T : tab ; N : entier)

VAR

i : entier
DEBUT
Pour i de 1 à N Faire
Ecrire ( T[i] )
Fin Pour
FIN
/* Procédure RECHERCHE */

Procédure RECHERCHE ( T : tab ; N : entier)

VAR
i , min , nocc , pos : entier
DEBUT
nocc ← 0 min ← T[1]
Pour i de 2 à N Faire
Si ( T[i] < min ) alors
min ← Ti]
pos ← i
Fin si
Fin Pour
Pour i de 1à N Faire
Si ( T[i] = min ) alors
nocc ← nocc + 1
Fin si
Fin Pour
Ecrire ("Le plus petit élément est " , min , " son occurrence est " , nocc , " et l’indice de sa
première occurrence ets " , pos)

FIN
/* Fonction DETERMINER */
Fonction DETERMINER ( T : tab ; N : entier)

VAR
i , j , nr , nd : entier
DEBUT
nd ← 0
Pour i de 1 à N Faire
nr ← 0
Pour j de i à N Faire
Si (T[i] = T[j] ) alors
nr ← nr + 1
Fin Si
Fin Pour
Si (nr = 1) alors
nd ← nd + 1
Fin Si
Fin Pour
DETERMINER ← nd
FIN

/* Procédure ELIMINER */

Procédure ELIMINER ( T : tab ; N : entier)

VAR
i , j , k : entier
DEBUT
Pour i de 1 à N - 1 Faire
Pour j de i+1 à N Faire
Si (T[i] = T[j] ) alors
Pour k de j à N-1 Faire
T[k] = T[k+1]
Fin Pour
N ←N–1
j ←j-1
Fin Si
Fin Pour
Fin Pour
FIN
/* Programme PRINCIPAL */
DEBUT
Écrire ("Chargement de T")
N ← SAISIE_TAILLE()
SAISIE_TAB ( T , N)
RECHERCHE ( T , N )
N1 ← DETERMINER ( T , N )
Écrire ("Le nombre d’éléments distincts dans T = " , N1)
Écrire ("Contenu de T avant élimination")

AFFICHER ( T , N )
ELIMINER ( T , N)
Écrire ("Contenu de T après élimination")

AFFICHER ( T , N1 )
FIN

Exercice 2
Algorithme TABLEAU
CONST NMAX = 50
TYPE TAB : Tableau [1..NMAX] d’entier
VAR T, TSP, TSI , TL : tab
N: entier
/* Fonction SAISIE TAILLE */
Fonction SAISIE_TAILLE ( ) : entier
VAR N : entier
DEBUT
Répéter
Ecrire ("Donner un entier :")
Lire (N)
Jusqu’à ( N>0 et N<=NMAX)
SAISIE_TAILLE ← N
FIN
/*Procédure LECTURE*/

Procédure REMPLIR1 ( VAR T : tab ; N :entier)

VAR i : entier

DEBUT
Pour i de 1 à N Faire
Répéter
Ecrire ("T [" , i , "] :")
Lire (T[i])
Jusqu’à (T[i]>0)
Fin pour

FIN
/* Procédure AFFICHE */

Procédure AFFICHER ( T : tab ; N : entier)


VAR i : entier
DEBUT
Pour i de 1 à N Faire
Ecrire ( T[i] )
Fin Pour
FIN
/* Procédure REMPLIR2 */

Procédure REMPLIR2 ( VAR TSP : TAB ; T : tab ; N :entier)

VAR i , Ind , X : entier


DEBUT
Pour i de 1 à N Faire
Ind ← 0 TSP[i] ← 0 X ← T[i]
Tantque(X<> 0) Faire
Ind ← Ind + 1
Si ( Ind mod 2 = 0) Alors
TSP[i] ← TSP[i] + X mod 10
Fin Si
X ← X div 10
Fin Tantque
Fin Pour
FIN
/* Procédure REMPLIR3 */

Procédure REMPLIR3 ( VAR TSI : TAB ; T : tab ; N :entier)

VAR

i , Ind , X : entier
DEBUT
Pour i de 1 à N Faire
Ind ← 0
TSI[i] ← 0
X ← T[i]
Tantque(X<> 0) Faire
Ind ← Ind + 1
Si ( Ind mod 2 = 1) Alors
TSI[i] ← TSI[i] + X mod 10
Fin Si
X ← X div 10
Fin Tantque
Fin Pour
FIN
/* Procédure REMPLIR4 */

Procédure REMPLIR4 ( VAR TL : TAB ; T : tab ; N :entier)


VAR

i , X : entier
DEBUT
Pour i de 1 à N Faire
TL[i] ← 0
X ← T[i]
Tantque(X<> 0) Faire
TL[i] ← TL[i] + 1
X ← X div 10
Fin Tantque
Fin Pour
FIN
/* Programme principal */
DEBUT
N ← SAISIE_TAILLE()
Écrire ("Chargement de T")
LECTURE ( T , N)
REMPLIR1(T , N)
REMPLIR2( TSP , T , N)
REMPLIR1( TSI , T , N)
REMPLIR1( TL , T , N)
Écrire ("Contenu de T")
AFFICHER ( T , N)
Écrire ("Contenu de TSP")
AFFICHER ( TSP , N)
Écrire ("Contenu de TSI")
AFFICHER ( TSI , N)
Écrire ("Contenu de TL")
AFFICHER ( TL , N)
FIN

Exercice 3

Algorithme TABLEAU
CONST
NMAX = 50
TYPE
tab : Tableau [1..NMAX] d’entier
VAR
T , T1 : tab
N, N1 : entier
/* Fonction SAISIE TAILLE*/
Fonction SAISIE_TAILLE ( ) : entier
VAR N : entier
DEBUT
Répéter
Ecrire ("Donner un entier :")
Lire (N)
Jusqu’à ( N>0 et N<=NMAX)
SAISIE_TAILLE ← N
FIN
/*Procédure LECTURE*/

Procédure SAISIE_TAB ( VAR T : tab ; N :entier)

VAR i : entier

DEBUT
Pour i de 1 à N Faire
Répéter
Ecrire ("T [" , i , "] :")
Lire (T[i])
Jusqu’à (T[i]>0)
Fin pour

FIN
/* Procédure AFFICHE */

Procédure AFFICHER ( T : tab ; N : entier)

VAR i : entier
DEBUT
Pour i de 1 à N Faire
Ecrire ( T[i] )
Fin Pour
FIN
/*Fonction TEST */
Fonction TESTER ( T : tab ; N : entier) : entier

VAR
i, croissant , decroissant : entier
DEBUT
croissant ← N decroissant ← N
Pour i de 1 à N-1 Faire
Si ( T[i] > T[i+1]) alors
croissant←0
Fin Si
Si ( T[i] < T[i+1]) alors
decroissant←0
Fin Si
Fin Pour
Si (croissant ≠ 0 et decroissant = 0) alors TEST ←1 Fin Si
Si (croissant = 0 et decroissant ≠ 0) alors TEST ← 2 Fin Si
Si (croissant ≠ 0 et decroissant ≠ 0) alors TEST ←3 Fin Si
Si (croissant = 0 et decroissant = 0) alors TEST ←4 Fin Si
FIN
/* Procédure DETERMINER*/
Fonction DETERMINER ( T : tab ; N, x :entier ) : entier

VAR : i, cp : entier
DEBUT
cp ← 0
Pour i de 1 à N faire
Si (T[i] = x]) alors
cp ← cp + 1
Fin Si
Fin Pour
DETERMINER ← cp
FIN
/* Procédure TRIER */
Procédure TRIER ( VAR T : tab ; N : entier) 

VAR i, j, aux, indmin : entier


DEBUT
Pour i de 1 à N-1 faire
indmin ← i
Pour j de i+1 à N faire
Si ( T[j] < T[indmin] ) alors
indmin ← j
Fin si
Fin Pour
Si (i ≠ indmin ) alors
aux ← T[i]
T[i] ← T[indmin]
T[indmin] ← aux
Fin si
Fin Pour
FIN
/* Procédure COMPRESSER */

Procédure COMPRESSER ( T : tab ; Var T1 : tab , N : entier ; Var N1 : entier)

VAR i : entier
DEBUT
Si (TESTER( T , N) = 4) alors
TRI(T, N)
Fin Si
i ←1 N1 ← 1
Tant que ( i ≤ N) Faire
T1[N1] ← T[i]
T1[N1+1] ← DETERMINER(T,N,T[i])
N1← N1+2
i← i + DETERMINER(T,N,T[i])
Fin Tant que
FIN
/* Programme principal */
DEBUT
N ← SAISIE_TAILLE() SAISIE_TAB ( T , N)
R ←TESTER ( T , N)
Si(R=1) alors
Écrire ("le tableau est constant")
Si non
Si (R==2) alors
Écrire ("le tableau est croissant")
Si non
Si (R==3) alors
Écrire ("le tableau est décroissant")
Si non
Écrire ("le tableau est quelconque")
Fin si
COMPRESSER ( T , T1 , N , N1)
AFFICHER ( T1 , N1);
FIN

// Exercice 4 : Nombre de Fibonacci


int Fibonacci(int n)
{
if (n <= 1)
return (n);
else
return (Fibonacci(n-1) + Fibonacci(n-2));
}
// Exercice 5 : Fonction d’Ackermann
int Acker(int m, int n){
if (m == 0)
return (n+1);else
if (n == 0) return (Acker(m-1, 1)); else
return (Acker(m-1, Acker(m, n-1)));
}

Exercice 6 : Occurrences d’un entier dans un tableau


int Compter (int T[], int Deb, int Fin, int E)
{
if (Deb == Fin)
{
if (T[Deb] == E) return 1;
else return 0;
}
else
{
if (T[Deb] == E)
return Compter(T, Deb + 1, Fin, E) + 1;
else
return Compter(T, Deb + 1, Fin, E);
}
}

//

Exercice 7: Inversion d’un tableau


void Inverser(int T[], int Deb, int Fin)
{
int aux;

if (Deb < Fin)


{
aux = T[Deb];
T[Deb] = T[Fin];
T[Fin] = aux;
Inverser(T, Deb + 1, Fin – 1);
}
}
Exercice8 : Résultat d’exécution de Guess
Guess (3, 1) = 8

Vous aimerez peut-être aussi