Solution exo1 :
Algorithme Diviseurs (* version pour *)
Var n, i, nb : Entier
Début
Ecrire(”Entrer un entier positif : ”) Lire
Nb ß0 ;
Pour i de 1 à n Faire
Si(n Mod i = 0) Alors nbßnb+1 ;
FinSi
FinPour
Ecrire(nb) ;
Fin.
Nombre d’instructions en pire des cas:
T=1+(n+1)+(n+1)+n+n
T= 4n+3
Solution exo2 :
Solution Algorithme Facto
Var n, i, f : Entier;
Début
Ecrire(”Entrer un entier positif : ”) ;
Lire ;
f ß1 ;
Pour i de 2 à n Faire (n+1)
f ßf * i ;
FinPour
Ecrire(n,”! = ”,f)
Fin.
Nombre d’instruction en pire des cas :
T=1+2n+2+n
T=3n+3
Solution exo 3 :
AlgorithmePremier
Var n, i, nb_div : Entier;
Début
Ecrire(”Entrer un entier positif : ”) Lire
nb_div ß 0
i ß 1
TantQue (i <= n) Faire
Si(n Mod i = 0) Alors
nb_div ß nb_div + 1
FinSi
i ß i + 1
FinTQ
Si(nb_div <= 2) Alors Ecrire(”C’est un nombre premier”)
Sinon Ecrire(”Ce n’est pas un nombre premier”) ;
FinSi
Fin.
Nombre d’instruction en pire des cas :
T=1+1+n+1+n+nb_div+n+2
T=3n+5+nb_div.
Solution exo 5 :
Algorithme inverse
Var i, N : Entier
ch1, ch2 : Chaîne
Début
Ecrire(”Entrer une chaîne : ”) ; Lire(ch1) ;
N ß Long(ch1) ;
ch2 ß ”” ;
Pour i de N à 1 Faire
ch2 ß ch1[i] + ch2 ;
FinPour
Ecrire(”Inverse de la chaîne = ”,ch2)
Fin.
Nombre d’instruction en pire des cas :
- T=1+1+n+1+n+1+ n
- T=3n+4.
Solution exo 6 :
Algorithme Comptage_Mots
Var i, N, nb_mot : Entier
phrase : Chaîne
Début
Ecrire(”Entrer une phrase non vide : ”) Lire(phrase)
N ß Long(phrase)
nb_mot ß 1
Pour i de 1 à N Faire
Si (phrase[i] = ” ”) Alors
nb_mot ß nb_mot + 1
FinSi
FinPour
Ecrire(”Nombre de mots = ”,nb_mot)
Fin.
Nombre d’instruction en pire des cas :
T=1+1+n+1+n+1+n+nb_mot
T=3n+4+nb_mot.
Solution exo 7 :
AlgorithmePalind
Var ch : Chaîne ; i, L : Entier ; Pal : Booléen ;
Début
Ecrire(”Entrer une chaîne non vide : ”) Lire(ch)
L ß long(ch); Pal ßVrai; i ß1;
TantQue(i <= L/2) et (Pal) Faire
Si(ch[i] = ch[L-i+1]) Alors
i ßi + 1
Sinon
Pal ß Faux
FinSi
FinTQ
Si(Pal) Alors Ecrire(ch, ” est un palindrome”)
Sinon Ecrire(ch, ” n’est pas un palindrome”) FinSi
Fin
Solution exo 8 :
Procédurefréqunece(bigram:Chaîne[2] ; chn :Chaîne ; Var nb : Entier)
Var : i, L : Entier
Début
LßLong(chn)
Nbß0
Pour i de 1à (L-1) Faire
Si (chn[i]=bigram[1]) ET (chn[i+1]=bigram[2])
Alors nb ß nb + 1
FinSi
FinPour
Fin
Cette procédure possède un seul paramètre résultat de type entier, donc elle peut être remplacée par une fonction.
Fonctionfréqunece(bigram:Chaîne[2] ; chn :Chaîne) : Entier
Variables
i, L : Entier
Début
L ßLong(chn)
nb ß 0
Pour i de 1à (L-1) Faire
Si (chn[i]=bigram[1]) et (chn[i+1]=bigram[2])
Alors
nb ß nb + 1
FinSi
FinPour
fréquence ß nb
Fin
Solution 9 :
Procédure SomMat(M1, M2 : Mat ; Var M3 : Mat)
Variables
i, j : Entier
Début
Pouri de1 àn Faire
Pour jde 1à mFaire
M3[i,j] ß M1[i,j]+ M2[i,j]
FinPour
FinPour
Fin
Solution produit de deux matrices :
Procédure ProdMat(M1 : Mat1; M2 : Mat2; Var M3 : Mat3)
Var i, j, k : Entier
Début
Pour i de1 àn Faire
Pour jde 1à pFaire
M3[i,j] ß 0
Pour k de1 àm Faire
M3[i,j]ß M3[i,j]+M1[i,k]*M2[k,j]
FinPour
FinPour
FinPour
Fin
Solution exo 10 :
Solution Algorithme Premiers
Constantes
n = 400
Types
Tab = Tableau[1..n] de Entier
Variables
Prem : Tab
i, j : Entier
Procédure initialiser(Var T : Tab)
Début
Pour i de1 àn Faire
T[i] ¬i
FinPour
Fin
Procédure mise_a_zero(Var T : Tab)
Début
Pour i de1 à20 Faire
Si(T[i] # 0) Alors
Pour j dei+1 àn Faire
Si(T[j] Mod T[i] = 0) Alors
T[j] ß 0
FinSi
FinPour
FinSi
FinPour
Fin
Procédure afficher(T : Tab)
Début
Pour i de1 àn Faire
Si(T[i] # 0) Alors
Ecrire(T[i])
FinSi
FinPour
Fin
Début
Initialiser(Prem)
mise_a_zero(Prem)
afficher(Perm)
Fin.
Solution exo 11 :
Solution
Algorithme Personnel
Constantes
n = 50
Types
Employé = Struct
Matricule : Entier Nom : Chaîne Sal : Réel Etat_Civil : Caractère FinStruct
Tab = Tableau[1..n] de Employé
Variables
TabEmp : Tab
i, nb : Entier
Procédure remplir(Var T : Tab)
Début
Pour i de 1 à nFaire
Ecrire(”Matricule de l’employé : ”)
Lire(T[i].Matricule)
Ecrire(”Nom de l’employé : ”) Lire(T[i].Nom)
Ecrire(”Salaire de l’employé : ”)
Lire(T[i].Sal)
Ecrire(”Etat civil de l’employé : ”)
Lire(T[i].Etat_Civil)
FinPour
Fin
Fonction compter(T : Tab) : Entier
Début
Compter ¬0
Pour ide 1à nFaire
Si (T[i].Sal >= 500) ET (T[i].sal <= 700) Alors
Compter ¬Compter + 1
FinSi
FinPour
Fin
Début
Remplir(TabEmp)
nb ¬Compter(TabEmp)
Ecrire(nb, ” employés touchent entre 500 et 700 D”)
Fin
Solution exercice 12 :
Algorithme Personnel
Types
Employé = Struct
Matricule : Entier Nom : Chaîne Prénom : Chaîne Grade : Caractère Sal : Réel FinStruct
Fpers = Fichier de Employé
Variables
Fp : Fpers
emp : Employé
Procédure Création(Var f : Fpers)
Début
Ouvrir(f,E)
Ecrire(”Matricule : ”) Lire(emp.Matricule)
TantQue(emp.Matricule # 0) Faire
Ecrire(”Nom : ”) Lire(emp.Nom) Ecrire(”Prénom : ”) Lire(emp.Prénom) Ecrire(”Grade : ”) Lire(emp.Grade)
Ecrire(”Salaire : ”) Lire(emp.Sal)
Ecrire(f,emp)
Ecrire(”Matricule : ”) Lire(emp.Matricule)
FinTQ
Fermer(f)
Fin
Procédure Consultation(f : Fpers)
Début
Ouvrir(f,L)
Lire(f,emp)
TantQueNON(FDF(f)) Faire
Si (emp.Sal>=500) ET (emp.Sal<=700) Alors
Ecrire(emp.Matricule, emp.Nom, emp.Sal)
FinSi
Lire(f,emp)
FinTQ
Fermer(f)
Fin
Début
Création(Fp)
Consultation(Fp)
Fin.