Académique Documents
Professionnel Documents
Culture Documents
RESOLUTION EXERCICES
A. CALCUL DE LA COMPLEXITE
Algorithme Somme_N_nombre
Variable som,nbr,n,i: entier
Début
som<- 0
i <- 1
écrire('Entrez le nombre n somme a calculer : ')
lire(nbr)
si (nbr <= 0) alors
repeter
ecrire("saisir un nombre superieur à O : ")
lire(nbr)
jusqua nbr > 0
sinon
ecrireln("Ecrire les nombres : ")
tantque i <= nbr faire
lire(n)
ecrire(n," + ")
som<-som+n
i<-i+1
fintantque
ecrireln("")
ecrireln("somme : ",som)
finsi
Fin
i = 1 i = n
Tantque (i <=n) Faire Tantque (i >=n) Faire
Exécuter le module A Exécuter le module A
i =i +1 i =i /3
Fintantque Fintantque
Pour chaque itération de la boucle Pour chaque itération de la boucle
Un test Un test
Une exécution Une exécution
Une incrémentation Une décrémentation
Au total 3(1 + n) opérations O(n) Au total 3(n / 3) opérations O(log3 n)
i = 1
Tantque (i <=n) Faire
j=1
i = 1 Tantque ( j <= n) Faire
Tantque (i <=n) Faire Exécuter le module A
j=1 J=j*1
Tantque ( j <= n) Faire Fintantque
Exécuter le module A i =i *1
J=j+1 Fintantque
Fintantque
i =i +1 Pour chaque itération de la boucle
Fintantque Deux tests
Une exécution
Pour chaque itération de la boucle Deux incrémentations
Deux tests Complexité : O(2n )
Une exécution
Deux incrémentations
Complexité =nombre d’itération de la grande
boucle multiplier par le nombre d’itération
de la petite boucle. (n *n) ou O(n2 )
3
i = 1
Tantque (i <=n) Faire
j=1
Tantque ( j <= n) Faire
Exécuter le module A
J=j*4
Fintantque
i =i +1
Fintantque
1. Ecrire un algorithme qui lit le nom d’un étudiant et son année de naissance, et qui affiche le
message suivant
dans une procédure : « NomEtudiant, tu as X ans ».
Algorithme Nom_Annee_Naissance
variables
nom : chaine
annee , ans :entier
procedure AfficheNAN(n:chaine, a:entier)
Début
si (a < 2023 && a >= 1915) alors //on limite les années a calculer
annee<- 2023-a
ecrire(n," tu as ",annee," ans")
sinon
ecrire("annee de naissance anormal")
finsi
Fin
debut
ecrire("entre le nom de l'étudiant : ")
lire(nom)
ecrire("année de naissance : ")
lire(ans)
2. Ecrire un programme qui calcule la surface d’un carré et le volume d’un cube
de même côté sachant que
l’utilisateur devra saisir le côté dans l’algorithme principal et calculer le volume
dans une fonction et la
surface dans une autre.
Algorithme Surface_CarreCube
variables
volume, surface:réel
hauteur,longueur,largeur:réel
retourner surface
Fin
retourner volume
Fin
Algorithme Trapeze
variables
s, gb,tb,h : réel
fonction CalTrapeze (a:réel, b:réel, c:réel): réel
debut
s <- ((gb + tb)*h)/2
retourner s
fin
Début
Ecrireln ("TAPER : la grande base, petite base et la hauteur du trapèze ")
Lire (gb, tb, h )
Ecrireln (CalTrapeze(gb,tb,h)," Cm2")
Fin
5. Ecrire un algorithme avec une fonction qui convertit les kilomètres en miles
sachant que 1 mile=1.609 Km.
Algorithme Kilometres_Miles
variables
km,m:réel
fonction Conver_KiloMiles(a:réel): réel
Début
m <- a /1.609
retourner m
Fin
debut
ecrire("tapez la distance en Km : ")
lire(km)
ecrireln (Conver_KiloMiles (km)," Miles")
fin
7
6. Ecrire un algorithme avec une fonction qui calcule le volume d’une sphère à
4 3
partir du rayon Volume sphère ¿ π R
3
Algorithme VolumeSphere
variable
cal,r: réel
fonction CalSphere(a:réel): réel
Début
cal <- (4 * 3.14 * (a)^3)/3
retourner cal
Fin
debut
ecrire("tapez le rayon de la sphère : ")
lire(r)
ecrireln(CalSphere(r))
fin
Algorithme Fahrenheit_Centigrade
variable
f,c: reel
fonction Conversion(a:réel): réel
Début
c <- 5/9 *(a -32)
retourner c
Fin
debut
ecrire ("Ecrire un nombre en dégre Fahrenheit : ")
lire(f)
ecrireln (Conversion(f))
fin
8
Algorithme PayeHebdomadaire
variables
jour, sh, t, nbrH, salaireH: entier
fonction payeHeb ( a:entier, b:entier, j:entier) : entier
Début
t <- (a * b) *jour
retourner t
Fin
debut
ecrire ("Nombre d'heure par jour : ")
lire (nbrH)
ecrire("Salaire par heure : ")
lire (salaireH)
ecrire ("Combien de jours avez vous travailler dans la semaine : ")
lire(jour)
fin
9
Algorithme MoisAnnee
variables
x, moi,ans : entier
fonction VoirMoiAnne(m:entier, a:entier): entier
debut
retourner x
fin
Début
Ecrire ("Saisir LE moi d'une l'année : ")
lire(moi)
ecrire("Son année : ")
lire(ans)
ecrireln (VoirMoiAnne(moi,ans)," jours")
Fin
différence, « ^ » pour la
puissance, « / » pour la division et « ! » pour la factorielle. Il faudra prévoir une
procédure pour l’affichage
du résultat :
- Somme de A et B
- Différence de A et B
Algorithme CalculatriceS
variables procedure AffichageFinale (a1:entier, a2:entier,
o,i, r, n1,n2:entier adiv:réel,opera:entier )
d:réel debut
s:caractere si (s='/') alors
fonction fact(g:entier) :entier ecrireln("Division de ",a1," par ",a2," = ",adiv)
debut sinonsi (s='*') alors
r<-1 ecrireln("Produit de ",a1," et ",a2," = ",opera)
si (s='!') alors sinonsi (s='+') alors
si (g <= 1) alors ecrireln("Somme de ",a1," et ",a2," = ",opera)
retourner 1 sinonsi (s='-') alors
sinon ecrireln("Différence de ",a1," et ",a2," = ",opera)
pour i=1 à g faire sinonsi (s='^') alors
r <- r * i ecrireln("Puissance de ",a1," et ",a2," = ",opera)
finpour finsi
finsi fin
finsi
retourner r Début
fin ecrire (" Nombre1 : ")
fonction Operateurs(a:entier, b: entier) :entier lire(n1)
debut ecrire("Operation : ")
cas s lire(s)
'+' : r <- a +b si (s='!') alors
'-' : r<-a-b ecrireln("Factorielle de ",n1," = ",fact(n1))
'*' : r<- a*b sinon
'^' : r <- a^b n1<-n1
fincas ecrire("Nombre2 : ")
retourner r lire(n2)
fin
fonction Division (c:réel, d:réel) : réel d <- Division (n1,n2 )
debut o <- Operateurs(n1,n2)
r<-0
si(s = '/')alors AffichageFinale(n1,n2,d,o)
si ( d != 0) alors finsi
r<- c/d Fin
sinon
r<-r
finsi
finsi
retourner r
fin
11
11. Ecrire une fonction qui retourne la valeur de la factorielle d’un entier lu.
Algorithme factoriel
Variable
n: entier
Fonction fact(n: entier): entier
Début
si (n <= 1) alors
retourner 1
sinon
retourner n*(n - 1)
finsi
Fin
Début
Ecrire ('Entrez un nombre: ')
lire(n)
écrire(n, '! = ', fact(n))
Fin
12
Algorithme RacineCarreeNrwton
variables
a,r,xn,xn1:Reel
fonction Newton (a:reel): reel
Début
xn<-0.1
xn1 <- xn+a/xn
tantque (abs(xn1-xn)>=0.0001) faire
xn<-xn1
xn1<-(xn+a/xn)/2
fintantque
retourner xn1
Fin
debut
affiche(" la racine carrée : ")
lire(r)
affiche("racine carrée de ",r," =", Newton (r))
fin
13
2. Ecrire un algorithme avec une fonction récursive, qui calcule avec a un réel et n un entier
positif.
1 si n = 0
a = (a ) si n est pair
n n/2 2
Algorithme puissanceA
variable b,r: reel
p:entier
fonction puissance(a:reel,n:entier):reel
Début
si(n=0 )alors
retourner 1
sinonsi (n mod 2 = 0) alors
retourner (a^(n/2))^2
sinon
retourner a * (a^(n-1))
finsi
Fin
debut
ecrire(" Saisir entier A : ")
lire(b)
ecrire(" Saisir son exposant : ")
lire(p)
ecrireln(puissance(b,p))
fin
14
3. Ecrire une fonction qui retourne le plus petit diviseur premier d’un nombre.
Algorithme PPCM
var
n,m,x,y,r:entier
fonction cal(a: entier, b:entier): entier
Début
x<-a
y<-b
tantque (x<>y) faire
si (x<y) alors
x<-x+a
sinon
y<-y+b
finsi
r<- x
fintantque
retourner r
Fin
debut
ecrire("Saisir le 1er nombre : ")
lire(n)
ecrire("Saisir le 1er nombre : ")
lire(m)
ecrireln("PPCM = ",cal(n,m ))
fin
4. Ecrire une fonction qui calcule la racine carrée entière d’un nombre entier positif. (Principe :
on opère par soustractions successives des nombres impaires, si p est l’entier solution de la
double inéquation
𝑝 𝑝+1
Exemple Racine de 75
Algorithme RacineCarreSoustraction
var
n,i,p1,p2,r:entier
fonction rac(p:entier):entier
Début
r<-0
pour i=1 à p faire
p1<- (2*i -1)
finpour
pour i=1 à p+1 faire
p2<-2*i -1
finpour
pour i=1 à p faire
si(i mod 2 =1) alors
si(p1<p2 ) alors
p<-p-i
r<-r+1
//ecrireln(p)
finsi
finsi
finpour
retourner r
fin
debut
ecrire("ecrire un nombre ")
lire(n)
ecrireln ("la racine carrée de ",n," est ",rac(n))
Fin
5. Ecrire un algorithme avec une fonction récursive qui calcule la valeur du PGCD de deux
entiers lus.
16
Algorithme PGCD
var r,n,min,i,m:entier
fonction cal(a:entier, b:entier):entier
Début
si( a>b) alors
min<-b
sinon
min<-a
finsi
pour i de 1 à min+1 faire
si(a mod i = 0 && b mod i= 0 ) alors
r<-i
finsi
finpour
retourner r
Fin
debut
6. Ecrire un algorithme avec fonction récursive qui calcule le nième terme de la suite de
Fibonacci définie de la manière suivante :
17
U0 = 1
U1 = 1
Un = Un-1 + Un-2
Algorithme fibonacci
Variable
x, i, f, f0, f1 : entier
fonction fib(n:entier):entier
Début
f0 <- 0
f1 <- 1
si(n < 2) alors
ecrire('fib(', n, ') = ')
retourner n
sinon
pour i de 2 à n faire
f <- f0 + f1
f0 <- f1
f1 <- f
finpour
ecrire('fib(', n, ') = ')
retourner f
finsi
Fin
Début
Algorithme Suite10nombres
var
i, nbr:entier
tab: tableau [10] de entier
Début
pour i=1 à 10 faire
ecrire("saisir nombre N° ",i, " ")
lire(nbr)
tab[i]<-nbr
finpour
pour i=1 à 10 faire
ecrireln(i," ",tab[i])
finpour
Fin
19
3. On considère deux matrices 3X3 notée V et W. les coefficients de chacune de ces deux
matrices seront notés V( i , j ) et W( i , j ). Ecrire un algorithme qui permet de calculer
puis afficher la matrice Z=
V+W.
Algorithme matrice3X3Addition
var
v,z,w:tableau[3,3] de entier
i,a,b,j:entier
Début
ecrire("Première matrice ")
pour i=1 à 3 faire
pour j=1 à 3 faire
lire(v[i,j])
finpour
finpour
ecrire("Deuxième matrice ")
pour i=1 à 3 faire
pour j=1 à 3 faire
lire(w[i,j])
finpour
finpour
Fin
20
algorithme TabK_Positif_Negatif
var tab: tableau [68] de entier
T,n,i,j,a:entier
debut
T<-taille(tab)
ecrireln("positif et négatif")
pour i=1 à T faire
ecrire("nombre N° ",i," : ")
lire(n)
tab[i]<-n
finpour
pour i de 1 à T faire
pour j de i+1 à T faire
si(tab[j]<tab[i]) alors
a<-tab[i]
tab[i]<-tab[j]
tab[j]<-a
finsi
finpour
finpour
pour i de 1 à T faire
si(tab[i]<0) alors
ecrire(tab[i],' ')
finsi
finpour
ecrireln("")
pour i de 1 à T faire
si(tab[i]>0) alors
ecrire(tab[i],' ')
finsi
finpour
Fin
6. Soit un tableau TAB possédant 25 éléments. Ranger dans le même tableau les éléments
dans l’ordre inverse.(le premier élément doit être le dernier).
22
23
Algorithme INVERSE
i, j, temp: entier
Début
tab <-
[7,1,2,3,4,5,6,7,8,9,8,5,6,5,4,14,5,11,10,13,14,15,14,12
,14]
pour i de 1 à 25 faire
pour j de i + 1 à 25 faire
si tab[i]<>tab[j] alors
finsi
finpour
finpour
écrire('[')
pour i de 1 à 25 faire
écrire(tab[i])
si i <> 25 alors
écrire(', ')
finsi
finpour
FIN
24
7. Ecrire un algorithme qui transfère les éléments d’un tableau T1 dans un tableau T2 selon
le principe suivant : Les éléments de rang impair sont rangés dans T2 en ordre inverse en
commençant par la fin de T2 et les éléments de rang pair de T1 sont rangés dans le
même ordre.
Algorithme TAB2_TAB1
const N=25
var
t1: tableau [N] de entier
i:entier
Début
i<-N
t1<-[1,2,3,4,6,8,7,5,9,10,12,
13,14,15,16,17,18,19,10,20,11,27,32,27,60]
ecrireln("inverse impaires")
tantque (i<>0)faire
si (t1[i] mod 2 =1) alors
ecrire(t1[i]," ")
finsi
i<-i - 1
fintantque
ecrireln("")
ecrireln("------------------------------")
ecrireln("inverse paires")
i<-N
tantque (i<>0)faire
si (t1[i] mod 2 != 1) alors
ecrire(t1[i]," ")
finsi
i<-i - 1
fintantque
Fin
25
Algorithme VectueurHuite
var
t: tableau [5,5] de entier
v: tableau [5] de entier
N, k,i,j:entier
Début
N<-taille(v)
t<-[[1,1,1,1,1],[2,2,2,2,2],[3,3,3,3,3],[4,4,4,4,4],
[5,5,5,5,5]]
v<-[2,3,4,5,6]
pour i=1 à N faire
ecrire("[")
pour j=1 à N faire
ecrire(t[i][j]," ")
finpour
ecrireln("]")
finpour
ecrireln("---------")
Fin
26
9. Soit un tableau à deux dimensions contenant des nombres quelconques. Remplacer les
valeurs initiales des éléments d’un rectangle inclus dans ce tableau par des zéros. Le
rectangle est déterminé par sa longueur, sa hauteur et les coordonnées du coin supérieur
gauche.
27
Algorithme TabX_exist_pas
var
t: tableau [10] de entier
p,i,N,a:entier
Début
N<-taille(t)
i<-1
p<--1
t<-[1,11,3,4,5,6,7,8,9,10]
ecrire(" ecrire le nombre a cherché : ")
lire (a)
tantque (i<= N && p=-1) faire
si( a =t[i] ) alors
p<-i
sinon
i<-i+1
finsi
fintantque
si( p<> -1) alors
ecrireln( p," est a la position ",i)
sinon
ecrireln("n'existe pas ")
finsi
Fin
28
11. L’école secondaire ‘‘Les Joyeux Lurons’’ a décidé de gérer les perceptions des frais des
élèves à l’aide de deux tableaux. Le premier nommé ELEVE possède 1200 lignes et 2
colonnes dans sa première colonne on
y enregistre les noms des élèves et la seconde colonne l’année d’étude. Le deuxième tableau
nommé PERCEPTION possède 1200 lignes et 10 colonnes chaque colonne représente un mois
à partir de Septembre.
Lorsqu’un élève n’a pas encore payé pour un mois, la cellule du deuxième tableau se
trouvant à l’intersection de la ligne représentant l’élève et la colonne représentant le mois a
la valeur 0.
Un élève peut payer par tranche les frais mensuels. Dans ce cas on ajoute le montant payé
au montant qu’il avait déjà payé.
L’information se trouvant à la ligne i dans le deuxième tableau correspond à l’élève se
trouvant à la ligne i dans le premier tableau.
Ecrire un algorithme :
a. Qui affiche pour le mois de Septembre la liste des étudiants qui n’ont pas encore
payé.
b. Qui affiche le montant global perçu pour chaque mois
c. Qui met à jour le paiement du mois de novembre d’un élève dont le nom, la classe et
le montant seront lus.
d. En supposant que les élèves de première et deuxième année doivent payer
mensuellement 5000Fc et les autres 9500Fc, écrire un algorithme qui affiche à la fin
de l’année la liste de tous les élèves de cette école qui ont des dettes, en indiquant
les montants de dette par mois et par élèves.
e. En considérant les informations de la sous question d. écrire un algorithme qui
affiche la liste des élèves qui sont en ordre pour le mois de Mai.