Professional Documents
Culture Documents
2014-2015
Edition 2.1
A tous les lecteurs : afin de réussir ce travail n’hésitez pas de me signaler tout type d’erreurs ou de fautes.
e-mail : khaledchraiet@yahoo.fr
Facebook : www.facebook.com/khaled.chraiet.3
1
Chap I Les enregistrement et les fichiers
2
Rappel cours de 2ème et 3ème
Program nom_prog ;
Uses wincrt ; { une bibliothèque}
Const
Déclaration des constantes
Type
Déclaration des nouveaux types
Var
Déclaration des variables globales
3
Rappel cours de 2ème et 3ème
La table de vérité:
X Y NON(x) x ET y x OU y x OUex y
FAUX FAUX VRAI FAUX FAUX FAUX
FAUX VRAI VRAI FAUX VRAI VRAI
VRAI VRAI FAUX VRAI VRAI FAUX
VRAI FAUX FAUX FAUX VRAI VRAI
4
Rappel cours de 2ème et 3ème
5
Chap I Les enregistrement et les fichiers
6
Chap I Les enregistrement et les fichiers
A- Les enregistrements
I- Introduction :
Activité 1:
Un établissement scolaire utilise une application informatique pour saisir, manipuler, et
mémoriser les informations concernant ses élèves (exemple des informations).
Numéro Nom Prénom sexe moyenne
Question :
Afin d’écrire ce programme proposer une structure de donnée adéquate a ce problème.
Réponse :
1- Utiliser des variables simples :
Num : pour numéro
Nom : pour nom
7
Chap I Les enregistrement et les fichiers
En général :
Nous venons de voir que les variables simples ou les tableaux ne permettent pas de ranger des
données de types différents.
Si nous voulons établir par exemple une structure comportant en même temps des informations
alphanumériques, numériques, nous devons créer un nouveau TYPE qui permet de les regrouper.
8
Chap I Les enregistrement et les fichiers
En Pascal
Type
Nom_type = Record
Champ1 : type1 ;
Champ2 : type2 ;
.
.
Champn : type n ;
End ;
Var
Nom_var : Nom_type ;
N.B :
Les types (type1, type2,…, type n) peuvent être soit prédéfinit (entier, réel, booléenne…),
soit définis par l’utilisateur (tableau, semaine,…)
Applications :
Proposer une structure de données adéquate pour chaque objet :
1. Chaque étudiant doit présenter les informations suivantes : CIN (entier), Nom et prénom
(chaine de longueur max 35 cc), date de naissance (sou la forme jj/mois/aaaa), sexe (M/F),
Discipline (chaine), nom de l’établissement (chaine).
2. Chaque voiture a vendre doit possède les informations suivantes : Matricule (chaine),
Marque (chaine), Modèle (chaine), année de modèle, km parcouru, (prix de vente).
3. Chaque médicament dans une pharmacie doit avoir les informations suivantes : Référence,
nom commercial, date de fabrication, durée de validité, et le prix.
4. Dans une annonce publicitaire on trouve la liste suivante des téléphones à vendre.
Référence Marque Modele Prix (€ )
1000 Nokia C2-05 35
1001 Nokia Asha 302 114
1002 Samsung Galaxy S III Mini 250
1003 Sony Xperia Z 407
9
Chap I Les enregistrement et les fichiers
Pour n élèves
Num Nom Prénom Sexe Moy Num Nom Prénom Sexe Moy …… Num Nom Prénom Sexe Moy
1 2 …… n
Déclaration :
T.D.N.T
Type
Fiche = Enregistrement
Num : entier
Nom : chaine T.D.O
Prénom : chaine Objet Type/Nature Rôle
Sexe : caractère EEL Fiche Enregistrement pour définir un élève
Moy : réel T Tab Tableau de 50 enregistrements d’élèves
Fin fiche
Tab = Tableau [1 .. 50 ] de Fiche
10
Chap I Les enregistrement et les fichiers
Syntaxe
b) L’écriture ou l’affichage :
Même que la lecture on affiche le contenu d’un enregistrement champ par champ.
Syntaxe :
c) L’affectation
1. on peut affecter une valeur a un champ de l’enregistrement
Exemple :
11
Chap I Les enregistrement et les fichiers
Application :
Dans un établissement scolaire, un élève est identifié par : son matricule (entier), son nom
et prénom (chaine) et sa moyenne (réel).
On se propose d’écrire un programme modulaire permettant de saisir les informations de
N élèves (N<=50) et d’afficher la liste des élèves classé par moyenne (dans l’ordre décroissant).
B- Les fichiers
I- Introduction :
Notons que les constantes, les variables simples, les tableaux et même les enregistrements perdre
leurs contenus dé qu’on ferme le programme en cours d’exécution et sur tout lorsque en éteindre
l’ordinateur puisque ils font partie de la mémoire centrale (RAM). Or dans le plus part des cas on a
besoin de conserver les informations dans des supports de stockage magnétique, ce qui nécessite
l'utilisation des fichiers.
II- Définition :
Un fichier est un ensemble structuré de données de même type, nommé et enregistré sur un
support physique par l’ordinateur ( disque dur, flash disk, CD, DVD,…).
Un fichier peut contenir des caractères (fichiers textes), des programmes, des valeurs (fichiers des
données). Donc On distingue deux types de fichiers :
N.B :
• La taille d’un fichier peut être quelconque, la seule limitation étant la taille de la mémoire
auxiliaire.
• La fin de fichier est matérialisée par un caractère spécial qui sert de marqueur.
12
Chap I Les enregistrement et les fichiers
Pointeur
Pour accéder (lire/ modifier) a un bloc (enregistrement) nous devons tout d’abord le localiser c.a.d
le pointer (faire référence).
L’organisation d’un fichier est la manière dont sont rangés les enregistrements du fichier sur le
support physique.
L’organisation est choisie à la création du fichier (rapidité d’accès et espace mémoire).
Il existe plusieurs types d’organisations des fichiers. Les plus importants sont :
• L’organisation séquentielle : elle ne permet qu’un seul accès le séquentiel (pour accéder
un enregistrement on doit passer par les enregistrements qui le précède).
• L’organisation relative (directe) : les enregistrements sont contigus (touche l’un l’autre) et
identifiés par un numéro d’ordre. L’indication d’un numéro permet donc un accès direct à
l’information ainsi référencée.
13
Chap I Les enregistrement et les fichiers
En pascal
Program test ;
Uses wincrt ;
Type
Nom_fichier = File of type_composants ;
Var
Nom_logique : nom_fichier;
Exemple :
T.D.N.T
Type
fentier = Fichier d’entier
T.D.O
Objet Type/nature Rôle
Fent Fentier Fichier des entiers
Associer (nom logique, nom physique ) ASSIGN (nom logique, nom physique )
14
Chap I Les enregistrement et les fichiers
Exemple:
Soit la declaration suivante:
Type
Eleve = fichier de fiche
Var
Fel : Eleve
Soit les instructions suivantes:
Syntaxe :
En analyse et en algorithme En Pascal
Syntaxe :
En analyse et en algorithme En Pascal
15
Chap I Les enregistrement et les fichiers
Application :
Toujours avec la même activité, un élève est identifié par :
Son numéro, son nom et son prénom et sa moyenne
Ecrire une suite d’instruction permettant de saisir les informations de n élèves dans un fichier
scolaire.dat.
Solution
Associer ( fel , ‘C:\4si3\scolaire.dat’) Association entre le nom logique fel le nom
physique c:\4si3\scolaire
Pour i de 1 à n faire
Fin avec
16
Chap I Les enregistrement et les fichiers
Syntaxe :
17
Chap I Les enregistrement et les fichiers
Fonction qui fournit le numéro d’ordre (la position) de l’élément sur le quel se trouve le
pointeur du fichier.
Application :
Signe fin
Soit le fichier F qui contient les enregistrements suivants : Fichier
Pointeur
- Pour savoir le nombre d’enregistrement dans ce fichier on écrit :
Taille_Fichier ( F ) renvoi 6 c.a.d il existe 6 enregistrements.
- Pour savoir la position actuelle du pointeur on écrit :
Position_Fichier (F) Renvoi 3 c.a.d enregistrement N° 3.
- Pour positionner le pointeur a la fin du fichier on écrit :
Pointer (F , 6 ) = Pointeur ( F , Taille_Fichier ( F ) )
- Pour positionner le pointeur sur l’enregistrement qui précède la position actuelle de pointeur
Pointer ( F , 2 ) = Pointer ( F , Position_Fichier ( F ) -1 )
2- Effacer un fichier
Syntaxe :
3- Renommer un fichier
Syntaxe :
18
Chap I Les enregistrement et les fichiers
4- Tronquer un fichier
Tronquer un fichier sa veut dire Tout ce qui se trouve au delà de la position actuelle du pointeur
sera perdu.
Syntaxe :
Fonction logique qui retourne Vrai si l’on trouve sur le caractère CR (retour chariot) et Faux
dans le cas contraire.
19
Chap I Les enregistrement et les fichiers
Procédure qui ouvre le fichier texte et positionne son pointeur à la fin de ce dernier afin
d’ajouter un élément.
Procédure qui lit le contenu d’une ligne, puis pointe la prochaine ligne.
Syntaxe :
Procédure qui introduire dans un fichier texte une ligne de type chaine puis une séquence CR-
LF pour marquer la fin de ligne.
20
Chap I Les enregistrement et les fichiers
Question :
Recopier le tableau ci-dessous sur la copie de l’examen puis le complèter en mettant dans la 2ème
colonne en mettant Valide si l’instruction donnée dans la 1ère colonne est valide ou en mettant
Invalide dans le cas contraire, tout en justifiant la réponse si l’instruction est Invalide.
• Remplir un fichier nommé Nombre.dat par n chiffres aléatoires non nuls ( avec 2 < n ≤ 50 )
• Déterminer et afficher le plus petit nombre (pn) et le plus grand nombre (gn) formés par
tous les chiffres de ce fichier.
• Vérifier si les écarts entre tous les chiffres symétriques de gn forment des termes successifs
d’une suite arithmétique, dans l’affirmative, afficher sa raison ( r ).
8
6
4
Le plus petit nombre (pn) est : 3446789
3
9 et le plus grand nombre (gn) est : 9876443
7
4
Les écarts 6, 4 et 3 calculés entre tous les chiffres symétriques de gn ne forment pas des
termes successifs d’une suite arithmétique. En effet U1=U0 – 2 r1 = - 2
21
Chap I Les enregistrement et les fichiers
9 8 7 6 4 4 3
U2 = 7 – 4 = 3
U1 = 8 - 4 =4
U0 = 9 - 3 =6
Travail demandé :
22
Chap I Les enregistrement et les fichiers
Série N° 1
Exercice N°1
Soit l’enregistrement suivant qui définit la facture du Steg
Type
Fact = Enregistrement
Ref : mot
Ancqt : Entier
Nvqt : Entier
Prixkilo : Réel
Fin Fact
Tab = Tableau [ 1 . . 100 ] de Fact
Var
T : Tab
F , F1 : Fact
Question
Rependre aux propositions suivantes par vrai ou faux
Exercice N° 2
Un club vidéo possède N films (avec 10 <= N <= 200), chaque film est identifier par
- Une référence (un entier de 4 chiffres)
- Le titre de film (une chaine)
- Durée de film en minute
- Année de sortie de film
Ecrire un programme qui permet de saisir les informations de l’ensemble des films, puis d’afficher
la liste du film classé par l’année de sortie (de nouveau a l’ancien).
Exercice N°3
Une société veut informatiser la gestion de ses employés. Elle détient pour chacun les informations
suivantes :
- Le nom et le prénom (chaine de caractères)
- Le grade : uniquement A, B, C, ou D.
- Le code fiscal (un entier non signé)
- L’assurance maladie (O pour oui et N pour non)
Le nombre d’employés est N avec ( 4<= N <= 120).
Questions :
Ecrivez un programme modulaire nommé GESTION qui permet la saisie de toutes les fiches de
renseignements puis d’afficher :
1- Toutes les fiches (une par une et avec une attente jusqu'à l’appui sur la touche ENTREE).
2- Le nombre d’employés ayant un grade donné et leur pourcentage par rapport au nombre total des
employés.
Traduisez ce programme en Pascal et l’enregistrez sous le nom societé.pas.
23
Chap I Les enregistrement et les fichiers
Série N° 2
Exercice N° 1
Dans un kiosque de journaux le plus part des journaux sont connus par :
Ecrire un programme modulaire utilisant un menu de choix qui permet de gérer le stock
de journaux dans ce kiosque. Le programme permet de :
• Saisir les informations de tous les journaux vendus dans ce kiosque dans un fichier
Journal.dat sur l’unité C dans un dossier kiosque.
• Chercher le journal (ou les journaux) dont son nom commence par une chaine donnée.
• Modifier les prix des journaux selon une période donnée et de pourcentage donnée
(exemple tous les journaux Mensuels subit une augmentation de prix de 10%)
Exercice N° 2
• Remplir un fichier « nombre.dat » par N entiers aléatoires < 1000 (avec 5 < N < 100).
• Copier le contenu de fichier dans un tableau T.
• Trier le tableau T dans l’ordre croissant.
• Retourner le contenu du Tableau dans le fichier
• Afficher le contenu de fichier avant et après le tri.
24
Chap I Les enregistrement et les fichiers
Exercice N° 3
Un récepteur numérique mémorise les chaines télévisions et radios sous cette forme :
Ecrire un programme modulaire utilisant un menu de choix qui permet de gérer les
chaines dans un récepteur. Le programme permet de :
1- Saisir les informations de N chaines ( avec 10 <= N <= 2000) dans un fichier Chaine.dat sur
l’unité C : dans un dossier récepteur.
4- Eclater le fichier Chaine.dat en deux fichiers texte, le premier pour les chaine crypte appelé
Crypté.txt et le deuxième pour les chaine clair appelé Clair.txt.
Exercice N° 4
On se propose d’écrire l’analyse d’un programme pour remplir un fichier texte puis
d’afficher la fréquence de chaque lettre alphabétique (majuscule ou minuscule) du texte. Le
résultat doit être stocké dans un deuxième fichier texte sous la forme suivante :
Fréquence de A = 12
Fréquence de B = 9
…..
Travail demandé :
25
Chap I Les enregistrement et les fichiers
26
Chap I Les enregistrement et les fichiers
Fin Ej
Ecrire ( Fj , Ej )
Répéter
Rep = Donnée ( ‘’ Autre saisie O/N : ‘’)
Jusqu'à ( Majus (rep ) dans [ ‘’O’’ , ‘’N’’ ] )
Jusqu'à ( Majus ( Rep ) = ‘’N’’ )
Fin Saisie
T.D.O
27
Chap I Les enregistrement et les fichiers
Fin Avec
Ecrire ( Fj , Ej )
Répéter
Rep = Donnée ( ‘’ Autre Ajout O/N : ‘’)
Jusqu'à ( Majus ( rep ) dans [ ‘’O’’ , ‘’N’’ ] )
Jusqu'à ( Majus ( Rep ) = ‘’N’’ )
Fin Ajout
T.D.O
28
Chap I Les enregistrement et les fichiers
Nom= [ ] Répéter
Nom = Donnée (‘’ Entrer le nom d’un journal : ‘’ )
Jusqu'à Long (nom ) > 0
fin recherche
T.D.O
29
Chap I Les enregistrement et les fichiers
Px =[ ] Répéter
P x= Donnée (‘’ Entrer la valeur de réduction ou d’’augmentation de prix : ‘’)
Jusqu'à Px > - 100
Fin Maj
T.D.O
30
Chap I Les enregistrement et les fichiers
Correction ex 2 série N° 2
1- Analyse programme principal
Nom : Ex2
Résultat = aff
Aff =[ ] Répéter
Ecrire (‘’ ************ Menu ******************* ‘’)
Ecrire (‘’1- Remplir le fichier Nombre par N entiers aléatoires : ‘’)
Ecrire (‘’ 2- Trier le contenu du fichier utilisant un tableau ‘’)
Ecrire (‘’3 – Afficher le contenu du fichier Nombre ‘’)
Ecrire (‘’ 4 – Quitter ‘’)
Répéter
Chx = Donnée (‘’ Entrer votre choix : ‘’)
Jusqu'à chx dans [ 1 . . 4 ]
Selon chx faire
1 : Proc remplir ( Fn )
2 : Proc trif ( Fn )
3 : Proc affiche ( fn )
4 : Exit
Fin Selon
Jusqu'à ( Chx = 4 )
Fin Ex2
T.D.N.T
Type
Nombre = Ficher d’entier
T.D.O
31
Chap I Les enregistrement et les fichiers
Fin trif
T.D.O
32
Chap I Les enregistrement et les fichiers
repeat
with Ejour do
begin
repeat
write ('Entrer la numéro de serie du journal : ');
readln (num);
until (num>0) ;
repeat
write ('Entrer le titre du journal : ');
readln (titre);
until (length(titre)>0);
repeat
write ('Entrer la periode du journal : ');
readln(per);
until upcase(per) in ['Q','H','M','T','A'];
repeat
33
Chap I Les enregistrement et les fichiers
write(Fjour,Ejour);
Repeat
write ('Voulez vous saisi un autre journal (O/N) ? : ');
readln (rep);
until upcase (rep) in ['O','N'];
clrscr;
until upcase (rep) = 'N';
close(Fjour);
end;
34
Chap I Les enregistrement et les fichiers
until (prix>0) ;
clrscr
end;
write(Fjour,Ejour);
Repeat
write ('Voulez vous saisi un autre journal (O/N) ? : ');
readln (rep);
until upcase (rep) in ['O','N'];
clrscr;
until upcase (rep) = 'N';
close(Fjour);
clrscr;
end;
35
Chap I Les enregistrement et les fichiers
36
Chap I Les enregistrement et les fichiers
end;
clrscr;
close(Fjour);
end;
{programme principale}
begin
clrscr;
repeat
writeln ('**********************************************');
writeln ('******************** Menu ********************');
writeln ('**********************************************');
writeln ('* 1) creation du fichier *');
writeln ('* 2) saisie les informations des journales *');
writeln ('* 3) ajout d''une journale *');
writeln ('* 4) affichage des journeaux *');
writeln ('* 5) chercher les journeux *');
writeln ('* 6) mise à jour des prix *');
writeln ('* 7) exite *');
writeln ('**********************************************');
writeln ('**********************************************');
repeat
write('Entrer votre choix : ');
readln (choix);
clrscr;
until choix in [1..7];
ass(Fjour);
case choix of
1:creation(Fjour);
2:saisi(Fjour,Ejour);
3:ajout(Fjour,Ejour);
4:affiche (Fjour,Ejour);
5:cherche (Fjour,Ejour);
6:misejour (Fjour,Ejour);
7:exit;
end;
until choix = 9 ;
end.
37
Chap I Les enregistrement et les fichiers
Exercice N° 2
program tri_fichier_entier;
uses wincrt;
type
nombre = file of integer;
tab = array [1..100] of integer;
var
FE:nombre;
T:tab;
choix:integer;
n:integer;
38
Chap I Les enregistrement et les fichiers
39
Chap I Les enregistrement et les fichiers
begin
repeat
clrscr;
writeln('******************** MENU *********************');
writeln('* 1) Creation du fichier *');
writeln('* 2) Remplir le fichier *');
writeln('* 3) Tri du Fichier *');
writeln('* 4) Affichage du fichier *');
writeln('* 5) Quitter *');
writeln('***********************************************');
repeat
write ('Entrer votre choix : ');
readln (choix);
until choix in [1..5];
ass (FE);
case choix of
1:creation(FE);
2:saisi(FE,n);
3:TRI (FE,T,n);
4:affichage (FE);
5:exit
end;
until choix = 5;
end.
40
Chap I Les enregistrement et les fichiers
Correction exercice N° 4
41
Chap I Les enregistrement et les fichiers
42
Chap I Les enregistrement et les fichiers
43
Chap I Les enregistrement et les fichiers
Série N° 3
Exercice N°1
Une société de produit laitier décide d’automatiser la gestion de ses produits. On détient
pour chaque produit les informations suivantes :
• Numéro ‘‘ num ‘’ : Numéro unique de l’article
• Désignation ‘‘ design ‘’ : Nom de l’article (YAOURT, LAIT ou FROMAGE)
• Une matricule ‘‘ mat ‘’ : Remplie automatiquement par une chaîne représentée par les
deux remiers caractères de la désignation et le numéro de l’article. Exemple : Pour l’article
dont le numéro est 10, la désignation est "YAOURT" : La matricule sera ‘‘ YA10 »
• Une date de vente qui lui-même formée de trois champs :
o Jour ‘‘ j ’’ (1 à 31)
o Mois ‘‘ m ’’ (1 à 12)
o Année ‘‘ a ‘’ (≥2000)
• Quantité vendue ‘‘ qv ‘’
• Prix unitaire ‘‘ pu ‘’
Travail demandé :
On désire ecrire un programme permettant de :
1. Saisir et enregistrer les articles des différents produits dans un fichier ayant pour nom
logique "FPROD" et qui correspond à un nom physique "Produit.dat" qui sera créer sur la
racine de l’unité C:
La saisie s’arrête à la saisie d’un numéro négatif qui ne sera pas retenue dans le fichier.
2. Afficher le numéro et la date de vente d’un article qui correspond à une matricule donnée.
Si aucun article n’est trouvé, afficher un message d’erreur.
3. Organiser le fichier ‘‘FPROD » dans un autre fichier ‘‘ FPROD_ORD » en rangeant au début
les données relatives à l’article LAIT puis celles du YAOURT puis celle du FROMAGE.
4. Créer un fichier texte dont la structure est la suivante :
• La 1ére ligne comporte le message "Articles vendus le : " suivit par la date donnée (la date
saisie doit respecter la même condition indiquée ci-dessus).
• La 2ème ligne comporte la recette du jour pour la date donné précédée par le message
"Recette du jour : "
• La suite du fichier comporte les matricules des articles vendus à la date donnée précédés
par le message "Matricules des articles vendus : "
Ainsi, le fichier texte prendra la forme présentée par l’exemple suivant :
44
Chap I Les enregistrement et les fichiers
45
Chap I Les enregistrement et les fichiers
Algorithme
0) Début Ex1S3
1) Aff =[ ]Répéter
Ecrire (‘‘******* Menu *********** ‘‘)
Ecrire (‘‘ 1-création des fichiers ‘‘ )
Ecrire(‘‘ 2- saisie des article ‘‘ )
Ecrire(‘‘ 3- afficher le numéro et la date de vente ‘‘)
Ecrire (‘‘4- organiser le fichier FPROD dans un FPROD_ORD ‘‘)
Ecrire(‘‘5- remplir le fichier Texte’’)
Ecrire(‘‘6- Afficher le fichier typé FPROD’’)
Ecrire(‘‘7- Afficher le fichier texte FART’’)
Ecrire(‘‘8- Quitter ‘‘)
Répéter
Chx=donnée(‘‘ Entrer le choix : ‘‘)
Jusqu'à chx dans [ 1 . . 8]
Proc association (FPROD,FPROD_ORD,FART)
Selon chx Faire
1: proc Création(FPROD, EPR)
2 : Proc Saisie (FPROD , EPR)
3 : Proc Affiche(FPROD, EPR)
4 : Proc Organiser(FPROD, FPROD_ORD, EPR)
5 : Proc Remplir (FPROD,FART, EPR)
6 : Proc AffichePROD( FPROD, EPR)
7 : Proc AfficheART (FART)
8 : Exit
Fin Selon
Jusqu'à chx = 8
2) Fin Ex1s3
46
Chap I Les enregistrement et les fichiers
47
Chap I Les enregistrement et les fichiers
Répéter
Ecrire(‘‘Entrer la quantité : ‘‘)
Lire (qv)
Jusqu'à qv >0
Répéter
Ecrire(‘‘Entrer prix : ‘‘)
Lire (pu)
Jusqu'à pu >0
FinSi
Fin avec
Ecrire(FPROD, EPR)
2) Fin Saisie
E) Analyse Proc Affiche (VAR FPROD :Prd ; EPR :Article)
0) Début Déf Proc Affiche (VAR FPROD :Prd ; EPR :Article)
1) Mt =[ ] Répéter
Ecrire(‘‘Entrer un matricule : ‘‘)
lire (mt)
Val (copy(mt,2,2), n, e)
jusqu'à (e=0)
2) Aff =[ Ouvrir(FPROD), i 0 ]
Tant que Non(Fin_Fichier(FPROD)) Faire
lire (FPROD, EPR)
Si mat = mt Alors
Ecrire (‘‘le Numéro est : ‘‘, Num)
Ecrire (‘‘La date de vente : ‘‘, datv . j, ‘‘/ ‘‘ , datv. m , ‘‘/’’, datv . a)
i i+1
Finsi
Fin Tant que
Si i =0 Alors
Ecrire (‘‘Article n’existe pas ‘‘)
FinSi
3) Fin Affiche
F ) analyse Proc Organiser(Var FPROD,FPROD_ORD : Prd ; EPR : Aricle)
0) Début Déf Proc Organiser(Var FPROD,FPROD_ORD : Prd ; EPR : Aricle)
1) Org =[ Ouvrir(FPROD)] Tant Que Non (Fin_Fichier (FPROD)) Faire
Lire (FPROD , EPR)
Si EPR = ‘‘LAIT» Alors
Ecrire (FPROD_ORD, EPR)
Fin si
Fin Tant que
2) [ Ouvrir(FPROD)] Tant Que Non (Fin_Fichier (FPROD)) Faire
Lire (FPROD , EPR)
Si EPR = ‘‘YAOURT’’ Alors
Ecrire (FPROD_ORD, EPR)
Fin si
Fin Tant que
3) [ Ouvrir(FPROD)] Tant Que Non (Fin_Fichier (FPROD)) Faire
Lire (FPROD , EPR)
Si EPR = ‘‘FROMAGE’’ Alors
Ecrire (FPROD_ORD, EPR)
Fin si
48
Chap I Les enregistrement et les fichiers
G) analyse Proc remplir (VAR FPROD : Prd ; FART : texte ; EPR : Article)
0) Début Déf Proc remplir (VAR FPROD : Prd ; FART : texte ; EPR : Article)
1) Avec Dats faire
Ecrire(‘‘Entrer le jour : ‘‘),
Lire(j)
Ecrire (‘‘Entrer le mois : ‘‘)
Lire (m)
Répéter
Ecrire(‘‘Entrer l’année’’)
Lire (a)
Jusqu'à a >2000
Str (j ,chj)
Str (m,chm)
Str(a, cha)
Fin Avec
2) Ch chj + ‘‘/’’ + chm + ‘‘/’’ + cha
3) Ecrire (FART , “Articles vendus le : ‘‘ + Ch
4) FART = [ Ouvrir(FPROD), Rec 0 ] Tant que Non (Fin_Fichier(FPROD)) Faire
Lire ( FPROD , EPR)
Si EPR . Datv = Dats Alors
Rec Rec + EPR . qv * EPR . pu
Fin si
Fin Tant que
Str( Rec , ch )
Ch ‘‘Recette du jour’’ + Ch
Ecrire ( FART , Ch)
5) [ Ouvrir(FPROD) ] Tant que Non (Fin_Fichier(FPROD)) Faire
Lire ( FPROD , EPR)
Si EPR . Datv = Dats Alors
Ecrire (FART, EPR . mat)
Fin si
Fin Tant que
6) Fin Remplir
49
Chap I Les enregistrement et les fichiers
50
Chap I Les enregistrement et les fichiers
Série N 4
Exercice N°1
Une société de travaux pense d’informatiser la gestion de ses personnels. Elle garde pour
chaque employé les informations suivantes :
• Matricule : entier de 4 chiffres positif
• Nom, prénom : chaines de 30 caractères au maximum pour chacune.
• Grade : peut être seulement A, B, ou C.
• Salaire : réel.
Proposer l’analyse et l’algorithme d’une application informatique qui permet de répondre aux
taches suivantes :
a) Associer le fichier qui comporte les données des personnels dans le fichier
« Personnels.Dat » de dossier « C:\4SI3 ».
b) Créer le fichier
c) Saisir les données de chaque employé, la saisie s’arrêt selon la demande « Autre saisie
O/N : »
d) afficher la liste des personnels, et la liste des personnels d’un grade donnée.
e) Ajouter un nouvel employé dans le fichier « personnels.dat »
f) Mettre à jour les salaires des employés de grade B qui sont augmentés de 15%.
g) Arranger les personnels selon le Grade dans 3 fichiers distincts :
« PA.dat : pour les personnels de grade A »
« PB.dat : pour les personnels de grade B »
« PC.dat : pour les personnels de grade C »
h) Afficher le contenu d’un fichier donné et le nombre de ces éléments (nombre des
employés).
N.B : utiliser un menu de choix pour cette application.
Exercice N° 2 :
Ecrire l’analyse puis l’algorithme d’un programme permettant de :
• Remplir un fichier « nombre.dat » par N entiers aléatoires <1000, ( avec 4 <N <100).
• A partir de fichier « nombre.dat » remplir un fichier typé « conversion.dat » dans le quel
on trouve : Le nombre en décimal, Sa conversion en binaire, Sa conversion en octal, Sa
conversion en Hexadécimal.
• Mettre dans un fichier texte « Convbase.txt » le contenu de fichier « conversion.dat », sur
chaque ligne de fichier texte en trouve le nombre suivi par ses conversions dans les
différents bases sépares par un espace.
N.B : Tous les fichiers sont enregistres dans le dossier « Bac2013 » sur l’unité C .
51
Chap I Les enregistrement et les fichiers
Série N° 5
Exemple
4592 2 , 2 , 2 , 2 , 7 , 41 4217141
3525 3 , 5 , 5 , 47 1325147
En effet :
• 1921 = 2 * 2 * 2 * 239
La chaine générée sera « 321239 » pour dire que 3 est la fréquence du facteur premier 2 et 1 est
la fréquence du facteur premier 239.
• 3525 = 3 * 5 * 5 * 47
La chaine générée sera « 1325147 » pour dire que 1 est la fréquence du facteur premier 3, 2 est la
fréquence du facteur premier 5 et 1 est la fréquence du facteur premier 47.
Travail à faire :
N.B : tous les fichiers seront enregistrés dans le dossier bac 2013 de l’unité C :
52
Chap I Les enregistrement et les fichiers
Etant donné un fichier texte intitulé « MsgCrypte.txt » contenant un texte crypté d’un
message formé de N lignes, où chaque ligne représente un mot crypté.
• Chaque caractère est crypté par sa représentation binaire, sur 8 bits, de son code ASCII.
On se propose :
• De décrypter les lignes du fichier « MsgCrypte.txt » pour obtenir tous les mots formant le
message initial,
Exemple :
01000010 0110000101100011
0110100101101110011001101111
011010100 11101010110100101101110
00110010001100000011000100110010
Après décryptage, le programme affichera le message suivant : Bac info juin 2012
Notons que, le code ASCII du caractère « B » (le premier caractère du premier mot) est 66,
dont la représentation binaire est 01000010 (les huit premiers bits de la premier ligne du fichier
« MsgCrypte.txt »).
Travail à faire :
53
Chap I Les enregistrement et les fichiers
program ex1s5;
uses wincrt;
type
nombre=file of integer;
var
fn:nombre;
ft:text;
procedure creation (var fn:nombre; var ft:text);
begin
assign (fn, 'c:\4si\nombre.dat');
assign(ft,'c:\4si\facteurs.txt');
rewrite(fn);
rewrite(ft);
end;
procedure remplir (var fn:nombre);
var
n,p,k,i:integer;
st:string;
begin
reset(fn);
repeat
write('Entrer le nombre des entiers n: ');
readln(n);
until n in [3 .. 99];
repeat
write('entrer le nombre des chiffres de chaque entier: ');
readln(p);
until p in [3..5];
for i:= 1 to n do
begin
repeat
write(' Entrer l"entier numero ',i,': ');
readln(k);
str(k,st);
until length(st)=p;
write(fn, k);
end;
close(fn);
end;
54
Chap I Les enregistrement et les fichiers
procedure facteur1( var fn:nombre ; var ft : text); procedure facteur2(var fn:nombre; var ft:text);
var var
i,nb,n:integer; i,nb,n:integer;
st,sti,ch:string; ch,st,c,k,sti:string;
begin
begin reset (fn);
reset (fn); append(ft);
append(ft); while not (eof(fn)) do
while not (eof(fn)) do begin
begin read(fn,n);
read(fn,n); i:=2;
i:=2; ch:='';
nb:=0 ; repeat
ch:=''; if n mod i =0 then
repeat begin
if n mod i =0 then n:=n div i;
begin str(i,sti);
n:=n div i; ch:=ch+sti+' ';
nb:=nb+1; end
end else
else begin
begin i:=i+1;
if nb >0 then end;
begin
str(nb,st); until n=1;
str(i,sti);
ch:=ch+st+sti; sti:='';
nb:=0;
end; repeat
i:=i+1; st:=copy(ch,1,pos(' ',ch));
end; nb:=0;
55
Chap I Les enregistrement et les fichiers
begin
creation(fn,ft);
remplir(fn);
facteur2(fn,ft); { ou facteur1(fn,ft}
affichefn(fn);
writeln;
afficheft(ft);
end
56
La récursivité
57
Chap II La récursivité
La récursivité
I- Introduction
Activité 1 :
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
Arrivée Départ
5 55 =5* 54
5 54 =5* 53
5 53 =5* 52
5 52 =5* 51
5 51 =5* 50
Départ Arrivé
0) Def FN Puis ( a , N : entier ) : entier long 0) Def FN Puis ( a , N : entier) : entier long
1) P = [ P 1 ] 1) Si N = 0 Alors
PP*a Sinon
Fin Pour Puis a * Puis ( a , N – 1 )
2) Puis =[ ] Puis P Fin si
3) Fin Puis 2) Fin Puis
• 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!
Solution itérative :
1) F = [ F 1 ]
Pour i de 1 à N faire
FF*N
Fin Pour
2) Factorielle =[ ] Factorielle F
3) Fin Factorielle
59
Chap II La récursivité
Solution récursive :
1) Si N = 0 Alors
Factorielle 1
Sinon
Factorielle N * Factorielle ( N – 1 )
Fin si
2) Fin Factorielle
II- Définition
La récursivité est une méthode algorithmique qui consiste à appeler un sous programme
dans son propre corps. Cette méthode permet de résoudre des problèmes où l’on doit itérer un
nombre de fois dépendamment du nombre de données.
Un sous programme récursif est un module qui s’appelle lui-même avec des nouvelles
valeurs des paramètres effectifs dans chaque appel jusqu'à une condition d’arrêt.
III- Applications :
Application 1 :
60
Chap II La récursivité
Solution
1) Si n = 0 alors
Somme 0
Sinon
Somme n + Fn somme ( n – 1)
Finsi
2) Fin Somme
Application 2
Ecrire l’analyse puis l’algorithme d’un module qui permet de vérifier si une chaine donnée
non vide est palindrome ou non. ( exple : radar, été, aziza…)
Solution
Palindrome Vrai
Sinion
Si ch [ 1 ] = ch [ Long ( ch ) ] Alors
Sinon
Palindrome Faux
Finsi
Finsi
2) Fin Palindrome
61
Chap II La récursivité
Application 3
Ecrire l’analyse puis l’algorithme d’un module qui permet d’inverser une chaine donnée.
Solution
Inverse ch
Sinon
Finsi
2) Fin inverse
Application 4
1. Proposez une analyse au problème en utilisant un procédé itératif puis un procédé récursif.
Solution
Fin Si
Finsi
5) Fin Triselect
62
Chap II La récursivité
Application 5
Nous proposons de vérifier l’existence d’un entier k dans un tableau T contenant n entiers, en
utilisant la technique de la recherche dichotomique.
1. Proposez une analyse au problème en utilisant un procédé itératif puis un procédé récursif.
Solution
2) Si k = T [ m ] Alors
Dichotomique Vrai
Sinon
Sinon
Sinon
Dichotomique faux
Finsi
Finsi
Finsi
3) Fin Dichotomique
Application 6
1. Proposez une analyse au problème en utilisant un procédé itératif puis un procédé récursif.
63
Chap II La récursivité
Solution
1) Si b = 0 alors
Pgcd a
Sinon
Finsi
2) Fin Pgcd
Application 7
1. Proposez une analyse au problème en utilisant un procédé itératif puis un procédé récursif.
Solution :
Si n mod k = 0 Alors
Premier Faux
Sinon
Premier fn Premier ( n , k + 1 )
Finsi
Sinon
Premier Vrai
Finsi
2) FinPremier
64
Chap II La récursivité
Série N° 6
Exercice N° 1
Soit l’algorithme de la fonction suivante :
1) Début def FN inconnue( a, b : entier) : entier
2) Si a = 1 Alors
Inconnue b
Sinon
Si a mod 2 = 1 Alors
Inconnue b + inconnue( a div 2 , b * 2)
Sinon
Inconnue inconnue ( a div 2 , b * 2 )
Finsi
Finsi
3) Fin inconnue
Questions :
• Trouver inconnue ( 20 , 30 ) et inconnue ( 6, 6 ) ?
• Quel est le rôle de cette fonction ?
Exercice N° 2 :
Soit l’algorithme de la fonction Inconnue suivant :
65
Chap II La récursivité
Exercice N° 4 :
Soit la procédure suivante :
0) Début procédure affichage ( i , n :entier )
1) Ecrire ( i )
2) Si ( i < n ) alors
Répéter
Si ( i = 1 ) alors
Affichage( i + 1 , n )
Finsi
ii+1
Ecrire ( i )
Jusqu’a ( i = n )
Finsi
3) Fin affichage
Questions :
66
Chap II La récursivité
Exercice N° 7
On définie la suite U pour tout entier naturel n,
1
n≥1 par Un= ∑𝑛𝑛𝑘𝑘=1 𝑘𝑘 (𝑘𝑘 − 1 )
𝑛𝑛
Exercice N° 8
La suite de Syracuse est définie par :
𝑈𝑈𝑈𝑈
Un+1 = si Un est pair
2
67
Chap II La récursivité
Série N° 7
Exercice N° 1
Exercice N° 2
Mat est un type utilisateur représentant un tableau d’entiers de 20 lignes et de 20 colonnes. On
donne l’algorithme de la procédure inconnue suivante :
1. Exécuter manuellement l’algorithme de la procédure Inconnue avec les paramètres effectifs suivants :
N = 3 , i = 1, j = 1 et M =
9 6 0
4 5 2
3 7 1
68
Chap II La récursivité
Série N° 8
Exercice N° 1
On appellera totalgramme une chaîne dont chacun de ses mots commence et se termine
par la même lettre.
Ecrire une analyse et un algorithme d’un module récursif intitulé totalgramme qui permet
de vérifier si une chaîne de caractères est totalgramme
Exemple
La chaîne "ALLALA EMPRUNTE TEMPORAIREMENT À DAOUD SES SOULIERS " est
totalgramme
NOTE
On suppose que deux mots consécutifs sont séparés par un seul espace
Exercice N° 2
Soit l’algorithme suivant :
0) Fonction scalaire (A, B : tab ; n : entier):entier
1) P← (A[n]*B[n])
2) Pour c de n-1 à 1 faire ( pas = - 1 )
P← p + ( A [ c ] * B [ c ] )
Fin pour
3) Scalaire ← P
4) Fin scalaire
Travails demandés :
1/ Exécuter la fonction pour les valeurs suivantes et compléter la trace de la séquence.
N=4
A 3 0 2 7
B 5 6 7 0
Trace de la séquence
C P
Exercice N°3
69
Chap II La récursivité
T 5 7 6 1
1 2 3 4
2. En déduire le rôle de la fonction f.
3. Donner un algorithme récursif de la fonction f.
4. Donner sous forme d’un algorithme la version itérative de la fonction f.
Exercice N°4
Soit la fonction suivante :
0) Fonction Quoi ( n : entier ) : booléen
1) i ← 1
2) Répéter
i←i+1
Jusqu’à ( n mod i = 0 ) ou ( i = n div 2 )
3) Quoi ← ( n mod i <> 0 )
4) Fin Quoi
• Exécuter manuellement la fonction quoi pour n = 17 et pour n = 25
• Quelle est le rôle de la fonction Quoi ?
• Ecrire une fonction récursive réalisant le même traitement.
Exercice N° 5
Soit la fonction suivante :
Questions:
1. Compléter le tableau suivant, par les résultats de cette fonction, pour les valeurs suivantes de CH
et K
CH=’BAC’ et K=16 CH=’33’ et K=5 CH=’147’ et K=10
C =………………………. C=………………………………. C =……………………….
2. Quel est le rôle de cette fonction
Exercice N° 6
70
Chap II La récursivité
Ch Résultat de la fonction
‘‘programme Pascal’’
‘‘algorithme’’
‘‘analyse avec algorithme’’
Exercice N° 7
Ecrire un algorithme de module récursif permettant de vérifier si un entier donné est
multiple de 5 en utilisant la méthode de différence.
Exemple :
15 est un multiple de 5 car
15-5 =10
10-5 =5
5-5=0
13 n’est pas multiple de 5 car
13-5
8-5=3
3<5
Exercice N°8
Exercice N°9
Un nombre d’or est calculé par :
71
Chap II La récursivité
Exercice N°10
Soit l’algorithme de la fonction Inconnu suivante :
0) Début Fonction Inconnu (n : entier long) : entier
1) S=[S ← 0] Repeter
S ← S + (n Mo 10)
n ← n Div 10
Jusqu’a (n = 0)
2) Inconnu ← S
3) Fin Inconnu
Questions :
1. Exécuter manuellement l’algorithme de la fonction Inconnu, si on appelle cette fonction avec le
paramètre effectif n = 192837, en donnant les valeurs successives des variables S et n.
2. En déduire le rôle de cette fonction.
3. L’algorithme de cette fonction est-il récurent ? si oui quel est son ordre. ?
4. Ecrire l’algorithme d’une fonction récursive réalisant le même traitement.
Exercice N° 11
Questions :
a) Compléter les paramètres de ce module
b) Exécuter manuellement l’algorithme de la procédure dans les deux cas suivants :
72
Chap II La récursivité
n=6 x=1
n=6 x=2
et le tableau T suivant :
3 8 0 1 7 2
Exercice N° 12
Soit la fonction suivante :
1) Fonction ghost ( x , n : entier) :………………………
2) Si (n = 1) alors
ghost ( n = 1)
Sinon
si (x mod n =0) alors
ghost (x < n-1)
sinon
ghost ghost (x,n-1)
finSi
finsi
3) Fin ghost
Questions :
1) Quelle-est le type de la fonction ?
2) Exécuter cette fonction pour x=7 et n=6. Laisser une trace de l’exécution pas à pas.
3) Quelle-est le rôle de cette fonction si les paramètres d’appel sont x et x-1 : ghost (x,x-1)
Exercice N° 13
Soit l’algorithme de la procédure « inconnue » suivante :
0) DEF PROC inconnue (var ch : chaîne)
1) Si ch <> "" Alors
C ch [ long (ch) ]
Efface ( ch , long(ch) , 1 )
Inconnue (c)
ch c + ch
Fin Si
2) Fin inconnue
Questions :
a) Tourner à la main cette procédure avec les appels suivants en donnant la trace d’exécution de chaque
appel : inconnue(''elle''), inconnue(''modem'').
b) En déduire le rôle de cette procédure ?
Exercice N° 14
EXERCICE N°15
EXERCICE N°16
Soit l’algorithme suivant :
0) Fonction Inconnue2 (Ch :chaîne, C :caractère, N :entier) : Booléen
1) Si long(ch) = 1 Alors
Si ch[1] =C Alors
Inconnue2 ((N+1) MOD 2 =0)
Sinon
Inconnue2 (N MOD 2=0)
Fin Si
Sinon
Si ch[1] =C Alors
N N+1
Fin Si
Inconnue2 Inconnue2 (Sous-chaine(ch,2, long(ch)-1), C, N)
Fin Si
1) Fin Inconnue2
Questions :
1°/ Exécuter manuellement cette fonction et trouver la valeur retournée pour :
a) ch= "lentement" , C="e" et N=0.
b) ch= "Fonctionnement" , C="n" et N=0.
2°/ Quel est le rôle de cette fonction.
3°/ Transformer cette fonction en une autre fonction utilisant un procédé itératif.
Exercice N°17
Soit la fonction suivante :
74
Chap II La récursivité
Exercice N°18
Soit l’algorithme suivant:
0) DEF FN Inconnue ( ch : chaîne ; c: caractère ): booléen
1) Si position ( c , ch ) = 0 alors
Inconnue vrai
Sinon
Efface (ch, position (c, ch) ,1);
Inconnue non (FN Inconnue (ch, c))
FinSi
2) Fin Inconnue
Questions :
a) Exécuter manuellement cette fonction pour :
- ch = '' pascal '' et c = '' s''
- ch = '' affiche '' et c = '' f ''
b) Donner le rôle de la fonction Inconnue.
Exercice N°19
Soit l’algorithme de la fonction Inconnu suivante :
0) DEFFN Inconnu (n : entier long) : entier
75
Chap II La récursivité
1) [ S 0 ] Répéter
S S + (n Mod 10)
N n Div 10
Jusqu’a (n = 0)
2) Inconnu S
3) Fin Inconnu
Questions :
1) Exécuter manuellement l’algorithme de la fonction Inconnu, si on appelle cette fonction
avec le paramètre effectif n = 192837, en donnant les valeurs successives des variables S et
n.
2) En déduire le rôle de cette fonction.
3) Ecrire l’algorithme d’une fonction récursive réalisant le même traitement.
Exercice N°20
Soit l’algorithme de la fonction Inconnu suivante :
0) DEF FN Inconnu (n : entier) : ……………….
1) [ i 1 ] Répéter
i i+1
Jusqu’a ( n mod i = 0 ) ou ( I = n div 2 )
2) Inconnu (n mod i <> 0 )
3) Fin Inconnu
Questions :
1) Quel type la fonction inconnue pourra-t-elle avoir et pourquoi ?
2) Déterminer : inconnue (9), inconnue (13)
3) En déduire le rôle de la fonction inconnue.
4) Ecrire l’algorithme d’une fonction récursive réalisant le même traitement
Exercice N°21
Ecrire une fonction récursive permettant de vérifier si 2 chaînes ch1 et ch2 sont-elles
«anagrammes » ou non.
NB : ch1 et ch2 sont anagrammes s’ils se composent des mêmes lettres.
Exemple : ch1 = « chien » et ch2 = « niche ».
Exercice N°22
Ecrire une fonction récursive permettant de retourner le PGCD de deux entiers positifs en
utilisant le principe de différence.
76
Les algorithmes de tris
77
Chap III Les algorithmes de tris
a) Algorithme itératif
b) Algorithme récursif
78
Chap III Les algorithmes de tris
Principe :
44 8 5 11 7 15 2
1 2 3 4 5 6 7
8 44
5 8 44
5 8 11 44
5 7 8 11 44
5 7 8 11 15 44
2 5 7 8 11 15 44
• version 1
1) Pour i de 2 à n Faire
Si T [ i ] < T [ i – 1] Alors
Temp T [ i ]
ji–1
T[j+1]T[j]
j j -1
T [ j + 1 ] Temp
Fin Si
Fin Pour
2) Fin TriInsertion
79
Chap III Les algorithmes de tris
• version 2
1) Pour i de 2 à n Faire
Si T [ i ] < T [ i – 1] Alors
Temp T [ i ]
proc Décaler ( T , i , p )
T [ p + 1 ] Temp
Fin Si
Fin Pour
2) Fin TriInsertion
Algorithme procédure décaler
0) Déf Proc décaler ( Var T : Tab ; deb :entier ; Var fin : entier )
1) fin deb – 1 , Temp T [ deb ]
Tant que ( fin > 0 ) et ( T [ fin ] > Temp ) faire
T [ fin + 1] T [ fin ]
fin fin – 1
Fin Tant Que
2) Fin Décaler
b) Algorithme récursif Tri insertion
80
Chap III Les algorithmes de tris
Principe :
Le tri Shell est une amélioration du tri par insertion. Au lieu de faire une rotation de tous
les éléments, nous ferons une rotation par pas de p ce qui permet d’affiner le tri du tableau et de
faire moins de déplacement d’éléments.
Nous commençons donc par un pas assez élevé et nous le diminuons au fur et à mesure
jusqu'à arriver à un pas de 1. Ceci permet d’éliminer les plus grands désordres pour abréger le
travail aux étapes suivantes. Le pas est diminué à l’aide d’une suite, mais il faut construire cette
suite de manière à ce que les valeurs ne soient pas multiples entre elles sinon nous allons traiter
des éléments et pas d’autres. Shell propose la suite d’incréments vérifiant :
P 0 =0
P n =3 * P n-1 +1
Activité :
-5 30 0 -2 42 22 9 -4 10 15 40 -9 12 28 14
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Selon la suite Pn =3 * Pn + 1
P peut être = 1 ,4 ,13, 40 en déduire que les valeurs de pas sont : 13, 4 et 1.
81
Chap III Les algorithmes de tris
-5 30 0 -2 42 22 9 -4 10 15 40 -9 12 28 14
-5 30 0 -2 42 22 9 -4 10 15 40 -9 12 28 14
Algorithme Tri Shell ( itératif)
-5 14 0 -2 42 22 9 -4 10 15 40 -9 12 28 30
0) Déf Proc Trishell ( Var T : tab ; n : entier)
• Pour le pas p= 4
1) p 0
-5 14 0 -2 42 22 9 -4 10 15 40 -9 12 28 30
Tant Que ( p < n ) Faire
-5 14 0 -2 42 22 9 -4 10 15 40 -9 12 28 30
P 3 * p + 1
-5 14 0 -2 42 22 9 -4 10 15 40 -9 12 28 30
Fin Tant que
-5 14 0 -4 42 22 9 -2 10 15 40 -9 12 28 30
2) Tant que ( p <> 1 ) Faire
-5 14 0 -4 10 22 9 -2 42 15 40 -9 12 28 30
P p Div 3
-5 14 0 -4 10 15 9 -2 42 22 40 -9 12 28 30
Pour i de (p + 1 ) à n Faire
-5 14 0 -4 10 15 9 -2 42 22 40 -9 12 28 30
Temp T [ i ]
-5 14 0 -9 10 15 9 -4 42 22 40 -2 12 28 30
ji-p
-5 14 0 -9 10 15 9 -4 12 22 40 -2 42 28 30
Tant Que ( j > 0 ) et ( T [ j ] > Temp ) Faire
-5 14 0 -9 10 15 9 -4 12 22 40 -2 42 28 30
T [ j+p ] T [ j ]
-5 14 0 -9 10 15 9 -4 12 22 30 -2 42 28 40
jj–p
• Pour le pas p = 1 Fin Tant Que
-5 14 0 -9 10 15 9 -4 12 22 30 -2 42 28 40 T [ j +p ] Temp
-5 0 14 -9 10 15 9 -4 12 22 30 -2 42 28 40 Fin Pour
-9 -5 0 14 10 15 9 -4 12 22 30 -2 42 28 40 Fin Tant que
-9 -5 0 10 14 15 9 -4 12 22 30 -2 42 28 40 3) Fin TriShell
-9 -5 0 10 14 15 9 -4 12 22 30 -2 42 28 40
-9 -5 0 9 10 14 15 -4 12 22 30 -2 42 28 40
-9 -5 -4 0 9 10 14 15 12 22 30 -2 42 28 40
-9 -5 -4 0 9 10 12 14 15 22 30 -2 42 28 40
-9 -5 -4 0 9 10 12 14 15 22 30 -2 42 28 40
-9 -5 -4 0 9 10 12 14 15 22 30 -2 42 28 40
-9 -5 -4 -2 0 9 10 12 14 15 22 30 42 28 40
82
Chap III Les algorithmes de tris
-9 -5 -4 -2 0 9 10 12 14 15 22 30 42 28 40
-9 -5 -4 -2 0 9 10 12 14 15 22 28 30 42 40
-9 -5 -4 -2 0 9 10 12 14 15 22 28 30 40 42
Algorithme itératif
1) p 0
P 3 * p + 1
P p Div 3
Pour i de (p + 1 ) à n Faire
Si T [ i ] < T [ i – p ] Alors
Temp T [ i ]
ji-p
T [ j+p ] T [ j ]
jj–p
T [ j +p ] Temp
Fin Si
Fin Pour
3) Fin TriShell
Il s’agit d’un tri suivant le paradigme « Diviser pour régner ». le principe est le suivant :
• Nous fusionnons les deux tableaux obtenus pour reconstituer le tableau trié.
Exemple :
-5 -2 0 4 6 22 40 -7 0 8 8 12 28 35 39
T1 T2
-7 -5 -2 0 0 4 6 8 8 12 22 28 35 39 40
Application :
84
Chap III Les algorithmes de tris
Solution :
Remplir Procedure
T.D.N.T
Fusion Procedure
Type
affiche Procedure
Tab = tableau [ 1 .. 100 ] d’entier
T.D.O
I Entire Compteur
85
Chap III Les algorithmes de tris
Résultat = aff
Ecrire ( V [ i ] )
Fin Pour
T.D.O
Fin Affiche
Objet Type/Nature Rôle
i Entire Compteur
86
Chap III Les algorithmes de tris
V- Classement
Exercice :
Ecrire l’analyse puis l’algorithme d’un programme qui permet de remplir un tableau T par n
enregistrement qui définie n élèves ( nom et moyenne) avec 2 <= n <= 20 puis chercher le rang de
chaque élève selon leur moyenne.
Nom : classement
87
Chap III Les algorithmes de tris
i Entier Compteur
88
Chap III Les algorithmes de tris
A- Le tri à bulle:
Solution iterative:
procedure bulle_itr(var t:tab;n:integer);
var
echange:boolean;
i,aux:integer;
begin
repeat
echange:=false;
for I : =1 to n-1 do
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;
Solution recursive
procedure bulle_rec( var t : 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 , n – 1 , 1 );
end;
end;
89
Chap III Les algorithmes de tris
B- Le tri sélection
Solution itérative:
procedure sel_itr ( var t : tab ; n : integer);
var
aux,i,j,min:integer;
begin
for I : = 1 to n-1 do
begin
min : = i;
for j : = I + 1 to n do
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;
Solution récursive:
procedure sel_rec(var t:tab;n,deb:integer);
var
i,min,aux:integer;
begin
if(deb <n ) then
begin
{recherche de minimum dans la partie de t(deb-->n) }
min:=deb;
for i:=deb+1 to n do
if (t[i]<t[min])then
min:=i;
{permuter t[min] et t[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;
90
Chap III Les algorithmes de tris
C- Tri insertion
Solution iterative:
procedure insert_itr ( var t : tab ; n : integer );
var
I , j, tmp : integer;
beg in
for I : = 2 to n do
begin
if ( t [ I ] < t [ I – 1 ] ) then
begin
tmp : = t [ I ];
j:=I–1;
while ( ( j > 0 ) and ( tmp < t [ j ] ) ) do
begin
t[j+1]:=t[j];
j:=j–1;
end;
t [ j + 1 ] : = tmp;
end;
end;
end;
Solution recursive:
procedure insert_rec ( var t : tab ; n : integer);
var
I , j , tmp : integer;
begin
if ( n > 1 ) then
begin
insert_rec ( t , n – 1 );
if ( t [ n ] < t [ n – 1 ] ) then
begin
tmp : = t [ n ];
j:=n–1;
while ( ( j > 0) and ( tmp < t [ j ] ) ) do
begin
t [ j + 1 ] : = t [ j ];
j:=j–1;
end;
t [ j + 1 ] : = tmp;
end;
end;
end;
91
Chap III Les algorithmes de tris
D- Tri Shell
Solution iterative:
procedure shell_itr(var t: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:=p div 3;
for i:= p+1 to n do
begin
tmp:=t[i];
j:=i;
while((j>p) and (tmp<t[j-p])) do
begin
t[j]:=t[j-p];
j:=j-p;
end;
t[j]:=tmp;
end;
end;
end;
Solution recursive:
procedure shell_rec ( var t : 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[j-p])) do
begin
t[j]:=t[j-p];
j:=j-p;
end;
t[j]:=tmp;
92
Chap III Les algorithmes de tris
shell_rec(t,n,i+1,p);
end
else
begin
p:=p div 3;
i:=p+1;
shell_rec( t , n , I , p );
end;
end;
end;
93
Les algorithmes récurrents
94
Chap IV Les algorithmes récurrents
Ecrire l’analyse d’un programme qui permet de calculer le nème terme des suites suivantes :
1- U0 = 1
U n = 2 * U n-1 +2 pour n >0
2- U0 = 1
U1 = 1
U n = 3 * U n-1 – U n-2 pour n > 1
Solution
1- analyse
U0 U
Fin pour
Fin suite
2 - analyse
Résultat = suite
T.D.O
Suite = Suite U
U= [ U0 0 , U1 1 ]
Objets T/N Rôle
Pour i de 2 à n faire I Entier Compteur
U3*U1–U0
U0 Entier Premier terme
U0 U1
U1 entier Deuxième terme
U1 U
Fin pour
Fin suite
95
Chap IV Les algorithmes récurrents
Constatation :
On constate dans les deux analyses que pour calculer un terme on a besoin soit le terme
précédent ou les deux termes précédents, on appel ses traitements traitement récurent d’ordre 1
dans 1) et d’ordre 2 dans 2)
Retenons :
Nous voulons calculer la somme des éléments d’une matrice carrée d’entiers d’ordre n ( 4≤
n ≤ 20).
Questions :
sommeMat = [ ] sommeMat S
Pour j de 1 à n Faire
i Entier Compteur
SS+M[i,j]
j Entier compteur
Fin Pour
Fin Pour
Fin SommeMat
Ecrire l’analyse et l’algorithme d’un programme qui permet de déterminer le nème terme de
la suite définit par
Pour définir les autres termes remplacer a chaque fois ‘’0’’ par ‘’01’’ et ‘’1’’ par ‘’10’’.
96
Chap IV Les algorithmes récurrents
U0 = ‘’0’’
U1=’’01’’
U2=’’0110’’
U3=’’01101001’’
Etc
Nom : suite_thueMorse
Résultat = Ecrire (‘’La suite de Thue Morse à partir de ‘’, A , ‘’est : ‘’, FN ThueMorse ( N , A ) )
N, A = [ ] Proc Saisie ( N , A )
97
Chap IV Les algorithmes récurrents
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
Questions :
1. Est-ce que ce traitement est récurrent ? Dans l’affirmative donnez son ordre ?
2. Proposez une analyse au problème en utilisant un procédé itératif puis un procédé
récursif ?
A- Solution itérative
Nom : Triangle_Pascal
Mat = Tableau [ 1.. 100 , 1 . . 100 ] d’entier Affiche Procédure Affiche la matrice
98
Chap IV Les algorithmes récurrents
Résultat = aff
Pour j de 1 à N Faire
Ecrire ( M [ i , j ] ) T.D.O
Résultat = N
N =[ ] Répéter
Fin saisie
j Entier compteur
99
Chap IV Les algorithmes récurrents
B- Solution récursive
Résultat = M
M =[ ] Pour i de 1 à n Faire
Pour j de 1 à i Faire
T.D.O
M [ i , j ] Fn Val_Triangle ( i , j )
Objets T/N Rôle
Fin Pour
I Entier Compteur
Fin Pour J Entier compteur
Val_Triangle Fonction
Fin Remplir
U1 =1
U2 =1
Un = Un-1 + Un-2
Ecrire une analyse puis un algorithme qui permet de calculer le nème terme de la suite ?
100
Chap IV Les algorithmes récurrents
1. Solution itérative
Analyse de la fonction fibo
U1 = 1
U2 = 1
Un = Un-1 + Un-2 pour n >2
Vn = Un / Un-1 pour tout n >1
1) Ecrire un programme Pascal qui permet de chercher et d’afficher les n premiers termes de
la suite U (utilisez la solution récursive). Remplir la 2ème colonne du tableau au dessous.
2) Modifier le programme pour calculer et afficher les n premiers terme de la suite V. remplir
la 3ème colonne du tableau au dessous.
3) Que remarquez-vous ?
4) Ecrire l’analyse et l’algorithme permettant de chercher le terme et le rang de la suite V
vérifiant │ Vn – Vn-1 │ < e (avec e =10-5).
101
Chap IV Les algorithmes récurrents
program nombreor;
uses wincrt;
var
N Fibo ( n ) Vn = Fibo ( n ) / fibo (n-1)
i,n : integer;
1 1 -
procedure saisie (var n : integer );
2 1 1 begin
3 2 2 repeat
4 5 1.5 write(' Entrer un entier n : ');
5 8 1.666 readln( n );
6 13 1.600 until n > 0 ;
7 21 1.625 end ;
function fibo ( n : integer ) : integer ;
8 34 1.61538
begin
9 55 1.61904
if ( n = 1 ) or ( n = 0 ) then
10 89 1.61764 begin
11 144 1.61818 fibo := 1 ;
12 233 1.617977 end
13 377 1.61805 else
14 610 1.6802 begin
15 987 1.6803 fibo := fibo ( n - 1) + fibo ( n -2 ) ;
end;
16 1597 1.6803
end;
17 2584 1.6803
begin
18 4181 1.6803 saisie ( n );
19 6765 1.6803 for i := 1 to n do
begin
writeln ( i , ' ', fibo ( i ) , ' ', fibo ( i ) / fibo ( i -1 ) ) ;
end;
end.
Réponse :
1+ √5
2
102
Chap IV Les algorithmes récurrents
T.D.O
N Entier Nombre
103
Chap IV Les algorithmes récurrents
Série N ° 8
Exercice N° 1
Soit la suite de ROBINSON Définie par:
Ui = a ( a est un chiffre)
Ui+1 = Nombre d’apparition de chaque chiffre dans Ui
Chaque terme de la suite se construit ensuite en comptant le nombre d'apparitions des
différents chiffres de 9 à 0 (dans cet ordre) dans le terme précédent. Si un chiffre n'apparaît pas, il
n'est pas pris en compte.
Exemple :
Si U0=0 alors
U1 = 10 « 0 se répète 1 fois dans U0 »
U2 = 1110 « 1 se répète 1 fois dans U1 , 0 se répète 1 fois dans U1»
U3 = 3110 « 1 se répète 3 fois et 0 se répète 1 fois dans U2 »
U4= 132110
U5 = 13123110
U6 = 23124110
U7 = 1413223110
U8 = 1423224110
U9 = 2413323110...
Questions :
1) Quel est l’ordre de récurrence de cette suite
2) Ecrire un algorithme modulaire permettant de déterminer et d’afficher le néme terme de cette
suite (2<N<20)
Exercice N° 2 :
Soit la suite suivante définie par :
U0 = 1
(- 2) n
Un =
2 * Un-1
104
Chap IV Les algorithmes récurrents
Exercice N° 3 :
Soit la suite U définie par :
U0=1
U1=2
Un=Un-1 + 2* Un-2
Ecrire l’analyse puis L’algorithme d’un module récursif qui permet de calculer
le nième terme de la suite U.
Exercice N° 4 :
La suite de Syracuse est définie par :
𝑈𝑈𝑈𝑈
Un+1 = si Un est pair
2
Exercice N° 5 :
On se propose de remplir une matrice M sous la forme d’une pyramide d’entier de la
manière suivante
Exemple : n=5
1
232
34543
4567654
567898765
Ecrire un programme qui permet de remplir et d’afficher une matrice M carré d’ordre n ( avec
2<=n<=10 )
105
Chap IV Les algorithmes récurrents
Exercice N° 6 :
On appelle masse d’un nombre, la somme du rang dans l’alphabet français de chaque lettre
contenu dans ce nombre. Une lettre a le même rang qu’elle soit écrit en majuscule ou en
minuscule.
UN 21 + 14 = 35
On appelle « nombre autocode », si la somme ainsi formée = le nombre lui-même.
Exemple :
DEUX CENT CINQUANTE HUIT
54 + 42 + 105 + 58 = 258
Ecrire un programme qui permet de saisir n chaine (représentent des nombres) et ses
équivalent numérique (selon l’exemple), vérifié si le nombre est autocode ou non. Enregistrer le
résultat dans un fichier texte selon l’image suivante.
DEUX CENT CINQUANTE HUITE 258 Masse nombre autocode/non autocode.
Exercice N° 7 :
En mathématique, un nombre automorphe est un nombre entier dont le carré se termine par un
même chiffre ou les mêmes chiffres que celui ou ceux du nombre lui-même.
Exemple :
52 = 25
762 = 5776
8906252= 793212890625
Ecrire un programme qui permet de vérifier si un entier donné est automorphe ou non.
106
Les algorithmes d’arithmétique
107
Chap V Les algorithmes d’arithmétique
Exemple :
• Méthode de la division
PGCD ( 22 , 6 ) = PGCD ( 6, 22 mod 6) = PGCD ( 6 , 4 ) = PGCD ( 4 , 6 mod 4 )
• Méthode de la différence :
PGCD ( 22 , 6 ) = PGCD ( 22-6 , 6 ) = PGCD (16 , 6 ) = PGCD ( 16 – 6 , 6 ) = PGCD ( 10 , 6 )
= PGCD ( 4 – 2 , 2 ) = PGCD ( 2 , 2 ) = 2
Ecrire une analyse, puis déduisez un algorithme d’une fonction permettant de calculer le PGCD de
deux entiers positifs non nuls a et b, en utilisant la méthode de la différence.
Solution :
a- Solution itérative :
108
Chap V Les algorithmes d’arithmétique
b- Solution récursive:
Déf Fn PGCD ( a , b : entier ) : entier
Résultat = PGCD
PGCD = [ ] Si a = b Alors
PGCD a
Sinon
Si a > b Alors
PGCD Fn PGCD ( a – b , b )
Sinon
PGCD FN PGCD ( a , b – a )
FinSi
FinSi
Fin PGCD
III. Calcul A p n et C p
n
Définition :
n!
• Arrangement de p éléments parmi n : Ap
n= = n(n-1)(n-2).....(n-p+1)
(n-p)!
{a,b},{b,a},{a,c},{c,a},{b,c},{c,b}
p Ap
n n!
• Combinaison de p éléments parmi n : C n = =
p! p!(n–p)!
𝐶𝐶𝑛𝑛0 = 𝐶𝐶𝑛𝑛𝑛𝑛 = 0
109
Chap V Les algorithmes d’arithmétique
Corrigé :
Nom : arrangement
n , p = [ ] Proc Saisie ( n , p )
Fin arrangement
T.D.O
Objet Type/Nature Rôle
n Entier Donné
p Entier Donné
Saisie Procédure Permet de saisir a et b
arrange Fonction Permet de calculer l’arrangement
AA*i
Fin Pour
110
Chap V Les algorithmes d’arithmétique
Calcul de la combinaison :
Version 1 :
1- analyse du programme principal
Nom = combinaison
Résultat = Ecrire (‘ La combinaison de deux entiers ‘, n , ‘ et ‘, p ,’ est = ‘, Fn Comb ( n , p ) )
n , p = [ ] Proc Saisie ( n , p )
Fin combinaison T.D.O
N Entier Nombre
P Entier Nombre
i Entier compteur
Saisie Procedure Lecture n et p
comb Procédure combinaison
2 – Analyse de la fonction Comb
Résultat = Comb
Fin Comb
T.D.O
Résultat = Comb
Comb = [ ] Si ( p = 0 ) ou ( p = n ) Alors
Comb 1
Sinon
Fin si
Fin Comb
111
Chap V Les algorithmes d’arithmétique
Dans cette partie du chapitre, les problèmes ne seront pas résolus directement avec l’operateur
arithmétique Mod. Nous allons, par contre, analyser quelques problèmes répondant aux règles de
divisibilité appropriées.
N.B : Ces règles sont généralement applicables pour les grands nombres.
1) Divisibilité par 3
• Définition :
Un entier est divisible par 3, si la somme des chiffres qui le composent est divisible par 3.
• Application 1 :
Ecrire un programme qui permet de vérifier si un entier n est divisible par 3 ou non. Avec n est un
entier très grand.
Nom : application1
Résultat = aff
Aff = [ ] Si Fn div3 ( s) Alors
Ecrire (‘l’’entier ‘, s , ‘ est divisible par 3‘)
Sinon
Ecrire (‘’ l’entier ‘,s,’ n’est pas divisible par 3’)
Fin si
S = [ ] Proc saisie ( s) T.D.O
Fin application1
Objet Type/Nature Rôle
s Chaine Nombre
Div3 Fonction Vérifier si un nombre est divisible par 3 ou non
Saisie Procédure Lecture de s
112
Chap V Les algorithmes d’arithmétique
Résultat = Vérif
Vérif = [ ] Vérif b
b Faux
Fin si
T.D.O
ii+1
Objet Type/Nature Rôle
Fin Tant que
B Booléen Vrai/faux
Fin Vérif
I Entier compteur
113
Chap V Les algorithmes d’arithmétique
Nom : divisibilite4
Résultat = aff
Aff = [ ] Si Fn div4 ( s) Alors
Ecrire (‘l’’entier ‘, s , ‘ est divisible par 4‘)
Sinon
Ecrire (‘’ l’entier ‘,s,’ n’est pas divisible par 4’)
Fin si
S = [ ] Proc saisie ( s)
Fin divisibilité
2- Analyse procédure saisie
Résultat = s
S=[ ] Répéter
T.D.O
S = donnée (‘’ entrer un nombre : ‘’)
Objet Type/Nature Rôle
Jusqu'à (Fn Vérif( s) )
verif fonction Vérifier si le nombre est
Fin saisie formé que par des chiffres
3) Divisibilité par 5
Définition :
Un entier est divisible par 5, si son chiffre des unités est egal à 0 ou à 5.
Exemple : 6287 n’est pas divisible par 5
6570 est divisible par 5
4325 est divisible par 5
114
Chap V Les algorithmes d’arithmétique
Application 3 :
Ecrire une analyse puis un algorithme d’un programme qui permet de vérifier si un entier
est divisible par 5 ou non utilisant les règles de divisibilité.
Nom : divisibilite5
Résultat = aff
Aff = [ ] Si Fn div5 ( s ) Alors
Ecrire (‘l’’entier ‘, s , ‘ est divisible par 5‘)
Sinon
Ecrire (‘’ l’entier ‘,s,’ n’est pas divisible par 5’)
Fin si
S = [ ] Proc saisie ( s )
Fin divisibilité
2- Analyse procédure saisie
Résultat = s
S=[ ] Répéter
Jusqu'à ( Fn Vérif ( s ) )
Fin saisie
Résultat = Div5
Fin div4
115
Chap V Les algorithmes d’arithmétique
Application 4
Soit n = 571u où u désigne le chiffre des unités dans l’écriture décimal de n. écrivez un
programme permettant de chercher et d’afficher les valeurs respectives de u et de n pour
lesquelles l’entier n sera divisible par 4 et par 3.
Nom : application4
N = [ ] n ‘’571u’’
Fin application4
Résultat = aff
m 5710 + u
Fin si
Pour
Fin affiche
T.D.O
U Entier Un chiffre
m entier Résultat
116
Chap V Les algorithmes d’arithmétique
Base 2 ou binaire={0,1}
B8
B10 B2
B16
Exemple :
Convertir les nombres décimaux à ses équivalents à la base 2, 8 et 16 :
• ( 7 4 ) 10 = ( ) 2 = ( 1 0 0 1 0 1 0 )2
• ( 7 4 ) 10 = ( ) 8 =( 112)8
• ( 7 4 0 ) 10 = ( ) 16 = ( 2 E 4 ) 16
74 2 740 16
74 8
0 37 2
2 9 8 4 46 16
1 18 2
0 9 2 1 1 8 14 2 16
1 4 2 1 0 2 0
0 2 2
0 1 2
1 0
( 740 ) 10 = ( 2 (14) 4 ) 16 = ( 2 E 4)16
( 74 ) 10 = ( 1001010 ) 2 ( 74 ) 10 = ( 112 ) 8
117
Chap V Les algorithmes d’arithmétique
• ( 1 0 0 1 0 1 0 ) 2 = ( ) 10
( 1 0 0 1 0 1 0 ) 2 = 1 * 2 6+ 0 * 2 5+ 0 * 2 4+ 1 * 2 3+ 0 * 2 2+ 1 * 2 1+ 0 * 2 0
6 5 4 3 2 1 0 = ( 7 4 ) 10
• ( 1 1 2 ) 8 = ( ) 10
( 1 1 2 ) 8 = 1 * 8 2+ 1 * 8 1+ 1 * 8 0
2 1 0 = ( 7 4 ) 10
• ( 2 E 4 ) 16 = ( ) 10
( 2 E 4 ) 16 = 2 * 16 2 + E * 16 1 + 4 * 16 0
2 1 0 = ( 7 4 0 ) 10
118
Chap V Les algorithmes d’arithmétique
Résultat = convb_b10
Convb_b10 = [ ] convb_b10 R
R= [ R 0 ] Pour i de 1 à long ( ch ) Faire T.D.O
Si ch [ i ] dans [‘0’ .. ‘9’ ] Alors
Objet Type/Nature Rôle
Val ( ch [ i ] , k , e )
Sinon R Entier Resultat
K Ord ( ch [ i ] ) – 55
k entier Un chiffre
Fin si
R R + k * Fn Puis ( b , long( ch ) – i ) i entier Compteur
Fin Pour
e entier erreur
Fin convb_b10
119
Chap V Les algorithmes d’arithmétique
Exemples :
Convertir les nombres binaires à ces équivalents en octal et en hexadécimal.
- (10110)2=()8
- ( 1 0 1 1 0 0 ) 2 = ( ) 16
• (10110)2=()8
= ( 2 6 )8
2 = 0*22 + 1 * 21 + 0 * 20 6 = 1 * 22 + 1 * 21 + 0 * 20
• ( 1 0 1 1 0 0 ) 2 = ( ) 16
= ( 2 C ) 16
2 = 0 * 23 + 0* 22 + 1 * 21 + 0 * 20 C = 12 = 1 * 23 + 1 * 22 + 0 * 21 + 0 * 20
120
Chap V Les algorithmes d’arithmétique
Si R ≤ 9 Alors
Str ( R , st ) T.D.O
Sinon
St chr ( 55 + R ) Objet Type/Nature Rôle
Exemple :
Convertir les nombres suivants en binaire.
- (215)8=( )2
- (7 3 C ) 16 = ( ) 2
• (215)8=( )2
(215)8 = ( 2 1 5 )8
• (7 3 C ) 16 = ( ) 2
(7 3 C ) 16 = ( 7 3 C ) 16
=(11100111100)2
121
Chap V Les algorithmes d’arithmétique
St chaine
rst chaine
122
Chap V Les algorithmes d’arithmétique
Il n’existe pas une méthode a appliqué pour faire la conversion de la base 8 à la base 16 ou
inversement donc on doit passer obligatoirement par soit la base 10, soit la base 2.
Application :
Ecrire un programme qui permet de convertir un entier N de base b1 a son équivalant dans la base
b2.
123
Chap V Les algorithmes d’arithmétique
Série N ° 9
Exercice N° 1
On peut déterminer si un nombre est divisible par 9 par la méthode suivante. On part du premier
chiffre ou de zéro si ce chiffre est 9. On ajoute le deuxième chiffre (s'il y en a un), si le résultat est supérieur
ou égal à 9, on lui soustrait 9 sinon on ne fait rien. On répète ensuite la même opération pour les chiffres
suivants. Le nombre est divisible par 9 si et seulement si le résultat final est nul.
Ecrire un programme modulaire en Turbo Pascal qui indique si le nombre entier positif est divisible
par 9 en mettant en œuvre la méthode décrite ci-dessus. La fonction recevra le nombre entier sous la
forme d'une chaîne de caractères contenant son écriture décimale.
Exemple.
Pour le nombre 78192 (passé en paramètre à la fonction sous la forme de la chaîne "78192") la
fonction effectuera donc les opérations suivantes:
7 est différent de 9
Le résultat est nul donc 78192 est divisible par 9 (78192 = 9 x 8688).
Exercice N° 2
Le nombre N est divisible par 13 si et seulement si le nombre des dizaines plus 4 * le chiffre
des unités est divisible par 13.
Exemple :
637 est divisible par 13 car
63 + 4 * 7 = 91
9 + 4 * 1 = 13
13 est divisible par 13.
D’une manière plus générale il suffit de répéter l’opération ci-dessus jusqu'à obtenir
comme résultat final 13, 26 ou 39. Ce qui prouvera que le nombre considéré au départ est divisible
par 13.
Soit le nombre 224185. On a :
22418 + 4 * 5 =22438
2243 + 4 * 8 = 2275
227 + 4 * 5 = 247
24 + 4 * 7 = 52
5 + 4 * 2 = 13
Nous obtenons 13 donc 224185 est divisible par 13.
On appliquant ce principe, Ecrire un programme modulaire en Turbo Pascal qui vérifie est ce
qu’un entier long naturel N est divisible par 13 ou non.
124
Chap V Les algorithmes d’arithmétique
Exercice N° 3
Un entier est divisible par 11 si la différence entre la somme des chiffres de rang pair et la
somme des chiffres de rang impaire soit divisible par 11
Exemple
752 n’est pas divisible par 11 car ( 7 + 2 ) – 5 = 4 n’est pas divisible par 11
57816 est divisible par 11 car ( 6 + 8 + 5 ) – (1 + 7) = 11 divisible par 11.
Ecrire un programme en Turbo Pascal qui permet de vérifier si un nombre N donné est divisible
par 11 ou non.
N.B : le programme doit contenir au moins deux modules
Exercice N° 4
Soit n un entier positif. On désire tester si n est divisible par 7 ou non en appliquant le principe suivant :
Exemple :
N=364 3 * 3 + 6 =15 n devient 154
1*3+5=8 n devient 84
8 * 3 + 4 = 28 n devient 28
2 * 3 + 8 = 14 n devient 14
1*3+4=7 n devient 7 donc l’entier 364 est divisible par 7.
Décomposer le problème en modules, analyser le programme principal ainsi que les modules utilisés et
déduire les algorithmes.
Exercice N°5
Pour savoir si un nombre est divisible par 137, il suffit de séparer ce nombre par tranche de
4 chiffres en partant des unités et d’insérer alternativement des – et des + entre les tranches à
partir du début du nombre en commençant par un - , On effectue l’opération ainsi écrite et si le
résultat est divisible par 137, alors le nombre considéré est divisible par 137.
Exemple
Soit le nombre 2510792736157732104
On le sépare par tranche de quatre chiffres à partir des unités
251| 0792| 7361|5773|2104
On intercale alternativement des + et des – à partir du début en commençant par –
251-0792+7361-5773+2104
On effectue l’opération ainsi écrite
251-0792+7361-5773+2104 =3151
On vérifie aisément que 3151 est divisible par 137 donc le nombre 2510792736157732104
Est divisible par 137
1) Ecrire un algorithme de module qui teste si un nombre donné est divisible par 137
125
Chap V Les algorithmes d’arithmétique
Exercice N° 6
Un nombre de Kynea est un entier de la forme : 4n + 2n+1 − 1. Les premiers nombres de
Kynea sont : 7, 23, 79, 287, 1087, 4223, 16639, 66047, 263167, 1050623, 4198399, 16785407, …
La représentation binaire du nième nombre de Kynea est un 1, suivi de (n – 1) zéros consécutifs,
suivi de (n + 1) uns consécutifs.
Exemples : 7 est 111 en binaire, 23 est 10111, 79 est 1001111, etc.
Ecrire un programme Pascal qui permet de :
- Créer et remplir un fichier intitulé Kynea.dat par les N (5<N<20) premiers nombres de Kynea
en décimale et en binaire en utilisant la représentation décrite ci-dessus.
- Afficher le contenu de ce fichier.
Exercice N° 7
Soient U n et V n deux suites définies par :
U n+1 = ( U n + V n ) / 2
Avec U 0 =1 et V 0 = 1/ √𝟐𝟐
𝟒𝟒∗𝐔𝐔𝐧𝐧𝟐𝟐
Et soit W n la suite définie par : W n = , on montre que 𝐥𝐥𝐥𝐥𝐥𝐥𝒏𝒏→∞ 𝑾𝑾𝑾𝑾 = 𝝅𝝅.
𝟏𝟏−𝟐𝟐∗ ∑𝐧𝐧 𝐢𝐢 𝟐𝟐 𝟐𝟐
𝐢𝐢=𝟏𝟏 𝟐𝟐 (𝐔𝐔𝐢𝐢 − 𝐕𝐕𝐢𝐢 )
En utilisant la suite W n Ecrire l’algorithme d’un module qui permet de déterminer une valeur approchée
de 𝝅𝝅 à 10-4 près.
NB : il s’agit de calculer à chaque fois deux termes consécutifs de W n jusqu'à ce que leur différence soit
inferieur à 10-4 .
Exercice N° 8
Ecrire un programme qui permet de :
• Remplir un fichier ‘’Nombre.dat’’ par N entiers aléatoires compris entre 15 et 900, avec n un entier
donné telle que 3 ≤ N ≤ 50.
• A partir du fichier ‘’Nombre.dat’’ remplir un deuxième fichier ‘’Conversion.dat’’ dans le quel
mettre le nombre décimal et ses conversions en binaire, en octal, et en hexadécimal.
• A partir du fichier ‘’Conversion.dat’’ mettre dans un fichier texte ‘’Lettre.txt’’ tous les nombres
hexadécimal qui comporte au moins une lettre (nombre hexadécimal et nombre de lettre dans le
nombre séparé par un espace).
• Afficher le contenu des trois fichiers
Décomposez le problème en modules. Analysez les modules et déduisez les algorithmes.
126
Chap V Les algorithmes d’arithmétique
Exemple: le nombre 611 est rond car 611=(1001100011)2 et il y a autant de 1 que de 0 dans cette écriture
en binaire.
On dispose d’un fichier intitulé naturels.dat composé d’une suite de nombres entiers naturels écrits
dans la base 10. On se propose de remplir à partir de ce fichier deux autres fichiers intitulés nom_rond.dat
et rond.dat comportant respectivement les nombres non ronds et les nombres ronds contenus dans le
premier fichier naturels.dat.
Question:
Ecrire un programme qui crée et remplit le fichier naturels.dat par n entiers inferieurs à 32000
(10<n<100).
Ensuite, il lit de ce fichier les nombres décimaux, affiche et place les nombres ronds dans le fichier rond.dat
et place les autres sans les afficher dans le fichier non_rond.dat.
Exercice N° 10
Ecrire un module récursif qui permet de mettre à zéro la diagonale principale d'une matrice carrée de n*n
entiers.
Exemple : Soit la matrice suivante pour n=3 :
3 5 1
4 2 8
12 9 7
Apres exécution du module, le contenu de la matrice devient :
0 5 1
4 0 8
12 9 0
Exercice N° 11
Une matrice magique, c’est une matrice carrée de dimension impaire si les sommes de
chaque ligne, chaque colonne et chaque diagonale sont tous égaux.
Exemple :
4 9 2 =15
3 5 7 =15
8 1 6 =15
=15 =15 =15 =15
M est une matrice magique
Nous proposons d’écrire un programme qui permet de remplir une matrice carrée par N entiers
(avec N impaire, comprise entre 3 et 9) et de vérifier si la matrice est magique
127
Chap V Les algorithmes d’arithmétique
Exercice N° 12
On se propose de remplir aléatoirement une matrice de n lignes et m colonnes par des entiers
compris entre 0 et 1, puis convertir en hexadécimal les nombres binaires formés à partir de chaque ligne et
mettre le résultat de la conversion dans un fichier texte nommé «hex.txt» et enregistré sous la racine C :
Exemple :
1 0 1 1
M:
0 1 1 0
Travail demandé :
Exercice N° 13
La matrice identité de taille n est une matrice carrée dont les valeurs des cases de la
première diagonale sont égales à 1 alors que celles se trouvant dans les autres cases sont nulles.
128
Chap V Les algorithmes d’arithmétique
Exercice N° 14
Soit la fonction inconnue suivante :
Function inconnue ( n :integer) : string ;
Var
Ch : string ;
Begin
Ch :=’’ ;
While n < > 0 do
Begin
Str ( n mod 5 , aux ) ;
Ch := aux + ch ;
N := n div 5 ;
End ;
Inconnue := ch ;
End ;
Questions:
1. Exécuter manuellement cette fonction sur les valeurs n = 78 et n= 25.
2. Quel est le rôle de cette fonction.
Exercice N° 15
On appelle nombre de Keith un nombre K de n chiffres ayant la propriété suivante : en
partant des nombres composés chacun d'un des n chiffres de K, on compose une sorte de suite en
calculant la somme des n derniers nombres de la suite pour déterminer le suivant. Si cette suite
fournit à un moment le nombre K, ce nombre est dit nombre de Keith.
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.
On obtient alors la suite : 1, 9, 7, 17, 33, 57, 107, 197, 361 dans laquelle se trouve le nombre 197,
donc 197 est un nombre de Keith.
Ecrire un programme Pascal qui permet de déterminer et d’afficher tous les nombres de Keith dans
l’intervalle [10..200000].
Exercice N° 16
Soit M une matrice carrée de dimension n remplie par des caractères alphabétiques majuscules. On se
propose de créer le fichier "Zone.Dat" par les zones équilibrés qui peuvent exister dans la matrice M. Pour
réaliser ce travail, on va suivre les étapes suivantes :
1. Remplir d’une manière aléatoire la matrice M, sachant que n est un entier non premier donné
compris entre 6 et 20
2. On fixe d le plus petit diviseur de n afin de diviser la matrice M en carré de dimension d*d (avec
d>=2)
3. Remplir le fichier "Zone.dat" par les zones équilibrées de la matrice M sachant qu’une zone est dite
équilibrée si le nombre de voyelle se trouvant dans cette zone est supérieur ou égale à d. Une zone
du fichier est caractérisée par les coordonnées (ligne, colonne) de la 1ère case de la zone équilibrée
(en haut à gauche) et du nombre de voyelles se trouvant dans cette zone
129
Chap V Les algorithmes d’arithmétique
Exemple : Si n=9
1 2 3 4 5 6 7 8 9
1 A D F D F K D C A
2 G I E W I X H G J
3 B A C Y Q R T D X
4 F K M K I E K P S
M
5 B U L J W M G Q D
6 Y V C F U H X K F
7 B O N D J Z U O I
8 C E C V B K A Y S
9 E A H J E N I K E
130
Chap V Les algorithmes d’arithmétique
Soit un fichier enregistrer sous le nom ‘’nb_base.dat’’ dans lequel on va enregistrer n chaines de
caractères. Chaque chaine est formée de 5 caractères au maximum. Chacun de ces caractères est soit un
chiffre, soit une lettre majuscule de l’intervalle ‘’A’’ . .’’F’’.
Pour chaque chaine du fichier ‘’nb_base.dat’’, on se propose de réaliser les tâches suivantes :
- Déterminer la plus petite base b à laquelle, peut appartenir le nombre m représenté par la chaine
de caractères.
- Déterminer l’équivalent décimal d du nombre m.
- Ranger dans une ligne d’un fichier texte nommé ‘’nombre.txt’’. la valeur décimale correspondante,
de la façon suivante : ( m ) b = ( d )10.
Exemple :
Si le contenu du fichier ‘’nb_base.dat’’ est le suivant :
FF
1B5
325
( FF ) 16 = ( 255 )10
( 1B5 ) 12 = ( 28 ) 10
( 325 ) 6 = ( 125 )10
Remarque :
La plus petit base à laquelle appartient la valeur 1B5 est la base 12. En effet, le plus grand
chiffre de ce nombre est B qui correspond à la valeur décimale 11.
De ce fait, la plus petite base de 1B5 est 11 + 1 = 12
Travail demandé :
Ecrire un programme Pascal et l’enregistrer sous le nom conversion.pas qui permet de :
• Saisir un entier n avec 2 ≤ n ≤ 10.
• Enregistrer dans un fichier nommé nb_base.dat. n chaines de caractères répondant aux
conditions précédemment citées.
• Remplir et afficher le fichier nombre.txt.
131
Chap V Les algorithmes d’arithmétique
Correction de l’exercice N° 1
1. Analyse du programme principal
Nom : Ex1
Résultat = aff
Aff = [ ] Si Fn Div9 ( ch ) Alors
Ecrire ( Ch , ‘’ est divisible par 9 ‘’ )
Sinon
Ecrire ( Ch , ‘’ n’est pas divisible par 9 ‘’)
Fin si
Ch =[ ] Répéter
Ch = Donnée(‘’ entrer un nombre décimal ‘’)
Jusqu'à Fn Vérif ( ch )
Fin ex1
T.D.O
O T/N R
Ch chaine Nombre
Div9 fonction Retourne vrai si le nombre est divisible par 9
verif fonction Vérifier si le la chaine est formée que par des chiffres
132
Chap V Les algorithmes d’arithmétique
Correction de l’exercice N° 2
O T/N R
N Entier Long Nombre
Div13 fonction Retourne vrai si le nombre est divisible par 13
133
Chap V Les algorithmes d’arithmétique
Correction de l’exercice N° 3
O T/N R
N Entier Long Nombre
Div11 fonction Retourne vrai si le nombre est divisible par 11
O T/N R
i Entier Compteur
K Entier Chiffre
Sp Entier Somme des chiffres de rang pair
Si Entier Somme des chiffres de rang impair
Ch chaine nombre
134
Chap V Les algorithmes d’arithmétique
Correction de l’exercice N° 8
1. Analyse du programme principal
Nom : Ex8
Résultat = aff
Aff =[ ] Proc afficheFn( fn )
Proc affichefc( fc )
Proc afficheft ( ft )
Fn , Fc =[ ] Proc Creation ( Fn , Fc )
Proc Remplir ( Fn , n )
Proc conversion ( Fn , Fc )
Ft = [ ] Proc Remplirft ( Fc , ft )
N = [ ] Proc Saisie ( n )
Fin ex 8 T.D.O
T.D.N.T
Objet Type/Nature rôle
Conv = Enregistrement Fn Nombre Fichier d’entier
Nd : entier Fc F_conv Ficher de enregistrement
Nb : chaine ft texte Ficher texte
No : chaine
N Entier
Nh : chaine
Fin conv Saisie Procedure
Nombre = Fichier d’entier Creation Procédure
F_conv = fichier de conv Remplir Procédure
Conversion Procédure
afficheFn Procédure
afficheFC procédure
2. Analyse procédure création
Déf proc Création ( var Fn : nombre ; var Fc : F_conv )
Résultat = Fn , Fc
Fn = [ ] associer ( Fn , ‘’ C:\bac2013\Nombre.dat ‘’)
Récréer ( fn )
Fc = [ ] associer ( Fc , ‘’ C:\bac2013\conversion.dat ‘’)
Récréer ( fc )
Ft = [ ] associer ( Ft , ‘’ C:\bac2013\lettre.txt ‘’)
Récréer ( ft )
Fin Création
135
Chap V Les algorithmes d’arithmétique
O T/N R
e Conv Enregistrement qui contient nd, nb, no, nh
k Entier Nombre du fichier
Convb10_b Fonction Fonction qui retourne les conversions a une base b
136
Chap V Les algorithmes d’arithmétique
137
Chap V Les algorithmes d’arithmétique
138
Chap V Les algorithmes d’arithmétique
begin
repeat
write(' entrer un entier :');
readln(n);
until n in [3..50] ;
end;
139
Chap V Les algorithmes d’arithmétique
begin
ch:='';
repeat
r:= k mod b;
k:= k div b ;
if r > 9 then
begin
rst:= chr ( r + 55 );
end
else
begin
str( r , rst );
end;
ch := rst + ch;
until k=0 ;
convb10_b := ch;
end;
procedure conversion (var fn:nombre;var fc:fconv);
var
k:integer;
e:conv;
begin
reset (fn);
reset(fc);
while not (eof (fn)) do
begin
read ( fn , k);
with e do
begin
nd := k;
nb := convb10_b( k ,2);
no := convb10_b( k ,8);
nh := convb10_b( k ,16);
end;
write( fc , e );
end;
close( fn);
close ( fc );
end;
140
Chap V Les algorithmes d’arithmétique
141
Chap V Les algorithmes d’arithmétique
while not(eof(fn)) do
begin
read( fn , k );
writeln( k );
end;
close( fn );
end;
procedure afficheFc( var fc: fconv);
var
e:conv;
begin
reset(fc);
while not (eof (fc)) do
begin
read(fc,e);
with e do
begin
writeln('(',nd,')10 = (',nb,')2=(',no,')8=(',nh,')16');
end;
end;
close(fc);
end;
begin
creation(fn,fc);
saisie(n);
remplir(fn,n);
conversion ( fn , fc );
remplirft ( fc , ft);
afficheFn(fn);
afficheFc(fc);
afficheft( ft );
end.
142
Chap V Les algorithmes d’arithmétique
Correction de l’exercice N° 17
program nombre1;
uses wincrt;
type
f_chaine=file of string;
var
f:f_chaine;
f1:text;
m:integer;
procedure creation(var f:f_chaine;var f1:text);
begin
assign( f ,'c:\bac2012\123636\nb_base.dat');
rewrite( f );
assign( f1 ,' c:\bac2012\123636\nombre.txt');
rewrite( f1 );
end;
procedure saisie( var m:integer);
begin
repeat
write('intoduire l''entier: ');
readln(m);
until m in [2..10];
end;
function verif(ch:string):boolean;
var
b:boolean;
i:integer;
begin
i:=1;
b:=true;
while (b) and (i<=length(ch)) do
begin
if ch[i] in ['0'..'9','A'..'F'] then
i:=i+1
else
b:=false;
end;
verif:=b;
end;
procedure remplir(var f:f_chaine ; m:integer);
var
i:integer;
ch:string;
begin
reset(f);
writeln('entrer ', m , ' nombre hexadécimal ');
for i:=1 to m do
begin
repeat
143
Chap V Les algorithmes d’arithmétique
val(max,k,e);
end
else
begin
k:=(ord(max)-55);
end;
base:=k+1;
end;
procedure remplirft(var f:f_chaine;var f1:text);
var
b,dec:integer;
ch,st,bch,dch:string;
begin
reset(f);
append(f1);
while not(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;
procedure affiche(var f1:text);
var
ch:string;
begin
reset(f1) ;
while not (eof(f1)) do
begin
readln(f1,ch);
writeln(ch);
end;
close(f1);
end;
begin
creation(f,f1);
saisie(m);
remplir(f,m);
remplirft(f,f1) ;
affiche(f1);
end.
145
Chap V Les algorithmes d’arithmétique
Série N° 10
Un nombre est dit super premier s’il 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.
Exercice N° 2 :
146
Chap V Les algorithmes d’arithmétique
Si N = 12345674
1234567 – 4 = 1234563
123456 – 3 = 123453
12345 – 3 = 12342
1234 – 2 = 1232
123 – 2 = 121
12 – 1 = 11
Exemple : pour n = 8
M FH FD
1 1 1 0 0 1 1 1
E7 1 E7
1 0 0 0 1 1 1 1
8F 1 8F
1 1 1 1 1 1 1 1
FF 2 FD
0 0 1 1 0 0 0 1
31 0
0 0 0 1 0 0 0 0
10 0
0 1 1 1 0 1 1 1
77 0
0 0 1 0 0 0 0 1
21 0
1 1 1 1 1 1 0 1
FD 2
147
Chap V Les algorithmes d’arithmétique
Correction de l’exercice N° 1
program suppremier;
begin
uses wincrt;
append(ft);
var
for i:=2 to n do
ft:text;
begin
n:longint;
if premier(i) then
procedure creation(var ft:text);
begin
begin
writeln(i);
assign(ft,'c:\bac2012\0123\super_p.txt');
str(i,rch);
rewrite(ft);
k:=i;
end;
b:=true;
procedure saisie(var n:longint);
repeat
begin
str(k,ch);
repeat
st:=copy(ch,1,length(ch)-1);
write('donner n: ');
val(st,k,e);
readln(n);
if not premier(k) then
until (n>40000) and (n<100000);
begin
end;
b:=false;
function premier(n:longint):boolean;
end;
var
until (k<=9) or not(b);
i:longint;
if (b) then
b:boolean;
begin
begin
writeln('super premier');
b:=true;
rch:=rch+' '+'super premier';
i:=2;
end;
while (i<=(n div 2)) and (b) do
writeln(ft,rch);
begin
end;
if n mod i=0 then
end;
begin
close(ft);
b:=false;
end;
end
procedure affiche(var ft:text);
else
var
begin
ch:string;
i:=i+1;
begin
end;
reset(ft);
end;
while not(EOF(ft)) do
end;
begin
Premier : = b ;
readln(ft,ch);
end;
writeln(ch);
procedure recherche(n:longint; var ft: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.
148
LES ALGORITHMES D’APPROXIMATION
149
Chap VII Les algorithmes d’approximation
I. Introduction
Les problèmes d’optimisation forment un ensemble très riche de possibilités : de la
possibilité d’approcher avec une précision arbitraire, à l’impossibilité de toute garantie sur la
qualité de l’approximation.
II. Recherche du point fixe d’une fonction
1) Présentation
• En mathématiques, pour une application f d’un ensemble E dans lui-même, un élément x
de E est un point fixe de f si f(x) = x
• Exemple :
- Dans le plan, la symétrie par rapport à un point A admet un unique point fixe : A
- l’application inverse (définie sur l’ensemble des réels non nuls) admet deux points
fixes : -1 et 1
• Graphiquement, les points fixes d’une fonction f (où la variable est réelle) s’obtiennent en
traçant la droite d’équation y = x : tous les points d’intersection de la courbe
représentative de f avec cette droite sont alors les points fixes de f.
Toutes les fonctions n’ont pas nécessairement de point fixe ; par exemple, la fonction f telle que
f(x)=x+1 n’en possède pas, car il n’existe aucun nombre réel x égal à x+1.
2) Activité
On désire écrire un programme en Pascal qui permet de résoudre l’équation sin(x)=1-x
a) Décomposer le problème en modules
b) Ecrire les analyses des modules, en déduire les algorithmes
c) Traduire en pascal la solution obtenue
• Sin(x)= 1-x x= 1-sin(x)
150
Chap VII Les algorithmes d’approximation
Nom : Point_fixe
Résultat= Ecrire ("le point fixe est : ", x1, "trouvé après ", i, "itérations")
(x1 , i ) = [ i 0 , x1 1 ]
Répéter
i i+1
x2 x1
x1 F(x1)
Jusqu’à (ABS(x1-x2) <epsilon)
Fin Point_fixe
T.D.O
Objet Type/Nature
i entier
X1, x2 Réel
F Fonction
151
Chap VII Les algorithmes d’approximation
e) Traduction en Pascal
2) Valeur approchée de 𝝅𝝅
• Il est impossible de connaître la valeur exacte de 𝜋𝜋. En effet, il a été démontré par deux
mathématiciens de la fin du XVIIIème siècle, Lambert et Legendre, qu'il ne peut exister
aucune fraction [de deux entiers] égale à π.
• Les hommes de science - Euler, Gauss, Leibniz, Machin, Newton, Viète - ont recherché
toutes sortes de formules permettant de calculer une approximation de plus ou moins
précise.
152
Chap VII Les algorithmes d’approximation
Ecrire une analyse, un algorithme et la traduction en Pascal d’un programme intitulé Pi_Euler, qui
permet de calculer et d’afficher une valeur approchée de π en utilisant la formule d’Euler :
𝜋𝜋 2 1 1 1 1 1
= 1+ + + + + ……+
6 22 32 4 2 52 𝑛𝑛 2
Cela signifie que :
𝜋𝜋 2 =6 * ( + + + +
• Analyse :
Nom : Pi_euler
Résultat= Ecrire ("la valeur approchée de Pi est ", RacineCarrée(6 * S2))
S2 = [ S2 1 , i 2 ] Répéter
S1 S2
S2 S1+1/ Carrée ( i )
i i+1
jusqu’à abs(S2 – S1) < epsilon
Fin Pi_Euler
TDO
Objet Type/Nature
i Entier long
S1, S2 Reél
• Algorithme
0) Début Pi_Euler
1) s2 = [ S2 1, i2 ]
Répéter
S1 S2
S2 S1+1 / carrée ( i )
i i+1
jusqu’à abs(S2 – S1) < epsilon
2) Ecrire ("la valeur approchée de Pi est ", RacineCarrée(6 * S2))
3) Fin Pi_Euler
153
Chap VII Les algorithmes d’approximation
• Traduction en PASCAL
Ecrire une analyse, un algorithme et la traduction en Pascal d’un programme intitulé Pi_Wallis, qui
permet de calculer et d’afficher une valeur approchée de Pi en utilisant la formule de Wallis :
Cela signifie :
Cela signifie
• Analyse
Nom : Pi_Wallis
Résultat= Ecrire ("la valeur approchée de Pi est ", 2* p2)
P2= [ i 1, P2 1]
Répéter
P1 P2
P2 p1 * ( ( 2 * i ) / ( 2 * i – 1 ) ) * ( ( 2 * i ) / ( 2 * i + 1 ) )
i i+1
Jusqu’à (abs (p2 - p1) <epsilon)
Fin Pi_walis
154
Chap VII Les algorithmes d’approximation
TDO
Objet Type/Nature
i Entier long
P1, P2 Réel
• Algorithme
0) Début Pi_Wallis
1) p2 = [ i 1 , P21 ]
Répéter
P1 P2
P2 p1 * ( ( 2 * i ) / ( 2 * i – 1 ) ) * ( ( 2 * i ) / ( 2 * i + 1 ) )
i i+1
Jusqu’à (abs (p2 - p1 ) <epsilon
2) Ecrire ("la valeur approchée de Pi est ", 2* p2)
3) Fin Pi_Wallis
Traduction en PASCAL
155
Chap VII Les algorithmes d’approximation
3) Valeur approchée de e
Nom : calcul_e
Résultat= Ecrire ("la valeur approchée de e est : ", S2)
S2= [ S2 1, i 1 ] Répéter
S1 S2
S2 S2 + 1 / Fn Fact ( i )
i i+1
Jusqu’à abs( s2 - s1 ) <epsilon
Fin calcul_e
T.D.O
Objet Type/Nature
i entier
S1, S2 Réel
0) Début calcul_e
1) S2 =[ S2 1 , I 1 ]
Répéter
S1 S2
S2 S1 + 1/ Fn Fact( i )
i i+1
Jusqu’à abs ( s2 - s1 ) < epsilon
2) Ecrire ("la valeur approchée de e est : ", S2)
3) Fin calcul_e
156
Chap VII Les algorithmes d’approximation
Résultat= Fact
Fact = [ ] Si a = 0 alors
Fact 1
Sinon
Fact a * Fn Fact ( a – 1 )
Fin Si
Fin fact
• Algorithme de la fonction Fact
0) Déf Fn Fact (a : entier) : entier long
1) Si a = 0 Alors
Fact 1
Sinon
Fact a * Fn Fact ( a – 1 )
Fin Si
2) Fin Fact
• Traduction en PASCAL
157
Chap VII Les algorithmes d’approximation
En mathématiques, l'intégrale d'une fonction réelle positive est la valeur de l'aire du domaine
délimite par l'axe des abscisses et la courbe représentative de la fonction.
F( b)
F( a )
a b
𝒃𝒃
∫𝒂𝒂 𝒇𝒇( 𝒙𝒙 )𝒅𝒅 𝒙𝒙
Les méthodes les plus utilisées sont : la méthode des rectangles, la méthode des trapèzes, la
méthode de Simpson, la méthode de Romberg, etc.
158
Chap VII Les algorithmes d’approximation
2) Méthodes de rectangles
a) Principe
𝑏𝑏 − 𝑎𝑎 𝑛𝑛 𝑛𝑛 𝑏𝑏 − 𝑎𝑎 𝑛𝑛 𝑛𝑛
∗ � 𝑓𝑓 ( 𝑥𝑥 𝑖𝑖 ) = ℎ ∗ � 𝑓𝑓(𝑥𝑥 𝑖𝑖 ) ∗ � 𝑓𝑓 ( 𝑥𝑥 𝑖𝑖+1 ) = ℎ ∗ � 𝑓𝑓 (𝑥𝑥 𝑖𝑖+1 )
𝑛𝑛 1 1 𝑛𝑛 1 1
𝑏𝑏 − 𝑎𝑎 𝑛𝑛 𝑥𝑥 𝑖𝑖 + 𝑥𝑥 𝑖𝑖+1 𝑛𝑛 𝑥𝑥 𝑖𝑖 + 𝑥𝑥 𝑖𝑖+1
∗ � 𝑓𝑓 ( ) = ℎ ∗ � 𝑓𝑓 ( )
𝑛𝑛 1 2159 1 2
Chap VII Les algorithmes d’approximation
b) Application
• Analyses
Analyse du programme principal
Nom : calcul_Air
Résultat = Ecrire ("une valeur approchée de l’intégrale est = ", FN CALCUL (a, b, n))
Fin calcul_Air
T.D.O
Objet Type/Nature
n entier
a, b Réel
calcul Fonction
saisir procédure
Résultat= a,b , n
b = [ ] Répéter
Jusqu’à ( b > a )
n = [ ] Répéter
Jusqu’à (n >0)
Fin saisie
160
Chap VII Les algorithmes d’approximation
161
Chap VII Les algorithmes d’approximation
162
Chap VII Les algorithmes d’approximation
3) Méthode de trapèze
Résultat = Calcul
H=[ ]h (b – a ) / n
Somme = [somme (f(a) + f(a+h))/2, x a]
Pour i de 1 à N - 1 Faire
163
Chap VII Les algorithmes d’approximation
x x+h
somme somme + ( f ( x ) + f ( x + h ) ) / 2
Fin Pour
Fin Calcul
x x+h
somme somme + ( f ( x ) + f ( x + h ) ) / 2
Fin Pour
• Traduction en PASCAL
164
Chap VII Les algorithmes d’approximation
165
Chap VII Les algorithmes d’approximation
Série N° 11
Soit la formule suivante qui permet de déterminer une valeur approchée de Cos(x) :
x 2 x 4 x 6 x8
Cos( x )= 1- + - + -…..
2! 4! 6! 8!
Exercice N° 2
Soit la formule suivante qui permet de déterminer une valeur approchée de Sin(x) :
x x3 x5 x7 x9
sin(x) = − + − + − .........
1! 3! 5! 7! 9!
S=
Ecrire un algorithme d’un module intitulé CalSom permettant de calculer une valeur
approchée de S à 10-4 près
166
Chap VII Les algorithmes d’approximation
Arctan ( x ) =
Ecrire un algorithme d’une fonction permettant de retourner une valeur approchée de Arctan(x)
en utilisant la formule donnée ci-dessus. Le calcul s’arrête lorsque la valeur absolue de la
différence entre deux terme successifs devienne inferieure ou égale à une erreur epssilon ( avec x
et epsilon deux réels donnés).
Exercice N° 4
On se propose d'écrire un programme en Pascal qui offre un menu de quatre choix définis
selon la valeur d'une lettre saisie.
10
• La valeur "I", pour calculer une valeur approchée de ∫1 ( x sin 2 ( x))dx en utilisant la
méthode des trapèzes.
• La valeur "C", pour calculer une valeur approchée de la fonction C(x) définie comme suit (x
est un entier >1):
1 1 1
τ (x) = 1+ + + +…..
2 x 3x 4 x
• La valeur "L", pour calculer une valeur approchée de ln(1+x) donné pâr mla formile de
Taylor au voisinage de 0.
x 2 x3 x 4 x5
Ln( 1+x )= x- + - + -…
2 3 4 5
Travail demandé:
167
Chap VII Les algorithmes d’approximation
Exercice N° 5
On se propose d'écrire un programme en Pascal qui offre un menu de quatre choix définis selon la
valeur d'une lettre saisie.
10
• La valeur "I", pour calculer une valeur approchée de ∫1 ( x sin 2 ( x))dx en utilisant la
méthode des trapèzes.
• La valeur "C", pour calculer une valeur approchée de la "Constante de Catalon" qui
apparaît dans certaines expressions de calcul combinatoire et donnée par la formule
suivante :
∞
(−1) k
C= ∑ (avec une précision ε = 10 −4 )
2
k = 0 ( 2 K + 1)
Résultat: C=0.915966
Travail demandé:
Exercice N° 6
168
Chap VII Les algorithmes d’approximation
La représentation graphique ci-dessous illustre la surface de parcelle qui est délimitée par les
droites d’équation respectives x = et x = et par la courbe représentant f(x) sur l’intervalle
[ , ]
Analyser et déduire l’algorithme d’un module qui permet de calculer une valeur approchée de la
surface de la parcelle en utilisant la méthode des rectangles au point du milieu.
Exercice N° 8
Écrire un algorithme log qui permet de saisir un réel x, avec x > -1 et x ≤1 et de calculer une valeur
approchée de ln (1+x) à une précision 10-4.
169
Chap VII Les algorithmes d’approximation
On se propose d’utiliser deux méthodes et d’en dégager la différence entre les deux valeurs
approchées trouvées.
On choisit dans les deux cas, un entier n tel que 100 < n < 1000. n sera le nombre de subdivisions
qu’on va utiliser dans les deux méthodes.
(x i ) 0 ≤ i ≤ n où x 0 = 1, x i = V [ i ] et x n = 2.
S1 = ; S2 = avec f(x) =
I2 =
On se propose d’écrire un programme qui calcul problème en les les deux méthodes
et affiche les deux valeurs approchées ainsi que la valeur absolue de leur différence.
Question :
Traduisez et testez la solution obtenue. Enregistrez votre programme sous le nom Trapèze.
170
Chap VII Les algorithmes d’approximation
T.D.O
O T/N R
C Réel
I Entier
P Entier
F Entier
Cp réel
171
Chap VII Les algorithmes d’approximation
Correction Exercice N° 8
Program log ;
uses wincrt;
const
EPSILON = 0.0001;
var
X: real;
function logdl(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( A – B ) <= EPSILON );
logdl := Som;
end;
begin
Saisie( X );
Writeln('Approximation de Ln(1+X) = ', logdl(X) : 2 : 5 );
end.
172
Chap VII Les algorithmes d’approximation
O T/N R
VI1 Réel Valeur de l’intégral par la méthode des trapèzes
VI2 Réel Valeur de l’intégral par la méthode d’une subdivision aléatoire
N EntierNombre de subdivisions
Trapèzes Fonction
Fonction qui calcul selon la méthode des trapèze une valeur approchée de l’aire en
question
subdivisions Fonction Fonction qui calcul selon la méthode des subdivisions aléatoire une valeur
approchée de l’aire en question
T.D.O
O T/N R
VI1 Réel Valeur de l’intégral par la méthode des trapèzes
I entier compteur
173
Chap VII Les algorithmes d’approximation
T.D.N.T
Type
Vect = Tableau [ 1 . . 999 ] de réel
T.D.O
O T/N R
VI1 Réel Valeur de l’intégral par la méthode des trapèzes
I Entier Compteur
S1 Réel Valeur de la somme S1
S2 Réel Valeur de la somme S2
V Vect Tableau contenant les valeurs des xi
Tri procédure Une procédure qui permet de trier les éléments de V par la méthode d’insertion
Une procédure qui permet de remplir le tableau V.
Remplissage Procedure
174
Chap VII Les algorithmes d’approximation
T.D.O
O T/N R
I Entier Compteur
x Entier Le réel à déterminer au hasard
Vérif Fonction Fonction qui vérifie l’existence d’un élément dans les I premiers éléments
de T.
175
Annexe
176
Exercices et problèmes Annexe
Série N° 1
177
Exercices et problèmes Annexe
178
Exercices et problèmes Annexe
Exercice N° 6
On se donne un entier naturel non nul U0, on se propose de construire la séquence d’entier (Un)
définie par :
Un = U0 n = 0,
Un = est la somme des carres des chiffres de Un-1 pour n > 0
179
Exercices et problèmes Annexe
Exercice N°9
Soit la fonction suivante :
0) Déf Fn Inconnue (n , b : entier ) : chaine
1) ch <-- ""
2) Tant Que ( n < > 0 ) Alors
convch( n mod b , r)
Si (Long( r ) > 1 ) Alors
Valeur( r , x , e )
r Chr( x + 55 )
Fin Si
ch r + ch
n n Div b
Fin Tant Que
3) inconnue ch
4) Fin Fonction
N.B : On donne le code ASCII de "A" est 65
Questions:
1- Exécuter la fonction pour les valeurs suivantes de n et b
a) n = 94 et b =16
b) n = 12 et b = 2
2- Quel est le rôle de cette fonction.
3- Proposer une solution récursive pour cette fonction.
Exercice N° 10
Soit la fonction suivante :
Function Deviner ( CH : string ; K : integer ) : integer ;
var
I , P , C : integer ;
PH : string ;
begin
C:=0;
P:=1 ;
PH := '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' ;
for I := length (CH) downto 1 do
begin
C:=C+ ( pos( CH[ I ] , PH ) – 1 ) * P;
P := P * K ;
end;
Deviner := C ;
end;
Questions:
1. Compléter le tableau suivant, par les résultats de cette fonction, pour les valeurs suivantes
de CH et K
CH=’BAC’ et K=16 CH=’33’ et K=5 CH=’147’ et K=10
C =………………………. C=………………………………. C =……………………….
2. Quel est le rôle de cette fonction
180
Exercices et problèmes Annexe
Exercice N° 11
N.B : Tous les fichiers seront enregistrés dans le dossier qui porte comme nom « votre nom
et prénom » de l’unité C
Exercice N° 13 ( exercice 2 bac 2010 sc )
Un entier n ( n ≥ 10) est divisible par 25, si le nombre formé par ses deux derniers chiffres
les plus à droites est égal à 00 ou 25 ou 50 ou 75.
Exemple : 679775 est divisible par 25 car le nombre formé par ces deux derniers chiffres est égal à
75.
Ecrire une analyse s’une fonction qui vérifie si un entier n est divisible par 25 en utilisant le
principe décrit précédemment.
181
Exercices et problèmes Annexe
Série N° 2
Exercice N°1
Soit la fonction inconnue suivante :
0) Def fn Inconnue( n : entier ) : entier
1) Convch ( n , ch )
2) X long ( ch ) - 1
3) Si n < 10 Alors
Inconnue n
Sinon
x
Inconnue FN Inconnue ( n div 10 ) + ( n mod 10 ) * 10
Fin si
4) Fin inconnue
Questions :
1. Exécuter manuellement cette fonction pour les appels suivants et donner les valeurs
retournées Pour n = 25 et n = 214
2. ................................................ Quel est le rôle de cette fonction :
Exercice N° 2
182
Exercices et problèmes Annexe
Exercice N° 4
Soit l’algorithme suivant :
0) Def Fn Inconnue ( Ch : chaine ) : Chaine
1) Si long ( Ch ) = 0 Alors
Ch ‘’’’
Sinon
Inconnue Ch [ long ( Ch ) ] + Fn Inconnue ( sous_Chaine ( Ch , 1 , long ( Ch ) -1 )
Fin Si
2) Fin Inconnue
Questions :
1. Exécuter manuellement la fonction Inconnue avec Ch =’’Modem’’
2. Déduire le rôle de cette fonction ?
3. Proposer une solution itérative ?
Travail demandé :
183
Exercices et problèmes Annexe
Travail demandé
184
Exercices et problèmes Annexe
N.B : Les fichiers ‘’Lettre.txt’’ et ‘’Code.dat’’ sont existe déjà. L’élève n’est pas appelé de les
remplir.
Questions :
1. Analyser le problème en le décomposant en modules et déduire l’algorithme du programme
principal.
2. Analyser chacun des modules envisagés précédemment et en déduire les algorithmes
correspondants.
185
Exercices et problèmes Annexe
Correction de série N° 2
Exercice N° 1
1. Pour N = 25
• Exécution de Inconnue ( 25 )
N 25
X 1
Ch ‘’25’’
Inconnue Inconnue( 2) 2 + 5 * 101 = 52
• Exécution de Inconnue ( 2 )
N 2
X 0
Ch ‘’2’’
Inconnue 2
2. Pour N = 214
• Exécution de Inconnue ( 214 )
N 214
X 2
Ch ‘’214’’
Inconnue Inconnue( 21) 12+ 4 * 10 2 = 412
• Exécution de Inconnue ( 21 )
N 21
X 1
Ch ‘’21’’
Inconnue Inconnue( 2) 2 + 1 * 101 = 12
• Exécution de Inconnue ( 2 )
N 2
X 0
Ch ‘’2’’
Inconnue 2
2. Le rôle de la fonction Inconnue est d’inverser les chiffres d’un nombre donné.
186
Exercices et problèmes Annexe
Exercice N° 2
1. Inconnue ( ‘’Tableau’’)
Ch Tableau
Inconnue ( ‘’ablea’’ )
Tableau
2. Inconnue ( ‘’ablea’’’)
Ch ‘’ablea’’ ablea
Inconnue ( ‘’ble’’ )
3. Inconnue ( ‘’ble’’) ble
Ch ‘’ble’’
l
Inconnue ( ‘’l’’ )
ble
4. Inconnue (‘’l’’)
Ch ‘’l ‘’ ablea
Tableau
Solution itérative :
0) Def Proc affiche ( ch : chaine)
1) i 1 , p 0
2) Tant Que ( i <= long ( ch ) div 2 ) faire
Ecrire ( copy ( ch , i , long (ch ) – p )
II+1
Pp+2
Fin Tant que
3) Si long ( ch ) mod 2 <> 0 Alors
Ecrire ( ch [ (long ( ch ) div 2) + 1 ] )
Fin si
4) [ p p – 2 , i i – 1 ]
Tant que ( I > 0 )faire
Ecrire ( copy ( ch , i , long ( ch ) – p )
Pp–2
II-1
Fin Tant que
5) Fin affiche
Exercice N° 3
1. Le tri utilisé est le tri par Insertion.
187
Exercices et problèmes Annexe
3. Algorithme récursif
0) Def Proc Tri ( VAR T : Tab ; n , i : entier)
1) Si n > 1 Alors
Proc tri ( T , n – 1 )
Si T [ n ] < T [ n - 1] Alors
Temp T[ n ]
Proc Decaler ( i , j , T )
T [ j ] Temp
Fin Si
FinSi
2) Fin Tri
Exercice N° 4
188
Exercices et problèmes Annexe
Correction de Problème 2
1. Analyse programme principal
Nom : Problème2
Résultat = Ecrire (‘’la lettre reçue est : ‘’, Fn Message ( FL , Fc ) )
Fc , FL = [ ] Proc Creation ( FL , Fc )
Proc RremplirLc( Fc )
Proc RemplirFc ( FL )
Fin Problème
T.D.N.T T.D.O
Type Objet Type/Nature Role
Mcode = Enregistrement FL Texte Fihier textec
Car : Caractère Fc Crypte Fichier de Mcode
Code : chaine Creation Procédure
Fin RemplirLc Procédure
Crypte = Fichier de Mcode RemplirFL Procédure
Message Fonction
189
Exercices et problèmes Annexe
Correction Problème 2
190
Exercices et problèmes Annexe
191
Exercices et problèmes Annexe
Série N° 3
Exercice N° 1 :
Soit les déclarations suivantes :
Type
Fiche = Enregistrement
Rib : long Entier
Nom : chaine
Prénom : chaine
Solde : réel
Fin Fiche
Compte = Ficher de Fiche
Tab = Tableau [1.. 100] de fiche
Nbre = Ficher d’Entier
En se basant sur les déclarations précédentes, dire pour chacune des instructions suivantes
si elle est correcte ou non. Dans le cas ou elle ne l’est pas, justifier votre réponse.
a- E1 E2
b- E1 E2 . Rib
c- E1 T [ 3 ]
d- Ecrire ( T [ 3 ] )
e- E1 T [ 4 ] . solde
f- Lire ( fn , E3)
g- Ecrire_nl ( Ft , E2 )
h- Ecrire ( Fn , E2 . solde )
192
Exercices et problèmes Annexe
Exercice N° 2 :
Exercice N° 3 :
Pour vérifier la divisibilité d’un entier N par 11 on peut procéder comme suit :
Soustraire de N amputé de son chiffre des unités, le chiffre supprimé et recommencer
éventuellement avec le nombre ainsi obtenu jusqu'à :
- Trouver un zéro on dit que N est divisible par 11.
- Un entier < 11 on dit que N n’est pas divisible par 11.
Exemple
N= 1049818
104981-8=104973
10497-3=10494
1049-4=1045
104-5=99
9-9=0
Le nombre N est divisible par 11
N=12345
1234-5=1229
122-9=113
11-3=8
0-8=-8<0
N n’est pas divisible par 11
QUESTION:
Ecrire l’algorithme d’un module qui permet de vérifier si un entier donné est divisible par
11 ou non.
193
Exercices et problèmes Annexe
Exercice N° 4 :
Contenu du fichier
Contenu du fichier Fn Equivalant en
Inverse de l’Hexadécimal Fn finalement en
initialement Hexadécimal
décimal
30 1E E1 225
162 A2 2A 42
2988 BAC CAB 3243
194
Exercices et problèmes Annexe
Exercices N° 5
On se propose d’écrire un programme qui permet de :
• Remplir une matrice M de degré 4 par des entiers binaires (0 et 1 seulement).
• Chaque ligne de la matrice M représente la conversion binaire d’un entier X de la base 10 ;
o Trouver la valeur de X pour chaque ligne de M,
o Associer les valeurs de X dans un tableau T,
• Trier puis afficher (en ordre décroissant ) les éléments du tableau T.
Exemple :
Si M =
1 2 3 4 T
1 1 0 1 0 10
2 0 1 1 1 7
3 1 0 0 1 9
4 1 0 1 1 11
( 1010 ) 2 = ( 10 ) 10 Comment ?
23 22 21 20
1 0 1 0
1010 = 1*23 + 0 *22 + 1*21 + 0*20 = 1*8 + 0*4 + 1*2 + 0*1 = 10
Question :
195
Exercices et problèmes Annexe
Exercice N° 6
Le mot de passe
Une application informatique génère automatiquement un mot de passe de la manière suivante :
Il s’agit de remplir aléatoirement une matrice carrée M de taille ( NL x NC) avec (5< NL <13 et 5
<NC<13) par des chiffres binaires ;
Convertir le contenu de chaque ligne en son équivalent décimal ; si le nombre trouvé correspond à un
code ASCII alors le caractère correspondant fera partie du mot de passe sinon le caractère dont le code
ASCII est le reste de la division du nombre trouvé par 256 en fera partie ;
Le mot de passe final est obtenu en triant la chaine constituée dans l’ordre décroissant en employant la
méthode du tri à bulles dans sa version récursive.
Exemple
Pour NL=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
L’application générera le mot de passe suivant : b]A1
Questions :
1) Quelles sont les structures de données adéquates à ce problème ? justifier le choix de chaque
structure proposée.
2) Analyser et déduire l’algorithme du programme principal qui permet de réaliser le traitement décrit
précédemment en le décomposant en modules.
3) Analyser chacun des modules envisagés précédemment et en déduire les algorithmes
correspondants.
196
Exercices et problèmes Annexe
Série N° 4
Exercice 1 (problème bac 2011 s. contrôle)
Dans le cadre de la réalisation d’un projet scientifique, deux chercheurs résidants dans deux pays
différents, s’échangent des données sur Internet. Pour assurer la confidentialité de leur projet, les
messages échangés sont cryptés.
1ère étape :
Remplir un e matrice d’entiers MC par les codes ASCII (en base 10) des caractères du message
initial. Chaque ligne de la matrice contiendra les codes ASCII des caractères d’une ligne du fichier
« TxtInit.txt ». le nombre de lignes de la matrice MC est égal au nombre de lignes du fichier
« TxtInit.txt » et le nombre de colonnes de la matrice MC est égal à la longueur (long_max) de la
plus longue ligne du fichier.
Pour les lignes ayant une longueur inferieure à long_max, on complète les cases restées vides par
le code ASCII du caractère espace (qui est égal à 32).
2ème étape :
3ème étape :
Stoker dans « TxtCryp.txt », les colonnes de la matrice MC, de la colonne la plus à gauche à la
colonne la plus à droite. Chaque colonne de la matrice MC occupera une ligne et les éléments de
cette ligne seront séparés par le caractère espace.
Exemple : Bonjour
Merci
197
Exercices et problèmes Annexe
1 2 3 4 5 6 7
1 66 111 110 106 110 117 114 Où 66 est le code ASCII de « B », 111
MC celui de « o », … et 32 le code ASCII du
2 84 101 115 116 49 32 32
caractère espace.
3 77 101 114 99 105 32 32
1 2 3 4 5 6 7
162 est la conversion en
1 102 157 156 152 110 165 162 base 8 de (114)10
MC 2 124 145 163 164 61 40 40
3 115 145 162 143 151 40 40
ème
3 étape : A partir de la matrice MC précédente, on obtient le fichier « TxtCyp.txt » suivant :
Travail demandé :
1. Analyser le problème en le décomposant en module et en déduire l’algorithme du
programme principal.
2. Analyser chacun des modules envisagés précédemment et en déduire les algorithmes
correspondants.
198
Exercices et problèmes Annexe
T.D.O
Objet Type / Rôle
Nature
Fc Texte Fichier texte crypté
Finit Texte Fichier texte initial
MC Mat Matrice de 50x50 entier
L Entier Ligne
C Entier Colonne
Affiche Procédure Affiche le contenu d’un fichier texte
Création Procédure
remplirFC Procédure
remplirMC Procédure
199
Exercices et problèmes Annexe
T.D.O
Objet Type / Rôle
Nature
R Entier Reste de la division
Ch Chaine Résultat de conversion
St Chaine Conversion du reste à une chaine
K Entier Résultat sous forme entier
E Entier Erreur
201
Exercices et problèmes Annexe
Serie N° 5
Exercice N° 1 ( ex 1 bac 2012 sp)
Soient les tableau de déclaration des types et des objets suivants :
TDNT
Type
Jours = (Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche)
Enreg = Enregistrement
Jrs : Jours
CodeArt : Chaine [10]
QteVendue : Réel
Fin Enreg
Article = Fichier de Enreg
Fiche = Fichier d’entier
Vect = Tableau [ Lundi . . Dimanche ] de Enreg
TDO
Objet Nature /Type Rôle
Va Vect Vecteur d’aricles vendu
Fa Article Fichier d’articles vendus
Fe Fiche Fichier d’entier
Avend Enreg Les données d’un article vendu
Test Booléen Variable booléenne
R Réel Variable réelle
Cj Jours Compteur
Ft texte Fichier contenant les noms des
articles
Recopier le tableau suivant sur votre feuille de copie puis le complèter en mettant dans la 2ème
colonne la lettre « V » si l’instruction donnée dans la 1ère colonne est valide ou par « F » dans le cas
contraire, tout en justifiant la réponse si l’instruction est non valide.
202
Exercices et problèmes Annexe
TDO
Objet Type / Nature Rôle
F FEnt Fichier d’entier
F1 FEmp Fichiers des employés
F2 Texte Fchier texte
E TEmploye Enregistrement d’un employé
Ch Chaine Chaine de caractère
En se basant sur les déclarations précédeentes, dire pour chacune des instructions
suivantes si elle est correcte ou non. Dans le cas où elle ne l’est pas, justifier votre réponse.
a) Lire ( F1 , E )
b) Ecrire ( F , Ch )
c) Pointer ( F2 , 4 )
d) Ecrire ( F1 , E . Age )
203
Exercices et problèmes Annexe
Serie N° 6
Long
Larg
A B
Travail demandé
Ecrire un algorithme d’un module qui permet de calculer une valeur approchée du volume
de sable à enlever entre les deux rives A et B pour creuser la rivère, pour un nombre de
subdivisions N.
204
Exercices et problèmes Annexe
Etant donné un fichier texte nommé ‘’F_IPV4.txt’’ contenant dans chaque ligne une adresse
IPV4. On se propose de vérifier la validité des adresses IP4 stockées dans ce fichier, de déterminer
la classe à laquelle appartient chacune des adresse valides, de les faire migrer vers le système IPV6
et de stocker dans un fichier d’enregistrements nommé ‘’F_IPV6.dat’’ chaque adresse IPV4 valide
ainsi que la classe à laquelle elle appartient et son équivlent en IPV6.
Pour ce faire, on dispose des informations suivantes :
1. Une adresse IPV4 valide est codée par quatre octets ( 32 bits) et répresentée sous la forme
W.X.Y.Z avec W, X, Y et Z sont quatres entiers naturels appartenant chacun à l’intervalle
[0,255] et séparés par le caractère ‘’.’’.
N.B : pour vérifier la validité d’une adresse IPV4, le candidat est appelé uniquement à vérifier si W,
X, Y et Z sont dans l’intervalle [0,255].
2. Chaque adresse IPV4 valide appartient à une classe :
• Classe A, si la valeur du premier bit à gauche de la répresentation en b inaire de W est 0.
• Classe B, si la valeur des deux premiers bits à gauche de la répresentation en binaire de W
est 10.
• Classe C, si la valeur des trois premiers bits à gauche de la répresentation en binaire de W
est 110.
• Classe D, si la valeur des quatre premiers bits à gauche de la répresentation en binaire de
W est 1110.
• Classe E, si la valeur des quatre premiers bits à gauche de la répresentation en binaire de
W est 1111.
3. Une adresse IPV6 est codée sur 16 octets ( 128 bits). Pour faire migrer une adresse IPV4
valide vers le système IPV6, on va s’intéresser uniquement au bloc de 32 bits dans
l’adresse IPV6 valide qui représente la conversion en hexadécimal de l’adresse IPV4.
Pour ce faire, on convertit chacun des nombres W, X, Y et Z en hexadécimal, puis les
concatener en insérant le caractère ‘’ :’’ au milieu du résultat obtenu.
Exemple :
L’adresse 155.105.50.68 est valide et elle appartient à la classe B cal la valeur des deux
premiers bits à gauche de la representation en binaire de 155 qui est 10011011 est 10.
L’equivalant du nombre décimal 155 en hexadécimal est 9B
L’equivalant du nombre décimal 105 en hexadécimal est 69
L’equivalant du nombre décimal 50 en hexadécimal est 32
L’equivalant du nombre décimal 69 en hexadécimal est 45
Donc, le bloc de 32 bits dans l’adresse IPV6 qui répresente la conversion en hexadécimal de
l’adresse IPV4 est 9B69 :3245
N.B :
• le candidat n’est pas appelé à remplir le fichier ‘’F_IPV4.txt’’
• Tous les fichiers utilisés sont enregistrés sur la racine C.
Travail demandé
1. Analyser le problème en le décomposant en modules.
2. Analyser chacun des modules envisagés.
205
Exercices et problèmes Annexe
Note : L’élève doit choisir deux exercices parmi les 4 exercices ( ex1 , ex 2, ex3, et ex 4)
+
Un problème parmi les deux problèmes (problème 1 et problème 2 )
Exercice N° 1 ( 5pts)
Soit la fonction inconnue suivante :
0) Def fn Inconnue( n : entier ) : entier
1) Convch ( n , ch )
2) X long ( ch ) - 1
3) Si n < 10 Alors
Inconnue n
Sinon
x
Inconnue FN Inconnue ( n div 10 ) + ( n mod 10 ) * 10
Fin si
4) Fin inconnue
Questions :
1. Exécuter manuellement cette fonction pour les appels suivants et donner les valeurs
retournées Pour n = 25 et n = 214
2. Quel est le rôle de cette fonction :.
Exercice N° 2 ( 5 pts)
Soit l’algorithme de la procédure suivante :
Ecrire( ch )
Proc Inconnue ( copy( Ch , 2 , Long( Ch ) – 2 ) )
Ecrire ( Ch )
Sinon
Ecrire ( ch)
finSi
6) Fin inconnue
206
Exercices et problèmes Annexe
Exercice N° 3 (5 pts)
Soit l’algorithme de tri suivant :
0) Def Proc Tri ( Var T : Tab ; n : Entier )
1) Pour i de 2 à n Faire
Temp T [ i ]
Proc Décaler ( i , j , T )
T [ j ] Temp
Fin Pour
2) Fin Tri
Question :
1. Quel est le type de tri utilisé dans cet algorithme ?
2. Donner l’algorithme de la procédure Décaler
3. Proposer un algorithme récursif de ce tri.
Exercice N° 4 ( 5 pts)
207
Exercices et problèmes Annexe
Problème 1 ( 10 pts)
On se propose ce calculer et d’afficher le Pgcd de n entiers, exemple Pgcd(84,72,56,22)=2
utilisant la technique suivante :
• Remplir un fichier « Nombre.dat » par N entiers aléatoire < 100 ( avec 2<= N <= 50).
• Utilisant une matrice M pour chercher le pgcd des nombres du fichier.
- Copier les entiers du fichier ‘’Nombre.dat’’ dans la 1ère ligne de matrice M.
- La 2ème ligne de matrice sera remplie par les pgcd de chaque deux entier adjacent de la 1ère
ligne.
- La 3ème ligne de matrice sera remplie par les pgcd de chaque deux entier adjacent de la 2ème
ligne.
- Appliquer le même principe pour les autres lignes jusqu'à arrivé a une ligne qui à un seul
nombre, qui est le pgcd chercher.
Exemple :
22 84 72 56 22
84 2 2 = Pgcd (4 , 2)
208
Exercices et problèmes Annexe
Problème 2 ( 10 pts )
Deux chercheurs scientifiques travaillent sur un projet top secret. Ils échangent des lettres
cryptés (codés) pour des raisons de sécurité.
Chaque lettre envoyée ou reçue est sous forme d’un fichier texte « Lettre.txt » formée par
des mots cryptés, et un mot par ligne. Les deux chercheurs se sont mis d’accord sur un fichier de
codage « Code.dat » dans le quel est enregistré tous les caractères avec leurs codes, chaque
caractère est codé sur 6 signes (des « * » et des « - » ).
On se propose d’écrire un programme qui permet de décrypter une lettre reçue pour
devenir lisible.
Exemple :
A *-----
*---*-*-**-**-----*-**--*---*-*-***- EXAMEN
B **----
*--**-*-*--* DU
C *--*--
BAC
**----*-----*--*--
D *--*-
…..
N.B : Les fichiers ‘’Lettre.txt’’ et ‘’Code.dat’’ sont existe déjà. L’élève n’est pas appelé de les
remplir.
Questions :
3. Analyser le problème en le décomposant en modules et déduire l’algorithme du programme
principal.
4. Analyser chacun des modules envisagés précédemment et en déduire les algorithmes
correspondants.
209
Exercices et problèmes Annexe
3. Pour N = 25
• Exécution de Inconnue ( 25 )
N 25
X 1
Ch ‘’25’’
• Exécution de Inconnue ( 2 )
N 2
X 0
Ch ‘’2’’
Inconnue 2
2. Pour N = 214
N 214
X 2
Ch ‘’214’’
• Exécution de Inconnue ( 21 )
N 21
X 1
Ch ‘’21’’
• Exécution de Inconnue ( 2 )
N 2
X 0
210
Exercices et problèmes Annexe
Ch ‘’2’’
Inconnue 2
4. Le rôle de la fonction Inconnue est d’inverser les chiffres d’un nombre donné.
211
Exercices et problèmes Annexe
Ch ‘’ble’’
Inconnue ( ‘’l’’ )
4. Inconnue (‘’l’’)
Ch ‘’l ‘’
Solution itérative :
1) i 1 , p 0
II+1
Pp+2
Fin si
4) [ p p – 2 , i i – 1 ]
212
Exercices et problèmes Annexe
Pp–2
II-1
5) Fin affiche
1) [ Temp T [ i ] , p i ]
T[ p ] T[ p – 1 ]
P p -1
2) Fin Decaler
6. Algorithme récursif
0) Def Proc Tri ( VAR T : Tab ; n , i : entier)
1) Si n > 1 Alors
Proc tri ( T , n – 1 )
Si T [ n ] < T [ n - 1] Alors
Temp T[ n ]
Proc Decaler ( i , j , T )
T [ j ] Temp
Fin Si
FinSi
2) Fin Tri
213
Exercices et problèmes Annexe
inconnue ‘’’’
Aux Ch [ i ]
Ch [ i ] Ch [ long ( ch ) – i + 1 ]
Ch [ long ( ch ) – I + 1 ] Aux
214
Exercices et problèmes Annexe
Fin Pour
2) Inverse Ch
3) Fin Inverse
Fc , FL = [ ] Proc Creation ( FL , Fc )
Proc RremplirLc( Fc )
Proc RemplirFc ( FL )
Fin Problème
T.D.O
T.D.N.T
Objet Type/Nature Role
Type
FL Texte Fihier textec
Mcode = Enregistrement
Fc Crypte Fichier de Mcode
Car : Caractère
Creation Procédure
Code : chaine
RemplirLc Procédure
Fin
215
Exercices et problèmes Annexe
Résultat = Message
Lire_nl ( FL , motc )
Ch ’’’’
St sous_chaine ( motc , 1 , 6 )
Ouvrir ( Fc )
Lire_nl ( Fc , Ec )
Si Ec . code = st Alors
Ch Ch + Ec . car
Fin si
Efface ( motc , 1 , 6 )
ChR ChR + ‘’ ‘’ + Ch
Fin Message
T.D.O
Ch Chaine
216
Exercices et problèmes Annexe
Recherche Procedure
T.D.N.T
Type
Résultat = Fn
Fn = [ ] Associer ( Fn , ‘’C:\4SI\Nombre.dat’’)
Recréer ( Fn )
Fin Création
Resultat = Fn
Fn = [ ] Pour i de 1 à N faire
K Random ( 100 )
Ecrire ( Fn , k )
Fin Pour
N = [ ] Repeter
I E i
217
Exercices et problèmes Annexe
Résultat = Recherche
Recherche = [ ] Recherche M [ n , 1 ]
M = [ ouvrir ( Fn ) , i 1 , n 0 ]
Lire ( Fn , k )
NN+1
M[ i , N ] K
PN
Répéter
Ii+1,j1
M [ i , j ] Pgcd( M [ i – 1 , j ] , M[ I – 1 , j + j ] )
Jj+1 T.D.O
Fin Tant Que Objet Type/Nature Rôle
PP–1 N Entier
Jusqu’a ( I = N ) I Entier
Fin Recherche
Resultat = Pgcd
jusqu’a ( b = 0 )
Fin Pgcd
218
Exercices et problèmes Annexe
Pendant le tour de France de bicyclette, chaque jour les organisateurs de la course saisirent
les résultats journaliers dans un fichier « Resultat.dat ». Le résultat est formé par
Chaque jour il y a un prix pour le (les) gagnant qui a (ont) le temps minimal. Les donnes de (des)
gagnant(s) seront enregistrés dans un fichier texte « gagnant.txt ».
Travail demandé :
1- Ecrire l’analyse du programme principale ainsi que les différents modules envisagés.
219
Exercices et problèmes Annexe
T.D.O
220
Exercices et problèmes Annexe
221
Exercices et problèmes Annexe
Chez une société de télécommunication les abonnés (clients) sont identifiés par plusieurs
informations, les plus importantes sont :
Questions :
222