Beruflich Dokumente
Kultur Dokumente
CoursAlgorithmique&Programmation
4meScienceinformatique
Exercicesetsujetsbaccorrigs
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
ChapILesenregistrements&lesfichiers
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)
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)
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
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 :
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
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
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
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
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
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
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
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
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
Arriv
Letraitementrcursif:
Dpart:infocherche
Descendreversleconnue
Arrtenbas:0
Monterverslersultat
Commentfaire???
52
ChapIILarcursivit
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
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?
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:
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
NB:ch1etch2sontanagrammessilssecomposentdesmmesle res.
Exemple:ch1=chienetch2=niche.
Exercice N22
EcrireunefonctionrcursivepermettantderetournerlePGCDdedeuxentierspositifsen
utilisantleprincipedediffrence.
70
71
ChapIIILesalgorithmesdetris
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
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
88
ChapIVLesalgorithmesrcurrents
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
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
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
Exercice 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
101
ChapVLesalgorithmesdarithmtique
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
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
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
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.
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
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
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
133
ChapVLesalgorithmesdarithmtique
134
ChapVLesalgorithmesdarithmtique
135
ChapVLesalgorithmesdarithmtique
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)
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
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
143
ChapVIILesalgorithmesdapproximation
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
(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
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=
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
Onseproposedecalculerunevaleurapprochedarctangentedexparlaformule
suivante:
Arctan(x)=
EcrireunalgorithmedunefonctionpermettantderetournerunevaleurapprochedeArctan(x)
enutilisantlaformuledonnecidessus.Lecalculsarrtelorsquelavaleurabsoluedela
diffrenceentredeuxtermesuccessifsdevienneinferieureougaleuneerreurepssilon(avecx
etepsilondeuxrelsdonns).
Exercice N 4
Onseproposed'crireunprogrammeenPascalquioffreunmenudequatrechoixdfinis
selonlavaleurd'unelettresaisie.
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 )
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.
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 )
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
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
[ , ]
Analyseretdduirelalgorithmedunmodulequipermetdecalculerunevaleurapprochedela
surfacedelaparcelleenutilisantlamthodedesrectanglesaupointdumilieu.
Exercice N 8
ondonneLn(1+x)=xx/2+x3/3x4/4+....
crireunalgorithmelogquipermetdesaisirunrelx,avecx>1etx1etdecalculerunevaleur
approchedeln(1+x)uneprcision104.
163
ChapVIILesalgorithmesdapproximation
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
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
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
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
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
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
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.
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
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.
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?
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
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
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