Sie sind auf Seite 1von 8

Rsum Algorithmique

Ce quil faut savoir


savoir
I Fichiers et enregistrements :

Dans ce chapitre, ce quil faut savoir :

0- Dclarer des types enregistrements, type 6- Trier un fichier.


fichiers 7- Copier des donnes dun fichier de
1- Crer et remplir un fichier de donnes donnes un fichier texte et inversement.
2- Crer et remplir un fichier texte. 8- Chercher des donnes selon un critre.
3- Ajouter des donnes un fichier. 9- Afficher les donnes dun fichier de
4- Modifier des donnes dans un fichier. donnes ou fichier texte.
5- Supprimer un ou plusieurs donnes

Exemple :
Votre professeur en matire algorithmique veut informatiser la gestion de ces lves ; en
sauvegardant dans un fichier ses fiches de renseignements. Chaque fiche comporte les
renseignements suivants :
- Un identifiant
- Nom et prnom
- Date de naissance
- Sexe (M pour masculin et F pour fminin)
Le professeur devra tre capable de raliser les traitements suivants :
(1) La saisie et la sauvegarde des fiches de n lves dans un fichier f ( n compris entre 5
et 40).
(2) La premire note de la classe.
(3) Ajouter un lve.
(4) Supprimer un lve selon son identifiant.
(5) Modifier un lve selon son identifiant
(6) La liste trie des lves par ordre alphabtique.
(7) Copier ce fichier dans un fichier TEXTE.
Solution :
0- Structures de donnes adquates :
Type
tab =tableau de 5 rels
fiche = enregistrement
Devoirs et examens sur : www.kiteb.net

id : chaine[10]
np :chaine[30]
date_naiss :chaine[10]
sexe : char
moy :rel
fin fiche
f_fiches = fichier de fiche

Travail ralis par : ILAHI Njib Page 1/8


Rsum Algorithmique

1. Crer le fichier et enregistrer les lves :


Analyse Algorithme

Rsultat =f 0. DEFPROC CREATION (VAR F :femp,n:entier)


Traitement : 1. Assigner (Fe, "C:\travail\employe.dat")
f= Assigner(f,"C:\fiche.dat")
2. Recrer(F)
f= Rcrer(f)
3. pour k de 1 n faire
f= pour k de 1 n faire Avec fic faire
Avec fic faire ecrire("id : ") ;lire(id)
id = donnes("id : ") ecrire("date : ") ;lire(date_naiss)
np = donnes("np : ") ecrire("np: ") ;lire(np)
date_naiss = donnes("date : ") ecrire("sexe : ") ;lire(sexe)
sexe = donnes("sexe : ") ecrire("moy : ") ;lire(moy)
moy= donne(" moy : ") fin Avec
fin Avec Ecrire(f,fic)
Ecrire(f,fic) fin pour
fin pour Fin CREATION

2. Chercher la 1re note de la classe :


Analyse Algorithme
0. DEFFN MINIMUM (VAR F :femp)
Rsultat =Minimum 1. Ouvrir(F)
Minimum min
2. Lire(f,fic)
Traitement :
3. Min fic.moy
f = ouvrir(f)
4. Tantque (non(fin_fichier(f))) faire
min =[lire(f,fic),min fic.moy]
lire(f,fic)
Tantque(non(fin_fichier(f)))faire
avec fic faire
lire(f,fic)
si (moy <min) alors
avec fic faire
min moy
si (moy <min) alors
finsi
min moy
fin avec
finsi
fin tantque
fin avec
5. Minimum min
fin tantque
Fin MINIMUM

3. Ajouter un lve la fin du fichier :


Analyse Algorithme

Rsultat =f 0. DEFPROC AJOUT(VAR F :femp)


Traitement : 1. Ouvrir(F)
f = ouvrir(f)
fic = Avec fic faire 2. Avec fic faire
id = donnes("id : ") ecrire("id : ") ;lire(id)
np = donnes("np : ") ecrire("date : ") ;lire(date_naiss)
Devoirs et examens sur : www.kiteb.net

date_naiss = donnes("date : ") ecrire("np: ") ;lire(np)


sexe = donnes("sexe : ") ecrire("sexe : ") ;lire(sexe)
nb = donnes("nb : ") ecrire("moy : ") ;lire(moy)
moy=donne(" moy")
fin Avec
fin Avec
3. pointer(f,taille_fichier(f))
f = [pointer(f,taille_fichier(f))]
4. Ecrire(f,fic)
Ecrire(f,fic)
5. Fin AJOUT

Travail ralis par : ILAHI Njib Page 2/8


Rsum Algorithmique

4. Supprimer un lve :
Analyse Algorithme

Rsultat =f 0. DEFPROC SUPPRIMER(VAR F :femp)


Traitement 1. Ouvrir(F)
f = ouvrir(f) 2. Assigner(ftemp,"c:\ftemp.dat ")
3. Recrer(ftemp)
ftemp = Assigner(ftemp,"c:\ftemp.dat ") 4. Ecrire("Identifiant lve supprimer"), lire(id_sup)
ftemp = rcrer(ftemp) 5. tantque (non (fin_fichier(f)))faire
id_sup = donne(" Idenifiant lve a supprimer") lire(f,fic)
ftemp = tantque (non (fin_fichier(f)))faire Avec fic faire
lire(f,fic) si (id <> id_sup) alors
Avec fic faire ecrire(ftemp,fic)
si (id <> id_sup) alors fin si
ecrire(ftemp,fic) fin tantque
fin si 6. Rcrer(f)
7. 0uvrir(ftemp)
fin tantque
8. tantque (non (fin_fichier(ftemp)))faire
f = [Rcrer(f),Ouvrir(ftemp)]
lire(ftemp,fic)
tantque (non (fin_fichier(ftemp)))faire
ecrire(f,fic)
lire(ftemp,fic)
fin tantque
ecrire(f,fic) 9. Fin SUPPRIMER
fin tantque

5. Modifier un lve :

Analyse Algorithme

Rsultat =f 0. DEFPROC MODIFIER(VAR F :femp)

Traitement : 1. Ouvrir(F)

f = ouvrir(f) 2. Ecrire("Identifiant lve modifier"), lire(id_mod)

id_mod = donne(" Idenifiant lve a modifier") 3. tantque (non (fin_fichier(f)))faire

f = tantque (non (fin_fichier(f)))faire lire(f,fic)

lire(f,fic) Avec fic faire

Avec fic faire si (id = id_mod) alors

si (id = id_mod) alors ecrire("id : ") ;lire(id)

id = donnes("id : ") ecrire("date : ") ;lire(date_naiss)

np = donnes("np : ") ecrire("np: ") ;lire(np)

date_naiss = donnes("date : ") ecrire("sexe : ") ;lire(sexe)

sexe = donnes("sexe : ") ecrire("moy : ") ;lire(moy)


fin Avec
Devoirs et examens sur : www.kiteb.net

moy=donne("moy :")
fin Avec Pointer(f,position_fichier(f)-1)

Pointer(f,position_fichier(f)-1) Ecrire(f,fic)

Ecrire(f,fic) fin si

fin si fin tantque

fin tantque 4. Fin MODIFIER

Travail ralis par : ILAHI Njib Page 3/8


Rsum Algorithmique

5. Trier la liste des lves selon leur nom :


Analyse Algorithme

Rsultat =f 0. DEFPROC TRI(VAR F :femp)


Traitement 1. Ouvrir(F)
f = ouvrir(f) 2. [n 0]tantque (non (fin_fichier(f)))faire
T,n = [n 0]tantque (non (fin_fichier(f)))faire lire(f,fic)
lire(f,fic) n n+1
n n+1 T[n] fic
T[n] fic fin tantque
fin tantque 3. Proc Tri_insertion(T,n)
T= Proc Tri_insertion(T,n) 4. Recrer(f)
f =[rcrer(f)] 5. pour i de 1 n faire
pour i de 1 n faire ecrire(f,T[i])
ecrire(f,T[i]) fin pour
fin pour 6. Fin TRI

Trie dun tableau denregistrement :

Analyse Algorithme

Rsultat =T 0. DEFPROC TRI_INSERTION(VAR T :TAB;N:entier)


T= Pour i de 2 n faire 1. Pour i de 2 n faire
V T[i] V T[i]
j i j i
Tantque( T[j-1].np>V.np) et (j>1) faire Tantque( T[j-1].np>V.np) et (j>1) faire
T[j] T[j-1] T[j] T[j-1]
j j-1 j j-1
FinTantque FinTantque
T[j] V T[j] V
Finpour Fin pour
Fin TRI_INSERTION 2. Fin TRI_insertion

5. copier un fichier de donne dans un fichier texte :


Analyse Algorithme

Rsultat =f,ft 0. DEFPROC copier(VAR F :femp; var ft:text)


Traitement : 1. Ouvrir(F)
f = ouvrir(f) 2. Assigner(ft,"c:\ftexte.txt ")
Devoirs et examens sur : www.kiteb.net

ft = Assigner(ft,"c:\ftexte.txt ") 3. Recrer(ft)


ft = rcrer(ft) 4. tantque (non (fin_fichier(f)))faire
ft = tantque (non (fin_fichier(f)))faire lire(f,fic)
lire(f,fic) Avec fic faire
Avec fic faire Convch(moy,chmoy )
Convch(moy,chmoy ) fin Avec
fin Avec ligne id +" " + np+" " + date_naiss
ligne id +" " + np+" " + date_naiss ligne ligne +" " + chmoy
ligne ligne +" " + sexe+" " +chnb Ecrire_nl(ft,ligne)
ligne ligne +" " + chmoy fin tantque
Ecrire_nl(ft,ligne) 5. fin copier
fin tantque

Travail ralis par : ILAHI Njib Page 4/8


Rsum Algorithmique
I I Rcurrence & Rcursivit :

Dans ce chapitre, ce quil faut savoir :

1- Remplir un tableau (mthode rcurrente sont anagrammes, tautogrammes.. ;


ou rcursive) compter le nombres doccurrence dune
2- Remplir une matrice (mthode rcurrente chane dans une autre, supprimer les
ou rcursive). espaces de dbut dune chane)
3- Oprations sur les tableaux et les 6- Traitements rcurrents et rcursifs sur
matrices ( exp : minimum, maximum, les suites (exp : suite de Fibonnacci, suite
somme, dcalage, nombre doccurrence, dAckerman, suite de MacCarty..).
recherche, dcalage droite,) 7- Transformer les traitements rcurrents en
4- Saisie et affichage rcursif dun fichier. traitements rcursifs (exp : calcul puissance,
5- Traitements rcurrents et rcursifs sur le suites,somme,).
chanes (exp : dterminer si deux chanes

1. Remplissage dun tableau :

Version itrative Version recursive


0. DEFPROC Remplir(VAR T :Tab;n:entier) 0. DEFPROC Remplir(VAR T :Tab;n,i:entier)
1. Pour i de 1 de n faire
1. Si (i=n) alors
lire(T[i])
lire(T[i ] )
fin pour sinon
2. Fin Remplir lire(T[i ] )
Condition darrt Proc remplir(t,n,i+1)
finsi
2. Fin remplir
Appel rcursif

- N.B :* Si vous voulez un remplissage lenvers il suffit dinverser les deux instructions dans la clause sinon :
sinon
Proc remplir(t,n,i+1)
T[i]=donne(T[i ])
finsi
* Si vous voulez un affichage dun tableau il suffit de changer le nom de la procedure (exp : affiche()) et de
remplacer linstruction
T[i]=donne("T[",i ,"] : ") par Ecrire(T[i])
2. Remplissage dune matrice :
Version itrative Version recursive
0. DEFPROC Remplir(VAR M :mat;nl,nc:entier) 0. DEFPROC Remplir(VAR T :Tab;n,i,j:entier)
1. Pour i de 1 de nl faire
Pour j de 1 nc faire
Devoirs et examens sur : www.kiteb.net

1. Si (i=nl)et(j=nc) alors
lire(M[i,j ] )
lire(M[i]) sinon
fin pour si(j<=nc)
lire(M[i,j ] )
2. Fin Remplir
Condition darrt Proc remplir(m,nl,nc,i,j+1)
Sinon
Appel rcursif
Proc remplir(m,nl,nc,i+1,1)
finsi
2. Fin remplir
Appel rcursif

Travail ralis par : ILAHI Njib Page 5/8


Rsum Algorithmique
Traitements rcurrents et rcursifs sur le chanes :
N.B :
lorsque vous voulez faire un traitement sur les chanes, veuillez toujours exploiter les procdures et les
fonctions prdfinies sur les chanes (long(), pos(), effacer(),)
Contrairement la manipulation des matrices et tableaux o on nest oblig ajouter les compteurs
dans lentte de la procdure ou la fonction, dans les chane on les ajoute pas mais on utilisera soit la
fonction copy() ou la procdure effacer().

(exp1 :Eliminer les espaces au dbut de la chane )


Version itrative Version recursive

0. DEFFN eliminer(ch:chaine):chaine 0. DEFFN eliminer(ch:chane):chaine


1. Tantque pos(" ",ch)<>0 faire 1. Si pos(" ",ch)=0 alors
Effece(ch,1,1) eliminer ch
sinon
fin tantque Effece(ch,1,1)
2. eliminer ch Eliminer eliminer(ch)
3. Fin eliminer finsi
2. Fin eliminer
Condition darrt Appel rcursif

(exp2 :Dterminer si deux chanes sont anagrammes )


Deux chanes ch1, ch2 sont dites anagrammes, si les lettres qui composent la 1re chane existent
tous dans la deuxime chane. (exp : ch1=chien & ch2=niche).
Version itrative Version recursive
0. DEFFN anagramme(ch1,ch2:chaine):chaine 0. DEFPROC anagramme(ch1,ch2:chane):chaine
1. [ok vrai]Tantque ch1<>"" faire 1. Si ch1=""alors
Si pos(ch1[1],ch2)=0 alors anagramma vrai
sinon
Ok faux
si (pos(ch1[1],ch2)=0)alors
sinon anagramme faux
Effece(ch1,1,1) sinon
efface(ch1,1,1)
fin tantque anagramme anagramme(ch1,ch2)
2. anagramme ok finsi
2. Fin anagramme
3. Fin anagramme Appel rcursif
Condition darrt

N.B :* Si vous utiliser la boucle tantque il faut inverser la condition(ch1<>"" ch1="")


* Si vous utiliser la boucle Rpter ... jusqu la condition reste la mme(ch1="" ch1="")
Devoirs et examens sur : www.kiteb.net

Travail ralis par : ILAHI Njib Page 6/8


Rsum Algorithmique

Traitements rcurrents et rcursifs sur les suites :


(exp1 : fonction puissance)
P= x*x**x

n fois

Version itrative Version recursive


0. DEFFN puissance(x,n:entier):entier 0. DEFPROC puissance(x,n,i:entier):entier
1. [p 1]pour i de 1 n faire 1. Si i=n alors
P p* x puissance x
sinon
fin pour
2. puissance p puissance x *puissance(x,n,i+1)
3. Fin puissance finsi
2. Fin anagramme
Condition darrt Appel rcursif

Solution rcursive :

exp2 : calcul de puissance


P= a*a**a * b*b**b

n fois m fois

Version itrative Version recursive

4. DEFFN puissance(x,n:entier):entier 3. DEFPROC puissance(x,n,m,i:entier):entier


5. [p 1]pour i de 1 n+m faire 4. Si i=n+m alors
si (i<=n) alors puissance b
sinon
P p* a si (i<=n) alors
Sinon puissance a *puissance(x,n,m,i+1)
p p* sinon
b puissance
fin pour finsi
b *puissance(x,n ,m,i+1)
6. puissance p 5. Fin anagramme
Appel rcursif
7. Fin puissance

Condition darrt
Devoirs et examens sur : www.kiteb.net

Travail ralis par : ILAHI Njib Page 7/8


Rsum Algorithmique

I I I Conversion entre les base :


Dans ce chapitre, ce quil faut savoir :

Division successive
(Base)10 Autre base

Multiplication successive
Autre base (Base)10

- Exemple ((Base)10 la (base)2)


N.B :
lorsque vous voulez changer la conversion de la base 10 une autre base diffrente de 2, il suffit de
remplacer 2 par le numro de base (exp :8,9,1016)
Concernant la conversion vers la base 16, il faut tenir compte du reste qui dpasse 9, pour cela il suffit
dcrire :
0- DEFFN conv_dec_b(dec,b :entier) :chaine
1- [ch ""]
Rpter
R dec mod 16
si ( R dans [0..9]) alors
convch(R,ch_R)

sinon
ch chr(R+55)
finsi
ch ch_R + ch
dec dec div 2
jusqu (dec=0)
2- conv_dec_b ch
3-fin conv_dec_b
- Exemple ((Base)2 la (base)10)
N.B :
lorsque vous voulez changer la conversion partir dune autre base la base 10,il suffit de remplacer la
fonction puissance selon le numro de base (exp :8,9,1016)
Concernant la conversion vers la base 16, il faut tenir compte des nombres qui dpasse le chiffre 9 , pour
cela il faut crire :

0- DEFFN conv_b_dec(ch,b :entier) :chaine


1- [dec 0]
Devoirs et examens sur : www.kiteb.net

Pour i de 1 long(ch) faire


Si(ch[i] dans ['0'..'9'])alors
Valeur(ch[i],v,e)
Sinon
V ord(ch[i])-55
Fin si
Dec dec +v*FN puiss(b,long(ch)-i)
Fin pour
2- conv_b_dec dec
3- fin conv_b_dec

Travail ralis par : ILAHI Njib Page 8/8

Das könnte Ihnen auch gefallen