Sie sind auf Seite 1von 189

REPUBLIQUE TUNISIENNE

MINISTERE DE LEDUCATION ET DE LA FORMATION

CoursAlgorithmique&Programmation
4meScienceinformatique
Exercicesetsujetsbaccorrigs

Prof : Mr. Chraiet Khaled

20122013

Edi on0.1
A tous les lecteurs : afin de russir ce travail nhsitez pas de me signaler tout type derreurs ou de fautes.
e-mail : khaledchraiet@yahoo.fr
1

Les enregistrements et les fichiers

ChapILesenregistrements&lesfichiers

Les enregistrements et les fichiers


Objectifs:

Dfinirlastructureenregistrement.
Dfinirlesfichiersetlesmodesdaccs
Mettreprofitlesstructuresenregistrementetfichierspourrsoudredesproblmes.

A Lesenregistrements
I Introduction:
Activit1:
Untablissementscolaireutiliseuneapplicationinformatiquepoursaisir,manipuler,et
mmoriserlesinformationsconcernantseslves(exempledesinformations).
Numro
Nom
Prnom sexe moyenne
1000

cherni

Sihem

14.25

1001

Barhoumi Mourad M

12.75

1030

Dziri

Fahmi

16.50

Question:
Afindcrireceprogrammeproposerunestructurededonneadquateaceproblme.
Rponse:
1 Utiliserdesvariablessimples:
Num:pournumro
Nom:pournom

Moy:pourlamoyenne
Cettepropositionvalablepeuttrequepourunseullve.
2 Utiliserlestableaux:onproposeuntableaupourchaquecolonne(ouchamps)
UntableaupourlesNumrosNU
1000 1001 . . 1030

Untableaupourlesnoms
Cherni Barhoumi . . Dziri

Untableaupourlesprnoms

Untableaupourlesmoyennes
Cettepropositionplusieursanomalies:dabordellencessitbeaucoupdespace
mmoirequiestlepluscouteux.Deplusachaquemodificationdansuntableaudoittre
suivitobligatoirementparmodificationdetouslestableauxpourassurerlacohrencedes
informationsdechaquelve.
3 Utiliserunenouvellestructure:pourrendreletraitementplusfacileondoitgrouper
touteslesinformationsconcernantunlvedansuneseulestructure(quiestimpossible
pouruntableau)cettenouvellestructuresappelleEnregistrementouArticle(enPascal
sappelleRecord).
3

ChapILesenregistrements&lesfichiers

Onlareprsentecommesuite:

Num
(Entier)

Nom
(Chaine)

Prnom
(Chaine)

Sexe
(caractre)

Moy
(Rel)

Une seule entit qui sappelle enregistrement : E


Ondsignepar:

Engnral:
Champ 1
(type 1)

E.Num
E.Nom
E.Prenom

:unchampquireprsenteleNumro
:unchampquireprsenteleNom
:unchampquireprsenteleprnom

E.Moy

:unchampquireprsentelamoyenne

Champ 2
(type 2)

Champ 3
(type 3)

Champ 4
(type 4)

Champ 5
(type 5)

Une seule entit dune variable enregistrement

Nous venons de voir que les variables simples ou les tableaux ne permettent pas de ranger des
donnesdetypesdiffrents.
Sinousvoulonstablirparexempleunestructurecomportantenmmetempsdesinformations
alphanumriques,numriques,nousdevonscrerunnouveauTYPEquipermetdelesregrouper.
II- Dfinition et dclaration:
Un enregistrement ou Article (record) est un type de donne structur dfini par
l'utilisateur qui permet de regrouper un nombre fini des donnes (champs) de diffrents types
(alphabtique, numrique, logique,...) sous un nom commun.
Contrairement aux tableaux qui ne permettent de grouper que des lments du mme type, les
enregistrements nous permettent de combiner diffrents types de donnes.

Dclarationdunestructureenregistrement:
T.D.N.T
Type
Nom_type=Enregistrement
Champ1:Type1
T.D.O
Champ2:Type2
Objet Type/Nature
Rle

Nom_var
Nom_type
Enregistrementpour..

Champ3:Typen

FinNom_type

ChapILesenregistrements&lesfichiers

EnPascal
Type

Nom_type=Record

Champ1:type1;

Champ2:type2;

Champn:typen;

End;
Var

Nom_var:Nom_type;

N.B:
Lestypes(type1,type2,,typen)peuventtresoitprdfinit(entier,rel,boolenne),
soitdfinisparlutilisateur(tableau,semaine,)
Applications:
Proposerunestructurededonnesadquatepourchaqueobjet:
1. Chaquetudiantdoitprsenterlesinformationssuivantes:CIN(entier),Nometprnom
(chainedelongueurmax35cc),datedenaissance(soulaformejj/mois/aaaa),sexe(M/F),
Discipline(chaine),nomdeltablissement(chaine).
2. Chaquevoitureavendredoitpossdelesinformationssuivantes:Matricule(chaine),
Marque(chaine),Modle(chaine),annedemodle,kmparcouru,(prixdevente).
3. Chaquemdicamentdansunepharmaciedoitavoirlesinformationssuivantes:Rfrence,
nomcommercial,datedefabrication,duredevalidit,etleprix.
III Tableau(Vecteur)denregistrement
Ac vit2:
Mmeac vit1maisdanslecasouilyaplusieurslve(n).
Rponse
Danslecasouilyaplusieurslvesonpeututiliserlestableaux.Chaquecasedutableaucomporte
unenregistrement.Onappelledonccetableau,tableaudenregistrement.

Pournlves

Num Nom Prnom Sexe Moy


Num Nom Prnom Sexe Moy Num Nom Prnom Sexe Moy

Pouraccderauxinforma onsdellveN2oncrit:

T[2].Num:pouraccderauNumro

T[2].Nom:pouraccderaunom

T[2].Moy:pouraccderaumoyenne

ChapILesenregistrements&lesfichiers

Dclaration:
T.D.N.T
Type
Fiche=Enregistrement
Num:entier
T.D.O
Nom:chaine
Objet Type/Nature
Rle
Prnom:chaine
EEL
Fiche
Enregistrementpourdfinirunlve
Sexe:caractre
T
Tab
Tableaude50enregistrementsdlves
Moy:rel

Finfiche

Tab=Tableau[1..50]deFiche

IV Utilisationdesenregistrements:
Rappelsurlutilisationdunevariablesimple
Pourunevariablessimpleonpeutfairelesactionsuivantes:
Lalecture(lire(var))
Lcriture(crire(var))
Laffectation(varvaleur)
Mme chose pour un enregistrement on peut faire la lecture laffectation et lcriture mais
autrement
a) Lalecturedunenregistrement:

Puisquelenregistrementestcomposparplusieurschampslalecturecefairechampspar
champs
Exemple:pourfairelalecturedelenregistrementEEL

Ouonpeutcrire:
EtenPascal:
Lire(EEL.Num)
AVECEELFaire
WithEELDO
Lire(EEL.Nom)
begin
Lire(Num)
Lire(EEL.Prenom)
readln(Num);

Lire(Nom)
Lire(EEL.sexe)
readln(Nom);

Lire(Prenom)
Lire(EEL.Moy)

readln(Prenom);

Lire(Sexe)

readln(Sexe);

Lire(Moy)

readln(Moy);
Finavec
end;
syntaxe
Au niveau de lanalyse
Venrg.champ = Donne

Au niveau du pascal
Au niveau de lalgorithme
Lire (venrg.champ)
Readln( venrg.champ)

Lastructure:AvecFaire

Anniveaudelanalyseetdelalgorithme

AvecvenrgFaire
Ensembledactions
FinAvec

AnniveauduPascal

WithvenrgDo
Begin
Ensembledactions
End;

ChapILesenregistrements&lesfichiers

b) Lcritureoulaffichage:
Mmequelalectureonaffichelecontenudunenregistrementchampparchamp.
Exemple:pourfairelaffichagedelenregistrementEEL.Oncrit

Ecrire(EEL.Num)
Ecrire(EEL.Nom)
Ecrire(EEL.Prenom)
Ecrire(EEL.sexe)
Ecrire(EEL.Moy)

Ouonpeutcrire:

AVECEELFaire

Ecrire(Num)

Ecrire(Nom)

Ecrire(Prenom)

Ecrire(Sexe)

Ecrire(Moy)
Finavec

EtenPascaloncrit:

WithEELDO
begin

end;

writeln(Num);
writeln(Nom);
writeln(Prenom);
writeln(Sexe);
writeln(Moy);

Syntaxe:

Auniveaudelanalyseetlalgforithme
AuniveauduPascal
Ecrire(venrg.champ)
Writeln(venrg.champ)

c) Laffectation
1. onpeutaffecterunevaleuraunchampdelenregistrement

Exemple:

EEL.Num1000
AvecEELfaire
EEL.NomBarhoumi
Num1000
EEL.Prenom)Mourad
NomBarhoumi
EEL.sexeM
PrenomMourad
EEL.Moy15.25
sexeM

Moy15.25
Finavec

2. onpeutaussiaecterunenregistrementE2aunenregistrementE1.Silesdeuxdemme
type(c.a.dquiontlemmenombredechampsetdemmerangdetype).
Onecritdonc:

E1E2

ChaquechampdeE1varecevoirsonhomologuedeE2.
Exemple:
SoitE1,E2detypeFiche.
Onpeutcrire:
E1E2 c.a.d E1.NumE2.Num;E1.NomE2.Nom,,etE1.moyE2.moy

ChapILesenregistrements&lesfichiers

Application:

Dansuntablissementscolaire,unlveestidentifipar:sonmatricule(entier),sonnom
etprnom(chaine)etsamoyenne(rel).

Onseproposedcrireunprogrammemodulairepermettantdesaisirlesinformationsde
Nlves(N<=50)etdacherlalistedeslvesclassparmoyenne(danslordredcroissant).

B Lesfichiers
I Introduction:
Notonsquelesconstantes,lesvariablessimples,lestableauxetmmelesenregistrementsperdre
leurscontenusdquonfermeleprogrammeencoursdexcutionetsurtoutlorsqueenteindre
lordinateurpuisqueilsfontpartiedelammoirecentrale(RAM).Ordanslepluspartdescasona
besoindeconserverlesinformationsdansdessupportsdestockagemagntique,cequincessite
utilisationlesfichiers.

II Dfinition:
Un fichier est un ensemble structur de donnes de mme type, nomm et enregistr sur un
supportphysiqueparlordinateur(disquedur,flashdisk,CD,DVD,).
Unfichierpeutcontenirdescaractres(fichierstextes),desprogrammes,desvaleurs(fichiersdes
donnes).Donc On distingue deux types de fichiers :

Fichiers de donnes ou typs : se sont des fichiers contenant du code binaire


reprsentant chaque lment (enregistrement). Ces fichiers ne doivent tre manipuls
que par des programmes! (fichier des entiers, fichier de rels, fichier de caractres, mais
gnralement fichier denregistrements).
Fichiers textes : (appels aussi imprimables) contenant des caractres et susceptibles
d'tre lus, dites, imprims... (gnralement on peut lditer par un logiciel diteur de
texte)

N.B:

La taille dun fichier peut tre quelconque, la seule limitation tant la taille de la mmoire
auxiliaire.
La fin de fichier est matrialise par un caractre spcial qui sert de marqueur.

III Organisationetaccs:
Les blocs de donnes formant un fichier sont enregistrer les uns la suite des autres de faon
linairecommeindiqudansleschmasuivant:

Bloc1
Bloc2
Bloc3

Bloc4
Fin
Enregistrement Enregistrement Enregistrement
Enregistrement fichie
0
1
2
(n1)

Pointeur
Pouraccder(lire/modifier)aunbloc(enregistrement)nousdevonstoutdabordlelocaliserc.a.d
lepointer(fairerfrence).

ChapILesenregistrements&lesfichiers

Organisationsquentielle

Organisationrelative

Lorganisation dun fichier est la manire dont sont rangs les enregistrements du fichier sur le
supportphysique.
Lorganisationestchoisielacrationdufichier(rapiditdaccsetespacemmoire).
Ilexisteplusieurstypesdorganisationsdesfichiers.Lesplusimportantssont:
Lorganisationsquentielle:ellenepermetquunseulaccslesquentiel(pouraccder
unenregistrementondoitpasserparlesenregistrementsquileprcde).
Lorganisationrelative(directe):lesenregistrementssontcontigus(touchelunlautre)et
identifisparunnumrodordre.Lindicationdunnumropermetdoncunaccsdirect
linformationainsirfrence.

IV Lesfichierstyps:

1. Dclarationdunfichier:
Enanalyse:
T.D.N.T
Type
Nom_fichier=Fichierdetype_composants

T.D.O
Objet
Type/nature

Rle

Nom_logique Nom_fichier Fichierpour.

Le type_composants reprsente le type des composants du fichier, ces composants


doiventtredemmetype,exemple:entier,rel,enregistrement,etc

Enpascal

Programtest;
Useswincrt;
Type

Nom_fichier=Fileoftype_composants;
Var

Nom_logique:nom_fichier;

ChapILesenregistrements&lesfichiers

Exemple:
T.D.N.T
Type
fentier=Fichierdentier
Feleve=fichierdefiche
T.D.O
Objet Type/nature

Rle

Fent

Fentier

Fichierdesentiers

Fel

Feleve

Fichierpourlesficheslves

V Lesfichiersaaccssquentiel:
1 Association(ouAssignation):
Permet la liaison entre le nom logique (ou nom interne) et le nom physique (ou
nomexterne)dufichier.
Remarque:
Le nom interne (ou nom logique) correspond au nom utilise dans le
programme.C'estdoncl'identificateurdclarecommevariable(ex:varf:
fileof...).
Ils'agitdoncdunomdefichiervuparleprogrammeuretparleprogrammePascal.
Lenomexterne(ounomphysique)reprsentequantaluilenomutilisesur
ledisque,visibledanslerpertoire(dossieroudirectory).
Ils'agitdoncdunomdefichiervuparl'utilisateuretparlesystmed'exploitation.
Syntaxe:
Enanalyseetenalgorithme
EnPascal
Associer(nomlogique,nomphysique) ASSIGN(nomlogique,nomphysique)

Nominterne
Exemple:
Nomexterne
Enalgorithme

Associer(fel,c:\4si\eleve.dat)
EnPascal

Assign(fel,c:\4si\eleve.dat)

2 Ouverturedunfichier
Aprslassociation,nouspouvons maintenantouvrirlefichiersoitenlecture,soit
encritureouenrcriture.
a Ouvertureetcration:
A laide de linstruction Recrer on peut crer un fichier sil nexiste pas, ou
ouvrireteffacersoncontenusilexistedjetderemettresonpointeurazro

10

ChapILesenregistrements&lesfichiers

Syntaxe:
Enanalyseetenalgorithme
Recrer(nomlogique)

EnPascal
Rewrite(nomlogique)

b Ouvertureetremisezro:
Pourouvrirunfichierexistantetrepositionnerouremettrezrosonpointeuron
utiliselacommandeouvrir(Reset)
Syntaxe:
Enanalyseetenalgorithme
EnPascal
Ouvrir(nomlogique)

Reset(nomlogique)

3 Ecrituredansunfichier
Pourajouteroumodifierunevaleurouunenregistrementdansunfichieronutilise
lacommandeEcrire(write)

Syntaxe:
Enanalyseetenalgorithme
EnPascal
Ecrire(nomlogique,variable) Write(nomlogique,variable)
Application:

Toujoursaveclammeactivit,unlveestidentifipar:
Sonnumro,sonnometsonprnometsamoyenne
Ecrire une suite dinstruction permettant de saisir les informations de n lves dans un fichier
scolaire.dat.
Solution
Associer(fel,C:\4si3\scolaire)
Association entre le nom logique fel le nom
physiquec:\4si3\scolaire
Recrer(fel)

Crationetouverturedufichierenmodecriture

AvecEElfaire
Ecrire(entrerlenumero),lire(num)
Ecrire(entrerlenom),lire(nom)
Remplirlenregistrement
Ecrire(entrerleprenom),lire(pr)
Ecrire(entrerlamoyenne:),lire(moy)
Finavec
Ecrire(fel,EEl)

Ecrituredelenregistrementdanslefichier
11

ChapILesenregistrements&lesfichiers

4 Lecturepartirdunfichier:
La lecture dune valeur ou dun enregistrement du fichier se fait par linstruction
lire
Syntaxe:

Enanalyseetenalgorithme
EnPascal
lire(nomlogique,variable) Read(nomlogique,variable)
Lire(Fcl,Ecl)

Read(Fcl,Ecl);

5 Fermeturedunfichier
Alafindutraitement,nousdevonsfermerle(oules)fichier(s)ouvert(s)
Syntaxe:

Enanalyseetenalgorithme
EnPascal
Fermer(nomlogique)

Close(nomlogique)

6 Testdefindufichier
PourtestersilafindefichierestatteinteounononutiliselacommandeFin_fichierqui
estunefonctionboolennequiretournevraisilafindefichierestatteinteetfauxsinon.
Syntaxe:

Enanalyseetenalgorithme
EnPascal
Fin_Fichier(nomlogique)

EOF(nomlogique)

VI Lesfichiersaccsdirect:
Danslesfichiersaccsdirectlesenregistrementssontnumrotsapartirdezero.Cequi
faitquepouraccderaunmelmentilfautsepositionnersurlen1meenregistrement.
1 Positionnersurunenregistrement:
Syntaxe:
Enanalyseetenalgorithme
EnPascal
Pointer(nomlogique,numro)

Seek(nomlogique,numro)

2 Savoirlatailledufichier
Pour savoir combiens dlments se trouvent dans le fichier on peut utiliser la
commandeTaille_Fichier(FileSize).
Syntaxe:
Enanalyseetenalgorithme
EnPascal
Taille_Fichier(nomlogique)

FileSize(nomlogique)

12

ChapILesenregistrements&lesfichiers

Application:
SoitlefichierFquicontientlesenregistrementssuivants:

Enreg0
Enreg1
Enreg2
Enreg3
Enreg4

Signefin
Fichier

Enreg5

Pointeur
Poursavoirlenombredenregistrementdanscefichieroncrit:
Taille_Fichier(F)renvoi6c.a.dilexiste6enregistrements.
Poursavoirlapositionactuelledupointeuroncrit:
Position_Fichier(F)Renvoi3c.a.denregistrementN3.
Pourpositionnerlepointeuralafindufichieroncrit:
Pointer(F,6)=Pointeur(F,Taille_Fichier(F))
Pourpositionnerlepointeursurlenregistrementquiprcdelapositionactuelledepointeur
Pointer(F,2)=Pointer(F,Position_Fichier(F)1)

VIIAutresfonctionsetprocduresprdfinies
Ces fonctions et ces procdure sont valable aussi bien pour laccs direct que laccs
squentiel.
1 Positionactueldepointeur:
Syntaxe:

Enanalyseetenalgorithme
EnPascal
Position_fichier(nomlogique) FilePos(nomlogique)
Fonction qui fournit le numro dordre (la position) de llment sur le quel se trouve le
pointeurdufichier.
2 Effacerunfichier
Syntaxe:

Enanalyseetenalgorithme
EnPascal
Effacer(nomlogique)

Erase(nomlogique)

3 Renommerunfichier
Syntaxe:

Enanalyseetenalgorithme

EnPascal

Renommer(ancien_nom_log,nouveau_nom_log)

13

Rename(ancien_nom_log,nouveau_nom_log)

ChapILesenregistrements&lesfichiers

4 Tronquerunfichier
TronquerunfichiersaveutdireToutcequisetrouveaudeldelapositionactuelledupointeur
seraperdu.
Syntaxe:

Enanalyseetenalgorithme
EnPascal
Tronquer(Nom_logique)

Truncate(Nom_logique)

Application:

VIII Lesfichierstexte
Un fichier texte (fichier ASCII) est un fichier dont le contenu reprsente uniquement une suite de
caractres.
Les fichiers textes constituent une catgorie particulire. En effet la diffrence des autres fichiers,
ils contiennent des caractres
De type retour chariot (CR)
De fin de ligne (Eoln)
Fin de texte (code CTRL-Z).
1. Dclarationdunfichiertexte:
Enanalyse:
T.D.O

Objet
Type/nature
Rle

Nom_logique texte
Fichiertexte.

Enpascal

Programtest;
Useswincrt;

Var
Nom_logique:text;

Remarque :
Comme pour les autres fichiers on peut utiliser les commandes suivantes sur les fichiers
texte s: Associer, Ouvrir, Fermer, Fin_fichier, Renommer, Effacer, Tronquer
Sauf les commandes suivantes : FilePos, FileSize et Seek.
2. Testerlafinduneligne:
Syntaxe:

Enanalyseetenalgorithme
EnPascal
Fin_ligne(nomlogique)

Eoln(nomlogique)

Fonction logique qui retourne Vrai si lon trouve sur le caractre CR (retour chariot) et Faux
dans le cas contraire.

14

ChapILesenregistrements&lesfichiers

3. Ajouterunlmentdansunfichiertexte
Syntaxe:

Enanalyseetenalgorithme
Ajouter(nomlogique)

EnPascal
Append(nomlogique)

Procdure qui ouvre le fichier texte et positionne son pointeur la fin de ce dernier afin
dajouter un lment.
4. Lectureduneligneapartirdunfichiertexte
Syntaxe:

Enanalyseetenalgorithme
EnPascal
Lire_nl(nomlogique,variable_ch) Readln(nomlogique,variable_ch)
Procdurequilitlecontenuduneligne,puispointelaprochaineligne.
5. Ecritureunelignedansunfichiertexte

Syntaxe:
Enanalyseetenalgorithme

EnPascal

Ecrire_nl(nomlogique,variable_ch) Writeln(nomlogique,variable_ch)
ProcdurequiintroduiredansunfichiertexteunelignedetypechainepuisunesquenceCR
LFpourmarquerlafindeligne.
Application : ( Sujet bac pratique 2010 )
Onseproposedcrireunprogrammequipermetde:
RemplirunfichiernommNombre.datparnchiresalatoiresnonnuls(avec2<n50)
Dtermineretafficherlepluspetitnombre(pn)etleplusgrandnombre(gn)formspar
tousleschiffresdecefichier.
Vrifiersilescartsentretousleschiffressymtriquesdegnformentdestermessuccessifs
dunesuitearithmtique,danslaffirmative,affichersaraison(r).

DeuxchiffresCietCjdegnsontditssymtriquessileurspositionsrespectivesietjdansgn
vrifient:i+j=k+1,avecklenombredechiresdegn,pourtoutiallantde1kdiv2.
N.B:UnesuiteUestditearithmtiquesiUn=Un1+r

15

ChapILesenregistrements&lesfichiers

Exemple1:soitlefichierNombres.datsuivantpourn=7.

8
6
4
3
9
7
4

Lepluspetitnombre(pn)est :3446789
etleplusgrandnombre(gn)est:9876443

Lescarts6,4et3calculsentretousleschiressymtriquesdegnneformentpasdes
termessuccessifsdunesuitearithm que.EneetU1=U02r1=2
etU2=U11r2=1.Commer1<>r2alorsUnestpasunesuitearithm que.

U2=74=3

U1=84=4

U0=93=6

Travaildemand:

Dcomposezleproblmeenmodulesetdduisezlesanalysesdechaquemodule.
Dduisezlesalgorithmesdechaqueanalyse.

16

ChapILesenregistrements&lesfichiers

Srie N 1
ExerciceN1
SoitlenregistrementsuivantquidfinitlafactureduSteg
Type

Fact=Enregistrement

Ref:mot

Ancqt:Entier

Nvqt:Entier

Prixkilo:Rel

FinFact

Tab=Tableau[1..100]deFact
Var

T:Tab

F,F1:Fact
Question

Rependreauxpropositionssuivantesparvraioufaux

Lire(F)

F.Ancqt33274

FF1

F.Ref72130

FT

Lire(F.prixkilo)

T[2]F

Lire(T[3])

F.RefT[2].Ref

Lire(T[3].prixkilo)

ExerciceN2
UnclubvidopossdeNfilms(avec10<=N<=200),chaquefilmestiden fierpar
Unerfrence(unen erde4chires)
Letitredefilm(unechaine)
Duredefilmenminute
Annedesortiedefilm
Ecrireunprogrammequipermetdesaisirlesinformationsdelensembledesfilms,puisdafficher

lalistedufilmclassparlannedesortie(denouveaualancien).

ExerciceN3
Unesocitveutinformatiserlagestiondesesemploys.Elledtientpourchacunlesinformations
suivantes:
Lenometleprnom(chainedecaractres)
Legrade:uniquementA,B,C,ouD.
Lecodefiscal(unentiernonsign)
Lassurancemaladie(OpourouietNpournon)
LenombredemploysestNavec(4<=N<=120).

Questions:
EcrivezunprogrammemodulairenommGESTIONquipermetlasaisiedetouteslesfichesde
renseignementspuisdafficher:
1 Touteslesfiches(uneparuneetavecuneattentejusqu'lappuisurlatoucheENTREE).
2 Lenombredemploysayantungradedonnetleurpourcentageparrapportaunombretotaldes
employs.
TraduisezceprogrammeenPascaletlenregistrezsouslenomsociet.pas.

17

ChapILesenregistrements&lesfichiers

Srie N 2
Exercice N 1
Dansunkiosquedejournauxlepluspartdesjournauxsontconnuspar:

Unnumrodesrie(entiersign)
Untitre(chaine)
Lapriode:Q:Quotidien,H:Hebdomadaire,M:Mensuel,T:Trimestriel,etA:Annuel.
Spcialit:Economique,culturelle,sportif,
Leprix:enmillime(unentier)

Ecrireunprogrammemodulaireutilisantunmenudechoixquipermetdegrerlestock
dejournauxdanscekiosque.Leprogrammepermetde:

Saisir les informations de tous les journaux vendus dans ce kiosque dans un fichier
Journal.datsurlunitCdansundossierkiosque.

Ajouterunnouveaujournalalafindefichierjournal.dat.

Afficherlalistedejournauxselonunepriodedonne.

Chercherlejournal(oulesjournaux)dontsonnomcommenceparunechainedonne.

Modifier les prix des journaux selon une priode donne et de pourcentage donne
(exempletouslesjournauxMensuelssubituneaugmenta ondeprixde10%)

Exercice N 2
Ecrirelanalyseetlalgorithmedunprogrammequipermetde:

Remplirunfichiernombre.datparNentiersalatoires<1000(avec5<N<100).
CopierlecontenudefichierdansuntableauT.
TrierletableauTdanslordrecroissant.
RetournerlecontenuduTableaudanslefichier
Afficherlecontenudefichieravantetaprsletri.

18

ChapILesenregistrements&lesfichiers

Exercice N 3
Unrcepteurnumriquemmoriseleschainestlvisionsetradiossouscetteforme:

Nomdelachaine:TunisTV,AlJazeera,DreamTV

Nomdusatellite:Nilesat,Hotbird,Astra

FrquenceenHzunen erde9000inferieur13000:exemple10775,11995,

Symbole:3/4,5/6,

Polarisation:27500,23000,

CryptouClair:O:pourcryptoucodetN:pournoncodouClair.

Ecrire un programme modulaire utilisant un menu de choix qui permet de grer les
chainesdansunrcepteur.Leprogrammepermetde:
1 Saisirlesinforma onsdeNchaines(avec10<=N<=2000)dansunfichierChaine.datsur
lunitC:dansundossierrcepteur.
2 AjouterlesinformationsdunechainealafindufichierChaine.dat.
3 Afficherlalistedeschainesdunsatellitedonne.
4 EclaterlefichierChaine.datendeuxfichierstexte,lepremierpourleschainecrypteappel
Crypt.txtetledeuximepourleschaineclairappelClair.txt.

Exercice N 4
On se propose dcrire lanalyse dun programme pour remplir un fichier texte puis
dafficher la frquence de chaque lettre alphabtique (majuscule ou minuscule) du texte. Le
rsultatdoittrestockdansundeuximefichiertextesouslaformesuivante:
FrquencedeA=12
FrquencedeB=9
..
Travaildemand:

Donnerlastructurededonnesutiliser.

Analyserleproblmeonledcomposeenmodules.

Donnerlanalysedechaquemoduleenvisag

19

ChapILesenregistrements&lesfichiers

Correction dexercice N 1 de la srie N 2


1 Analyseprogrammeprincipal
Nom=kiosque
Rsultat=aff
Aff=[]Rpter

Clrscr

Ecrire(*************Menu***********)

Ecrire(1CrationdefichierJournal)

Ecrire(2Saisirlesinformationsdesjournaux)

Ecrire(3Ajouterunnouveaujournal)

Ecrire(4Afficherlalistedejournauxparpriode)

Ecrire(5Recherchedesjournauxparunepartiedenom)

Ecrire(6Misejourdesprix)

Ecrire(7Quitter)

Rpter

Chx=Donne(Entrervotrechoix:)

Jusqu'Chxdans[1..7]

Procassociation(Fj)

Selonchxfaire

1:procCration(Fj)

2:procsaisie(Fj,ej)

3:procajout(Fj)

4:procliste(Fj)

5:procrecherche(Fj)

6:procmaj(fj)

7:Exit

FinSelon

Jusqu'(Chx=7)
Finkiosque
T.D.O
T.D.N.T

Objet
Type/Nature
Rle
Type
Fiche=Enregistrement
Fiche
Ej
Enregistrementpouridentifierunjournal
Num:mot

Journal
Fj
Titre:chaine
Fichierpourregrouperlesinformationsdes
journaux
Pr:caractre
entier
Chx
choix
Sp:chaine
Prix:entier
Association Procdure
Procassociation
FinFiche
Journal=Ficherdefiche
Cration Procdure
Proccrationdufichier

Procdure
Saisie

Procsaisielesinfosdesjournaux

Procdure
Ajout
Procajoutdunjournal

Procdure
Liste
Procaffichagedelalistedesjournaux

Recherche Procdure
Procrecherchedunjournal

Maj
Procdure

Procmisejourdesprixdesjournaux

20

ChapILesenregistrements&lesfichiers

2 Analyseprocdureassociation
Defprocassociation(VARFj:journal)
Rsultat=ass
Ass=[]associer(Fj,C:\kiosque\journal.Dat)
Finassociation
3 Analyseprocdurecration
DfProcCration(varFj:journal)
Rsultat=FJ
Fj=[]Recrer(Fj)
FinCration
4 Analyseprocduresaisie
DfProcSaisie(varFj:journal)
Rsultat=Fj
Fj=[Ouvrir(Fj)]
Rpter

Clrscr

AvecEjfaire

Num=Donne(entrernumrodesrie:)

Rpter

Titre=Donne(Entrerletitre:)

Jusqu'(long( tre)>0)

Repeter

Pr=Donne(Entrerlapriode:)

Jusqu'Majus(pr)dans[Q,H,M,T,A]

Rpter

Sp=Donne(Entrerlespcialit:)

Jusqu'Long(sp)>0

Rpter

Prix=Donne(Entrerleprix:)

Jusqu'(prix>0)

FinEj

Ecrire(Fj,Ej)

Rpter

Rep=Donne(AutresaisieO/N:)

Jusqu'(Majus(rep)dans[O,N])

Jusqu'(Majus(Rep)=N)

FinSaisie
T.D.O

Objet
Type/Nature
rle
Ej
Rep

Fiche
Caractre

Enregistrementidentifiantunjournal
rponse

21

ChapILesenregistrements&lesfichiers

5 AnalyseprocdureAjout
DfProcAjout(varFj:journal)
Rsultat=Fj
Fj=[Ouvrir(Fj),Pointer(Fj,Taille_Fichier(Fj))]

Rpter

Clrscr

AvecEjfaire

Num=Donne(entrernumrodesrie:)

Rpter

Titre=Donne(Entrerletitre:)

Jusqu'(Long( tre)>0)

Rpter

Pr=Donne(Entrerlapriode:)

Jusqu'Majus(pr)dans[Q,H,M,T,A]

Rpter

Sp=Donne(Entrerlespcialit:)

Jusqu'Long(sp)>0

Rpter

Prix=Donne(Entrerleprix:)

Jusqu'(prix>0)

FinAvec

Ecrire(Fj,Ej)

Rpter

Rep=Donne(AutreAjoutO/N:)

Jusqu'(Majus(rep)dans[O,N])

Jusqu'(Majus(Rep)=N)
FinAjout
T.D.O

Objet
Type/Nature
rle
Ej
Rep

Fiche
Caractre

Enregistrementidentifiantunjournal
Rponse

22

ChapILesenregistrements&lesfichiers

6 Analyseprocdureaffiche
DfProcaffiche(varFj:journal)
Rsultat=aff
Aff=[ouvrir(Fj)]TantqueNon(Fin_Fichier(FJ))Faire

Lire(Fj,Ej)

AvecEjFaire

SiMajus(pr)=Majus(p)Alors

Ecrire(lenumrodesrieest:,num)

Ecrire(letitredujournal:,titre)

Ecrire(laspcialitest:,sp)

Ecrire(leprixdujournal:,prix)

FinSi

Finavec

Fintantque
P=[]Rpter

P=Donne(Entrerlapriode:)
Jusqu'Majus(p)dansdans[Q,H,M,T,A]
Finaffiche
T.D.O

Objet
Type/Nature
Rle
Ej
p

Fiche
Caractre

Enregistrementidentifiantunjournal
Dsignelapriode

7 Analyseprocdurerecherche
DfProcrecherche(varFj:journal)
Rsultat=aff
Aff=[Ouvrir(Fj)]

TantqueNon(Fin_Fichier(FJ))Faire

Lire(Fj,Ej)

AvecEjFaire

SiNom=sous_chaine( tre,1,Long(nom))Alors

Ecrire(lenumerodeserieest:,num)

Ecrire(letitredujournal:,titre)

Ecrire(lapriodeest:,pr)

Ecrire(laspcialitest:,sp)

Ecrire(leprixdujournal:,prix)

FinSi

Finavec

Fintantque

Nom=[]Rpter

Nom=Donne(Entrerlenomdunjournal:)

Jusqu'Long(nom)>0
finrecherche
T.D.O

Objet
Type/Nature
rle
Ej
Nom

Fiche
Chaine

Enregistrementidentifiantunjournal
Titredunjournal
23

ChapILesenregistrements&lesfichiers

8 Analyseproceduremisejour
DfProcMaj(varFj:journal)
Rsultat=Fj
Fj=[Ouvrir(Fj)]
TantqueNon(Fin_Fichier(FJ))Faire

Lire(Fj,Ej)

AvecEjFaire

SiMajus(pr)=Majus(p)Alors

Prixprix+((prix*px)Div100)

NPosition_Fichier(Fj)

Pointer(Fj,n1)

Ecrire(Fj,Ej)

FinSi

Finavec

Fintantque
P=[]Rpter

P=Donne(Entrerlapriode:)
Jusqu'Majus(p)dans[Q,H,M,T,A]

Px=[]Rpter

Px=Donne(Entrerlavaleurderductionoudaugmentationdeprix:)
Jusqu'Px>100

FinMaj

T.D.O

Objet
Type/Nature
Rle
Ej
P
Px

Fiche
Caractre
Entier

Enregistrementidentifiantunjournal
Dsignelapriode
Valeurderductionoudaugmentation

24

ChapILesenregistrements&lesfichiers

Correction ex 2 srie N 2
1 Analyseprogrammeprincipal
Nom:Ex2
Rsultat=aff
Aff=[] Rpter

Ecrire(************Menu*******************)

Ecrire(1RemplirlefichierNombreparNentiersalatoires:)

Ecrire(2Trierlecontenudufichierutilisantuntableau)

Ecrire(3AfficherlecontenudufichierNombre)

Ecrire(4Quitter)

Rpter

Chx=Donne(Entrervotrechoix:)

Jusqu'chxdans[1..4]

Selonchxfaire

1:Procremplir(varFn:nombre)

2:Proctrif(varFn:nombre)

3:Procaffiche(varfn:nombre)

4:Exit

FinSelon

Jusqu'(Chx=4)

FinEx2

T.D.N.T
Type
Nombre=Ficherdentier
T.D.O

Objet
Type/Nature
Rle
Fn
Chx

Nombre
Entier

Fichierdenentiers
choix

2 Analyseprocdureremplir
DfProcRemplir(varFn:Nombre)
Rsultat=Fn
Fn=[Recrer(Fn)]Pouride1Nfaire

mAlatoire(1000)

Ecrire(Fn,m)

FinPour
N=Rpter

N=Donne(Entrerlenombredesentiers:)
Jusqu'Ndans[6..99]
FinRemplir
T.D.O

Objet
Type/Nature
Rle
i
m

entier
entier

Compteur
Nombrealatoire

25

ChapILesenregistrements&lesfichiers

3 Analyseprocduretrif
DfProctrif(varFn:nombre)
Rsultat=Fn
Fn=[] Recrer(Fn)

Pouride1nfaire

Ecrire(Fn,T[i])

FinPour
T=[Ouvrir(FN),n0]

TantqueNon(Fin_Fichier(Fn))Faire

NN+1

Lire(Fn,T[N])

FinTantque

Rpter

Bfaux

Pouride1nfaire

SiT[i]<T[i+1]Alors

AuxT[i]

T[i]T[i+1]

T[i+1]Aux

BVrai

FinSi

FinPour

Jusqu'(Non(B))

Fintrif

T.D.O

Objet
Type/Nature
I
b
N
Aux
T

Entier
Boolenne
Entier
Entier
Tableau[1..100]den er

Rle

Compteur
Ilyapermutationounon
Nombredesentiers
Variabletemporaire
Tableaude100en ers

4 Analyseprocdureaffiche
DfProcAffiche(VarFn:Nombre)
Rsultat=Aff
Aff=[ouvrir(fn)]TantqueNon(Fin_Fichier(Fn))Faire

Lire(Fn,n)

Ecrire(n)

FinTantque
T.D.O

Objet
Type/Nature
Rle
N

entier

Entierdufichier

26

ChapILesenregistrements&lesfichiers

Traduction en Turbo Pascal


Exercice N 1
programjournal;
useswincrt;
type
Article=record
num:integer;
titre:string[10];

per:char;
spec:string[10];

prix:longint;
end;
fichier=fileofarticle;
var
Ejour:article;
Fjour:fichier;
choix:integer;

procedureass(varFjour:fichier);
begin
assign(Fjour,'C:\journal.dat');
end;

procedurecreation(varFjour:fichier);
begin
rewrite(Fjour);
end;

proceduresaisi(varFjour:fichier;Ejour:article);
var
rep:char;
begin
reset(Fjour);

repeat

withEjourdo
begin
repeat
write('Entrerlanumrodeseriedujournal:');
readln(num);
un l(num>0);
repeat
write('Entrerletitredujournal:');
readln(titre);
un l(length( tre)>0);
repeat
write('Entrerlaperiodedujournal:');
readln(per);
untilupcase(per)in['Q','H','M','T','A'];
repeat
27

ChapILesenregistrements&lesfichiers

write('Entrerlaspecialitdujournal:');
readln(spec);
un l(length(spec)>0);
repeat
write('Entrerlaprixdujournalenmillimes:');
readln(prix);
un l(prix>0);
clrscr
end;

write(Fjour,Ejour);

Repeat
write('Voulezvoussaisiunautrejournal(O/N)?:');
readln(rep);
untilupcase(rep)in['O','N'];
clrscr;
untilupcase(rep)='N';

close(Fjour);
end;

procedureajout(varFjour:fichier;Ejour:article);
var
rep:char;
p:integer;
begin
reset(Fjour);
seek(Fjour,filesize(Fjour));
repeat
withEjourdo
begin
repeat
write('Entrerlanumrodeseriedujournal:');
readln(num);
until(num>0);
repeat
write('Entrerletitredujournal:');
readln(titre);
un l(length( tre)>0);
repeat
write('Entrerlaperiodedujournal:');
readln(per);
untilupcase(per)in['Q','H','M','T','A'];
repeat
write('Entrerlaspecialitdujournal:');
readln(spec);
un l(length(spec)>0);
repeat
write('Entrerlaprixdujournalenmillimes:');
readln(prix);
28

ChapILesenregistrements&lesfichiers

un l(prix>0);
clrscr
end;

write(Fjour,Ejour);
Repeat
write('Voulezvoussaisiunautrejournal(O/N)?:');
readln(rep);
untilupcase(rep)in['O','N'];
clrscr;
untilupcase(rep)='N';
close(Fjour);
clrscr;
end;

procedureaffiche(varFjour:fichier;Ejour:article);
var
periode:char;
begin
reset(Fjour);
repeat
write('Entrerlaperiodesouhait:');
readln(periode);
untilupcase(periode)in['Q','H','M','T','A'];
whilenot(eof(Fjour))do
begin
read(Fjour,Ejour);
withEjourdo
begin
ifupcase(periode)=upcase(per)then
begin
writeln('numeroduserie:',num);
writeln('titre:',titre);
writeln('periode:',per);
writeln('Specialit:',spec);
writeln('prix:',prix);
writeln;
readln;
end;
end;
end;
clrscr;
close(Fjour);
end;

procedurecherche(varFjour:fichier;Ejour:article);
var
ch,mot:string;
begin
reset(Fjour);
repeat
29

ChapILesenregistrements&lesfichiers

write('Entrerlemotquituvientlerechcerche:');
readln(mot);
un l(length(mot)>0);
whilenot(eof(Fjour))do
begin
read(Fjour,Ejour);
withEjourdo
begin
ch:=copy( tre,1,length(mot));
ifch=motthen
begin
writeln(titre);
readln;
end;
end;
end;
clrscr;
close(Fjour);
end;

proceduremisejour(varFjour:fichier;Ejour:article);
var
p,x:integer;
periode:char;
pour:longint;
begin
reset(Fjour);
repeat
write('Entrerlaperiodesouhait:');
readln(periode);
clrscr;
untilupcase(periode)in['Q','H','M','T','A'];
repeat
write('Entrerlapourcentage:');
readln(p);
clrscr;
until(p>=100)and(p<=100);
whilenot(eof(Fjour))do
begin
read(Fjour,Ejour);
withEjourdo
begin
ifupcase(periode)=upcase(per)then
begin
pour:=(prix*p)div100;
prix:=prix+pour;
x:=filepos(Fjour);
seek(Fjour,x1);
write(Fjour,Ejour);
end;
end;
30

ChapILesenregistrements&lesfichiers

end;
clrscr;
close(Fjour);
end;

{programmeprincipale}
begin
clrscr;
repeat
writeln('**********************************************');
writeln('********************Menu********************');
writeln('**********************************************');
writeln('*1)crea ondufichier*');
writeln('*2)saisielesinforma onsdesjournales*');
writeln('*3)ajoutd''unejournale*');
writeln('*4)achagedesjourneaux*');
writeln('*5)chercherlesjourneux*');
writeln('*6)misejourdesprix*');
writeln('*7)exite*');
writeln('**********************************************');
writeln('**********************************************');
repeat
write('Entrervotrechoix:');
readln(choix);
clrscr;
un lchoixin[1..7];
ass(Fjour);
casechoixof
1:crea on(Fjour);
2:saisi(Fjour,Ejour);
3:ajout(Fjour,Ejour);
4:ache(Fjour,Ejour);
5:cherche(Fjour,Ejour);
6:misejour(Fjour,Ejour);
7:exit;
end;
un lchoix=9;
end.

31

ChapILesenregistrements&lesfichiers

Exercice N 2
programtri_fichier_entier;
useswincrt;

type
nombre=fileofinteger;
tab=array[1..100]ofinteger;
var
FE:nombre;
T:tab;
choix:integer;
n:integer;

procedureass(varFE:nombre);
begin
assign(FE,'C:\4SI\nombre.dat');
end;

procedurecreation(varFE:nombre);
begin
rewrite(FE);
end;

procedureSaisi(varFE:nombre;varn:integer);
var

i,m:integer;
begin
clrscr;
reset(FE);
randomize;
repeat
write('Enterl''entiern:');
readln(n);
un l(n>5)and(n<100);
fori:=1tondo
begin
m:=random(1000);
write(FE,m);
end;
close(FE);
end;
procedurepermute(vara,b:integer);
var
aux:integer;
begin
aux:=a;
a:=b;
b:=aux;
end;

32

ChapILesenregistrements&lesfichiers

procedurecopier(varFE:nombre;varT:tab);
var
i,m:integer;
begin
reset(FE);
i:=0;
whilenot(EOF(FE))do
begin
i:=i+1;
read(FE,m);
T[i]:=m;
end;
close(FE);
end;

procedureTRI(varFE:nombre;varT:tab;n:integer);
var
i,j:integer;
begin
copier(FE,T);
rewrite(FE);
fori:=1ton1do
begin
forj:=1ton1do
begin
ifT[j]>T[j+1]then
begin
permute(T[j],T[j+1]);
end;
end;
end;
fori:=1tondo
begin
write(FE,T[i]);
end;
close(FE);
end;

procedureaffichage(varFE:nombre);
var
i,m:integer;
begin
clrscr;
reset(FE);
whilenot(EOF(FE))do
begin
read(FE,m);
writeln(m);
end;
readln;
end;
33

ChapILesenregistrements&lesfichiers

begin
repeat
clrscr;
writeln('********************MENU*********************');
writeln('*1)Crea ondufichier*');
writeln('*2)Remplirlefichier*');
writeln('*3)TriduFichier*');
writeln('*4)Achagedufichier*');
writeln('*5)Qui er*');
writeln('***********************************************');

repeat
write('Entrervotrechoix:');
readln(choix);
un lchoixin[1..5];

ass(FE);

casechoixof
1:crea on(FE);
2:saisi(FE,n);
3:TRI(FE,T,n);
4:affichage(FE);
5:exit
end;
un lchoix=5;

end.

34

ChapILesenregistrements&lesfichiers

Correction exercice N 4
1 AlgorithmeprocdureCration
0)
1)

2)
2

DefProcCreation(varft,Ffreq:texte)
Ft,ffreq=[]associer(ft,C:\4si3\source.txt)

Associer(ffreq,C:\4si3\frequence.txt)

Recreer(ft)

Recreer(ffreq)
FinCreation
Algorithmeprocdureremplir

0)
1)

2)
3

DefprocRemplir(varft:texte)
Ft=[]Ouvrir(ft)

Rpter

Ecrire(entrerunechaine:)

Lire(ligne)

Si(ligne)Alors

Ecrire(ft,ligne)

Finsi

Jusqu'(ligne=)
Finremplir
Algorithmeprocdurefrquence

0)
1)

2)

3)
4)

Defprocfrquence(varft,ffreq:texte)
T=[ouvrir(ft)

PourcdeAZfaire

T[c]0

FinPour]

TantqueNon(Fin_Fichier(ft))faire

Lire(ft,ligne)

Pouride1Long( )Faire

cMajus(ligne[i])

Sicdans[A..Z]Alors

T[c]T[c]+1

Finsi

FinPour

FinTantque
Ffreq=[Recreer(ffreq)]

PourcdeAZfaire

Convch(T[c],stf)

LigneLafrquencede+c+est:+stf

Ecrire(ffreq,ligne)

FinPour
Fermer(ft),fermer(ffreq)
Finfrquence
35

ChapILesenregistrements&lesfichiers

4 Algorithmeprocdureaffiche
0)
1)

2)
5
0)
1)
2)
3)
4)
5)
6)

Defprocaffiche(varf:texte)
Aff=[ouvrir(f)]

TantqueNon(Fin_Fichier(f))faire

Lire(f,ligne)

Ecrire(ligne)

FinTantque
Finaffiche
Algorithmeprogrammeprincipal
Debutex4
ProcCreation(ft,ffreq)
Procremplir(ft)
Procfrequence(ft,ffreq)
ProcAffiche(ft)
Procaffiche(ffreq)
Finex4

36

ChapILesenregistrements&lesfichiers

Traduction en Turbo Pascal


str(t[c],stf);
ligne:='Lafrquencede'+c+'est:'+stf;
writeln(ffreq,ligne);
end;
close(ft);
close(ffreq);
end;
procedureaffiche(varf:text);
var
ligne:string;
begin
reset(f);
whileNot(eof(f))do
begin
readln(f,ligne);
writeln(ligne)
end;
close(f);
end;

begin
creation(ft,ffreq);
remplir(ft);
frequence(ft,ffreq);
affiche(ft);
readln;
writeln;
affiche(ffreq);
end.

programex4;
useswincrt;
var
ft,ffreq:text;
procedurecreation(varft,ffreq:text);
begin
assign(ft,'c:\4si\source.txt');
assign(ffreq,'c:\4si\frequence.txt');
rewrite(ft);
rewrite(ffreq);
end;
procedureremplir(varft:text);
var
ligne:string;
begin
repeat
write('Entrerunechaine:');
readln(ligne);
ifligne<>''then
begin
write(ft,ligne)
end;
untilligne='';
end;
procedurefrequence(varft,ffreq:text);
var
t:array['A'..'Z']ofinteger;
i:integer;
c:char;
ligne,stf:string;
begin
reset(ft);
forc:='A'to'Z'do
begin
t[c]:=0;
end;
whilenot(eof(ft))do
begin
readln(ft,ligne);
fori:=1tolength(ligne)do
begin
c:=upcase(ligne[i]);
ifcin['A'..'Z']then
begin
t[c]:=t[c]+1;
end;
end;
end;
rewrite(ffreq);
forc:='A'to'Z'do
begin

37

ChapILesenregistrements&lesfichiers

Srie N 3
Exercice N1

Unesocitdeproduitlaitierdcidedautomatiserlagestiondesesproduits.Ondtient
pourchaqueproduitlesinformationssuivantes:
Numronum:Numrouniquedelarticle
Dsignationdesign:Nomdelarticle(YAOURT,LAITouFROMAGE)
Unematriculemat:Remplieautomatiquementparunechanereprsenteparles
deuxremierscaractresdeladsignationetlenumrodelarticle.Exemple:Pourlarticle
dontlenumroest10,ladsigna onest"YAOURT":LamatriculeseraYA10
Unedatedeventequiluimmeformedetroischamps:

oJourj(131)

oMoism(112)

oAnnea(2000)
Quantitvendueqv
Prixunitairepu

Travaildemand:
Ondsireecrireunprogrammepermettantde:
1. Saisir et enregistrer les articles des diffrents produits dans un fichier ayant pour nom
logique"FPROD"etquicorrespondunnomphysique"Produit.dat"quiseracrersurla
racinedelunitC:
Lasaisiesarrtelasaisiedunnumrongatifquineserapasretenuedanslefichier.
2. Afficherlenumroetladatedeventedunarticlequicorrespondunematriculedonne.
Siaucunarticlenesttrouv,afficherunmessagederreur.
3. OrganiserlefichierFPRODdansunautrefichierFPROD_ORDenrangeantaudbut
lesdonnesrelativeslarticleLAITpuiscellesduYAOURTpuiscelleduFROMAGE.
4. Crerunfichiertextedontlastructureestlasuivante:
La1relignecomportelemessage"Ar clesvendusle:"suivitparladatedonne(ladate
saisiedoitrespecterlammeconditionindiquecidessus).
La2melignecomportelarecettedujourpourladatedonnprcdeparlemessage
"Recettedujour:"
Lasuitedufichiercomportelesmatriculesdesarticlesvendusladatedonneprcds
parlemessage"Matriculesdesarticlesvendus:"
Ainsi,lefichiertexteprendralaformeprsenteparlexemplesuivant:

Ar clesvendusle:12/03/2009
Rece edujour:48.000
Matriculedesarticlesvendus:
LA6
FR3

N.B:Leprogrammedoitafficherlefichier"FPROD_ORD"etlefichiertextecrer.
Questions:

1)Analyserleprogrammeprincipalainsiquelesdiffrentsmodulesenvisags

2)Endduirelalgorithmeduprogrammeprincipalainsiqueceuxdesmodulesenvisags.

38

ChapILesenregistrements&lesfichiers

Correction exercice N1 de la srie N3


A)AnalyseprogrammeprincipalEx1s3

Rsultat=aff
Aff=[]Rpter

Ecrire(*******Menu***********)

Ecrire("1Crationdesfichiers")

Ecrire("2Saisiedesarticle)

Ecrire(3Afficherlenumroetladatedevente)

Ecrire(4OrganiserlefichierFPRODdansunFPROD_ORD)

Ecrire(5RemplirlefichierTexte)

Ecrire(6AfficherlefichiertypFPROD)

Ecrire(7AfficherlefichiertexteFART)

Ecrire(8Quitter)

Rpter

Chx=donne(Entrerlechoix:)

Jusqu'chxdans[1..8]

Procassociation(FPROD,FPROD_ORD,FART)

SelonchxFaire

1:procCra on(FPROD,EPR)

2:ProcSaisie(FPROD,EPR)

3:ProcAffiche(FPROD,EPR)

4:ProcOrganiser(FPROD,FPROD_ORD,EPR)

5:ProcRemplir(FPROD,FART,EPR)

6:ProcAffichePROD(FPROD,EPR)

7:ProcAfficheART(FART)

8:Exit

FinSelon

Jusqu'chx=8
FinEx1s3
T.D.N.T
T.D.O
Type
Date=Enregistrement
Type/Nature
rle
Objet
J:1..31
Fichierdeproduit
Prd
FROD
M:1..12
Prd
FPROD_ORD
Fichierdeproduitorganiser
A:mot
Texte
Fart
Fichiertextearticle
FinDate
Article
Enregistrementarticle
EPR
Article=Enregistrement
Procdure
Cration
Num:Entier
Procdure
Affiche
Desig:chaine
Procdure
Organiser
Mat:chaine[4]
procdure
remplir
Datv:Date

Qv:Rel

Pu:Rel
Finarticle
Prd=FicherdArticle

39

ChapILesenregistrements&lesfichiers

Algorithme
0) DbutEx1S3
1) Aff=[]Rpter

Ecrire(*******Menu***********)

Ecrire(1crationdesfichiers)

Ecrire(2saisiedesarticle)

Ecrire(3afficherlenumroetladatedevente)

Ecrire(4organiserlefichierFPRODdansunFPROD_ORD)

Ecrire(5remplirlefichierTexte)

Ecrire(6AfficherlefichiertypFPROD)

Ecrire(7AfficherlefichiertexteFART)

Ecrire(8Quitter)

Rpter

Chx=donne(Entrerlechoix:)

Jusqu'chxdans[1..8]

Procassociation(FPROD,FPROD_ORD,FART)

SelonchxFaire

1:procCra on(FPROD,EPR)

2:ProcSaisie(FPROD,EPR)

3:ProcAffiche(FPROD,EPR)

4:ProcOrganiser(FPROD,FPROD_ORD,EPR)

5:ProcRemplir(FPROD,FART,EPR)

6:ProcAffichePROD(FPROD,EPR)

7:ProcAfficheART(FART)

8:Exit

FinSelon

Jusqu'chx=8
2) FinEx1s3

B)AnalyseProcassociation(VarFROD,FPROD_ORD:Prd;Fart:texte)
Rsultat=FPROD,FPROD_ORD,FART

Associer(FPROD,C:\4SI3\Produit.dat)

Associer(FROD_ORD,C:\4SI3\Produitord.dat)

Associer(Fart,C:\4SI3\article.txt)
Finassociation

C)AnalyseProcCration(VARFPROD:Prd,EPR:Article)
Rsultat=FPROD,FPROD_ORD,FART

Recrer(FROD)

Recrer(FPROD_ORD)

Recrer(FART)
Fincration

40

ChapILesenregistrements&lesfichiers

D)AnalyseProcSaisie(VarFPROD:Prd;EPR:Article)
Rsultat=FPROD
FPROD=[]Rpter

AvecEPRfaire

Num=Donne(EntrerNumro:)

SiNum>0Alors

Rpeter

Design=Donne(EntrerDsignationdeproduit)

Jusqu'Long(Design)>0

Str(num,ch)

Matcopy(desig,1,2)+ch

AvecDatvfaire

J=Donne(Entrerlejour:)

M=Donne(Entrerlemois:)

Rpeter

A=Donne(Entrerlanne)

Jusqu'a>2000

Finavec

Rpeter

Qv=Donne(Entrerlaquantit:)

Jusqu'qv>0

Rpeter

Pu=Donne(Entrerprix:)

Jusqu'pu>0

FinSi

Finavec

Ecrire(FPROD,EPR)
FinSaisie
Algorithme
0) DbutDfProcSaisie(VarFPROD:Prd;EPR:Article)
1) FPROD=[]Rpter

AvecEPRfaire

Ecrire(EntrerNumro:)

Lire(Num)

SiNum>0Alors

Rpter

Ecrire(EntrerDsignationdeproduit)

Lire(Design)

Jusqu'Long(Design)>0

Str(num,ch)

Matcopy(desig,1,2)+ch

AvecDatvfaire

Ecrire(Entrerlejour:)

Lire(j)

Ecrire(Entrerlemois:)

Lire(m)

Rpter

Ecrire(Entrerlanne)

Lire(a)

Jusqu'a>2000

Finavec
41

ChapILesenregistrements&lesfichiers

Rpter

Ecrire(Entrerlaquantit:)

Lire(qv)

Jusqu'qv>0

Rpter

Ecrire(Entrerprix:)

Lire(pu)

Jusqu'pu>0

FinSi

Finavec

Ecrire(FPROD,EPR)
2) FinSaisie
E)AnalyseProcAffiche(VARFPROD:Prd;EPR:Article)
0) DbutDfProcAffiche(VARFPROD:Prd;EPR:Article)
1) Mt=[]Rpter

Ecrire(Entrerunmatricule:)

lire(mt)

Val(copy(mt,2,2),n,e)

jusqu'(e=0)
2) Aff=[Ouvrir(FPROD),i0]

TantqueNon(Fin_Fichier(FPROD))Faire

lire(FPROD,EPR)

Simat=mtAlors

Ecrire(leNumroest:,Num)

Ecrire(Ladatedevente:,datv.j,/,datv.m,/,datv.a)

ii+1

Finsi

FinTantque

Sii=0Alors

Ecrire(Articlenexistepas)

FinSi
3) FinAffiche
F)analyseProcOrganiser(VarFPROD,FPROD_ORD:Prd;EPR:Aricle)
0) DbutDfProcOrganiser(VarFPROD,FPROD_ORD:Prd;EPR:Aricle)
1) Org=[Ouvrir(FPROD)]TantQueNon(Fin_Fichier(FPROD))Faire

Lire(FPROD,EPR)

SiEPR=LAITAlors

Ecrire(FPROD_ORD,EPR)

Finsi

FinTantque
2) [Ouvrir(FPROD)]TantQueNon(Fin_Fichier(FPROD))Faire

Lire(FPROD,EPR)

SiEPR=YAOURTAlors

Ecrire(FPROD_ORD,EPR)

Finsi

FinTantque
3) [Ouvrir(FPROD)]TantQueNon(Fin_Fichier(FPROD))Faire

Lire(FPROD,EPR)

SiEPR=FROMAGEAlors

Ecrire(FPROD_ORD,EPR)

Finsi
42

ChapILesenregistrements&lesfichiers

FinTantque
4) FinOrganiser

G)analyseProcremplir(VARFPROD:Prd;FART:texte;EPR:Article)
0) DbutDfProcremplir(VARFPROD:Prd;FART:texte;EPR:Article)
1) AvecDatsfaire

Ecrire(Entrerlejour:),

Lire(j)
Ecrire(Entrerlemois:)
Lire(m)
Rpter

Ecrire(Entrerlanne)

Lire(a)
Jusqu'a>2000
Str(j,chj)
Str(m,chm)
Str(a,cha)
FinAvec
2) Chchj+/+chm+/+cha
3) Ecrire(FART,Articlesvendusle:+Ch
4) FART=[Ouvrir(FPROD),Rec0]TantqueNon(Fin_Fichier(FPROD))Faire

Lire(FPROD,EPR)

SiEPR.Datv=DatsAlors

RecRec+EPR.qv*EPR.pu

Finsi

FinTantque

Str(Rec,ch)

ChRecettedujour+Ch

Ecrire(FART,Ch)
5) [Ouvrir(FPROD)]TantqueNon(Fin_Fichier(FPROD))Faire

Lire(FPROD,EPR)

SiEPR.Datv=DatsAlors

Ecrire(FART,EPR.mat)

Finsi

FinTantque
6) FinRemplir

43

ChapILesenregistrements&lesfichiers

0)
1)

2)

0)
1)

2)

H)AlgorithmeAffichefichiertypproduit
DbutDfProcafficheProd(VarFPROD:Prd;EPR:Article)
Aff=[Ouvrir(FPROD)]

TantQueNon(Fin_Fichier(FPROD))faire

Lire(FPROD,EPR)

AvecEPRfaire

Ecrire(Lenumro:,Num)

Ecrire(Dsignation:,Desig)

Ecrire(Lematricule:,mat)

Ecrire(Ladatevente:datv.j,/,datv.m,/,datv.a)

Ecrire(laquantitvendue:,qv)

Ecrire(Leprixunitaire:,pu)

Finavec
FinafficheProd
I)
Algorithmeaffichefichiertexte

DbutDfProcAfficheART(VarFART:texte)
Aff=[Ouvrir(FART)]TantqueNon(Fin_Fichier(FART))Faire

Lire(FART,Ch)

Ecrire(ch)

FinTantque
FinAfficheART

44

ChapILesenregistrements&lesfichiers

Exercice N1

Srie N 4

Unesocitdetravauxpensedinformatiserlagestiondesespersonnels.Ellegardepour
chaqueemploylesinformationssuivantes:
Matricule:en erde4chiresposi f
Nom,prnom:chainesde30caractresaumaximumpourchacune.
Grade:peuttreseulementA,B,ouC.
Salaire:rel.
Proposer lanalyse et lalgorithme dune application informatique qui permet de rpondre aux
tachessuivantes:
a) Associer le fichier qui comporte les donnes des personnels dans le fichier
Personnels.DatdedossierC:\4SI3.
b) Crerlefichier
c) Saisir les donnes de chaque employ, la saisie sarrt selon la demande Autre saisie
O/N:
d) afficherlalistedespersonnels,etlalistedespersonnelsdungradedonne.
e) Ajouterunnouvelemploydanslefichierpersonnels.dat
f) MettrejourlessalairesdesemploysdegradeBquisontaugmentsde15%.
g) ArrangerlespersonnelsselonleGradedans3fichiersdistincts:

PA.dat:pourlespersonnelsdegradeA

PB.dat:pourlespersonnelsdegradeB

PC.dat:pourlespersonnelsdegradeC
h) Afficher le contenu dun fichier donn et le nombre de ces lments (nombre des
employs).

N.B:utiliserunmenudechoixpourcetteapplication.

Exercice N 2 :

Ecrirelanalysepuislalgorithmedunprogrammepermettantde:
Remplirunfichiernombre.datparNen ersalatoires<1000,(avec4<N<100).
Apartirdefichiernombre.datremplirunfichiertypconversion.datdanslequel
ontrouve:Lenombreendcimal,Saconversionenbinaire,
Saconversionenoctal,Sa
conversionenHexadcimal.
MettredansunfichiertexteConvbase.txtlecontenudefichierconversion.dat,sur
chaque ligne de fichier texte en trouve le nombre suivi par ses conversions dans les
diffrentsbasessparesparunespace.
N.B:TouslesfichierssontenregistresdansledossierBac2013surlunitC.

45

ChapILesenregistrements&lesfichiers

Srie N 5
Exercice N 1

(sujet Bac pratique 2012 24 Mai 2012 )

A partir dun fichier nomm Nombre.dat contenant N entiers, form chacun de P


chiffres,onveutformerundeuximefichiernommFacteurs.txtquicontiendra,deschaines,
chaquechainereprsentelaconcatnationdelafrquencedechacundesfacteurspremiersdun
nombredufichierNombres.Datsuividufichierpremierluimme.
Exemple
PourN=3etP=4
Lecontenudufichier
Nombres.dat

Lesfacteurspremiersdechaque
nombredufichierNombres.dat

Lecontenudufichier
Factures.txt

1912

2,2,2,239

321239

4592

2,2,2,2,7,41

4217141

3525

3,5,5,47

1325147

Eneffet:
1921=2*2*2*239
Lachainegnresera321239pourdireque3estlafrquencedufacteurpremier2et1est
lafrquencedufacteurpremier239.
3525=3*5*5*47
Lachainegnresera1325147pourdireque1estlafrquencedufacteurpremier3,2estla
frquencedufacteurpremier5et1estlafrquencedufacteurpremier47.
Travailfaire:
EcrireunprogrammePascaletlenregistrersouslenomFactPrem.paspermettant:
DeremplirunfichiernommNombres.datparNentiers,formsdePchiffres

(avec2<N<100et2<P<6).
De crer, pour chaque entier du fichier Nombre.dat, une chaine reprsentant la
concatnationdelafrquencedechacundesesfacteurspremierssuividufacteurpremier
luimmeetlenregistrerdansunelignedunfichiertextenommFacteurs.txt.
DafficherlecontenudufichierFacteurs.txt.

N.B:touslesfichiersserontenregistrsdansledossierbac2013delunitC:

46

ChapILesenregistrements&lesfichiers

Exercice N 2 ( Ex 5 sujet bac 2012 session contrle)

Etant donn un fichier texte intitul MsgCrypte.txt contenant un texte crypt dun
messageformdeNlignes,ochaquelignereprsenteunmotcrypt.
Leprincipeducryptageestlesuivant:
Chaquemotestcryptcaractreparcaractre.
Chaquecaractreestcryptparsareprsenta onbinaire,sur8bits,desoncodeASCII.
Onsepropose:
DedcrypterleslignesdufichierMsgCrypte.txtpourobtenirtouslesmotsformantle
messageinitial,
Dafficherletextedcrypt,ensparantlesmotspardesespaces.
Exemple:
PourN=4etlecontenudufichierMsgCrypte.txtsuivant:

010000100110000101100011

0110100101101110011001101111

01101010011101010110100101101110

00110010001100000011000100110010

Aprsdcryptage,leprogrammeafficheralemessagesuivant:Bacinfojuin2012

Notonsque,lecodeASCIIducaractreB(lepremiercaractredupremiermot)est66,
dontlareprsentationbinaireest01000010(leshuitpremiersbitsdelapremierlignedufichier
MsgCrypte.txt).
Travailfaire:
1. Analyserleproblmeenledcomposantenmodules.
2. Analyserchacundesmodulesenvisags.

47

ChapILesenregistrements&lesfichiers

Correction exercice N1 srie N 5

programex1s5;
useswincrt;
type
nombre=fileofinteger;
var
fn:nombre;
ft:text;
procedurecreation(varfn:nombre;varft:text);
begin
assign(fn,'c:\4si\nombre.dat');
assign(ft,'c:\4si\facteurs.txt');
rewrite(fn);
rewrite(ft);
end;

procedureremplir(varfn:nombre);
var
n,p,k,i:integer;
st:string;
begin
reset(fn);
repeat
write('Entrerlenombredesentiersn:');
readln(n);
un lnin[3..99];
repeat
write('entrerlenombredeschiffresdechaqueentier:');
readln(p);
un lpin[3..5];
fori:=1tondo
begin
repeat
write('Entrerl"entiernumero',i,':');
readln(k);
str(k,st);
untillength(st)=p;
write(fn,k);
end;
close(fn);
end;

48

ChapILesenregistrements&lesfichiers

{*************la1remethode***********}

procedurefacteur1(varfn:nombre;var :text);
var
i,nb,n:integer;
st,sti,ch:string;

begin
reset(fn);
append(ft);
whilenot(eof(fn))do
begin
read(fn,n);
i:=2;
nb:=0;
ch:='';
repeat
ifnmodi=0then
begin
n:=ndivi;
nb:=nb+1;
end
else
begin
ifnb>0then
begin
str(nb,st);
str(i,sti);
ch:=ch+st+sti;
nb:=0;
end;
i:=i+1;
end;

un ln=1;
str(nb,st);
str(i,sti);
ch:=ch+st+sti;
writeln(ft,ch);
end;
close(fn);
close(ft);
end;

{*************la2memethode*************}

procedurefacteur2(varfn:nombre;var :text);
var
i,nb,n:integer;
ch,st,c,k,sti:string;
begin
reset(fn);
append(ft);
whilenot(eof(fn))do
begin
read(fn,n);
i:=2;
ch:='';
repeat
ifnmodi=0then
begin
n:=ndivi;
str(i,sti);
ch:=ch+sti+'';
end
else
begin
i:=i+1;
end;

un ln=1;

sti:='';

repeat
st:=copy(ch,1,pos('',ch));
nb:=0;

while(pos(st,ch)<>0)do
begin
nb:=nb+1;
delete(ch,1,pos('',ch))
end;
str(nb,k);
c:=copy(st,1,pos('',st)1);
sti:=sti+k+c
untilch='';
writeln(ft,sti);
end;
close(fn);
close(ft);
end;

49

ChapILesenregistrements&lesfichiers

procedureaffichefn(varfn:nombre);
var
n:integer;
begin
reset(fn);
whilenot(eof(fn))do
begin
read(fn,n);
writeln(n);
end;
close(fn);
end;
procedureafficheft(varft:text);
var
ligne:string;
begin
reset(ft);
whilenot(eof(ft))do
begin
readln(ft,ligne);
writeln(ligne);
end;
close(ft);
end;

begin
creation(fn,ft);
remplir(fn);
facteur2(fn, );{oufacteur1(fn, }
affichefn(fn);
writeln;
afficheft(ft);
end

50

La rcursivit

51

ChapIILarcursivit

La rcursivit
I Introduction
Ac vit1:
Calculdelapuissanceanavecn>=0

52=5*5=25

53=5*5*5

=5*(5*5)=5*52=5*25=125

54=5*5*5*5

=5*(5*5*5)=5*53=5*125=625

55=5*5*5*5*5

=5*(5*5*5*5)=5*54=5*625=3125

Engnralpourcalculeranonpeututiliserdeuxmthodes:

an=a*a*a*a*..*a

Onappellecetraitement:traitementitratif

an=a*an1

onappellecetraitement:traitementrcursif

Traitementitratif

Arrive

Traitementrcursif

Dpart

54=5*53

53 =5*52

4
55=5*5

52 =5*51
51 =5*50

Dpart

Letraitementitratif:

Dpart:infoconnue

Monterverslersultat

Arrtenhaut:aprs5fois

boucle Pour faire

Arriv

Letraitementrcursif:

Dpart:infocherche
Descendreversleconnue
Arrtenbas:0
Monterverslersultat
Commentfaire???

52

ChapIILarcursivit

0) Def FN Puis ( a , N : entier ) : entier long

0) DefFNPuis(a,N:entier):entierlong

1) P = [ P 1 ]

1) SiN=0Alors

Pour i de 1 N faire

Puis1

PP*a

Sinon

FinPour

Puisa*Puis(a,N1)

2) Puis=[]PuisP

Finsi

3) FinPuis

2) FinPuis

Ac vit2:calculdelafactorielledunentierpositif

2!

=1*2=2*1

3!

=3*2*1

=3*2!

4!

=4*3*2*1

=4*3!

5!

=5*4*3*2*1

=5*4!

Engnralpourcalculerlafactorielledentiernpositifonutilisedeuxmthodes:

N!=1*2*3*4*..*N

traitementitratif

traitementrcursif

N!=N*(N1)!

Solutionitrative:
0) Def FN Factorielle ( N : entier ) : entier long
1) F = [ F 1 ]
Pour i de 1 N faire
FF*N
FinPour
2) Factorielle=[]FactorielleF
3) FinFactorielle
53

ChapIILarcursivit

Solutionrcursive:
0) DefFNFactorielle(N:entier):entierlong
1) SiN=0Alors
Factorielle1
Sinon
FactorielleN*Factorielle(N1)
Finsi
2) FinFactorielle
II Dfinition

Larcursivitestunemthodealgorithmiquequiconsisteappelerunsousprogramme
danssonproprecorps.Cettemthodepermetdersoudredesproblmesolondoititrerun
nombredefoisdpendammentdunombrededonnes.

Unsousprogrammercursifestunmodulequisappelleluimmeavecdesnouvelles
valeursdesparamtreseffectifsdanschaqueappeljusqu'uneconditiondarrt.

Lalimitetechniquedelarcursivitestlammoirestockantlesdonnesintermdiaires
dessousprogrammes,quenousappelonslapile.Cettederniredbordelorsquelenombredes
appelsdevientimportant.
Remarque:ilexistelarcursivitdirecteetlarcursivitcroise.
III Applications:
Applica on1:

Nousproposonsdcrireunprogrammepermettantdechercheretdafficherlasommedes
npremiersentiers.
1. Proposezunesolutionitrativeetunesolutionrcursiveaumodulesomme.
2. Dduirezlesalgorithmescorrespondants.

54

ChapIILarcursivit

Solution
0) DefFnsomme(n:entier):entier
1) Sin=0alors

Sinon

Finsi

Somme0

Sommen+Fnsomme(n1)

2) FinSomme
Applica on2

Ecrirelanalysepuislalgorithmedunmodulequipermetdevrifiersiunechainedonne
nonvideestpalindromeounon.(exple:radar,t,aziza)
1. Proposezunesolutionitrativepuisunesolutionrcursive.
Solution
0) DefFnPalindrome(ch:chaine):boolen
1) SiLong(ch)<2Alors

PalindromeVrai

Sinion

Sich[1]=ch[Long(ch)]Alors

Sinon

Finsi

Finsi

PalindromeFnPalindrome(sous_chaine(ch,2,Long(ch)2))

PalindromeFaux

2) FinPalindrome

55

ChapIILarcursivit

Applica on3

Ecrirelanalysepuislalgorithmedunmodulequipermetdinverserunechainedonne.

Proposezunesolutionitrativepuisunesolutionrcursive.
Solution
0) DefFninverse(ch:chaine)chaine
1) SiLong(ch)<2alors

Inversech

Sinon

Inversech[Long(ch)]+fninverse(sous_chaine(ch,2,Long(ch)2))+ch[1]

Finsi

2) Fininverse
Applica on4

NousproposantdetrieruntableauTdenentiersdanslordredcroissantetenutilisantla
mthodeparslection.
1. Proposezuneanalyseauproblmeenutilisantunprocditratifpuisunprocdrcursif.
2. Dduisezlesalgorithmescorrespondants.
Solution
1) DefProcTriSelect(deb,Fin:entiervarT:tab)
2) PmaxFnMax(deb,fin,T)
3) SiPmax<>debalors

ProcPermut(T,deb,Pmax)

FinSi
4) Sideb+1<>finalors

Finsi

Proctriselect(deb+1,fin,T)

5) FinTriselect

56

ChapIILarcursivit

Applica on5
NousproposonsdevrifierlexistencedunentierkdansuntableauTcontenantnentiers,en
utilisantlatechniquedelarecherchedichotomique.
1. Proposezuneanalyseauproblmeenutilisantunprocditratifpuisunprocdrcursif.
2. Dduisezlesalgorithmescorrespondants.
Solution
0) DefFndichotomique(deb,fin,k:entier;T:tab):boolen
1) m(deb+fin)Div2
2) Sik=T[m]Alors

Sinon

DichotomiqueVrai

Si(k<T[m])et(deb<m)Alors

DichotomiqueFnDichotomique(deb,m1,k,T)

Sinon

Sik>T[m]et(m<fin)Alors

Sinon

Finsi

DichotomiqueFnDichotomique(m+1,fin,k,T)

Dichotomiquefaux

Finsi
Finsi
3) FinDichotomique
Applica on6
NousproposonsdechercherlePGCDdedeuxentierpositifsaetb.
1. Proposezuneanalyseauproblmeenutilisantunprocditratifpuisunprocdrcursif.
2. Dduisezlesalgorithmescorrespondants.

57

ChapIILarcursivit

Solution
0) DefFnPgcd(a,b:entier):entier
1) Sib=0alors

Sinon

Finsi

Pgcda

PgcdFnPgcd(b,amodb)

2) FinPgcd
Applica on7
Nousproposonsdevrifiersiunentiernpositifestpremierounon.
1. Proposezuneanalyseauproblmeenutilisantunprocditratifpuisunprocdrcursif.
2. Dduisezlesalgorithmescorrespondants.
Solution:
0) DefFnPremier(n,k:entier):boolene
1) Si(k<=nDiv2)Alors

Sinmodk=0Alors

Sinon

Finsi

PremierFaux

PremierfnPremier(n,k+1)

Sinon

PremierVrai

Finsi
2) FinPremier

58

ChapIILarcursivit

Srie N 6
ExerciceN1

Soitlalgorithmedelafonctionsuivante:
1) DbutdefFNinconnue(a,b:entier):entier
2) Sia=1Alors

Inconnueb
Sinon

Siamod2=1Alors

Inconnueb+inconnue(adiv2,b*2)

Sinon

Inconnueinconnue(adiv2,b*2)

Finsi
Finsi
3) Fininconnue
Questions:
Trouverinconnue(20,30)etinconnue(6,6)?
Quelestlerledecettefonction?

ExerciceN2:
SoitlalgorithmedelafonctionInconnuesuivant:
0) DbutfonctionInconnue(n:entier):chane
1) [i2;ch""]Rpter
Si(nmodi=0)Alors

Convch(i,ch1)

Chch+ch1+"."

NndivI
Sinon

II+1
Finsi
Jusquan=1
2) eace(ch,long(ch),1)
3) Inconnuech
4) finInconnue
Questions:
1/ Excutermanuellementlafonc onInconnuepourn=30etpourn=17.
2/ Donnerlerledecettefonction.
3/ Proposerunalgorithmercursifcettefonction.

ExerciceN3:

SoitlasuiteUdfiniepar:

U0=1

U1=2

Un=Un1+2*Un2

Ecrire lanalyse puis Lalgorithme dun module rcursif qui permet de calculer le nime
termedelasuiteU.

59

ChapIILarcursivit

ExerciceN4:
Soitlaprocduresuivante:
0) Dbutprocdureaffichage(i,n:entier)
1) Ecrire(i)
2) Si(i<n)alors
Rpter

Si(i=1)alors

Achage(i+1,n)

Finsi

ii+1

Ecrire(i)
Jusqua(i=n)
Finsi
3) Finaffichage
Questions:
1/ Quefaitcetteprocdureaveclappelsuivant:achage(1,4).
2/ Proposerunesolutionitrativequiraliselemmetraitement.

ExerciceN5:
Soitlalgorithmesuivant:
0) DbutFonc onextrac on(ch1:chaine):.
1) S""
2) Pouride1long(ch1)Faire
Sich1[i]dans["0".."9"]Alors

Ss+ch1[i]
Finsi

FinPour
3) FinExtraction

Questions
1/ Donner le type de rsultat de cette fonction ainsi que les rsultats pour les valeurs suivantes:
ch1="123ah5g",ch1="4ee".
2/ Quelestlerledecettefonction.
3/ Proposerunesolutionrcursivepourcettefonction(analyse+algorithme).

ExerciceN6:
Soitlalgorithmesuivant:
0) DbutprocdureQuoi(VarT:tab;n:entier)
1) Pouride1ndiv2faire
AuxT[i]
T[i]T[ni+1]
T[nI+1]aux
FinPour
2) FinQuoi

Questions:
1/ Excutermanuellementlalgorithmedemoduleprcdentetdonnerlastructuredetableau
aprscetournage.
2/ Quelestlerledecetteprocdure.
3/ Ecrireuneprocdurercursiveralisantlemmetraitement.

60

ChapIILarcursivit

ExerciceN7

OndfinielasuiteUpourtoutentiernatureln,

n1 par

Un=

EcrirelanalyseetlalgorithmedelafonctionUpermettantdecalculerlenmeterme
decettesuite.Prsenterdeuxsolutions:itrativeetrcursive.

ExerciceN8
LasuitedeSyracuseestdfiniepar:

U0=a

Un+1=

avecaestunen erdonne>0

siUnestpair

SiUnestimpair

1) Quelestlordredercurrencedecettesuite?expliquer.
2) CalculerU1,U2,etU3poura=2puispoura=5?
3) Ecrirelanalysedunmodulercursifquipermetdecalculerlenmetermedelasuitede
Syracuse.

61

ChapIILarcursivit

Srie N 7
Exercice N 1
SoitlalgorithmedelafonctionInconnusuivante:

0)DbutDefFNInconnue(n:entierlong):entier

1)S=[S0] Rpter

SS+(nMod10)

nnDiv10

Jusqua(n=0)

2)InconnueS

3)FinInconnue
Questions:
1. ExcutermanuellementlalgorithmedelafonctionInconnu,sionappellecette
fonctionavecleparamtreeffectifn=192837,endonnantlesvaleurssuccessivesdes
variablesSetn.
2. Endduirelerledecettefonction.
3. Ecrirelalgorithmedunefonctionrcursiveralisantlemmetraitement.

Exercice N 2

Mat est un type utilisateur reprsentant un tableau den ers de 20 lignes et de 20 colonnes. On
donnelalgorithmedelaprocdureinconnuesuivante:

0)DEFPROCInconnue(VARM:MAT;N,i,j:Entier)
1)Sii<=NAlors

Sij<=iAlors

AuxM[i,j]

M[i,j]M[j,i]

M[j,i]Aux

ProcInconnue(M,Ni,j+1)

Sinon

ProcInconnue(M,N,i+1,1)

Finsi
Finsi
2)FinInconnue

1.ExcutermanuellementlalgorithmedelaprocdureInconnueaveclesparamtreseec fssuivants:
N=3,i=1,j=1etM=
9 6 0

4 5 2

3 7 1

2.EndduirelerledelaprocdureInconnue.

62

ChapIILarcursivit

Srie N 8
Exercice N 1
Onappelleratotalgrammeunechanedontchacundesesmotscommenceetsetermine
parlammelettre.

Ecrireuneanalyseetunalgorithmedunmodulercursifintitultotalgrammequipermet
devrifiersiunechanedecaractresesttotalgramme
Exemple

La chane "ALLALA EMPRUNTE TEMPORAIREMENT DAOUD SES SOULIERS " est


totalgramme
NOTE

Onsupposequedeuxmotsconscutifssontsparsparunseulespace

Exercice N 2

Soitlalgorithmesuivant:
0) Fonctionscalaire(A,B:tab;n:entier):entier
1) P(A[n]*B[n])
2) Pourcden11faire(pas=1)

Pp+(A[c]*B[c])

Finpour
3) ScalaireP
4) Finscalaire

Travailsdemands:
1/Excuterlafonc onpourlesvaleurssuivantesetcomplterlatracedelasquence.
N=4
A
3
0
2

B
5
6
7

Tracedelasquence
C

7
0

2/Prciserlerledelafonction:

3/donnerlalgorithmercursifralisantlemmetraitement.

63

ChapIILarcursivit

Exercice N3
SoitTunvecteurdenentiersetfunefonctiondfiniedelafaonsuivante:

f(n,T)=T[n]+f(n1,T)pourtoutn0

f(0,T)=0

1.Donnerlatracedexcutiondelafonctionfpourlecassuivant:

T
5
7
6
1

1
2
3
4

2.Endduirelerledelafonctionf.
3.Donnerunalgorithmercursifdelafonctionf.
4.Donnersousformedunalgorithmelaversionitrativedelafonctionf.

Exercice N4
Soitlafonctionsuivante:
0) FonctionQuoi(n:entier):boolen
1) i1
2) Rpter

ii+1

Jusqu(nmodi=0)ou(i=ndiv2)
3) Quoi(nmodi<>0)
4) FinQuoi
Excutermanuellementlafonc onquoipourn=17etpourn=25
QuelleestlerledelafonctionQuoi?
Ecrireunefonctionrcursiveralisantlemmetraitement.
Exercice N 5
Soitlafonctionsuivante:

functionDeviner(CH:string;K:integer):integer;
var

I,P,C:integer;

PH:string;
begin

C:=0;

P:=1;

PH:='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';

forI:=length(CH)downto1do
begin


C:=C+(pos(CH[I],PH)1)*P;

P:=P*K;

end;

Deviner:=C;
end;

Questions:
1. Complterletableausuivant,parlesrsultatsdecettefonction,pourlesvaleurssuivantesdeCH
etK
CH=33etK=5
CH=147etK=10
CH=BACetK=16
C=.
C=. C=.
2. Quelestlerledecettefonction

64

ChapIILarcursivit

Exercice N 6
Soitlalgorithmesuivant:

1)Dbutfonc oninconnue(ch:chane):boolen

2)Trvrai

3)Ppos(,ch)

//unseulespace

4)Tantque(P<>0)et(Tr=vrai))faire

Si(ch[1]<>ch[P+1])alors

Trfaux

Sinon

Chsous_chaine(ch,P+1,long(ch)P)

Ppos(,ch)

//unseulespace

Finsi

5)InconnueTr

6)Fininconnue
Question:

Excuterlamainlafonctioninconnuepourchacunedeschanessuivantes:

Ch
Rsultatdelafonction
programmePascal
algorithme
analyseavecalgorithme

Exercice N 7

Ecrireunalgorithmedemodulercursifpermettantdevrifiersiunentierdonnest
mul plede5enu lisantlamthodededirence.

Exemple:

15estunmul plede5car

155=10

105=5

55=0

13nestpasmul plede5car

135

85=3

3<5

Exercice N8
Ecrireunprogrammemodulairequipermetde:
Saisirdeuxentierspositifsnetm.
Ecrireunprogrammecalculantlafonctiond'Ackermandfiniepar:

Ack(0,m)=m+1,

Ack(n,0)=Ack(n1,1)sinestnonnulet

Ack(n,m)=Ack(n1,Ack(n,m1))sinon.
Vousdevezutilisezunmodulercursif.
TraduireleprogrammeenPASCAL.

65

ChapIILarcursivit

Exercice N9
Unnombredorestcalculpar:

Ecrireunprogrammemodulairequipermetde:
Saisirunentierpositifn.
Calculeretafficherlenombredornbor(n)
Vousdevezutilisezunmodulercursif.
TraduireleprogrammeenPASCAL

Exercice N10

SoitlalgorithmedelafonctionInconnusuivante:
0)DbutFonc onInconnu(n:en erlong):en er
1)S=[S0] Repeter

SS+(nMo10)

nnDiv10

Jusqua(n=0)
2)InconnuS
3)FinInconnu

Questions:
1.ExcutermanuellementlalgorithmedelafonctionInconnu,sionappellecettefonctionavecle
paramtreeffectifn=192837,endonnantlesvaleurssuccessivesdesvariablesSetn.
2.Endduirelerledecettefonction.
3.Lalgorithmedecettefonctionestilrcurent?siouiquelestsonordre.?
4.Ecrirelalgorithmedunefonctionrcursiveralisantlemmetraitement.

Exercice N 11

Soitlaprocduresuivante:
1) Procdureinconnu(..)
2) Pouride4an1faire

T[i]T[i+1]
Finpour
3) Trouvefaux
4) P0
5) Pouride1anfaire

Touve(t[i]=x)

Sitrouvealors

pi

Finsi
Finpour
6) Fininconnue

66

ChapIILarcursivit

Questions:
a)Complterlesparamtresdecemodule
b)Excutermanuellementlalgorithmedelaprocduredanslesdeuxcassuivants:

n=6
x=1

n=6
x=2

etletableauTsuivant:
3 8 0 1 7 2

Exercice N 12
Soitlafonctionsuivante:
1) Fonctionghost(x,n:entier):
2) Si(n=1)alors

ghost(n=1)

Sinon

si(xmodn=0)alors

ghost(x<n1)

sinon

ghostghost(x,n1)

finSi

finsi
3) Finghost
Questions:

1)Quelleestletypedelafonction?

2)Excuterce efonc onpourx=7etn=6.Laisserunetracedelexcutionpaspas.

3)Quelleestlerledecettefonctionsilesparamtresdappelsontxetx1:ghost(x,x1)

Exercice N 13
Soitlalgorithmedelaprocdureinconnuesuivante:
0)DEFPROCinconnue(varch:chane)
1)Sich<>""Alors

Cch[long(ch)]

Eace(ch,long(ch),1)

Inconnue(c)

chc+ch
FinSi
2)Fininconnue
Questions:
a)Tournerlamaincetteprocdureaveclesappelssuivantsendonnantlatracedexcutiondechaque
appel:inconnue(''elle''),inconnue(''modem'').
b)Endduirelerledecetteprocdure?

Exercice N 14
Quefaitlafonctionsuivante?
DefFNinconnu(c:caractre;m:chane):boolen;
[Ppos(C,M)]
SiP0alors
InconnuNon(inconnu(c,sous_chaine(M,p+1,long(M)p)))

Sinon

Inconnuvrai
Finsi
Fininconnu

67

ChapIILarcursivit

EXERCICE N15

Soitlalgorithmesuivant:
0)FonctionInconnue1(X,Y:entier):entier
1)Tantque(X<>Y)Faire

SiX>YAlors

XXY

Sinon

YYX

FinSi
FinTantQue
2)InconnueX
3)FinInconnue1
Questions

1/Excutermanuellementcettefonctionettrouverlavaleurretournepour:

a.X=10etY=12

b.X=17etY=8

2/Quelestlerledecettefonction.

3/Transformercettefonctionenuneautrefonctionutilisantunprocdrcursif.

EXERCICE N16

Soitlalgorithmesuivant:
0)FonctionInconnue2(Ch:chane,C:caractre,N:entier):Boolen
1)Silong(ch)=1Alors

Sich[1]=CAlors

Inconnue2((N+1)MOD2=0)

Sinon

Inconnue2(NMOD2=0)

FinSi
Sinon

Sich[1]=CAlors

NN+1

FinSi
Inconnue2Inconnue2(Souschaine(ch,2,long(ch)1),C,N)
FinSi
1) FinInconnue2
Questions:
1/Excutermanuellementcettefonctionettrouverlavaleurretournepour:

a)ch="lentement", C="e" etN=0.

b)ch="Fonctionnement",C="n"
etN=0.
2/Quelestlerledecettefonction.
3/Transformercettefonctionenuneautrefonctionutilisantunprocditratif.

68

ChapIILarcursivit

Exercice N17

Soitlafonctionsuivante:
0)debutFonc oninconnu(n,b:en er):chaine
1)ch<""
2)TantQue(n<>0)Alors

convch(nmodb,r)

Si(Long(r)>1)Alors

Valeur(r,x,e)

r<Chr(x+55)

FinSi

ch<r+ch

n<nDivb
FinTantQue
3)inconnu<ch
4)FinFonc on

N.B:OndonnelecodeASCIIde"A"est65
Questions:

1Excuterlafonctionpourlesvaleurssuivantesdenetb

a)n=94etb=16

b)n=12etb=2

2Quelestlerledecettefonction.

3Proposerunesolutionrcursivepourcettefonction.

Exercice N18

Soitlalgorithmesuivant:
0)DEFFNInconnue(ch:chane;c:caractre):boolen
1)Siposition(c,ch)=0alors

Inconnuevrai
Sinon

Eace(ch,posi on(c,ch),1);

Inconnuenon(FNInconnue(ch,c))
FinSi
2)FinInconnue
Questions:

a)Excutermanuellementcettefonctionpour:

ch=''pascal''etc=''s''

ch=''affiche''etc=''f''

b)DonnerlerledelafonctionInconnue.

69

ChapIILarcursivit

Exercice N19

SoitlalgorithmedelafonctionInconnusuivante:
0)DEFFNInconnu(n:entierlong):entier
1)[S0]Rpter

SS+(nMod10)

NnDiv10

Jusqua(n=0)
2)InconnuS
3)FinInconnu
Questions:
1) ExcutermanuellementlalgorithmedelafonctionInconnu,sionappellecettefonction
avecleparamtreeec fn=192837,endonnantlesvaleurssuccessivesdesvariablesSet
n.
2) Endduirelerledecettefonction.
3) Ecrirelalgorithmedunefonctionrcursiveralisantlemmetraitement.

Exercice N20

SoitlalgorithmedelafonctionInconnusuivante:
0)DEFFNInconnu(n:entier):.
1)[i1]Rpter

ii+1

Jusqua(nmodi=0)ou(I=ndiv2)
2)Inconnu(nmodi<>0)
3)FinInconnu
Questions:
1) Queltypelafonctioninconnuepourratelleavoiretpourquoi?
2) Dterminer:inconnue(9),inconnue(13)
3) Endduirelerledelafonctioninconnue.
4) Ecrirelalgorithmedunefonctionrcursiveralisantlemmetraitement

Exercice N21

Ecrireunefonc onrcursiveperme antdevrifiersi2chanesch1etch2sontelles


anagrammesounon.

NB:ch1etch2sontanagrammessilssecomposentdesmmesle res.

Exemple:ch1=chienetch2=niche.

Exercice N22

EcrireunefonctionrcursivepermettantderetournerlePGCDdedeuxentierspositifsen
utilisantleprincipedediffrence.

70

Les algorithmes de tris

71

ChapIIILesalgorithmesdetris

Les algorithmes de tris


I.

Introduction
Rappel:Letribulle

a) Algorithme itratif
0) Def Proc TriBulle ( Var T : Tab ; n : Entier )
1) Rpter
Ok Faux
Pour i de 1 ( n 1 ) Faire
Si T [ i ] > T [ i + 1 ] Alors
Aux T [ i ]
T[i]T[i+1]
T [ i + 1 ] Aux
Finsi
Jusqu' Non ( ok )
2) Fin TriBulle
b) Algorithme rcursif
Proceduretribulle(vart:tab;n,I:integer);
var

aux:integer;
begin

if(n>1)then

begin

if(I<n)then

begin

if(t[I]>t[I+1])then

begin

aux:=t[I];

t[I]:=t[I+1];

t[I+1]:=aux;

end;

tribulle(t,n,I+1)

end

else

Tribulle(t,n1,1);

end;
end;

72

ChapIIILesalgorithmesdetris

II.

Triparinsertion:

Principe:

SoitletableauTsuivant:
44
1

8
2

5
3

11
4

7
5

15
6

2
7

44

44

11

44

11

44

11

15

44

11

15

44

a)AlgorithmeitratifTriparInsertion
version1
0)DfProcTriInser on
1)Pouride2nFaire

SiT[i]<T[i1]Alors

TempT[i]

ji1

Tantque(j>0)et(T[j]<Temp)Faire

T[j+1]T[j]

jj1

FinTantQue

T[j+1]Temp

FinSi

FinPour
2)FinTriInser on

73

ChapIIILesalgorithmesdetris

version2
0)DfProcTriInser on
1)Pouride2nFaire

SiT[i]<T[i1]Alors

TempT[i]

procDcaler(T,i,p)

T[p+1]Temp

FinSi
FinPour
2)FinTriInser on
Algorithmeprocduredcaler
0)DfProcdcaler(VarT:Tab;deb:entier;Varfin:entier)
1)findeb1,TempT[deb]

Tantque(fin>0)et(T[fin]>Temp)faire

T[fin+1]T[fin]

finfin1

FinTantQue
2)FinDcaler
b)AlgorithmercursifTriinsertion
Procedureinsert_rec(vart:tab;n:integer);
var

I,j,tmp:integer;
begin
if(n>1)then
begin
insert_rec(t,n1);
if(t[n]<t[n1])then
begin
tmp:=t[n];
j:=n1;
while((j>0)and(tmp<t[j]))do
begin
t[j+1]:=t[j];
j:=j1;
end;
t[j+1]:=tmp;
end;
end;
end;

74

ChapIIILesalgorithmesdetris

III.TriShell
Principe:

LetriShellestuneamliorationdutriparinsertion.Aulieudefaireunerotationdetous
leslments,nousferonsunerotationparpasdepcequipermetdaffinerletridutableauetde
fairemoinsdedplacementdlments.

Nouscommenonsdoncparunpasassezlevetnouslediminuonsaufuretmesure
jusqu' arriver un pas de 1. Ceci permet dliminer les plus grands dsordres pour abrger le
travailauxtapessuivantes.Lepasestdiminulaidedunesuite,maisilfautconstruirecette
suitedemanirecequelesvaleursnesoientpasmultiplesentreellessinonnousallonstraiter
deslmentsetpasdautres.Shellproposelasuitedincrmentsvrifiant:

P 0 =0

P n =3*P n1 +1

Activit:
TrierletableausuivantdanslordrecroissantselonlamthodedeShell
5

30

42

22

10

15

40

12

28

14

10

11

12

13

14

15

SelonlasuitePn=3*Pn+1
Ppeuttre=1,4,13,40endduirequelesvaleursdepassont:13,4et1.

75

ChapIIILesalgorithmesdetris
Letableauinitialest:
530024222941015409122814

Pourlepasp=13

530024222941015409122814

AlgorithmeTriShell(itratif)
514024222941015409122830

0)DfProcTrishell(VarT:tab;n:entier)
Pourlepasp=4

1)p0
514024222941015409122830

TantQue(p<n)Faire

FinTantque

514024222941015409122830
514024222941015409122830
514044222921015409122830
514041022924215409122830

P3*p+1

2)Tantque(p<>1)Faire

PpDiv3

Pouride(p+1)nFaire

TempT[i]

jip

TantQue(j>0)et(T[j]>Temp)Faire

T[j+p]T[j]

jjp

FinTantQue

514091015941222302422840

T[j+p]Temp

501491015941222302422840

FinPour

950141015941222302422840

FinTantque

950101415941222302422840

3)FinTriShell

950101415941222302422840

514041015924222409122830
514041015924222409122830
514091015944222402122830
514091015941222402422830
514091015941222402422830
514091015941222302422840

Pourlepasp=1

950910141541222302422840
954091014151222302422840
954091012141522302422840
954091012141522302422840
954091012141522302422840
954209101214152230422840
954209101214152230422840

76

ChapIIILesalgorithmesdetris
954209101214152228304240
954209101214152228304042

Algorithmeitratif
0)DfProcTrishell(VarT:tab;n:entier)
1)p0

TantQue(p<n)Faire

FinTantque

P3*p+1

2)Tantque(p<>1)Faire

PpDiv3

Pouride(p+1)nFaire

TempT[i]

jip

TantQue(j>0)et(T[j]>Temp)Faire

T[j+p]T[j]

jjp

FinTantQue

T[j+p]Temp

FinPour

FinTantque
3)FinTriShell

AlgorithmeShellrcursif
procedureshell_rec(varT:tab;n,I,p:integer);
var
j,tmp:integer;
begin
if(p>=1)then
begin
if(I<=n)then
begin
tmp:=t[I];
j:=I;
while((j>p)and(tmp<t[jp]))do
begin
t[j]:=t[jp];
j:=jp;
end;
77

ChapIIILesalgorithmesdetris

t[j]:=tmp;
shell_rec(t,n,I+1,p);
end
else
begin
p:=pdiv3;
I:=p+1;
shell_rec(t,n,I,p);
end;
end;
end;
IV.Triparfusion

Principe:
IlsagitduntrisuivantleparadigmeDiviserpourrgner.leprincipeestlesuivant:
Nousdivisonsletableautrierendeuxsoustableaux.
Noustrionschacundentreeux.
Nousfusionnonslesdeuxtableauxobtenuspourreconstituerletableautri.
Exemple:
Soitlesdeuxtableauxsuivants:

T1

22

40

12

28

35

39

T2

12

22

28

35

39

40

T
Application:
Ecrireunprogrammequipermetde:
RemplirdeuxtableautrisT1etT2denetmen ersrespec vementavec(netmsont
deuxen erscomprisentre[2..50])
FusionnerlesdeuxtableauxT1etT2dansuntableauTquisera r.
Afficherletableaursultat

78

ChapIIILesalgorithmesdetris

Solution:
1. Analysedeprogrammeprincipal

T.D.O

Nom:Trifusion

Objet

Type/Nature

Rle

Rsultat=Procaffiche(T,n+m)

Tab

Tableaufusionn

T=[]Procfusion(T1,T2,n,m,T)

T1

Tab

Tableaudenentiers

T2=[]ProcRemplir(T1,n)

T2

Tab

Tableaudementiers

T3=[]ProcRemplir(T2,m)

Entier

FinTrifusion

Entier

T.D.N.T

Remplir

Procedure

Fusion

Procedure

affiche

Procedure

Type
Tab=tableau[1..100]den er

2. Analysedelaprocdureremplir
DefprocRemplir(varV:tab;vark:entier)
Rsultat=V,n
V=[]V[1]=Donne(Entrerle1erelement:)

Pouride2kfaire

Rpter

V[i]=Donne(entrerV[,i,]:)

Jusqu'(V[i]>V[i1])

FinPour
k=[]Rpter

k=Donne(Entrerlenombredlment:)

Jusqu'kdans[2..100]
FinRemplir

T.D.O

Objet

Type/Nature
Entire

Compteur

79

Rle

ChapIIILesalgorithmesdetris

3. Analysedelaprocdurefusion
DefProcfusion(T1,T2:Tab;n,m:Entier;VarT:Tab)
Rsultat=T
T=[i1;j1,k0]

Rpter

Kk+1

SiT1[i]<T2[j]Alors

T[k]T1[i]

ii+1

Sinon

T[k]T2[j]

jj+1

Finsi

Jusqu'(i>n)ou(j>m)

Sii<=nAlors

PourrdeinFaire
T.D.O

Kk+1

T[k]T1[r]
Objet

Finpour

FinSi
I

Sij<=mAlors

Pourrdejmfaire
J

Kk+1
K

T[k]T2[r]

Finpour

FinSi

Type/Nature

Rle

Entire

Compteur

Entire

Compteur

Entire

compteur

Type/Nature

Rle

Finfusion

4. Analyseprocdureaffiche

DfprocAffiche(V:Tab;k:Entier)
Rsultat=aff
A=[]Pouride1kfaire

FinPour

FinAffiche

Ecrire(V[i])

T.D.O
Objet

Entire

80

Compteur

ChapIIILesalgorithmesdetris

VClassement
Exercice:

EcrirelanalysepuislalgorithmedunprogrammequipermetderempliruntableauTparn
enregistrementquidfinienlves(nometmoyenne)avec2<=n<=20puischercherlerangde
chaquelveselonleurmoyenne.
1. Analyseprogrammeprincipal
Nom:classement
Rsultat=ProcAffiche(T_El,n)
T_El=[]

Procsaisie(T_El,n)

ProcRechercheRang(T_El,n)

FinClassement

T.D.O
Objet

T.D.N.T
Type
Fiche=Enregistrement
Nom:Chaine
Moy:rel
Rang:entier
Finfiche
Tab=Tableau[1..20]defiche

Type/Nature

T_El

Tab

Tableaudenregistrement

Entire

Nombredeslves

Saisir

Procedure

Ranger

Procedure

Affiche

Procedure

2. Analysedelaprocduresaisir
DfProcsaisie(VarT_El:tab;Varn:Entier)
Rsultat=T_El,n
T_El=[]Pouride1nfaire

El.Nom=Donne(Entrerunnom:)

Rpter

El.moy=Donne(Entrerlamoyenne:)

Jusqu'(El.moy>=0)et(El.moy<=20)

T_El[i]El

FinPour

Finsaisir
3. Analysedelaprocdurerang
DfProcrechercherang(varT_El:tab;n:entier)
T.D.O
Rsultat=T_El
T_El=[]Pouride1nfaire
Objet

RT_El[i].moy

Nb1
I

Pourjde1nfaire

SiT_El[j].moy>RAlors
Nb
81

Rle

Type/Nature

Rle

Entier

Compteur

Entier

Lerang

ChapIIILesalgorithmesdetris

Nbnb+1

FinSi

FinPour

T_El[i].rangR

FinPour
Finrang

4. Analyseprocdureaffiche
DefProcaffiche(VarT_El:Tab;n:entier)
Rsultat=aff
A=[]Pouride1nfaire

EcT_El[i]

Ecrire(Nomdellve:,Ec.Nom)

Ecrire(Lamoyenne:,Ec.Moy)

Ecrire(lerang:,Ec.rang)

FinPour
Finaffiche

T.D.O

Objet
Type/Nature

I
Entier

82

Rle
Compteur

ChapIIILesalgorithmesdetris

Les tris : itratifs et rcursifs

A- Le tri bulle:

Solutioniterative:

procedurebulle_itr(vart:tab;n:integer);
var

echange:boolean;

i,aux:integer;
begin

repeat

echange:=false;

forI:=1ton1do

if(t[I]>t[I+1])then

begin

aux:=t[I];

t[I]:=t[I+1];

t[I+1]:=aux;

echange:=true;

end;

until(echange=false);
end;

Solutionrecursive

procedurebulle_rec(vart:tab;n,I:integer);
var

aux:integer;
begin

if(n>1)then

begin

if(I<n)then

begin
if(t[I]>t[I+1])then

begin
aux:=t[I];
t[I]:=t[I+1];

t[I+1]:=aux;
end;

bulle_rec(t,n,I+1)

end

else

bulle_rec(t,n1,1);

end;
end;

83

ChapIIILesalgorithmesdetris

B- Le tri slection

Solutionitrative:

proceduresel_itr(vart:tab;n:integer);
var

aux,i,j,min:integer;
begin
forI:=1ton1do
begin
min:=i;
forj:=I+1tondo
if(t[j]<t[min])then
min:=j;
if(min<>i)then
begin
aux:=t[i];
t[i]:=t[min];
t[min]:=aux;
end;
end;
end;

Solutionrcursive:

proceduresel_rec(vart:tab;n,deb:integer);
var
i,min,aux:integer;
begin
if(deb<n)then
begin
{recherchedeminimumdanslapartiedet(deb>n)}
min:=deb;
fori:=deb+1tondo
if(t[i]<t[min])then
min:=i;
{permutert[min]ett[deb]}
if(min<>deb)then
begin
aux:=t[deb];
t[deb]:=t[min];
t[min]:=aux;
end;
sel_rec(t,n,deb+1);
end;
end;

84

ChapIIILesalgorithmesdetris

C- Tri insertion

Solutioniterative:

procedureinsert_itr(vart:tab;n:integer);
var

I,j,tmp:integer;
begin
forI:=2tondo
begin
if(t[I]<t[I1])then
begin
tmp:=t[I];
j:=I1;
while((j>0)and(tmp<t[j]))do
begin
t[j+1]:=t[j];
j:=j1;
end;
t[j+1]:=tmp;
end;
end;
end;

Solutionrecursive:

procedureinsert_rec(vart:tab;n:integer);
var

I,j,tmp:integer;
begin
if(n>1)then
begin
insert_rec(t,n1);
if(t[n]<t[n1])then
begin
tmp:=t[n];
j:=n1;
while((j>0)and(tmp<t[j]))do
begin
t[j+1]:=t[j];
j:=j1;
end;
t[j+1]:=tmp;
end;
end;
end;

85

ChapIIILesalgorithmesdetris

D- Tri Shell

Solutioniterative:

procedureshell_itr(vart:tab;n:integer);
var
i,j,p,tmp:integer;
begin
p:=1;
while(p<n)do
p:=3*p+1;
while(p>1)do
begin
p:=pdiv3;
fori:=p+1tondo
begin
tmp:=t[i];
j:=i;
while((j>p)and(tmp<t[jp]))do
begin
t[j]:=t[jp];
j:=jp;
end;
t[j]:=tmp;
end;
end;
end;

Solutionrecursive:

procedureshell_rec(vart:tab;n,I,p:integer);
var
j,tmp:integer;
begin
if(p>=1)then
begin
if(i<=n)then
begin
tmp:=t[i];
j:=i;;
while((j>p)and(tmp<t[jp]))do
begin
t[j]:=t[jp];
j:=jp;
end;
t[j]:=tmp;
shell_rec(t,n,i+1,p);
end
else
86

ChapIIILesalgorithmesdetris

begin
p:=pdiv3;
i:=p+1;
shell_rec(t,n,I,p);
end;
end;
end;

87

Les algorithmes rcurrents

88

ChapIVLesalgorithmesrcurrents

Les algorithmes rcurrents


I. Introduction
Ac vit1
Ecrirelanalysedunprogrammequipermetdecalculerlenmetermedessuitessuivantes:
1

U 0 =1
U n =2*U n1 +2
U 0 =1
U 1 =1
U n =3*U n1 U n2

pourn>0

pourn>1

Solution
1analyse
DefFnsuite(n:entier):entier
Rsultat=suite

T.D.O

Suite=[U01]pouride1nfaire

Objets

U2*U0+2

Entier Compteur

U0U

U0

Entier Premierterme

Finpour

T/N

Rle

Finsuite
2analyse
DefFnsuite(n:entier):entier
Rsultat=suite

T.D.O

Suite=[U00,U11]

Pouride2nfaire

U3*U1U0

Finpour

T/N

Rle

Entier

Compteur

U0U1

U0

Entier Premierterme

U1U

U1

entier Deuximeterme

Objets

Finsuite
89

ChapIVLesalgorithmesrcurrents

Constatation:

Onconstatedanslesdeuxanalysesquepourcalculeruntermeonabesoinsoitleterme
prcdentoulesdeuxtermesprcdents,onappelsestraitementstraitementrcurentdordre1
dans1)etdordre2dans2)
Retenons:

Unalgorithmercurrentdordrepestunalgorithmedonnantunrsultatdpendantdesp
rsultatsprcdents.
II. Calculdesomme
Ac vit2

Nousvoulonscalculerlasommedeslmentsdunematricecarreden ersdordren(4
n20).
Questions:
1) Dterminezsicetraitementestrcurrent.Danslaffirmativedonnezsonordre.
2) Proposezuneanalyse,puisdduisezlalgorithmedelafonctionquicalcullasommedes
lmentsdelamatricecarr.
Solution
DefFnsommeMat(M:Mat;n:entier):entier
Rsultat=sommeMat

T.D.O

sommeMat=[]sommeMatS

S=[S0] pouride1nFaire

Pourjde1nFaire

FinPour

FinPour

Objets

SS+M[i,j]

T/N

Rle

Entier Compteur

Entier compteur

FinSommeMat
III. Algorithmercurrentsurleschaines
Ac vit3Suitethuemorse[SuitedechaineDecaractres]

Ecrirelanalyseetlalgorithmedunprogrammequipermetdedterminerlenmetermede
lasuitedfinitpar

U0peuttresoit0soit1

Pourdfinirlesautrestermesremplacerachaquefois0par01et1par10.
90

ChapIVLesalgorithmesrcurrents

U0=0
U1=01
U2=0110
U3=01101001
Etc
1Analysedeprogrammeprincipal
Nom:suite_thueMorse

Rsultat=Ecrire(LasuitedeThueMorsepartirde,A,est:,FNThueMorse(N,A))
N,A=[]ProcSaisie(N,A)
FinThueMorse

T.D.O

Rle
Objets
T/N
A
caractre 0ou1
N
entier
Nmeterme

2AnalysedelanalysedelafonctionThueMorse
DefFnThueMorse(N:entier;A:caractre):chaine
Rsultat=ThueMorse
ThueMorse=[]ThueMorseCh
Ch=[ChA]Pouride1NFaire

j1

Rpter

SiCh[j]=0Alors

Insre(1,Ch,j+1)

Sinon

Insre(0,Ch,j+1)

FinSi
T.D.O

Llong(Ch)
Objets

jj+2

Ch
L

jusqu'j>L
J

FinPour
I
FinThueMorse

91

T/N
chaine
entier
entier
entier

Rle
Resultat
Longueur
Compteur
compteur

ChapIVLesalgorithmesrcurrents

IV. TriangledePascal
Ac vit4
NousvoulonsafficherlesnpremireslignedutriangledePascal(2n100).
NousrappelonsqueletriangledePascalestdfiniepar:

1
1
1
1
1

1
2
3
4

1
3
6

1
4

Questions:
1. Estcequecetraitementestrcurrent?Danslaffirmativedonnezsonrang?
2. Proposezuneanalyseauproblmeenutilisantunprocditratifpuisunprocd
rcursif?
ASolutionitrative
1Analyseprogrammeprincipal
Nom:Triangle_Pascal
Rsultat=ProcAffiche(M,N)
M=[]Procremplir(M,N)

T.D.O

N=[]Procsaisie(N)

Objets

FinTriangle_Pascal

Mat

Matrice

T.D.N.T

Entier

Nbreelements

Remplir Procdure Remplirtriangledepascal

Type

Mat=Tableau[1..100,1..100]den er

92

T/N

Rle

Saisie

Procdure Saisirn

Affiche

Procdure Affichelamatrice

ChapIVLesalgorithmesrcurrents

2AnalyseprocdureAffiche
DefProcAffiche(M:Mat;N:entier)
Rsultat=aff
Aff=[]Pouride1Nfaire

Pourjde1NFaire

FinPour

FinPour

Ecrire(M[i,j])

T.D.O
Objets

FinAffiche

T/N

Entier Compteur

Entier Compteur

Rle

3Analyseprocduresaisie
DfProcsaisie(VarN:entier)
Rsultat=N
N=[]Rpter

N=Donne(Entrerlenombredeslments:)

Jusqu'Ndans[2..100]

Finsaisie
4Analyseprocdureremplir
DfProcRemplir(VarM:Mat;N:entier)
Rsultat=M
M=[M[1,1]1,M[2,1]1,M[2,2]1]

Pouride3Nfaire

M[i,1]1

M[i,i]1
T.D.O

Pourjde2(i1)Faire

M[i,j]M[i1,j1]+M[i1,j]

FinPour
Objets T/N
Rle

FinPour
I
Entier Compteur
FinRemplir

j
Entier compteur

93

ChapIVLesalgorithmesrcurrents

BSolutionrcursive
1Analysedelaprocdureremplir
DefProcRemplir(VarM:Mat;N:entier)
Rsultat=M
M=[]Pouride1nFaire

Pourjde1NFaire

FinPour

FinPour

T.D.O

M[i,j]FnVal_Triangle(i,j)

Objets

T/N

Rle

Entier
I
Compteur
J
Entier
compteur
Val_Triangle Fonction

FinRemplir

2AnalysedelafonctionVal_triangle

DefFNVal_Triangle(x,y:entier):entier
Rsultat=Val_Triangle
Val_Triangle=[]

Si(x=1)ou(x=y)Alors

Val_Triangle1

Sinon

Val_TriangleFnVal_Triangle(x1,y1)+FnVal_Triangle(x1,y1)

FinSi
FinVal_Triangle
V. LasuitedeFibonacci
Ac vit5
LasuitedeFibonacciestdfinitpar

U1=1

U2=1

Un=Un1+Un2
Ecrireuneanalysepuisunalgorithmequipermetdecalculerlenmetermedelasuite?

aProposezunesolutionitrative

bProposezunesolutionrcursive

cutilisezuntableaupourcalculerlenmetermedelasuite

cDonnezlordredercurrencedelasuite

94

ChapIVLesalgorithmesrcurrents

1. Solutionitrative
Analysedelafonctionfibo
DfFnfibo(n:entier):entier
Rsultat=fibo
Fibo=[]FiboU
U=[U11,U21]

Pouride3nFaire

UU1+U2

U1U2

U2U

Finpour
Finfibo
2. Solutionrcursive
Analysedelafonctionfibo

T.D.O
Objets

DfFnfibo(n:entier):entier
Rsultat=fibo
Fibo=[]Si(n=1)ou(n=2)Alors

fibo1

Sinon

FiboFNFibo(n1)+FNFibo(n2)

Finsi
FinFibo
VI. LenombredOr:
Ac vit6

T/N

Rle

Entier Compteur

U1

Entier 1erterme

U2

Entier 2meterme

Entier Nmeterme

SoitUestlasuitedefibonaccietVestdfinipar

U1=1
U2=2
Un=Un1+Un2
Vn=Un/Un1

pourn>2
pourtoutn>1

1) EcrireunprogrammePascalquipermetdechercheretdafficherlesnpremierstermesde
lasuiteU(u lisezlasolu onrcursive).Remplirla2mecolonnedutableauaudessous.
2) ModifierleprogrammepourcalculeretafficherlesnpremierstermedelasuiteV.remplir
la3mecolonnedutableauaudessous.
3) Queremarquezvous?
4) EcrirelanalyseetlalgorithmepermettantdechercherletermeetlerangdelasuiteV
vrifiantVnVn1<e(avece=105).

95

ChapIVLesalgorithmesrcurrents

N Fibo(n) Vn=Fibo(n)/fibo(n1)
1
1

2
1
1
3
2

4
5
1.5
5
8
1.666
6
13
1.600
7
21
1.625
8
34
1.61538
9
55
1.61904
10
89
1.61764
11
144
1.61818
12
233
1.617977
13
377
1.61805
14
610
1.6802
15
987
1.6803
16 1597
1.6803
17 2584
1.6803
18 4181
1.6803
19 6765
1.6803

programnombreor;
useswincrt;
var
i,n:integer;
proceduresaisie(varn:integer);
begin
repeat
write('Entrerunentiern:');
readln(n);
un ln>0;
end;
functionfibo(n:integer):integer;
begin
if(n=1)or(n=0)then
begin
fibo:=1;
end
else
begin
fibo:=fibo(n1)+fibo(n2);
end;
end;
begin
saisie(n);
fori:=1tondo
begin
writeln(i,'',fibo(i),'',fibo(i)/fibo(i1));
end;
end.

Rponse:
1)et2)voirletableauaudessus.
3)OnremarquequelesvaleursdelasuiteVdeviennentstableapar rn=13(1.618).Cenombre
estappelNombredor.
Dfinition

Lasuite(Vn)dfiniesurN*
parVn=Fibo(n+1)/Fibo(n)
Sembleconvergervers(phi)

Appelnombredor,dontunevaleurapprocheest1.618.
Autrementdit,lenombredorestlasolutionpositivedelquationx2x1=0quiestlenombre

96

ChapIVLesalgorithmesrcurrents

4)AnalysedelaprocdurenombreOr

DfprocNombreOr(epsilon:rel,varV:rel;n:entier)

Rsultat=V,N

V,N=[N2,V1]

Rpter

NN+1

V0V

VFibo(n)/Fibo(n1)

Jusqu'abs(VV0)<epsilon

FinnombreOr
T.D.O
Objets

T/N

Rle

Entier Nombre

V0

Entier Premierterme

97

ChapIVLesalgorithmesrcurrents

Srie N 8
Exercice N 1

SoitlasuitedeROBINSONDfiniepar:

Ui=a (aestunchiffre)

Ui+1=Nombredappari ondechaquechiredansUi

Chaque terme de la suite se construit ensuite en comptant le nombre d'apparitions des


direntschiresde90(danscetordre)dansletermeprcdent.Siunchiren'apparatpas,il
n'estpasprisencompte.
Exemple:
SiU0=0alors

U1=10
0serpte1foisdansU0

U2=1110 1serpte1foisdansU1,0serpte1foisdansU1

U3=3110 1serpte3foiset0serpte1foisdansU2

U4=132110

U5=13123110

U6=23124110

U7=1413223110

U8=1423224110

U9=2413323110...
Questions:
1)Quelestlordredercurrencedece esuite
2)Ecrireunalgorithmemodulaireperme antdedtermineretdacherlenmetermedecette
suite(2<N<20)

Exercice N 2 :

Soitlasuitesuivantedfiniepar:
U 0 =1

(- 2) n
U n =
2*U n1

1) Cestquoiunalgorithmercurrent?
2) DonnerlavaleurdeU 1 etU 2
3) Quelestlordredercurrencedecettesuite?
4) EcrirelalgorithmedunmodulepermettantdedterminerpourunentiernletermeU n .

98

ChapIVLesalgorithmesrcurrents

Exercice N 3 :

SoitlasuiteUdfiniepar:

U0=1

U1=2

Un=Un1+2*Un2

EcrirelanalysepuisLalgorithmedunmodulercursifquipermetdecalculer
lenimetermedelasuiteU.
Exercice N 4 :
LasuitedeSyracuseestdfiniepar:

U0=a

avecaestunen erdonne>0

Un+1=

siUnestpair

SiUnestimpair

4) Quel est lordre de rcurrence de cette suite ? expliquer.


5) Calculer U1, U2, et U3 pour a=2 puis pour a=5 ?
6) Ecrire lanalyse dun module rcursif qui permet de calculer le nme terme de la suite de
Syracuse.

Exercice N 5 :

On se propose de remplir une matrice M sous la forme dune pyramide dentier de la


maniresuivante
Exemple:n=5

232

34543

4567654

567898765
Ecrire un programme qui permet de remplir et dafficher une matrice M carr dordre n ( avec
2<=n<=10)

99

ChapIVLesalgorithmesrcurrents

Exercice N 6 :
On appelle masse dun nombre, la somme du rang dans lalphabet franais de chaque lettre
contenu dans ce nombre. Une lettre a le mme rang quelle soit crit en majuscule ou en
minuscule.

UN21+14=35
Onappellenombreautocode,silasommeainsiforme=lenombreluimme.
Exemple:

DEUXCENTCINQUANTEHUIT

54+42+105+58=258

Ecrire un programme qui permet de saisir n chaine (reprsentent des nombres) et ses
quivalentnumrique(selonlexemple),vrifisilenombreestautocodeounon.Enregistrerle
rsultatdansunfichiertexteselonlimagesuivante.

DEUXCENTCINQUANTEHUITE258Massenombreautocode/nonautocode.

Exercice N 7 :
Enmathmatique,unnombreautomorpheestunnombreentierdontlecarrsetermineparun
mmechiffreoulesmmeschiffresqueceluiouceuxdunombreluimme.
Exemple:

52=25

762=5776

8906252=793212890625
Ecrireunprogrammequipermetdevrifiersiunentierdonnestautomorpheounon.

100

Les algorithmes darithmtique

101

ChapVLesalgorithmesdarithmtique

Les algorithmes darithmtique


I. Prambule:
Larithmtiqueestunebranchedesmathmatiquesquitudielesrelationsentrelesnombres.
Cestaussiltudedesnombresetdesoprationslmentairesentreeux.
II. CalculeduPGCD(solutionrcursive):
Activit:

IlyadeuxmthodespourcalculerlePGCDdedeuxnombres.Illamthodedeladivisionet
lamthodedeladiffrence.
Exemple:
Mthodedeladivision
PGCD(22,6)
=PGCD(6,22mod6)=PGCD(6,4)=PGCD(4,6mod4)

=PGCD(4,2)=PGCD(2,4mod2)=PGCD(2,0)=2

Mthodedeladiffrence:
PGCD(22,6)
=PGCD(226,6)=PGCD(16,6)=PGCD(166,6)=PGCD(10,6)

=PGCD(106,6)=PGCD(4,6)PGCD(4,64)=PGCD(4,2)

=PGCD(42,2)=PGCD(2,2)=2

Ecrireuneanalyse,puisdduisezunalgorithmedunefonctionpermettantdecalculerlePGCDde
deuxentierspositifsnonnulsaetb,enutilisantlamthodedeladiffrence.
Solution:
aSolutionitrative:
AnalysedelafonctionPGCD
DfFnPGCD(a,b:entier):entier
Rsultat=PGCD
PGCD=[] PGCDa
a=[]Tantque(a<>b)faire

Sia>bAlors

aab

Sinon

bba

Finsi

Fintantque
FinPGCD

102

ChapVLesalgorithmesdarithmtique

bSolutionrcursive:
DfFnPGCD(a,b:entier):entier
Rsultat=PGCD
PGCD=[] Sia=bAlors

PGCDa

Sinon

Sia>bAlors

PGCDFnPGCD(ab,b)

Sinon

PGCDFNPGCD(a,ba)

FinSi

FinSi
FinPGCD

III. CalculAp
netCp
n
Dfinition:
n!
Arrangementdeplmentsparmin:Ap
n=(np)!=n(n1)(n2).....(np+1)
Cestlenombredepermutantsordonnspossiblesdeplmentsparmin
Exempleavec{a,b,c}:A(2,3)=6
{a,b},{b,a},{a,c},{c,a},{b,c},{c,b}
Ap
n
n!
p
Combinaisondeplmentsparmin:Cn= =

p!
p!(np)!
Cestlenombredepermutationssansordrepossiblesdeplmentsparmin
Exempleavec{a,b,c}:

C(2,3)=3

{a,b},{a,c},{b,c}
a Proposezuneanalysepuisdduisezlesalgorithmescorrespondantsauproblme
permettantdechercherpuisdafficherlarrangementetlacombinaisondedeuxentiers
donnsnetp,avec(1<=p<=n).
b Proposezunesolutionrcursivesachantque
Cp
n=Cp
n+Cp
n

103

ChapVLesalgorithmesdarithmtique

Corrig:

Calculetaffichagedelarrangementdedeuxentierspositifs

1Analyseduprogrammeprincipal
Nom:arrangement
Rsultat=Ecrire(larrangementde,n,et,p,=,FnArrange(n,p))
n,p=[]ProcSaisie(n,p)
Finarrangement
T.D.O

Objet
n
p
Saisie
arrange

Type/Nature
Entier
Entier
Procdure
Fonction

Rle

Donn
Donn
Permetdesaisiraetb
Permetdecalculerlarrangement

2analysedelaprocduresaisie

DfProcsaisie(varn,p:entier)
Rsultat=n,p
n,p=[]Rpter

n=Donne(entrern:)

Jusqu'(n0)
p=[]Rpter

p=Donne(entrerp:)

Jusqu'(p0)et(pn)
Finsaisie
3analysedelafonctionArrange
DfFnArrang(n,p:Entier):Entier

T.D.O

Rsultat=Arrange

Objet Type/Nature

Arrange=[]ArrangeA
A=[]Pouriden(np+1)Faire

FinPour

A
i

AA*i

104

Entier
entier

Rle
Arrangement
compteur

ChapVLesalgorithmesdarithmtique

Calculdelacombinaison:
Version1:
1analyseduprogrammeprincipal
Nom=combinaison
Rsultat=Ecrire(Lacombinaisondedeuxentiers,n,et,p,est=,FnComb(n,p))
n,p=[]ProcSaisie(n,p)

T.D.O
Fincombinaison

Objet Type/Nature
Rle

N
P
i
Saisie
comb

2AnalysedelafonctionComb
DfFnComb(n,p:Entier):Entier

Entier
Entier
Entier
Procedure
Procdure

Nombre
Nombre
compteur
Lecturenetp
combinaison

Rsultat=Comb
Comb=[]CombFnFact(n)/(FnFact(p)*FNFact(np))
FinComb

T.D.O

Objet Type/Nature

Fact

Fonction

Rle
Calcullafactorielle

Version2
AnalysedelafonctionComb
DfFnComb(n,p:Entier):Entier
Rsultat=Comb
Comb=[]

Si(p=0)ou(p=n)Alors

Sinon

Finsi

Comb1

CombComb(n1,p)+Comb(n1,p1)

FinComb

105

ChapVLesalgorithmesdarithmtique

IV.

Quelquesrglesdedivisibilit:

Danscettepartieduchapitre,lesproblmesneserontpasrsolusdirectementavecloperateur
arithmtiqueMod.Nousallons,parcontre,analyserquelquesproblmesrpondantauxrglesde
divisibilitappropries.
N.B:Cesrglessontgnralementapplicablespourlesgrandsnombres.
1) Divisibilitpar3
Dfinition:
Unen erestdivisiblepar3,silasommedeschiresquilecomposentestdivisiblepar3.
Applica on1:
Ecrireunprogrammequipermetdevrifiersiunen ernestdivisiblepar3ounon.
1analyseduprogrammeprincipal
Nom:applica on1
Rsultat=aff
Aff=[]
SiFndiv3(s)Alors

Ecrire(lentier,s,estdivisiblepar3)

Sinon

Ecrire(len er,s,nestpasdivisiblepar3)

Finsi

S=[]Procsaisie(s)
T.D.O
Finapplica on1
Objet Type/Nature
Rle

s
Chaine
Nombre

Div3
Fonction Vrifiersiunnombreestdivisiblepar3ounon

Saisie Procdure Lecturedes

2analyseprocduresaisie
DefProcsaisie(vars:chaine)
Rsultat=s
S=[]Rpter

S=donne(entrerunnombre:)

Jusqu'(FnVrif(s))
Finsaisie

T.D.O
Objet Type/Nature
verif

106

fonction

Rle
Vrifiersilenombreest
formquepardeschiffres

ChapVLesalgorithmesdarithmtique

3Analysedelafonc onDiv3
DfFnVrif(s:chaine):boolen
Rsultat=Vrif
Vrif=[]Vrifb
b=[bVrai]Tantque(b)et(ilong(s))faire

Si(Non(S[i]dans[0..9])Alors

Finsi

FinTantque

bFaux

FinVrif

T.D.O
Objet Type/Nature
B
I

Boolen
Entier

Rle
Vrai/faux
compteur

4Analysedelafonc onDiv3
DfFnDiv3(s:string):boolen
Rsultat=Div3
Div3=[]Div3(rmod3=0)
r=[r0] Pouride1long(s)faire

Val(s[i],n,e)

rr+n

Finpour
2) Divisibilitpar4
Dfinition:

Unen erestdivisiblepar4,silenombrecomposdesdeuxdernierschiresestdivisible
par4.
Application2:
Ecrireuneanalysequipermetdevrifiersiunen erdonnestdivisiblepar4ounon.

Exemple:
4120estdivisiblepar4

4121nestpasdivisiblepar4

107

ChapVLesalgorithmesdarithmtique

1Analyseduprogrammeprincipal
Nom:divisibilite4
Rsultat=aff
Aff=[]
SiFndiv4(s)Alors

Ecrire(len er,s,estdivisiblepar4)

Sinon

Ecrire(len er,s,nestpasdivisiblepar4)

Finsi
S=[]Procsaisie(s)
Findivisibilit
2Analyseprocduresaisie
DfProcsaisie(vars:chaine)
Rsultat=s
S=[]Rpter

S=donne(entrerunnombre:)

Jusqu'(FnVrif(s))

T.D.O
Objet Type/Nature
verif

fonction

Finsaisie

Rle
Vrifiersilenombreest
formquepardeschiffres

3Analysedelafonc onDiv4
DfFnDiv4(s:string):boolen

Rsultat=Div4

T.D.O

Div3=[]Div4b

Objet Type/Nature

b=[]val(sous_chaine(s,long(s)1,2),r,e)

b
r
e

b(rmod4=0)

Findiv4

Boolen
Entier
Entier

Rle
Divisibleounon
Nombre
erreur

3) Divisibilitpar5
Dfinition:
Unen erestdivisiblepar5,sisonchiredesunitsestegal0ou5.
Exemple: 6287 nestpasdivisiblepar5

6570 estdivisiblepar5

4325 estdivisiblepar5

108

ChapVLesalgorithmesdarithmtique

Applica on3:
Ecrireuneanalysepuisunalgorithmedunprogrammequipermetdevrifiersiunentier
estdivisiblepar5ounonu lisantlesrglesdedivisibilit.
1Analyseduprogrammeprincipal
Nom:divisibilite5
Rsultat=aff
Aff=[]
SiFndiv5(s)Alors

Ecrire(len er,s,estdivisiblepar5)

Sinon

Ecrire(len er,s,nestpasdivisiblepar5)

Finsi

S=[]Procsaisie(s)
Findivisibilit
2Analyseprocduresaisie
DfProcsaisie(vars:chaine)
Rsultat=s
S=[] Rpter

S=donne(entrerunnombre:)

Jusqu'(FnVrif(s))

Finsaisie
3Analysedelafonc onDiv5
DfFnDiv5(s:string):boolen
Rsultat=Div5
Div5=[]Div5(s[long(s)]=0ous[long(s)]=5)
Findiv4
4)

Autrerglededivisibilit
Unen erestdivisiblepar2,sisonchiredesunitsestdivisiblepar2.
Unen erestdivisiblepar9,silasommedeseschiresestdivisiblepar9.
Unen erestdivisiblepar25,silenombrecomposdesdeuxdernierschiffresestdivisible
par25.

109

ChapVLesalgorithmesdarithmtique

Applica on4

Soitn=571uoudsignelechiredesunitsdanslcrituredcimalden.crivezun
programmepermettantdechercheretdafficherlesvaleursrespectivesdeuetdenpour
lesquelleslen ernseradivisiblepar4etpar3.
1Analyseduprogrammeprincipal
Nom:applica on4
Rsultat=ProcAffiche(n)
N=[]n571u
Finapplica on4
2Analyseprocdureaffiche
DfProcaffiche(n:chaine)
Rsultat=aff
Aff=[s13]Pourude09faire

Si((s+u)mod3=0)et((10+u)mod4=0)Alors

m5710+u

Ecrire(pournellepeuttre,m,pouru=,u)

Finsi

Pour

Finaffiche

T.D.O

Objet Type/Nature

Rle

Entier

Unchiffre

Entier

Lasommedeschiffres

entier

Rsultat

110

ChapVLesalgorithmesdarithmtique

VConversionentrebasesdenumration:
Rappelsurlesbasesdenumration:

Base2oubinaire={0,1}

Base8ouoctal={0,1,2,3,4,5,6,7}

Base10oudcimal{0,1,2,3,4,5,6,7,8,9}

Base16ouhexadcimal={0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}

Conversionentrelesbases:

B8

B10

B2

B16

1) Conversiondebase10unebaseb:
Exemple:

Convertirlesnombresdcimauxsesquivalentslabase2,8et16:
(74) 10 =() 2
=(1001010) 2
=(112) 8
(74) 10 =() 8
(740) 10 =() 16
=(2E4) 16

74 2
0 37 2
1 18 2

0 9 2

1 4 2

0 2 2

0 1 2

1 0

(74) 10 =(1001010) 2

74
2

740 16

4 46 16
14 2 16

2 0

8
9 8
1 1 8
1 0

(74) 10 =(112) 8

111

(740) 10 =(2(14)4) 16 =(2E4) 16

ChapVLesalgorithmesdarithmtique

Analysedelafonc onconvb10_b
DfFnconvb10_b(n,b:entier):chaine
Rsultat=convb10_b
Convb10_b=[]convb10_bRch
Rch=[Rch]Rpter

Rnmodb

Nndivb

Str(R,Ch)

SiR9Alors

RChCh+Rch

Sinon

RchChr(55+R)+Rch

Finsi

Jusqu'(N=0)
T.D.O
Finconvb10_b

Objet Type/Nature

Rle

Entier

Restedeladivision

Ch

Chaine

Conversionduresteaunechaine

Rch

chaine

Rsultatsousformeunechaine

2) Conversiondunebaseblabase10:
Convertirlesnombressuivantslabase10:
(1001010) 2 =() 10
(112) 8 =() 10
(2E4) 16 =() 10

(1001010) 2 =() 10

( 1 0 0 1 0 1 0 ) 2 =1*26+0*25+0*24+1*23+0*22+1*21+0*20
6 5 4 3 2 1 0
=(74) 10
(112) 8 =() 10

( 1 1 2 ) 8 =1*82+1*81+1*80
2 1 0
=(74) 10

(2E4) 16 =() 10

( 2 E 4 ) 16 =2*162+E*161+4*160
2 1 0
=(740) 10

112

ChapVLesalgorithmesdarithmtique

Analysedelafonctionconvb_b10
DfFnconvb_b10(ch:chaine;b:entier):entier
Rsultat=convb_b10
Convb_b10=[]convb_b10R
R=[R0]Pouride1long(ch)Faire

Sich[i]dans[0..9]Alors

Val(ch[i],k,e)

Sinon

KOrd(ch[i])55

Finsi

RR+k*FnPuis(b,long(ch)i)

FinPour
Finconvb_b10

AnalysedelafonctionPuis
DfFnPuis(a,p:entier):entier
Rsultat=Puis
Puis=[]
Sip=0Alors

Puis1

Sinon

Puisa*FnPuis(a,p1)

Finsi
FinPuis

113

T.D.O
Objet Type/Nature

Rle

Entier

Resultat

entier

Unchiffre

entier

Compteur

entier

erreur

ChapVLesalgorithmesdarithmtique

3) Conversiondebase2unebaseb8oub16:
Exemples:

Convertirlesnombresbinairescesquivalentsenoctaletenhexadcimal.
- (10110) 2 =() 8
- (101100) 2 =() 16

(10110) 2 =() 8

(10110)2 =(010110)2

=(26
) 8

2=0*22+1*21+0*20
6=1*22+1*21+0*20

(101100) 2 =() 16

(101100) 2
=(0010 1100)2

=(2
C) 16

2=0*23+0*22+1*21+0*20

Analysedelafonctionconvb2_b8b16

C=12=1*23+1*22+0*21+0*20

Analysedelafonc onconb2_b8b16
DfFnconvb2_b8b16(ch:chaine,b:entier):chaine
Rsultat=Convb2_b8b16
Convb2_b8b16=[]convb2_b8b16Rch
Rch=[Rch]

Tantlong(ch)modp<>0)Faire

Ch0+Ch

Fintantque

TantqueCh<>Faire

Rstsous_chaine(Ch,1,p)

Eace(ch,1,p)

R0

Pouride1long(Rst)faire

Val(Rst[i],k,e)

RR+k*FnPuis(2,long(Rst)i)

Finpour

114

ChapVLesalgorithmesdarithmtique

SiR9Alors

Str(R,st)

Sinon

Stchr(55+R)

Finsi

RchRch+st

Fintant
P=[]Sib=8Alors

P3

Sinon

P4

FinSi
Finconvb2_b8b16

T.D.O
Objet Type/Nature
R
k
i
e
Rch
P
Rst
St

4) Conversiondebaseb8oubaseb16unebaseb2:

Exemple:
Convertirlesnombressuivantsenbinaire.
- (215)8=()2
- (73C)16=()2

(215)8=()2

(215) 8
=(2
1

=(010
001

=(10001101) 2

(73C)16=()2

(73C) 16
=(7
3

=(0111
0011

=(11100111100) 2

) 8

101) 2

) 16

1100) 2

115

Entier

entier
entier
entier
chaine
entier
chaine
chaine

Rle
Unchiffre
Unchiffre
Compteur
Erreur
Rsultat
Nombredechiffres
Partiedunombre
Partiedunombre

ChapVLesalgorithmesdarithmtique

Analysedelafonctionconvb8b16_b2
DefFnconvb8b16_b2(ch:chaine,b:entier):chaine
Rsultat=convb8b16_b2
Convb8b16_b2=[]convb8b16_b2Rch
Rch=[Rch

Sib=8Alors

P3

Sinon

P4

FinSi]

Pouride1long(Ch)faire

SiCh[i]dans[0..9]Alors

Val(Ch[i],k,e)

Sinon

Kord(ch[i])55

Finsi

Rst

Rpeter

Rkmod2

Kkdiv2

Str(r,st)

Rstst+Rst

Jusqu'k=0

Tantquelong(Rst)modp<>0Faire

Rst0+Rst

FinTantque

RchRch+Rst

FinPour

TantqueRch=0Faire

Eace(Rch,1,1)

Fintantque

Finconvb8b16_b2

116

Objet Type/Nature

Rle

Entier

Unchiffre

entier

Unchiffre

entier

Compteur

entier

Erreur

Rch

chaine

Rsultat

entier

Nombredechiffres

St

chaine

rst

chaine

T.D.O

ChapVLesalgorithmesdarithmtique

5) Conversiondebaseb8oubaseb16etinversement:
Ilnexistepasunemthodeaappliqupourfairelaconversiondelabase8labase16ou
inversementdoncondoitpasserobligatoirementparsoitlabase10,soitlabase2.
Application:
Ecrireunprogrammequipermetdeconver runen erNdebaseb1asonquivalantdanslabase
b2.

117

ChapVLesalgorithmesdarithmtique

Exercice N 1

Srie N 9

Onpeutdterminersiunnombreestdivisiblepar9parlamthodesuivante.Onpartdupremier
chiffreoudezrosicechiffreest9.Onajouteledeuximechire(s'ilyenaun),silersultatestsuprieur
ougal9,onluisoustrait9sinononnefaitrien.Onrpteensuitelammeoprationpourleschiffres
suivants.Lenombreestdivisiblepar9sietseulementsilersultatfinalestnul.

EcrireunprogrammemodulaireenTurboPascalquiindiquesilenombreentierpositifestdivisible
par 9 en me ant en uvre la mthode dcrite cidessus. La fonction recevra le nombre entier sous la
formed'unechanedecaractrescontenantsoncrituredcimale.
Exemple.

Pour le nombre 78192 (pass en paramtre la fonc on sous la forme de la chane "78192") la
fonctioneffectueradonclesoprationssuivantes:

7estdirentde9

7+8=15,15estsuprieurougal9onluisoustrait9pourobtenir6

6+1=7,7eststrictementinfrieur9

7+9=16,16estsuprieurougal9onluisoustrait9pourobtenir7

7+2=9,9estsuprieurougal9onluisoustrait9pourobtenir0

Lersultatestnuldonc78192estdivisiblepar9(78192=9x8688).

Exercice N 2

LenombreNestdivisiblepar13sietseulementsilenombredesdizainesplus4*lechire
desunitsestdivisiblepar13.
Exemple:

637estdivisiblepar13car

63+4*7=91

9+4*1=13

13estdivisiblepar13.

Dunemanireplusgnraleilsuffitderpterloprationcidessusjusqu'obtenir
commersultatfinal13,26ou39.Cequiprouveraquelenombreconsidraudpartestdivisible
par13.
Soitlenombre224185.Ona:

22418+4*5=22438

2243+4*8=2275

227+4*5=247

24+4*7=52

5+4*2=13
Nousobtenons13donc224185estdivisiblepar13.
Onappliquantceprincipe,EcrireunprogrammemodulaireenTurboPascalquivrifieestce
quunen erlongnaturelNestdivisiblepar13ounon.

118

ChapVLesalgorithmesdarithmtique

Exercice N 3

Unen erestdivisiblepar11siladirenceentrelasommedeschiresderangpairetla
sommedeschiresderangimpairesoitdivisiblepar11
Exemple

752nestpasdivisiblepar11car(7+2)5=4nestpasdivisiblepar11

57816estdivisiblepar11car(6+8+5)(1+7)=11divisiblepar11.
EcrireunprogrammeenTurboPascalquipermetdevrifiersiunnombreNdonnestdivisible
par11ounon.

N.B:leprogrammedoitconteniraumoinsdeuxmodules

Exercice N 4
Soitnunentierpositif.Ondsiretestersinestdivisiblepar7ounonenappliquantleprincipesuivant:

Multiplierlechiredegauchepar3etlajouterauchiffresuivant.
Remplacerlesdeuxpremierschiffresdelentiernparlersultattrouv.
Rpterlesactionsprcdentesjusqu'cequelersultatsoitunchiffre.
Silersultatobtenuest7alorslentiernestdivisiblepar7sinonnnelestpas.

Exemple:
N=364 3*3+6=15
ndevient
154

ndevient
84

1*3+5=8

8*3+4=28
ndevient
28

2*3+8=14
ndevient
14

ndevient
7donclen er364estdivisiblepar7.

1*3+4=7
Dcomposerleproblmeenmodules,analyserleprogrammeprincipalainsiquelesmodulesutilisset
dduirelesalgorithmes.

Exercice N5

Poursavoirsiunnombreestdivisiblepar137,ilsutdesparercenombrepartranchede
4 chires en partant des units et dinsrer alterna vement des et des + entre les tranches
partirdudbutdunombreencommenantparun,Oneffectueloprationainsicriteetsile
rsultatestdivisiblepar137,alorslenombreconsidrestdivisiblepar137.
Exemple

Soitlenombre2510792736157732104
Onlesparepartranchedequatrechiffrespartirdesunits

251|0792|7361|5773|2104
Onintercalealternativementdes+etdespartirdudbutencommenantpar

2510792+73615773+2104
Oneffectueloprationainsicrite

2510792+73615773+2104=3151
Onvrifieaismentque3151estdivisiblepar137donclenombre2510792736157732104
Estdivisiblepar137
1)Ecrireunalgorithmedemodulequitestesiunnombredonnestdivisiblepar137

Note:ajouterdeszrogauchedenombrenechangepaslenombre

119

ChapVLesalgorithmesdarithmtique

Exercice N 6

UnnombredeKyneaestunen erdelaforme:4n+2n+11.Lespremiersnombresde
Kyneasont:7,23,79,287,1087,4223,16639,66047,263167,1050623,4198399,16785407,
LareprsentationbinairedunimenombredeKyneaestun1,suivide(n1)zrosconscu fs,
suivide(n+1)unsconscu fs.
Exemples:7est111enbinaire,23est10111,79est1001111,etc.
EcrireunprogrammePascalquipermetde:
CreretremplirunfichierintitulKynea.datparlesN(5<N<20)premiersnombresdeKynea
endcimaleetenbinaireenutilisantlareprsentationdcritecidessus.
Afficherlecontenudecefichier.

Exercice N 7

SoientU n etV n deuxsuitesdfiniespar:

U n+1 =(U n +V n )/2


V n+1 =

AvecU 0 =1etV 0 =1/

EtsoitW n lasuitedfiniepar:W n =

,onmontreque

EnutilisantlasuiteW n Ecrirelalgorithmedunmodulequipermetdedterminerunevaleurapproche
de 104prs.
NB: il sagit de calculer chaque fois deux termes conscutifs de W n jusqu' ce que leur diffrence soit
inferieur104 .

Exercice N 8
Ecrireunprogrammequipermetde:

RemplirunfichierNombre.datparNentiersalatoirescomprisentre15et900,avecnunentier
donntelleque3N50.
A partir du fichier Nombre.dat remplir un deuxime fichier Conversion.dat dans le quel
mettrelenombredcimaletsesconversionsenbinaire,enoctal,etenhexadcimal.
A partir du fichier Conversion.dat mettre dans un fichier texte Lettre.txt tous les nombres
hexadcimalquicomporteaumoinsunelettre(nombrehexadcimaletnombredelettredansle
nombresparparunespace).
Afficherlecontenudestroisfichiers
Dcomposezleproblmeenmodules.Analysezlesmodulesetdduisezlesalgorithmes.

120

ChapVLesalgorithmesdarithmtique

Exercice N 9 (

Bacpra que21Mai2008)

Unentiernaturelcritdanslabase10estditrondsi,danssonquivlentbinaire,ontrouveautant
de1quede0.
Exemple:lenombre611estrondcar611=(1001100011)2etilyaautantde1quede0dansce ecriture
enbinaire.

Ondisposedunfichierintitulnaturels.datcomposdunesuitedenombresentiersnaturelscrits
danslabase10.Onseproposederemplirpar rdecefichierdeuxautresfichiersintitulsnom_rond.dat
et rond.dat comportant respectivement les nombres non ronds et les nombres ronds contenus dans le
premierfichiernaturels.dat.
Question:

Ecrire un programme qui cre et remplit le fichier naturels.dat par n entiers inferieurs 32000
(10<n<100).
Ensuite,illitdecefichierlesnombresdcimaux,afficheetplacelesnombresrondsdanslefichierrond.dat
etplacelesautressanslesafficherdanslefichiernon_rond.dat.

Exercice N 10
Ecrireunmodulercursifquipermetdemettrezroladiagonaleprincipaled'unematricecarreden*n
entiers.
Exemple:Soitlamatricesuivantepourn=3:
3 5 1
4 2 8
12 9 7
Apresexcutiondumodule,lecontenudelamatricedevient:
0
4
12

5
0
9

1
8
0

Exercice N 11

Unematricemagique,cestunematricecarrededimensionimpairesilessommesde
chaqueligne,chaquecolonneetchaquediagonalesonttousgaux.
Exemple:

4
9
2 =15
3
5
7 =15
8
1
6 =15
=15 =15 =15 =15
Mestunematricemagique
NousproposonsdcrireunprogrammequipermetderemplirunematricecarreparNentiers
(avecNimpaire,compriseentre3et9)etdevrifiersilamatriceestmagique

121

ChapVLesalgorithmesdarithmtique

Exercice N 12

On se propose de remplir alatoirement une matrice de n lignes et m colonnes par des entiers
comprisentre0et1,puisconver renhexadcimallesnombresbinairesformspar rdechaqueligneet
mettrelersultatdelaconversiondansunfichiertextenommhex.txtetenregistrsouslaracineC:
Enfinafficherlecontenudufichier.
Exemple:

M:

Lecontenudufichierhexa.txt:

1011enbinaire=Benhexa

0110enbinaire=6enhexa

Travaildemand:

EcrireunprogrammeenTurboPascalquipermetderpondrecettetache.

N.B:leprogrammedoitconteniraumoinsdeuxmodules

Exercice N 13

La matrice identit de taille n est une matrice carre dont les valeurs des cases de la
premirediagonalesontgales1alorsquecellessetrouvantdanslesautrescasessontnulles.

Ecrire un programme modulaire en Turbo Pascal permettant de vrifier si une matrice


carreMdetaillenestunematriceidentit.OnsupposequenestsaisieetqueMestrempliepar
des0etdes1.
Exemple:

Soitn=5etM=
0 0 0 0 1
0 0 0 1 0
0 0 1 0 0
0 1 0 0 0
1 0 0 0 0

Mestunematriceiden tdetaille5.

122

ChapVLesalgorithmesdarithmtique

Exercice N 14
Soitlafonctioninconnuesuivante:
Functioninconnue(n:integer):string;
Var
Ch:string;
Begin
Ch:=;
Whilen<>0do
Begin
Str(nmod5,aux);
Ch:=aux+ch;
N:=ndiv5;
End;
Inconnue:=ch;
End;

Questions:
1. Excutermanuellementcettefonctionsurlesvaleursn=78etn=25.
2. Quelestlerledecettefonction.

Exercice N 15
On appelle nombre de Keith un nombre K de n chiffres ayant la proprit suivante : en
partantdesnombrescomposschacund'undesnchiffresdeK,oncomposeunesortedesuiteen
calculantlasommedesnderniersnombresdelasuitepourdterminerlesuivant.Sicettesuite
fournitunmomentlenombreK,cenombreestditnombredeKeith.
Exemple:K=197
1+9+7=17;9+7+17=33;7+17+33=57;17+33+57=107;33+57+107=197;57+107+197=361.
Onob entalorslasuite:1,9,7,17,33,57,107,197,361danslaquellesetrouvelenombre197,
donc197estunnombredeKeith.
Ecrire un programme Pascal qui permet de dterminer et dafficher tous les nombres de Keith dans
lintervalle[10..200000].

Exercice N 16
Soit M une matrice carre de dimension n remplie par des caractres alphabtiques majuscules. On se
proposedecrerlefichier"Zone.Dat"parleszonesquilibrsquipeuventexisterdanslamatriceM.Pour
ralisercetravail,onvasuivrelestapessuivantes:
1. Remplir dune manire alatoire la matrice M, sachant que n est un entier non premier donn
comprisentre6et20
2. OnfixedlepluspetitdiviseurdenafindediviserlamatriceMencarrdedimensiond*d(avec
d>=2)
3. Remplirlefichier"Zone.dat"parleszonesquilibresdelamatriceMsachantquunezoneestdite
quilibresilenombredevoyellesetrouvantdanscettezoneestsuprieurougaled.Unezone
dufichierestcaractriseparlescoordonnes(ligne,colonne)dela1recasedelazonequilibre
(enhautgauche)etdunombredevoyellessetrouvantdanscettezone

123

ChapVLesalgorithmesdarithmtique

Exemple:Sin=9

Lepluspetitdiviseurdenestd=3
Leszonesquilibressont:
Zone1:Ligne1Colonne1nombredevoyelleest4
Zone2:Ligne4Colonne4nombredevoyellesest3
Zone3:Ligne7Colonne1nombredevoyelleest4
Zone4:Ligne7Colonne7nombredevoyelleest7
Travaildemand:
1. Analyserleproblmeenledcomposantenmodules
2. Analyserchacundesmodulesenvisagsprcdemment.

124

ChapVLesalgorithmesdarithmtique

Exercice N 17 ( bac pratique 27 mai 2010 de 14 h )

Soitunfichierenregistrer souslenom nb_base.dat danslequelonvaenregistrern chainesde


caractres.Chaquechaineestformede5caractresaumaximum.Chacundecescaractresestsoitun
chiffre,soitunelettremajusculedelintervalleA..F.
Pourchaquechainedufichiernb_base.dat,onseproposederaliserlestchessuivantes:
- Dterminerlapluspetitebaseblaquelle,peutappartenirlenombremreprsentparlachaine
decaractres.
- Dterminerlquivalentdcimalddunombrem.
- Rangerdansunelignedunfichiertextenommnombre.txt.lavaleurdcimalecorrespondante,
delafaonsuivante:(m)b=(d)10.
Exemple:

Silecontenudufichiernb_base.datestlesuivant:

FF

1B5

325

Lecontenudufichiernombre.txtsera:

(FF)16=(255)10

(1B5)12=(28)10

(325)6=(125)10

Remarque:

Lapluspetitbaselaquelleappartientlavaleur1B5estlabase12.Eneffet,leplusgrand
chiffredecenombreestBquicorrespondlavaleurdcimale11.
Decefait,lapluspetitebasede1B5est11+1=12
Travaildemand:

EcrireunprogrammePascaletlenregistrersouslenomconversion.pasquipermetde:
Saisirunentiernavec2n10.
Enregistrer dans un fichier nomm nb_base.dat. n chaines de caractres rpondant aux
conditionsprcdemmentcites.
Rempliretafficherlefichiernombre.txt.

125

ChapVLesalgorithmesdarithmtique

Correction de lexercice N 1
1. Analyseduprogrammeprincipal
Nom:Ex1
Rsultat=aff
Aff=[]SiFnDiv9(ch)Alors

Ecrire(Ch,estdivisiblepar9)

Sinon

Ecrire(Ch,nestpasdivisiblepar9)

Finsi
Ch=[]Rpter

Ch=Donne(entrerunnombredcimal)

Jusqu'FnVrif(ch)
Finex1

T.D.O

O
T/N
R

Ch
chaine
Nombre

Div9
fonction Retournevraisilenombreestdivisiblepar9

verif
fonction Vrifiersilelachaineestformequepardeschiffres

2. AnalysedelafonctionVrif
DfFnVrif(ch:chaine):boolen
Rsultat=Vrif
Vrif=[]VrifB
B=[bVrai,i1]Tantque(B)et(iLong(ch))Faire

SiNon(Ch[i]dans[0..9])Alors

BFaux

finSi

ii+1

finTantque
T.D.O
finVrif

O
T/N
R

I
Entier
Compteur

b
boolen

3. Analysedelafonc onDiv9
DfFnDiv9(Ch:chaine):boolen
Rsultat=Div9
T.D.O
Div9=[S0]Pouride1Long(ch)Faire

Val(Ch[i],k,e)
O
T/N
R

SS+k
I
Entier
Compteur

SiS9Alors
K
Entier
Chiffre

SS9
S
entier
somme

Finsi

FinPour
FinDiv9

126

ChapVLesalgorithmesdarithmtique

Correction de lexercice N 2

1. Analyseduprogrammeprincipal
Nom:Ex2
Rsultat=aff
Aff=[]SiFnDiv13(N)Alors

Ecrire(N,estdivisiblepar13)

Sinon

Ecrire(N,nestpasdivisiblepar13)

Finsi
N=[]Rpter

N=Donne(entrerunnombredcimal)

Jusqu'(N0)
FinEx2

T.D.O

O
T/N
R

N
EntierLong
Nombre

Div13
fonction
Retournevraisilenombreestdivisiblepar13

2. Analysedelafonc
onDiv13
DfFnDiv13(N:entierLong):boolen
Rsultat=Div13
Div13=[] SiNdans[13,26,39]Alors

Div13Vrai

Sinon

Div13Faux

FinSi
N=[]TantqueN>39Faire

NNdiv10+4*Nmod10

FinTantque
finDiv13

127

ChapVLesalgorithmesdarithmtique

Correction de lexercice N 3

1. Analyseduprogrammeprincipal
Nom:Ex3
Rsultat=aff
A=[]SiFnDiv11(N)Alors

Ecrire(N,estdivisiblepar11)

Sinon

Ecrire(N,nestpasdivisiblepar11)

Finsi
N=[]Rpter

N=Donne(entrerunnombredcimal)

Jusqu'(N0)
Finex2

T.D.O

O
T/N
R

N
EntierLong
Nombre

Div11
fonction
Retournevraisilenombreestdivisiblepar11

2. Analysedelafonc onDiv11
DfFnDiv11(N:EntierLong):boolen
Rsultat=Div11
Div11=[ConvCh(N,Ch),sp0,si0]

Pouride1Long(Ch)Faire

Val(ch[i],k,e)

Siimod2=0Alors

spsp+k

Sinon

sisi+k

Finsi

FinPour
FinDiv11
T.D.O

O
i
K
Sp
Si
Ch

T/N
Entier
Entier
Entier
Entier
chaine

R
Compteur
Chiffre
Sommedeschiffresderangpair
Sommedeschiffresderangimpair
nombre

128

ChapVLesalgorithmesdarithmtique

Correction de lexercice N 8
1. Analyseduprogrammeprincipal
Nom:Ex8
Rsultat=aff
Aff=[]
ProcafficheFn(fn)

Procaffichefc(fc)

Procafficheft(ft)
Fn,Fc=[]ProcCreation(Fn,Fc)

ProcRemplir(Fn,n)
Procconversion(Fn,Fc)
Ft=[]ProcRemplirft(Fc,ft)
N=[]ProcSaisie(n)
T.D.O
Finex8

T.D.N.T
Objet
Type/Nature
rle

Conv=Enregistrement
Fn
Nombre
Fichierdentier
Nd:entier
Fc
F_conv
Ficherdeenregistrement
Nb:chaine
ft
texte
Fichertexte
No:chaine
N
Entier
Nh:chaine
Saisie
Procedure
Finconv
Creation
Procdure
Nombre=Fichierdentier
Remplir
Procdure
F_conv=fichierdeconv

Conversion
Procdure

afficheFn
Procdure

afficheFC
procdure

2. Analyseprocdurecration
DfprocCration(varFn:nombre;varFc:F_conv)
Rsultat=Fn,Fc
Fn=[]associer(Fn,C:\bac2013\Nombre.dat)
Rcrer(fn)
Fc=[]associer(Fc,C:\bac2013\conversion.dat)
Rcrer(fc)
Ft=[]associer(Ft,C:\bac2013\lettre.txt)
Rcrer(ft)
FinCration

3. Analysedelaprocduresaisie
DfProcsaisie(varn:entier)
Rsultat=n
N=[]Rpter

N=Donne(Entrerunentier:)

Jusqu'Ndans[3..50]
FinSaisie

129

ChapVLesalgorithmesdarithmtique

4. Analysedelaprocdureremplir
DfProcRemplir(varFn:nombre;n:entier)
Rsultat=Fn
Fn=[Ouvrir(Fn)]Pouride1nFaire

K15+Alea(886)
T.D.O

Ecrire(Fn,k)

FinPour
O
T/N
R

Fermer(Fn)
I
Entier

FinRemplir
k
Entier

5. Analysedelaprocdureconversion
DfProcConversion(varFn:nombre;varFc:F_conv)
Rsultat=Fc
Fc=[ouvrir(Fn),ouvrir(Fc)]

TantqueNon(Fin_Fichier(Fn))Faire

Lire(Fn,k)

AveceFaire

Ndk

NbFnConvb10_b(k,2)

NoFnconvb10_b(k,8)

NhFnconvb10_b(k,16)

FinAvec

Ecrire(Fc,e)

FinTantque

Fermer(Fn)

Fermer(Fc)
T.D.O
FinConversion

O
T/N
R

e
Conv
Enregistrementquicontientnd,nb,no,nh

k
Entier
Nombredufichier

Convb10_b Fonction Fonctionquiretournelesconversionsaunebaseb

130

ChapVLesalgorithmesdarithmtique

6. AnalysedelaprocdureConvb10_b
DfFnConvb10_b(k,b:entier):chaine
Rsultat=convb10_b
Convb10_b=[Ch] Rpter

Rkmodb

Kkdivb

SiR>9Alors

RstCHR(R+55)

Sinon

Str(R,Rst)

Finsi

ChRst+Ch
T.D.O

Jusqu'(k=0)

FinConvb10_b
O

Rst

Ch

7. AnalysedelaprocdureAfficheFn

DfProcAfficheFn(varFn:Nombre)
Rsultat=aff
Aff=[Ouvrir(Fn)] TantqueNon(Fin_Fichier(Fn))Faire

Lire(Fn,k)

Ecrire(k)
T.D.O

FinTantque

Fermer(Fn)
O
T/N
FinAfficheFn
k
Entier

8. AnalysedelaprocdureAfficheFc

DfProcAfficheFc(varFc:F_conv)
Rsultat=Fc
Fc=[ouvrir(Fc)] TantqueNon(Fin_Fichier(Fc))Faire

Lire(Fc,e)

AveceFaire

Ecrire(Nd)

Ecrire(Nb)

Ecrire(No)

Ecrire(Nh)

FinAvec
T.D.O

FinTantque

Fermer(fc)
O
T/N
FinAfficheFc

e
conv

131

T/N
Entier
Chaine
Chaine

R
Reste
Reste
Rsultat

R
nombre

R
Enregistrementdelaconversion

ChapVLesalgorithmesdarithmtique

9. AnalysedelaprocdureRemplirft
DfProcRemplirFt(varFc:F_conv;varFt:texte)
Rsultat=ft
Ft=[ouvrir(Fc),Ajouter(Ft)]

TantqueNon(Fin_Fichier(Fc))Faire

Lire(Fc,e)

AveceFaire

KFnNbL(Nh)

Sik<>0Alors

ConvCh(k,ch)

ChNh++ch T.D.O

Ecrire_nl(Ft,ch)
O
T/N
R

FinSi

Finavec
K
Entier
nombre

FinTantque
e
Conv
enregistrement

Fermer(Fc)
ch
Chaine contientnhetnbrede

Fermer(ft)

lettres
FinRemplirft
NbL
fonction retournelenombredes
10. AnalysedelafonctionNbL
lettres
DfFnNbL(st:chaine):nombre

Rsultat=NbL
NbL=[]NbLnb
T.D.O
Nb=[nb0]
Pouride1Long(st)Faire

Sist[i]dans[A..F]Alors
O
T/N
R

Nbnb+1

FinSi
k
Entier
nombre

FinPour
i
Entier
compteur
FinNbL
nb
entier
compteur

11. Analysedelaprocdureafficheft(Varft:texte)
DfProcafficheft(varft:texte)
Rsultat=aff
Aff=[Ouvrir(Ft)] TantqueNon(Fin_Ficher(Ft))faire

Lire_nl(ft,ch)

Ecrire(ch)
T.D.O

Fintantque

Finafficheft
O
T/N
R

Ch
Chaine Lignedefichiertexte

132

ChapVLesalgorithmesdarithmtique

Traduction en turbo Pascal


program Ex8 ;
uses wincrt ;
type
conv= record
nd:integer;
nb: string;
no : string ;
nh:string;
end;
fconv= file of conv;
nombre= file of integer ;
var
fn : nombre;
fc : fconv;
ft : text ;
n : integer ;
procedure creation(var fn:nombre;var fc: fconv );
begin
assign(fn,'c:\bac2013\nombre.dat');
rewrite(fn);
assign(fc,'c:\bac2013\conversion.dat');
rewrite(fc) ;
assign(ft,'c:\bac2013\lettre.txt');
rewrite(ft);
end;
procedure saisie ( var n:integer);
begin
repeat
write(' entrer un entier :');
readln(n);
until n in [3..50] ;
end;
procedure remplir ( var fn : nombre ; n : integer ) ;
var
i,k : integer;
begin
reset( fn ) ;
randomize;
for i:= 1 to n do
begin
k:= random(886)+15 ;
write(fn,k) ;
end;
end;

133

ChapVLesalgorithmesdarithmtique

function convb10_b( k , b : integer ) :string;


var
r:integer;
rst,ch:string;
begin
ch:='';
repeat
r:= k mod b;
k:= k div b ;
if r > 9 then
begin
rst:= chr ( r + 55 );
end
else
begin
str( r , rst );
end;
ch := rst + ch;
until k=0 ;
convb10_b := ch;
end;
procedure conversion (var fn:nombre;var fc:fconv);
var
k:integer;
e:conv;
begin
reset (fn);
reset(fc);
while not (eof (fn)) do
begin
read ( fn , k);
with e do
begin
nd := k;
nb := convb10_b( k ,2);
no := convb10_b( k ,8);
nh := convb10_b( k ,16);
end;
write( fc , e );
end;
close( fn);
close ( fc );
end;

134

ChapVLesalgorithmesdarithmtique

function nbl ( st : string ) : integer ;


var
nb , i : integer;
begin
nb := 0 ;
for i := 1 to length ( st) do
begin
if st [ i ] in ['A'.. 'F' ] then
begin
nb := nb +1
end;
end;
nbl := nb ;
end;
procedure remplirft ( var fc : fconv ; var ft : text );
var
k : integer;
e: conv ;
ch : string ;
begin
reset( fc );
append( ft );
while not ( eof ( fc ) ) do
begin
read ( fc , e );
with e do
begin
k := nbl ( nh ) ;
if k <> 0 then
begin
str ( k , ch);
ch := nh +' ' + ch ;
writeln( ft , ch )
end;
end
end;
close( fc) ;
close ( ft );
end;
procedure afficheft ( var ft : text );
var
ch : string ;
begin
reset( ft );
while not ( eof ( ft )) do
begin
readln ( ft , ch ) ;
writeln ( ch ) ;
end;
close ( ft);
end;

135

ChapVLesalgorithmesdarithmtique

procedure affichefn(var fn:nombre);


var
k:integer;
begin
reset(fn);
while not(eof(fn)) do
begin
read( fn , k );
writeln( k );
end;
close( fn );
end;
procedure afficheFc( var fc: fconv);
var
e:conv;
begin
reset(fc);
while not (eof (fc)) do
begin
read(fc,e);
with e do
begin
writeln('(',nd,')10 = (',nb,')2=(',no,')8=(',nh,')16');
end;
end;
close(fc);
end;
begin
creation(fn,fc);
saisie(n);
remplir(fn,n);
conversion ( fn , fc );
remplirft ( fc , ft);
afficheFn(fn);
afficheFc(fc);
afficheft( ft );
end.

136

ChapVLesalgorithmesdarithmtique

Correction de lexercice N 17
programnombre1;
useswincrt;
type
f_chaine=fileofstring;
var
f:f_chaine;
f1:text;
m:integer;
procedurecrea on(varf:f_chaine;varf1:text);
begin
assign(f,'c:\bac2012\123636\nb_base.dat');
rewrite(f);
assign(f1,'c:\bac2012\123636\nombre.txt');
rewrite(f1);
end;
proceduresaisie(varm:integer);
begin
repeat
write('intoduirel''entier:');
readln(m);
un lmin[2..10];
end;
functionverif(ch:string):boolean;
var
b:boolean;
i:integer;
begin
i:=1;
b:=true;
while(b)and(i<=length(ch))do
begin
ifch[i]in['0'..'9','A'..'F']then
i:=i+1
else
b:=false;
end;
verif:=b;
end;
procedureremplir(varf:f_chaine;m:integer);
var
i:integer;
ch:string;
begin
reset(f);
writeln('entrer',m,'nombrehexadcimal');
fori:=1tomdo
begin
repeat
137

ChapVLesalgorithmesdarithmtique

write('entrerunnombrehexadcimal:');
readln(ch);
un l(length(ch)<=5)and(verif(ch));
write(f,ch);
end;
close(f)
end;
functionpuis(a,b:integer):integer;
var
i,p:integer;
begin
p:=1;
fori:=1tobdo
begin
p:=p*a;
end;
puis:=p;
end;
func onconvb_b10(ch:string;b:integer):integer;
var
i,e,k,s:integer;
begin
S:=0;
fori:=1tolength(ch)do
begin
ifch[i]in['0'..'9']then
begin
val(ch[i],k,e);
end
else
begin
k:=ord(ch[i])55;
end;
s:=s+k*puis(b,length(ch)i);
end;
convb_b10:=s;
end;
functionbase(ch:string):integer;
var
k,e,i:integer;
max:char;
begin
max:=ch[1];
fori:=2tolength(ch)do
begin
iford(max)<ord(ch[i])then
max:=ch[i];
end;
ifmaxin['0'..'9']then
begin
138

ChapVLesalgorithmesdarithmtique

val(max,k,e);

end
else
begin
k:=(ord(max)55);
end;
base:=k+1;
end;
procedureremplir (varf:f_chaine;varf1:text);
var
b,dec:integer;
ch,st,bch,dch:string;
begin
reset(f);
append(f1);
whilenot(eof(f))do
begin
read(f,ch);
b:=base(ch);
dec:=convb_b10(ch,b);
str(b,bch);
str(dec,dch);
st:='('+ch+')'+bch+'='+'('+dch+')'+'10';
writeln(f1,st);
end;
close(f);
close(f1);
end;
procedureache(varf1:text);
var
ch:string;
begin
reset(f1);
whilenot(eof(f1))do
begin
readln(f1,ch);
writeln(ch);
end;
close(f1);
end;
begin
crea on(f,f1);
saisie(m);
remplir(f,m);
remplir (f,f1);
ache(f1);
end.

139

ChapVLesalgorithmesdarithmtique

Srie N 10
Exercice N 1 ( sujet bac pratique jeudi 21 Mai 2009 8h30)
Un nombre est dit super premier sil est premier et si , en supprimant des chiffres partir de sa
droite, le nombre restant est aussi premier.
Exemple : le nombre 59399 est super premier car les nombres 59399, 5939, 593, 59 et 5 sont
tous premiers.
Ecrire un programme sup_prem.pas qui permet de :
Saisir un entier n tel que 40000 < n < 100000
Chercher tous les nombres premiers inferieurs ou gaux n, les afficher raison dun
nombre par ligne en mentionnant devant chaque nombre super premier la note super
premier et de faire la mme chose dans un fichier texte intitul super_p.txt.

ExerciceN2:
On vous demande dcrire un programme qui permet de :
Remplir au hasard une matrice carre dordre n par les entiers 0 ou 1.
NB : La fonction Random (X), permet de gnrer un nombre entier alatoire appartenant
lintervalle 0, X-1.
A partir de cette matrice, crer un fichier denregistrements FH stock physiquement sous
'c:\Hexa.dat', chaque enregistrement renferme les deux champs suivants :
Hex : reprsente la conversion en hexadcimale de chaque ligne de la matrice. (La
conversion en hexadcimal se fait directement et sans passer par la base 10)

nb : reprsente le nombre de lettres existant dans la conversion Hexadcimale.

A partir du fichier FH crer un deuxime fichier FD dont le nom physique est


'C:\Div11.dat', qui contient toutes les chanes hexadcimaux dont le nombre de caractre est
suprieur 1 (nb 1) et dont la conversion en dcimal est divisible par 11.
NB : vous devez utiliser la mthode suivante pour dterminer la divisibilit par 11 :
Soustraire de N amput de son chiffre des units le chiffre supprim et recommencer
ventuellement avec le nombre ainsi obtenu jusquau moment o lon peut conclure la divisibilit.

140

ChapVLesalgorithmesdarithmtique

Si N = 12345674
1234567 4 = 1234563
123456 3 = 123453
12345 3 = 12342
1234 2 = 1232
123 2 = 121
12 1 = 11
1 1 = 0 qui est divisible par 11

Exemple : pour n = 8
M

FH

0 0 0 1

0 0 1

0 0 1

0 0 0 1

0 0 0 1

0 0 0 0

0 1

0 1

E71

E7

8F1

8F

FF2

FD

310
100

0 0 1

0 0 0 0 1

770

210

0 1

FD

FD2

- La premire ligne de la matrice est gal : 1110 0111.


- (1110 0111)2

Hex = E7
nb = 1

- (E7) 16 = (231) 10
- 231 est divisible par 11 et nb 1, do lcriture de E7 dans le fichier FD.
Questions :
1. Analyser et dduire lalgorithme du programme principal qui permet de raliser le
traitement dcrit prcdemment en le dcomposant en modules.
2. Analyser chacun des modules envisags prcdemment et en dduire les algorithmes
correspondants.

141

ChapVLesalgorithmesdarithmtique

Correction de lexercice N 1
programsuppremier;
begin
useswincrt;
append(ft);
var
fori:=2tondo
ft:text;
begin
n:longint;
ifpremier(i)then
procedurecreation(varft:text);
begin
begin
writeln(i);
assign(ft,'c:\bac2012\0123\super_p.txt');
str(i,rch);
rewrite(ft);
k:=i;
end;
b:=true;
proceduresaisie(varn:longint);
repeat
begin
str(k,ch);
repeat
st:=copy(ch,1,length(ch)1);
write('donnern:');
val(st,k,e);
readln(n);
ifnotpremier(k)then
un l(n>40000)and(n<100000);
begin
end;
b:=false;
functionpremier(n:longint):boolean;
end;
var
un l(k<=9)ornot(b);
i:longint;
if(b)then
b:boolean;
begin
begin
writeln('superpremier');
b:=true;
rch:=rch+''+'superpremier';
i:=2;
end;
while(i<=(ndiv2))and(b)do
writeln(ft,rch);
begin
end;
ifnmodi=0then
end;
begin
close(ft);
b:=false;
end;
end
procedureaffiche(varft:text);
else
var
begin
ch:string;
i:=i+1;
begin
end;
reset(ft);
end;
whilenot(EOF(ft))do
end;
begin
Premier:=b;
readln(ft,ch);
end;
writeln(ch);
procedurerecherche(n:longint;varft:text);
end;
var
end;
i,k:longint;
begin
e:integer;
creation(ft);
rch,ch,st:string;
saisie(n);
b:boolean;
recherche(n,ft);

affiche(ft);

end.

142

LES ALGORITHMES DAPPROXIMATION

143

ChapVIILesalgorithmesdapproximation

LES ALGORITHMES DAPPROXIMATION


I. Introduction

Les problmes doptimisation forment un ensemble trs riche de possibilits : de la


possibilit dapprocher avec une prcision arbitraire, limpossibilit de toute garantie sur la
qualitdelapproximation.
II. Recherche du point fixe dune fonction
1)Prsenta on
Enmathmatiques,pouruneapplicationfdunensembleEdansluimme,unlmentx
deEestunpointfixedefsif(x)=x
Dansleplan,lasymtrieparrapportunpointAadmetununiquepointfixe:A

lapplicationinverse(dfiniesurlensembledesrelsnonnuls)admetdeuxpointsfixes:1
et1

Graphiquement,lespointsfixesdunefonctionf(olavariableestrelle)sobtiennenten
traant la droite dquation y = x : tous les points dintersection de la courbe
reprsentativedefaveccettedroitesontalorslespointsfixesdef.
Touteslesfonctionsnontpasncessairementdepointfixe;parexemple,lafonctionftelleque
f(x)=x+1nenpossdepas,carilnexisteaucunnombrerelxgalx+1.

2)Ac vit

OndsirecrireunprogrammeenPascalquipermetdersoudrelqua onsin(x)=1x
a)Dcomposerleproblmeenmodules
b)Ecrirelesanalysesdesmodules,endduirelesalgorithmes
c)Traduireenpascallasolutionobtenue
Sin(x)=1xx=1sin(x)

144

ChapVIILesalgorithmesdapproximation

a)Analyseduprogrammeprincipal:

Nom:Point_fixe
Rsultat=Ecrire("lepointfixeest:",x1,"trouvaprs",i,"itra ons")
(x1,i)=[i0,x11]

Rpter

ii+1

x2x1

x1F(x1)

Jusqu(ABS(x1x2)<epsilon)
FinPoint_fixe

T.D.O
Objet

Type/Nature

entier

X1,x2 Rel
epsilon Constante=105
F

Fonction

b)Algorithmeduprogrammeprincipal

0)DbutPoint_fixe

1)(x1,I)=[i0,x11]

Rpter

ii+1

x2x1

x1F(x1)

Jusqu(ABS(x1x2)<epsilon)

2)Ecrire("lepointfixeest:",x1,"trouvaprs",i,"itra ons")

3)FinPoint_Fixe
c)AnalysedelafonctionF

DfFnf(x:reel):reel

Rsultat=f

F=[]f1sin(x)

Finf
d)Algorithmedelafonctionf

0)DfFnF(x:rel):Rel

1)f=[]F1sin(x)

2)finF

145

ChapVIILesalgorithmesdapproximation

e)TraductionenPascal

III. Calcul de valeurs approches de constantes connues


1)Ac vit
Ilexisteplusieursconstantesnumriques:
e(nombredeNeper)2,718

(nombrePi)3,1416

g(constantedepesanteur)9.80665
Danscequisuit,nousallonsprsenterdesalgorithmespermettantdecalculerdesvaleurs
approchespourlesconstantesete
2)Valeurapprochede
Il est impossible de connatrela valeurexactede . En effet, il a t dmontr par deux
mathmaticiens de la fin du XVIIIme sicle, Lambert et Legendre, qu'il ne peut exister
aucunefraction[dedeuxentiers]gale.
Les hommes de science Euler, Gauss, Leibniz, Machin, Newton, Vite ont recherch
toutes sortes de formules permettant de calculer une approximation de plus ou moins
prcise.

146

ChapVIILesalgorithmesdapproximation

a)ValeurapprocheparlaformuledEuler
Ecrireuneanalyse,unalgorithmeetlatraductionenPascaldunprogrammeintitulPi_Euler,qui
permetdecalculeretdafficherunevaleurapprochedeenutilisantlaformuledEuler:

=1+

Celasignifieque:

=6*( +

Celasignifieque:

Analyse:

Nom:Pi_euler

Rsultat=Ecrire("lavaleurapprochedePiest",RacineCarre(6*S2))

S2=[S21,i2]Rpter

S1S2

S2S1+1/Carre(i)

ii+1

jusquabs(S2S1)<epsilon

FinPi_Euler
TDO
Objet Type/Nature
i

Entierlong

S1,S2

Rel

Epsilon Constante=105
Algorithme

0)DbutPi_Euler
1)s2=[S21,i2]
Rpter

S1S2

S2S1+1/carre(i)

ii+1
jusquabs(S2S1)<epsilon
2)Ecrire("lavaleurapprochedePiest",RacineCarre(6*S2))
3)FinPi_Euler

147

ChapVIILesalgorithmesdapproximation

TraductionenPASCAL

b)ValeurapprocheparlaformuledeWallis
Ecrireuneanalyse,unalgorithmeetlatraductionenPascaldunprogrammeintitulPi_Wallis,qui
permetdecalculeretdafficherunevaleurapprochedePienutilisantlaformuledeWallis:
=

Celasignifie:

Celasignifie

Analyse
Nom:Pi_Wallis
Rsultat=Ecrire("lavaleurapprochedePiest",2*p2)
P2=[i1,P21]

Rpter

P1P2

P2p1*((2*i)/(2*i1))*((2*i)/(2*i+1))

ii+1

Jusqu(abs(p2p1)<epsilon)
FinPi_walis

148

ChapVIILesalgorithmesdapproximation

TDO
Objet

Type/Nature

Entierlong

P1,P2 Rel
epsilon Constante=105

Algorithme
0)DbutPi_Wallis
1)p2=[i1,P21]

Rpter

P1P2

P2p1*((2*i)/(2*i1))*((2*i)/(2*i+1))

ii+1

Jusqu(abs(p2p1)<epsilon
2)Ecrire("lavaleurapprochedePiest",2*p2)
3)FinPi_Wallis

TraductionenPASCAL

149

ChapVIILesalgorithmesdapproximation

3)Valeurapprochedee

Ecrireuneanalyse,unalgorithmeetlatraductionenPascaldunprogrammeintitul
calcul_e,quipermetdecalculeretdafficherunevaleurapprochedee(nombredEuler,ou
nombreNprien)enutilisantlaformulesuivante:

*Analyseduprogrammeprincipal

T.D.O

Nom:calcul_e
Rsultat=Ecrire("lavaleurapprochedeeest:",S2)
S2=[S21,i1]Rpter

S1S2

S2S1+1/FnFact(i)

ii+1

Jusquabs(s2s1)<epsilon
Fincalcul_e

Objet

Type/Nature

entier

S1,S2 Rel
epsilon Constante=105
Fact

Fonctioncalcullefactorieldunentier

*Algorithmeduprogrammeprincipal
0)Dbutcalcul_e
1)S2=[S21,I1]

Rpter

S1S2

S2S1+1/FnFact(i)

ii+1

Jusquabs(s2s1)<epsilon
2)Ecrire("lavaleurapprochedeeest:",S2)
3)Fincalcul_e

150

ChapVIILesalgorithmesdapproximation

AnalysedelafonctionFact
DfFnFact(a:entier):entierlong

Rsultat=Fact
Fact=[]
Sia=0alors

Fact1

Sinon

Facta*FnFact(a1)

FinSi
Finfact
AlgorithmedelafonctionFact
0)DfFnFact(a:entier):entierlong

1)Sia=0Alors

Fact1

Sinon

Facta*FnFact(a1)

FinSi
2)FinFact
TraductionenPASCAL

151

ChapVIILesalgorithmesdapproximation

IV. Calcul daires


1)Introduc on
Soitunefonctionfcontinueetcroissantedansl'intervalle[a,b].

Signifiel'airesouslacourbedelafonctionentreaetb.
Enmathmatiques,l'intgraled'unefonctionrellepositiveestlavaleurdel'airedudomaine
dlimiteparl'axedesabscissesetlacourbereprsentativedelafonction.

F(b)
F(a)

ab

Reprsentationgraphiqueduneintgrale
L'objectif donc, est d'approcher la valeur de f(t)dt. La plupart des mthodes d'intgration
numriquefonctionnentsuivantlemmeprincipe:
Nouscommenonsparsubdiviserl'intervalle[a,b]ennintervalles[ai,ai+1]dediamtres
gauxah=

,aveca 1 =aeta n+1 =b.Lasubdivisionestrgulireetplusnestgrand,plus

lalongueurdechacundesintervallesdevientpetite.Lediamtredechaqueintervalle,c'est
adiresalongueur,estnote:h=ai+1ai
Puis,pourchaqueintervalle[ai,ai+1],nousessayonsdecalculerunevaleurapprochede
.
Les mthodes les plus utilises sont : la mthode des rectangles, la mthode des trapzes, la
mthodedeSimpson,lamthodedeRomberg,etc.

152

ChapVIILesalgorithmesdapproximation

2)Mthodesderectangles
a)Principe

Consistepartagerl'intervalled'intgrationenintervallesdemmeamplitudepartir
desquelsonconstruitdesrectanglesdontoncalculelasommedesaires.
Lamethodedesrectanglesconsistearemplacerl'airesouslacourbeparlasommedesaires
desrectanglesobtenus.

Mthodedesrectanglesgauche

Mthodedesrectanglesdroite

Mthodedupointmilieux

153

ChapVIILesalgorithmesdapproximation

b)Application
Onseproposedecalculerlairersultantedelacourbedelafonctionf:x

enutilisantla

mthodederectangles(dupointmilieu).
Analyses
Analyseduprogrammeprincipal

Nom:calcul_Air

Rsultat=Ecrire("unevaleurapprochedelintgraleest=",FNCALCUL(a,b,n))

A,b,n=[]Procsaisir(a,b,n)

Fincalcul_Air

T.D.O
Objet Type/Nature
n

entier

a,b

Rel

calcul Fonction
saisir procdure
Analysedelaprocduresaisir

DfProcsaisie(vara,b,n:Entier)

Rsultat=a,b,n

b=[]Rpter

Jusqu(b>a)

a=Donne("a=")

n=[]Rpter

Jusqu(n>0)

Finsaisie

b=donne("b=")

n=donne("n=")

154

ChapVIILesalgorithmesdapproximation

Analysedelafonctioncalcul

DfFnCaclul(a,b:rel;n:entier):Rel

Rsultat=Calcul

Calcul=|]calculsomme*h

h=[]h(ba)/n

Somme=[Somme0,xa+h/2]

Pouride1NFaire

sommesomme+f(x)

xx+h

FinPour

Fincalcul
AnalysedelafonctionF

DfFnf(x:rel):rel

Rsultat=F

F=[]fcarr(x)/(1+carre(x))

Finf
Algorithmes

Algorithmeduprogrammeprincipal

0)DbutRectangles

1)Procsaisir(a,b,n)

2)Ecrire("unevaleurapprochedelintgraleest=",FNCALCUL(a,b,n))

3)FinRectangles

Algorithmedelaprocduresaisir

0)Procduresaisir(vara,b:Rel;varn:entier)
1)a=[]Ecrire("a="),lire(a)
2)Rpter

Ecrire("b=")

Lire(b)
Jusqu(b>a)
3)Rpter

Ecrire("n=")

Lire(n)
Jusqu(n>0)
4)Finsaisir

155

ChapVIILesalgorithmesdapproximation

Algorithmedelafonctioncalcul

0)FonctionCALCUL(a,b:rel;n:entier):Rel
1)h=[]h(ba)/n
2)Somme=[Somme0,xa+h/2]

Pouride1NFaire

sommesomme+f(x)

xx+h

FinPour
3)Calcul=[]calculsomme*h
4)FinCALCUL
Algorithmedelafonctionf
0)Fonc onf(x:rel):rel
1)f=[]Fcarr(x)/(1+carr(x))
2)Finf
TraductionenPASCAL

156

ChapVIILesalgorithmesdapproximation

3)Mthodedetrapze

Onseproposedecalculerlairersultantedelacourbedelafonctionf:x

en

utilisantlamthodedetrapzes.
NB:Mmedmarchequelamthodeprcdente,onsintressecrirelanalyseetlalgorithme
delafonctionCALCUL.
Analysedelafonctioncalcul

DfFnCalcul(a,b:rel;n:entier):rel

Rsultat=Calcul

Calcul=[]calculsomme*h

H=[]h(ba)/n

Somme=[somme(f(a)+f(a+h))/2,xa]

Pouride1N1Faire

xx+h
157

ChapVIILesalgorithmesdapproximation

sommesomme+(f(x)+f(x+h))/2

FinPour

FinCalcul

Algorithmedelafonctioncalcul
0)Fonc onCALCUL(a,b:rel;n:entier):Rel
1)h=[]h(ba)/n
2)Somme=[Somme(f(a)+f(a+h))/2,xa]

Pouride1N1Faire

xx+h

sommesomme+(f(x)+f(x+h))/2

FinPour

3)Caclul=[]calculsomme*h
4)FinCALCUL
TraductionenPASCAL

158

ChapVIILesalgorithmesdapproximation

159

ChapVIILesalgorithmesdapproximation

Srie N 11
Exercice N 1 (ex 3 bac 2012 sp)
SoitlaformulesuivantequipermetdedterminerunevaleurapprochedeCos(x):
Cos(x)=1

x 2 x 4 x 6 x8
+

+
..
2! 4! 6! 8!

EcrireunalgorithmedunprogrammeintitulCalcul_Cosquipermetde:
Saisirunrelxappartenantlintervalle[1,1]
Calculer et afficher une valeur approche de Cos(x) en utilisant la formule donne ci
dessus. Le calcul sarrt lorsque la diffrence entre deux termes conscutifs devient
inferieure104
Exercice N 2
SoitlaformulesuivantequipermetdedterminerunevaleurapprochedeSin(x):
sin(x)

x x3 x5 x7 x9

.........
1! 3! 5! 7! 9!

EcrireunalgorithmedunprogrammeintitulCalcul_Sinquipermetde:
Saisirunrelxappartenantlintervalle[1,1]
CalculeretafficherunevaleurapprochedeSin(x)enutilisantlaformuledonnecidessus.
Le calcul sarrt lorsque la diffrence entre deux termes conscutifs devient inferieure
104.
Exercice N 3 ( ex 2 bac 2012 sc)

Soientxetadeuxrelsdonnsstrictementpositifs.OnseproposedecalculerlasommeS
dfinieparlaformulesuivante:

S=

EcrireunalgorithmedunmoduleintitulCalSompermettantdecalculerunevaleur
approchedeS10-4 prs

160

ChapVIILesalgorithmesdapproximation

Exercice N 3 ( ex 1 bac blanc 2012)

Onseproposedecalculerunevaleurapprochedarctangentedexparlaformule
suivante:

Arctan(x)=

EcrireunalgorithmedunefonctionpermettantderetournerunevaleurapprochedeArctan(x)
enutilisantlaformuledonnecidessus.Lecalculsarrtelorsquelavaleurabsoluedela
diffrenceentredeuxtermesuccessifsdevienneinferieureougaleuneerreurepssilon(avecx
etepsilondeuxrelsdonns).
Exercice N 4

Onseproposed'crireunprogrammeenPascalquioffreunmenudequatrechoixdfinis
selonlavaleurd'unelettresaisie.

La valeur "I", pour calculer une valeur approche de

10

( x sin 2 ( x )) dx en utilisant la

mthodedestrapzes.
Lavaleur"C",pourcalculerunevaleurapprochedelafonctionC(x)dfiniecommesuit(x
estunen er>1):
1
1
1

+
+
+..
(x) 1+
2 x 3x 4 x

(Avecuneprcision 10 4 )

Rsultat: (x) 1.644 (x) 1.0823.

A en on,pourx<2,lasommeestdicilecalculer.

La valeur "L", pour calculer une valeur approche de ln(1+x) donn pr mla formile de
Taylorauvoisinagede0.

x 2 x3 x 4 x5
Ln(1+x)=x
+

2
3 4
5

(Avecuneprcision 10 3 etxprochede0)

Lavaleur"Q",pourquitterleprogramme.

Travaildemand:

Saisirvotreprogrammeetl'enregistrerdansC:\Bac\sousvotrenom.

161

ChapVIILesalgorithmesdapproximation

Exercice N 5
Onseproposed'crireunprogrammeenPascalquioffreunmenudequatrechoixdfinisselonla
valeurd'unelettresaisie.

La valeur "I", pour calculer une valeur approche de

Rsultat:C=0.915966

C=

(1) k

k 0 ( 2 K 1)

(avecuneprcision 10 4 )

Lavaleur"X",pourcalculerunevaleurapprochede

x 2 x 4 x 6 x8
+

+
..
2! 4! 6!
8!

Cos(x)=1

(Avecuneprcision 10 3 )

( x sin 2 ( x ))dx en utilisant la

mthodedestrapzes.
La valeur "C", pour calculer une valeur approche de la "Constante de Catalon" qui
apparat dans certaines expressions de calcul combinatoire et donne par la formule
suivante:

10

Lavaleur"Q",pourquitterleprogramme.

Travaildemand:
Exercice N 6

Saisirvotreprogrammeetl'enregistrerdansC:\Bac\sousvotrenom.
Soitl'expressionmathmatiquesuivante:/4=11/3+1/51/7+1/9
Ecrire un programme Pascal qui utilise l'expression cidessus pour dterminer et afficher une
valeurapprochedea104pres.
Lecalculs'arrtequandladiffrenceentredeuxvaleursconscutivesdecetteexpressiondevient
strictementinferieurea104.
Pourchacundesexercicessuivants:
a)Proposezuneanalysemodulaireauproblme,
b)Dduisezlesalgorithmescorrespondants.

162

ChapVIILesalgorithmesdapproximation

Exercice N 7 : (ex 2 bac blanc 2009 )

Unagriculteurdsirevendreuneparcelledeterrain.Toutefois,laformedelaparcellene
lui permet pas de connatre facilement sa surface. Ainsi, il demande laide de son fils qui pu
dterminer une reprsentation graphique de la parcelle en utilisant la fonction f dfinie par
f(x)=

La reprsentation graphique cidessous illustre la surface de parcelle qui est dlimite par les
droites dquation respectives x = et x = et par la courbe reprsentant f(x) sur lintervalle
[ , ]

00.25 0.5 0.75

Analyseretdduirelalgorithmedunmodulequipermetdecalculerunevaleurapprochedela
surfacedelaparcelleenutilisantlamthodedesrectanglesaupointdumilieu.
Exercice N 8

ondonneLn(1+x)=xx/2+x3/3x4/4+....

crireunalgorithmelogquipermetdesaisirunrelx,avecx>1etx1etdecalculerunevaleur
approchedeln(1+x)uneprcision104.

163

ChapVIILesalgorithmesdapproximation

Exercice N 9 (problme bac 2009 sc )

LebutduproblmeestdedterminerunevaleurapprochedelintgraleI=

On se propose dutiliser deux mthodes et den dgager la diffrence entre les deux valeurs
approchestrouves.
Onchoisitdanslesdeuxcas,unentierntelque100<n<1000.nseralenombredesubdivisions
quonvautiliserdanslesdeuxmthodes.
1) Mthodedestrapzes.
OnutiliselamthodedestrapzespourdterminerunepremirevaleurapprocheI 1 deI.
2) Mthodedunesubdivisionalatoire
On remplit un tableau V par n1 rels dis ncts gnrs au hasard de lintervalle [ 1 , 2 ]. On
utiliseralafonctionprdfinieRANDOMquignreauhasardunrelentre0et1ausensstrict.
Ensuite,ontrieletableauVparordrecroissantenutilisantletriparinsertion.Onauraformainsi
unesuite
(x i ) 0in ox 0 =1,x i =V[i]etx n =2.
OndfinitlessommesS 1 etS 2 par:
S 1 =

;S 2 =

avecf(x)=

UnevaleurapprochedeI=

est:
I 2 =

Onseproposedcrireunprogrammequicalcul

problmeenleslesdeuxmthodes

etaffichelesdeuxvaleursapprochesainsiquelavaleurabsoluedeleurdiffrence.
Question:
1) Analyser le problme en le dcomposant en modules et dduire lalgorithme du
programmeprincipalquipermetderaliserletraitementdcritprcdemment.
2) Analyser chacun des modules envisags prcdemment et en dduire les algorithmes
correspondants.
Exercice N 10
Calculezunevaleurapprochede:

enutilisantlamthodedestrapzes.

Traduisezettestezlasolutionobtenue.EnregistrezvotreprogrammesouslenomTrapze.

164

ChapVIILesalgorithmesdapproximation

Correction Exercice N 1 (ex 3 bac 2012 sp)


1. Analyseduprogrammeprincipal
Nom:Calcul_Cos
Rsultat=Ecrire(FnCalcul(x))
X=[]Rpter
T.D.O

X=donne(Donnerunrel:)

Jusqu'(x1)et(x1)
O
T/N
R
FinCalcul_Cos
X
Rel
Donn

Calcul
Fonction Retourne
2. AnalysedelafonctionCalcul
cosinus

DfFnCalcul(x:Rel):Rel

Rsultat=Calcul
Calcul=[]CalculC
C=[C1,i0,p1,f1] Rpter

CpC

ii+2

pp*Carr(x)

FF*i*(i1)

CC+P/F
Jusqua Abs ( C Cp ) < 10-4
Fin Calcul
T.D.O

O
C
I
P
F
Cp

T/N
Rel
Entier
Entier
Entier
rel

165

ChapVIILesalgorithmesdapproximation

Correction Exercice N 8
Programlog;
useswincrt;
const

EPSILON=0.0001;
var
X:real;
functionlogdl(x:real):real;
var
Som,Xn,A,B:real;
i:integer;
begin
Xn:=1;
i:=0;
Som:=0;
repeat
i:=i+1;

Xn:=Xn*X;

A:=Xn/i;
i:=i+1;
Xn:=Xn*X;
B:=Xn/i;

Som:=Som+A+B;

until(I>100)or(abs(AB)<=EPSILON);

logdl:=Som;
end;

procedureSaisie(varx:real);
begin
repeat
write('DonnerunrelpositifX:');
readln(x);
until(x>1)and(x<=1);
end;

begin
Saisie(X);
Writeln('Approxima ondeLn(1+X)=',logdl(X):2:5);
end.

166

ChapVIILesalgorithmesdapproximation

Correction Exercice N 9 (problme bac 2009 sc )


1. Analyseduprogrammeprincipal
Nom:Calcul_integral
Rsultat=Ecrire(VI1parlamthodedestrapzes:,VI1,VI2parlamthodedune
subdivisionalatoire:,VI2,lavaleurabsoluedeladirenceest,abs(VI1VI2))
VI1=[]VI1FNtrapzes(N)
VI2=[]VI2FNsubdivisions(N)
N=[]Rpter

N=Donne(Introduirelenombredesubdivisions:)

Jusqu'Ndans[101..999]
FinCalcul_intgral

T.D.O

O
T/N
R

Rel
Valeurdelintgralparlamthodedestrapzes
VI1
VI2
Rel
Valeurdelintgralparlamthodedunesubdivisionalatoire

Entier
Nombredesubdivisions
N
Fonction Fonctionquicalculselonlamthodedestrapzeunevaleurapprochedelaireen
Trapzes

question

subdivisions Fonction Fonctionquicalculselonlamthodedessubdivisionsalatoireunevaleur

approchedelaireenquestion

2. Analysedelafonctiontrapzes
Dffntrapze(n:entier):rel
Rsultat=trapzesVI
VI=[VI((exp(1)+exp(4))/2)/n]
Pour1de1n1Faire

VIVI+(exp((1+i/n)2))/n

FinPour
Fintrapzes

T.D.O

O T/N
R
VI1 Rel Valeurdelintgralparlamthodedestrapzes
I entier compteur

167

ChapVIILesalgorithmesdapproximation

3. Analysedelafonctionsubdivisions
DfFnsubdivisions(n:entier):Rel
Rsultat=subdivisions
Subdivisions=[]subdivisionsVI
VI=[]VI(S1+S2)/2
S1=[S10]Pouride0n1Faire

S1S1+(V[i+1]V[i])*exp((V[i])2)

FinPour
S2=[S20]PourIde0n1Faire

S2S2+(V[i+1]V[i])*exp((V[i+1])2)

FinPour
V=[] ProcRemplissage(n,V)

ProcTri(n,V)
Finsubdivision

T.D.N.T

Type

Vect=Tableau[1..999]derel

T.D.O


O
T/N
R

VI1
Rel
Valeurdelintgralparlamthodedestrapzes
I
Entier
Compteur
S1
Rel
ValeurdelasommeS1

S2
Rel
ValeurdelasommeS2

V
Vect
Tableaucontenantlesvaleursdesx i

Tri
procdure UneprocdurequipermetdetrierleslmentsdeVparlamthodedinsertion

UneprocdurequipermetderemplirletableauV.

Remplissage Procedure

4. AnalysedelaprocdureTri
DfProcTri(n:entier;varT:Vect)
Rsultat=T
T=[] Pouride1nFaire

AuxT[i]

Ji

Tantque(T[j1]>aux)et(j>1)Faire

T[j]T[j1]
T.D.O

Jj1

FinTantque
O
T/N
R

T[j]aux

FinPour
I
Entier Compteur
FinTri
J
Entier Compteur

aux rel
Variableauxiliaire

168

ChapVIILesalgorithmesdapproximation

5.
AnalysedelaprocdureRemplissage
DfProcRemplissage(n:entier;varT:vect)
Rsultat=T
T=[T[0]1;T[n]2]Pouride1n1Faire

Rpter

T[i]1+Random

Jusqu'(FnVerif(i,T))

FinPour
FinRemplissage

T.D.O

O
T/N
R

I
Entier
Compteur

Lereldterminerauhasard
x
Entier

Vrif Fonction FonctionquivrifielexistencedunlmentdanslesIpremierslments

deT.

6. AnalysedelafonctionVrif
DfFnVrif(j:entier;T:vect):boolen
Rsultat=Verif
T.D.O
Vrif=[]VrifV

V=[VVrai,xT[j]]Rpter
O
T/N
R

Six=T[j1]Alors

Vfaux
X Rel

Sinon
V boolen

Jj1

FinSi

Jusqu'(V=faux)ou(j=1)
FinVerif

169

Annexe

170

ExercicesetproblmesAnnexe

Srie N 1

Exercice N 1 ( exercice 4 bac 2012 sc)


Exemple:

EcrireuneanalysedunmoduleintitulSymtrique
PourN=5lamatriceMest
perme antderemplirunematriceMde(2*N1)ligneetdeN

1
2
3
4
colonnes,commelemontrelexemplecicontre.
4
1
4
6
4
Sachantque:
3
1
3
3
1

Lapar einferieuredelamatriceM(delaligne0la
2
1
2
1

ligneN1)reprsentelesvaleursdutriangledePascal.
1
1
1

Lapar esuprieuredelamatriceM(delaligne1N
0
1

laligne0)reprsentelasymtriquedelapar einferieurepar
1
1
1

rapportlaligne0.
2
1
2
1

3
1
3
3
1

4
1
4
6
4
Exercice N 2 ( exercice 2 bac blanc 2012 )

Matestuntypeutilisateurreprsentantuntableau
den ersde20lignesetde20colonnes.Ondonnelalgorithmedelaprocdureinconnue
suivante:

0)DEFPROCInconnue(VARM:MAT;N,i,j:Entier)
1)Sii<=NAlors

Sij<=iAlors

AuxM[i,j]

M[i,j]M[j,i]

M[j,i]Aux

ProcInconnue(M,Ni,j+1)

Sinon

ProcInconnue(M,N,i+1,1)

Finsi
Finsi
2)FinInconnue

1.ExcutermanuellementlalgorithmedelaprocdureInconnueaveclesparamtreseectifs
suivants:
9 6 0
N=3,i=1,j=1etM=
4 5 2

3 7 1

2.EndduirelerledelaprocdureInconnue.

171

5
1

ExercicesetproblmesAnnexe

Exercice N 3 ( bac pratique 2012 24 mai 2012 14 h 30 mn)


Lasuitederobinsonestdfiniepar:

U0=0

Unseconstruitenconcatnantlenombredapparitionsdechacundeschiffresconstituant
letermeUn1suividuchiffreluimme,selonlordredcroissantdeschires,pourtoutn>0.
Exemple:
Pourn=5,U5=13123110
Eneffet:
U0=0
U1=10carilyauneappari on(1)duchire0dansU0
U2=1110carilyauneappari on(1)duchire1etuneappari on(1)duchire0dansU1.
U3=3110carilyatroisappari ons(3)duchire1etuneappari on(1)duchire0dansU2.
U4=132110carilyauneappari on(1)duchire3,deuxappari on(2)duchire1etune
appari on(1)duchire0dansU3.
U5=13123110

Onseproposedcrireunprogrammequipermetderempliretafficherunfichiertexte
nommRobinson.txtcontenantleskpremierstermedelasuitederobinson(avec2<=k<=15)
sachantquechaquetermedelasuiteoccuperaunelignedanslefichierRobinson.txt.

Dcomposezleproblmeenmodulesetdduisezlesalgorithmescorrespondants.

Exercice N 4 ( exercice 1 bac 2009 sp )

Ondonnecidessous,lalgorithmedelaprocdureTRIdontlerleestdetrierparordre
croissantleslmentsduntableauTdetypeW,vecteurderels.

0)ProcdureTRI(n:entier;VarT:W)
1)Pouride2nFaire

Si(T[i1]>T[i])Alors
DECALER est une procdure dont le rle est de dcaler dun

AuxT[i]
pas vers lavant et partir de lindice i-1 les lments de T

DECAER(i,j,T)
jusqu trouver la position j o il faudra placer lancienne

T[j]Aux
valeur T[i] sauvegarde dans aux.

FinSi
FinPour
2)FinTRI

a) Commentappelletoncettemthodedetri?
b) Rappelerbrivementleprincipedecettemthode.
c) Donnerunalgorithmedelaprocdureetprciserletypedetransfertdesparamtres
utiliss.

172

ExercicesetproblmesAnnexe

Exercice N 5 (exercice 2 bac 2010 sp )


OnconsidreunesuiteUdfiniepar:

U1=1

U2=2

Un=Un1+k*Un2pourn>=3,etkunen erdonn(k>0)

a) Quelestlordredercurrencedecettesuite?Justifiezvotrerponse.
b) EcrireuneanalysedunefonctionquivrifiesiunentierpdonnestuntermedelasuiteU
ounon.SipestuntermedelasuiteU,lafonctionretournelerangretp,sinon,elle
retourne1.
c) Endduirelalgorithmecorrespondantdecettefonction.

Exercice N 6
Onsedonneunen ernaturelnonnulU0,onseproposedeconstruirelasquenceden er(Un)
dfiniepar:

Un=U0

n=0,

Un=estlasommedescarresdeschiffresdeUn1
pourn>0

Exemple:siUn=423alors Un+1=42+22+32=29
Questions:
1. Estcequecetraitementestrcurrent?siouiquelestlordredercurrence.
2. EcrirelanalysedunmodulequipermetdecalculerlenmetermedelasuiteU?
Exercice N 7

Unnombred'Armstrongestunentiernaturelquiestgalalasommedescubesdeces
chires.ainsi153estunnombred'Armstrongcar13+53+33=1+125+27=153.
ProposezunmodulercursifquipermetdevrifiersiunentierNestunnombred'Armstrongou
non.
Exercice N 8

Onveutcompresserunfichierd'en ersbinaires(contenantdes0etdes1).Leprincipede
compressionestlesuivant:
Silefichiercon ent:00000011111000,Lacompressionnousdonne:605130

Onlitsenombre:ona6zros,5unset3zros.
EcrireunprogrammePascalquipermetdecreretremplirunfichiernomme"source.fch"parN
en ersbinaires(Nestunnombrealatoirecomprisentre4et100),puiscompressercefichier
dansunfichierrsultatnomme"compress.fch"enutilisantleprincipecidessusetl'afficher.

173

ExercicesetproblmesAnnexe

Exercice N9

Soitlafonctionsuivante:
0)DfFnInconnue(n,b:en er):chaine
1)ch<""
2)TantQue(n<>0)Alors

convch(nmodb,r)

Si(Long(r)>1)Alors

Valeur(r,x,e)

rChr(x+55)

FinSi

chr+ch

nnDivb
FinTantQue
3)inconnuech
4)FinFonc on

N.B:OndonnelecodeASCIIde"A"est65
Questions:

1Excuterlafonctionpourlesvaleurssuivantesdenetb

a)n=94etb=16

b)n=12etb=2

2Quelestlerledecettefonction.

3Proposerunesolutionrcursivepourcettefonction.
Exercice N 10

Soitlafonctionsuivante:
FunctionDeviner(CH:string;K:integer):integer;
var

I,P,C:integer;

PH:string;
begin

C:=0;

P:=1;

PH:='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';

forI:=length(CH)downto1do

begin

C:=C+(pos(CH[I],PH)1)*P;
P:=P*K;

end;

Deviner:=C;
end;

Questions:
1. Complterletableausuivant,parlesrsultatsdecettefonction,pourlesvaleurssuivantes
deCHetK
CH=BACetK=16 CH=33etK=5
CH=147etK=10
C=. C=.C=.
2. Quelestlerledecettefonction

174

ExercicesetproblmesAnnexe

Exercice N 11

SoitlalgorithmedelafonctionInconnusuivante:
0)DbutFonc onInconnue(n:entierlong):entier
1)S=[S0] Repeter

SS+(nMod10)

nnDiv10

Jusqua(n=0)
2)InconnueS
3)FinInconnue
Questions:
1. ExcutermanuellementlalgorithmedelafonctionInconnu,sionappellecettefonction
avecleparamtreeffectifn=192837,endonnantlesvaleurssuccessivesdesvariablesSet
n.
2. Endduirelerledecettefonction.
3. Lalgorithmedecettefonctionestilrcurent?siouiquelestsonordre.?
4. Ecrirelalgorithmedunefonctionrcursiveralisantlemmetraitement.

Exercice N 12 (bac pratique 21 mai 2009 14h 30 mn)

Soitpetqdeuxen ersnaturelstelque10<p<q<100000.Onseproposedenregistrer
dansunfichiertextedecomp.txtladcompositionenfacteurspremiersdetouslesentiers
comprisentrepetq.Lapremirelignedufichierdecomp.txtcontiendralenaturelpsuividune
espace,suividunaturelq.chacunedesautreslignescontiendralentierdcomposersuividu
signegalsuividesadcomposition.
Exemple:

Sip=34etq=36lefichierdecomp.txtcontiendralesinformationssuivantes:
3436
34=2.17
35=5.7
36=2.2.3.3

Ecrireunprogrammedecomp.pasquipermetdafficherlcranladcompositionen
facteurspremiersdetouslesentierscomprisentrepetqetderemplirlefichierdecomp.txt
commedcritprcdemment.

N.B:Touslesfichiersserontenregistrsdansledossierquiportecommenomvotrenom
etprnomdelunitC
Exercice N 13 ( exercice 2 bac 2010 sc )

Unentiern(n10)estdivisiblepar25,silenombreformparsesdeuxdernierschiffres
lesplusdroitesestgal00ou25ou50ou75.
Exemple:679775estdivisiblepar25carlenombreformparcesdeuxdernierschiffresestgal
75.
Ecrire une analyse sune fonction qui vrifie si un entier n est divisible par 25 en utilisant le
principedcritprcdemment.

175

ExercicesetproblmesAnnexe

Srie N 2
Exercice N1

Soitlafonctioninconnuesuivante:
0)DeffnInconnue(n:entier):entier
1)Convch(n,ch)
2)Xlong(ch)1
3)Sin<10Alors

Inconnuen
Sinon
x

InconnueFNInconnue(ndiv10)+(nmod10)*10
Finsi
4)Fininconnue
Questions:
1. Excutermanuellementcettefonctionpourlesappelssuivantsetdonnerlesvaleurs
retournesPourn=25etn=214
2. ................................................Quelestlerledecettefonction:

Exercice N 2
Soitlalgorithmedelaprocduresuivante:
1) DfProcInconnue(Ch:Chaine)
2) Silong(Ch)>1Alors

Ecrire(ch)

ProcInconnue(copy(Ch,2,Long(Ch)2))

Ecrire(Ch)
Sinon

Ecrire(ch)
finSi
3) Fininconnue
a)FaireletournagelamainaveclachaineCh=Tableau.
b)Proposerunesolutionitrativecetteprocdure?

Exercice N 3
Soitlalgorithmedetrisuivant:
0)DefProcTri(VarT:Tab;n:Entier)
1)Pouride2nFaire

TempT[i]

ProcDcaler(i,j,T)

T[j]Temp
FinPour
2)FinTri
Question:
1.Quelestletypedetriutilisdanscetalgorithme?
2.DonnerlalgorithmedelaprocdureDcaler
3.Proposerunalgorithmercursifdecetri.

176

ExercicesetproblmesAnnexe

Exercice N 4

Soitlalgorithmesuivant:
0)DefFnInconnue(Ch:chaine):Chaine
1)Silong(Ch)=0Alors

Ch
Sinon

InconnueCh[long(Ch)]+FnInconnue(sous_Chaine(Ch,1,long(Ch)1)
FinSi
2)FinInconnue
Questions:
1. ExcutermanuellementlafonctionInconnueavecCh=Modem
2. Dduirelerledecettefonction?
3. Proposerunesolutionitrative?

Problme 1 ( problme bac blanc Monastir 2012 )

OnseproposececalculeretdafficherlePgcddenentiers,exemplePgcd(84,72,56,22)=2
utilisantlatechniquesuivante:
RemplirunfichierNombre.datparNen ersalatoire<100(avec2<=N<=50).
UtilisantunematriceMpourchercherlepgcddesnombresdufichier.
- CopierlesentiersdufichierNombre.datdansla1relignedematriceM.
- La2melignedematriceseraremplieparlespgcddechaquedeuxen eradjacentdela1re
ligne.
- La3melignedematriceseraremplieparlespgcddechaquedeuxen eradjacentdela2me
ligne.
- Appliquerlemmeprincipepourlesautreslignesjusqu'arrivaunelignequiunseul
nombre,quiestlepgcdchercher.
Exemple:

84 72 56 22
12=Pgcd(84,72),8=Pgcd(72,56),2=Pgcd(56,22)
22

12
8
2

56
4=Pgcd(12,8),2=Pgcd(8,2)

4 2

72
2=Pgcd(4,2)

84

Commentcalculerlespgcd
FichierNombre.datMatriceM
Questions:
1. Analyserleproblmeenledcomposantenmodulesetdduirelalgorithmeduprogramme
principal.
2. Analyserchacundesmodulesenvisagsprcdemmentetendduirelesalgorithmes
correspondants.

177

ExercicesetproblmesAnnexe

Problme 2 ( problme bac 2012 )

Deuxchercheursscientifiquestravaillentsurunprojettopsecret.Ilschangentdeslettres
crypts(cods)pourdesraisonsdescurit.

ChaquelettreenvoyeoureueestsousformedunfichiertexteLettre.txtformepar
desmotscrypts,etunmotparligne.Lesdeuxchercheurssesontmisdaccordsurunfichierde
codage Code.dat dans le quel est enregistr tous les caractres avec leurs codes, chaque
caractreestcodsur6signes(des*etdes).

Onseproposedcrireunprogrammequipermetdedcrypterunelettrereuepour
devenirlisible.
Exemple:
A
*

EXAMEN
****************
B
**
DU

******
C
**
BAC

*****
**
D

Code.dat

lettre.txt

lesmotsdcrypts
..
Lemessagereuest:EXAMENDUBAC

N.B:LesfichiersLettre.txtetCode.datsontexistedj.Llvenestpasappeldeles
remplir.
Questions:
1. Analyserleproblmeenledcomposantenmodulesetdduirelalgorithmeduprogramme
principal.
2. Analyserchacundesmodulesenvisagsprcdemmentetendduirelesalgorithmes
correspondants.

178

ExercicesetproblmesAnnexe

Correction de srie N 2
Exercice N 1
1. PourN=25
ExcutiondeInconnue(25)
N
25
X
1
Ch
25
Inconnue Inconnue(2)2+5*101=52

Excu ondeInconnue(2)
N
2
X
0
Ch
2
Inconnue 2
2.PourN=214
ExcutiondeInconnue(214)

N
214
X
2
Ch
214
Inconnue Inconnue(21)12+4*102=412
ExcutiondeInconnue(21)

N
21
X
1
Ch
21
Inconnue Inconnue(2)2+1*101=12
ExcutiondeInconnue(2)
N
2
X
0
Ch
2
Inconnue 2

2. LerledelafonctionInconnueestdinverserleschiffresdunnombredonn.

179

ExercicesetproblmesAnnexe

Exercice N 2
1.Inconnue(Tableau)
Ch
Tableau

Inconnue(ablea)
2.Inconnue(ablea)
Ch
ablea

Inconnue(ble)
3.Inconnue(ble)
Ch
ble

Inconnue(l)

4.Inconnue(l)
Ch
l

Solutionitrative:
0)DefProcache(ch:chaine)
1)i1,p0
2)TantQue(i<=long(ch)div2)faire

Ecrire(copy(ch,i,long(ch)p)

II+1

Pp+2
FinTantque
3)Silong(ch)mod2<>0Alors

Ecrire(ch[(long(ch)div2)+1])
Finsi
4)[pp2,ii1]
Tantque(I>0)faire

Ecrire(copy(ch,i,long(ch)p)

Pp2

II1
FinTantque
5)Finache

Tableau
ablea
ble
l
ble
ablea
Tableau

Exercice N 3
1. LetriutilisestletriparInsertion.

2. AlgorithmedelaProcdureDcaler

0)DefProcdecaler(i:entier;Varp:entier;VarT:Tab)
1)[TempT[i],pi]

Tantque(T[p1]>Temp)et(p>1)Faire

T[p]T[p1]

Pp1

FinTantQue
2)FinDecaler

180

ExercicesetproblmesAnnexe

3. Algorithmercursif
0)DefProcTri(VART:Tab;n,i:entier)
1)Sin>1Alors

Proctri(T,n1)

SiT[n]<T[n1]Alors

TempT[n]

ProcDecaler(i,j,T)

T[j]Temp

FinSi
FinSi
2)FinTri

Exercice N 4

1. ExcutionmanuelleavecCh=Modem
ExcutionInconnue(Modem)
Ch
Modem
Inconnue m+Inconnue(Mode)m+edoM=medoM
ExcutionInconnue(Mode)
Ch
Mode
Inconnue e+Inconnue(Mod)e+doM=edoM

ExecutionInconnue(Mod)
Ch
Mod
Inconnue d+Inconnue(Mo)d+oM=doM

ExecutionInconnue(Mo)
Ch
Mo
Inconnue o+Inconnue(M)o+M=oM

ExecutionInconnue(M)
Ch
M
Inconnue M+Inconnue()M+=M
ExecutionInconnue()
Ch

Inconnue

2. Cettefonctionpermetdinverserunechainedonne
3. Solutionitrative
0)DefFnInverse(ch:chaine):chaine
1)Pouride1long(ch)div2Faire

AuxCh[i]

Ch[i]Ch[long(ch)i+1]

Ch[long(ch)I+1]Aux
FinPour
2)InverseCh
3)FinInverse

181

ExercicesetproblmesAnnexe

Correction de Problme 2
1. Analyseprogrammeprincipal
Nom:Problme2
Rsultat=Ecrire(lalettrereueest:,FnMessage(FL,Fc))

Fc,FL=[] ProcCreation(FL,Fc)

ProcRremplirLc(Fc)

ProcRemplirFc(FL)
FinProblme
T.D.N.T

T.D.O

Type
Objet
Type/Nature
Role

Mcode=Enregistrement
FL
Texte
Fihiertextec

Car:Caractre
Fc
Crypte
FichierdeMcode

Code:chaine
Creation
Procdure

Fin
RemplirLc
Procdure

Crypte=FichierdeMcode
RemplirFL
Procdure

Message
Fonction

2. AnalysedelafonctionMessage
DefFNMessage(VarFL:texte;VarFc:Crypte):Chaine
Rsultat=Message
Message=[]MessageChR
ChR=[ouvrir(FL),ChR]

TantqueNon(Fin_Fichier(FL))faire

Lire_nl(FL,motc)

Ch

Tantque(long(motc)<>0)faire

Stsous_chaine(motc,1,6)

Ouvrir(Fc)

TantqueNon(Fin_Fichier(Fc))faire

Lire_nl(Fc,Ec)

SiEc.code=stAlors

ChCh+Ec.car

Finsi

FinTantque

Eace(motc,1,6)

FinTantque

ChRChR++Ch

FinTantQue
FinMessage

T.D.O

Objet
Type/Nature
Role

Ec
Mcode
Enregistrementdecode

Ch
Chaine

Motc
Chaine

ChR
Chaine

St
chaine

182

ExercicesetproblmesAnnexe

Correction Problme 2

1. Analyseprogrammeprincipal
Nom:problme2
Rsultat=Ecrire(LePgcdest:,FnRecherche(Fn))
Fn=[]ProcCration(Fn)

ProcRemplir(Fn)

T.D.O
Finproblme2
Objet
Type/Nature

Fn
Nombre

T.D.N.T
Recherche
Procedure
Type
Creation
Procedure
Nombre=Fichierdentier
Remplir
Procedure

2. AnalyseprocdureCration
DefProcCration(varFn:Nombre)
Rsultat=Fn
Fn=[]
Associer(Fn,C:\4SI\Nombre.dat)

Recrer(Fn)
FinCration

3. Analysedelaprocdureremplir
DefProcRemplir(VarFn:Nombre)
Resultat=Fn
Fn=[]Pouride1Nfaire

KRandom(100)

Ecrire(Fn,k)

FinPour
N=[]Repeter

N=Donne(Entrerlenombredesentier)

Jusqu'Ndans[2..50]
FinRemplir

4. AnalysedelafunctionPgcd
DefFnPgcd(a,b:entier):entier
Resultat=Pgcd
Pgcd=[]Pgcda
a=[] Repeter

T.D.O

ramodb

ab
Objet
Type/Nature
Role

br
A
Entier

jusqua(b=0)
B
Entier
R
FinPgcd

Entier

183

Role

ExercicesetproblmesAnnexe

5. AnalysedelaFonctionrecherche
DefFnRecherche(VarFn:Nombre):entier
Rsultat=Recherche
Recherche=[]RechercheM[n,1]

T.D.O
M=[ouvrir(Fn),i1,n0]
Objet
Type/Nature

TantqueNon(Fin_Fichier(Fn))faire
K
Entier

Lire(Fn,k)
I
Entier

NN+1
N
Entier

M[i,N]K

FinTantque

PN

Rpter

Ii+1,j1

Tantque(j<p)faire

M[i,j]Pgcd(M[i1,j],M[I1,j+j])

Jj+1

T.D.O

FinTantQue

PP1
Objet
Type/Nature

Jusqua(I=N)
N
Entier
FinRecherche
I
Entier

K
Entier

M
Tableau[1..50,1..50]den er

P
Entier

184

Role

Rle

ExercicesetproblmesAnnexe

Srie N 3
Exercice N 1 :

Soitlesdclarationssuivantes:
Type
Fiche=Enregistrement

Rib:longEntier

Nom:chaine

Prnom:chaine

Solde:rel

FinFiche
Compte=FicherdeFiche
Tab=Tableau[1..100]defiche
Nbre=FicherdEntier

Objets
E1
E2
E3
T
Ft
Fn
Fc

Type/Nature
Fiche
Fiche
Entier
Tab
Texte
FichierNbre
Compte

Rle
EnregistrementdeFiche
EnregistrementdeFiche
Unnombre
Tableaude100Fiche
Fichertexte
Fichierdentiers
Ficherdeclient

Ensebasantsurlesdclarationsprcdentes,direpourchacunedesinstructionssuivantes
sielleestcorrecteounon.Danslecasouellenelestpas,justifiervotrerponse.
a E1E2
b E1E2.Rib
c E1T[3]
d Ecrire(T[3])
e E1T[4].solde
f Lire(fn,E3)
g Ecrire_nl(Ft,E2)
h Ecrire(Fn,E2.solde)

185

ExercicesetproblmesAnnexe

Exercice N 2 :
Soitlalgorithmesuivant:
0)DbutDefFNInconnue(st:chaine):chaine
1)SiLong(st)>0Alors
Si(st[1]dans[a..z])Alors
InconnueCHR(ORD(st[1])32)+Inconnue(Sous_chaine(st,2,Long(st)1))
Sinon
Inconnuest[1]+Inconnue(Sous_chaine(st,2,Long(st)1))
Finsi
Finsi
2)FinInconnue
Questions:
a) ExcuterlamainlalgorithmedelafonctionInconnueavecst=bac2011et
st=Algorithme?
b) Dduirelerledecettefonction?

Exercice N 3 :
Pourvrifierladivisibilitdunen erNpar11onpeutprocdercommesuit:
SoustrairedeNamputdesonchiffredesunits,lechiffresupprimetrecommencer
ventuellementaveclenombreainsiobtenujusqu':
TrouverunzroonditqueNestdivisiblepar11.
Unen er<11onditqueNnestpasdivisiblepar11.
Exemple

N=
1049818

1049818=104973

104973=10494

10494=1045

1045=99

99=0
LenombreNestdivisiblepar11

N=12345

12345=1229

1229=113

113=8

08=8<0

Nnestpasdivisiblepar11
QUESTION:
Ecrirelalgorithmedunmodulequipermetdevrifiersiunentierdonnestdivisiblepar
11ounon.

186

ExercicesetproblmesAnnexe

Exercice N 4 :

Ondsirecrireunprogrammequipermetderaliserletraitementsuivant:
Fairelalecturedunentierdcimalpartirdunfichierdentiers.
Conver rlen erdcimalsonquivalentaunebasedonneb(quipeuttre2,8
ou16).
Inverserlenombretrouv.
Convertirlersultatdelabasebalabasedcimale
Retournerlenombredcimalobtenufinalementaufichieretlaplacedelentier
initial.
Rpterlesmmestapespourtouslesentiersdufichier.
Exemple:

Soitlabaseb=16etFn:fichierdentier

Contenudufichier
ContenudufichierFn
Equivalanten
InversedelHexadcimal
Fnfinalementen
initialement
Hexadcimal
dcimal
30
1E
E1
225
162
A2
2A
42
2988
BAC
CAB
3243

Pourcelaonvousdemandedcrire:
1 Lanalysepuislalgorithmedunmodulequipermetderemplirunfichiernombres.datpar
nentiersalatoires<1000.(Avec10<n<200)
2 Lanalysepuislalgorithmedunmodulequipermetdeconvertirunentierdcimalson
quivalentunebaseb.(solutionrcursive).
3 Lanalysepuislalgorithmedunmodulequipermetdinverserunechainedonne(solution
rcursive).
4 Lanalysepuislalgorithmedun(oudes)module(s)quirpondreauxtachescitsau
dbut.
5 Dduirelanalyseetlalgorithmeduprogrammeprincipal.

(N.B:danscettesolutionnutiliserquunseulfichiernombre.dat)

187

ExercicesetproblmesAnnexe

Exercices N 5

Onseproposedcrireunprogrammequipermetde:
RemplirunematriceMdedegr4pardesen ersbinaires(0et1seulement).
ChaquelignedelamatriceMreprsentelaconversionbinairedunen erXdelabase10;
o TrouverlavaleurdeXpourchaquelignedeM,
o AssocierlesvaleursdeXdansuntableauT,
Trierpuisafficher(enordredcroissant)leslmentsdutableauT.
Exemple:

SiM=
1 2 3 4

T
1 1 0 1 0

10

2 0 1 1 1
3 1 0 0 1
4 1 0 1 1

7
9
11

(1010) 2 =(10) 10 Comment?


23222120
1010
1010=1*23+0*22+1*21+0*20=1*8+0*4+1*2+0*1=10

Leprogrammeaffichera:111097

Question:
1) Analyserleproblmeenledcomposantenmodules.
2) Analyserchacundesmodulesenvisagsdanslanalyseduprogrammeprincipal.
3) Dduiredecequiprcdelalgorithmeduprogrammeprincipalainsiquelesalgorithmesdes
modulesenvisags.

188

ExercicesetproblmesAnnexe

Exercice N 6
Lemotdepasse
Uneapplicationinformatiquegnreautomatiquementunmotdepassedelamaniresuivante:
Il sagit de remplir alatoirement une matrice carre M de taille ( NL x NC) avec (5< NL <13 et 5
<NC<13)pardeschiresbinaires;
Convertirlecontenudechaqueligneensonquivalentdcimal;silenombretrouvcorrespondun
codeASCIIalorslecaractrecorrespondantferapartiedumotdepassesinonlecaractredontlecode
ASCIIestlerestedeladivisiondunombretrouvpar256enferapar e;
Lemotdepassefinalestobtenuentriantlachaineconstituedanslordredcroissantenemployantla
mthodedutribullesdanssaversionrcursive.
Exemple
PourNL=4,NC=10

M=
1 0 0 1 0 0 0 0 0 1
0 0 0 1 1 0 0 0 1 0
1 0 0 1 0 1 1 1 0 1
0 0 0 0 1 1 0 0 0 1
Lapplicationgnreralemotdepassesuivant:b]A1
Questions:
1) Quelles sont les structures de donnes adquates ce problme? justifier le choix de chaque
structurepropose.
2) Analyseretdduirelalgorithmeduprogrammeprincipalquipermetderaliserletraitementdcrit
prcdemmentenledcomposantenmodules.
3) Analyser chacun des modules envisags prcdemment et en dduire les algorithmes
correspondants.

189

Das könnte Ihnen auch gefallen