professeur : nsiri riadh 4éme années scientifiques€¦ · web viewalgorithmique . les...
TRANSCRIPT
Prof : Nsiri Riadh 4ème Science de l’informatique
LES ENREGISTREMENTS ET LES FICHIERS
Au terme de ce chapitre, l’élève sera capable :
Déclarer des objets de type composés : Enregistrements et Fichiers
Résoudre des problèmes faisant appel à ces structures.
Page 1
Chapitre 1
Algorithm
ique Objectifs
Prof : Nsiri Riadh 4ème Science de l’informatique
I. les Enregistrements :
1. Introduction :
Activité :
Une entreprise veut gérer les informations concernant ses employés (matricule, nom, prénom, salaire, adresse…) sachant qu’on a 100 employés.1-Donnez la structure de données nécessaire pour les objets à déclarés,2- Est-ce qu’on peut regrouper ces informations dans une seule structure.
Parmi les types structurés, nous avons déjà vu le type tableau qui nous permet de réunir au sein d’une même structure des éléments de même type. Donc on peut utiliser ici 5 tableaux pour chaque information concernant l’employé
Donc le type tableau ne permet pas de regrouper des informations de type différent
La solution est d’utilisée une nouvelle structure appelée : enregistrement (Record en Pascal)
2. Définition :
Un enregistrement est une structure de données composée, définie par le programmeur qui permet de grouper (dans une même case mémoire) un nombre fini de données, simples et/ou composées de même ou de différents types.
==> notion de champUn enregistrement est un ensemble de valeurs se trouvant chacune dans une variable appelée CHAMP.Un champ est identifié par un nom, contenant une valeur de type prédéfini (entier, caractère….) ou de nouveau type défini par le programmeur.
3. Déclaration :
Au niveau de l’analyse :
Page 2
Prof : Nsiri Riadh 4ème Science de l’informatique
Au niveau de pascal :
TYPE NomDeType = Record Champ 1 : type ; Champ 2 : type ; . . Champ N : type ; End ;VAR NomDeVar : NomDeType ;
4- Exemples :
Reprenons l’exemple de l’activité introductive :au niveau de l’analyse :
TDNT TDO
TypeEmployer =Enregistrement Matricule: Entier Nom: Chaine[10] Prénom: Chaine[10] Adresse: chaine[30]Fin Employer
au niveau du Pascal:
TYPE employer = Record Matricule: integer ; Nom: String [10] ; Prenom: string [10] Adresse: string [30] End ;VAR E : Employer ;
Page 3
Objet Type/nature
E Employer
Prof : Nsiri Riadh 4ème Science de l’informatique
5- Exercice 1 :
Déclarer une variable el de type élèves, celui-ci est un enregistrement avec les champs suivants:Nom : chaineNote: tableau de 3 réelsMoyenne: réel
6- Accès à un champ d’enregistrement :
On a deux méthodes :1- Accès en utilisant le point2- Accès en utilisant l’instruction Avec (With)
Exemple 1:
Soit P une variable de type Personne qui est un enregistrement contenant 2 champs : nom et Prénom on veut saisir et afficher cette variable
Saisie : 1 ère Méthode :
Analyse :
P. Nom = Donnée(‘’Nom=‘’)
P.Prenom = Donnée(‘’Prénom=‘’)
Algorithme
Ecrire(‘’nom=‘’), Lire (P.Nom)
Ecrire(‘’Prénom=‘’), Lire (P.Prenom)
Pascal
Write(‘Nom=‘); Read(P.Nom);
Write(‘Prénom=‘) ; Read(P.Prenom);
Page 4
TypeTabnote= Tableau de 3 réeleleves =Enregistrement Nom: Chaine note: tabnote moyenne: réelFin eleves
Objet Type/nature
el eleves
Prof : Nsiri Riadh 4ème Science de l’informatique
Saisie : 2 ème Méthode :
Analyse :
Avec P Faire
Nom = Donnée(‘’Nom=‘’)
Prenom = Donnée(‘’Prénom=‘’)
Fin Avec
Algorithme
Avec P Faire
Ecrire(‘’nom=‘’), Lire (Nom)
Ecrire(‘’Prénom=‘’), Lire (Prenom)
Fin Avec
Pascal
With P Do BeginWrite(‘Nom=‘); Read(Nom);Write(‘Prénom=‘) ; Read(Prenom);End;
7- Tableau d’enregistrement
Un enregistrement n’est pas un tableau et d’après nos pré requis un tableau est un ensemble de case de même type contenant chacune une valeur, donc on peut avoir un tableau d’enregistrement.
Reprenons notre exercice :
Si la variable el est un tableau d’élèves sa déclaration devient
Type
Tabnote= Tableau de 3 réeleleves =Enregistrement Nom: Chaine note: tabnote moyenne: réel Fin elevesTabeleve = Tableau de n eleves
Page 5
Objet Type/nature
el Tabeleleves
Prof : Nsiri Riadh 4ème Science de l’informatique
Exemple2 Soit P une variable de type Personne qui est un enregistrement contenant deux
champs Nom et prénom. Pour sauvegarder les informations de n personnes de types P chacune on doit
utiliser un vecteur T.
Donc la saisie de notre tableau de n enregistrement P sera :
1 ère méthodeAu niveau de l’analyse
Pour i de 1 à n faire
T[i].Nom= Donnée(‘’Nom=‘’)
T[i].Prenom= Donnée(‘’Prenom=‘’)
Fin pour
Au niveau de l’algorithme
Pour i de 1 à n faire
Ecrire(‘’Nom=‘’), Lire (T[i].Nom)
Ecrire(‘’Prenom=‘’), Lire(T[i].Prenom)
Fin pour
Au niveau du Pascal
For i:= 1 to n Do
Begin
Write(‘Nom=‘); Read(T[i].Nom);
Write(‘Prenom=‘); Read(T[i].Prenom);
End;
2 ème méthodeAu niveau de l’analyse
Pour i de 1 à n faire
AVEC T[i] Faire
Nom= Donnée(‘’Nom=‘’)
Prenom= Donnée(‘’Prenom=‘’)
Fin AVEC
Fin pour
Page 6
Prof : Nsiri Riadh 4ème Science de l’informatique
Au niveau de l’algorithme
Pour i de 1 à n faire
AVEC T[i] Faire
Ecrire(‘’Nom=‘’), Lire (Nom)
Ecrire(‘’Prenom=‘’), Lire(Prenom)
Fin AVEC
Fin pour
Au niveau du Pascal
For i:= 1 to n DoWith T[i] DO Begin Write(‘Nom=‘); Read(Nom); Write(‘Prenom=‘); Read(Prenom); End;
Remarque :
La lecture et l’écriture d’une valeur d’un enregistrement se font champ par champ.
L’affectation () des valeurs d’un enregistrement dans une variable de même type peut être réalisée champ par champ ou entièrement ?
Exemple : si a et b deux enregistrement de même type l’instruction suivante est possible abOn ne peut pas comparer deux variables de types enregistrements or on peut comparer les champs.
Application :
Soit la structure Personne schématisée par le nom (chaîne de 30 caractères maximum), le numéro de téléphone (10 caractères maximum), le numéro de carte bancaire (entier non signé).
Ecrire un programme qui permet l'enregistrement de 100 personnes sous forme tabulaire.
Page 7
Prof : Nsiri Riadh 4ème Science de l’informatique
Exemples d’utilisation d’enregistrements
Page 8
program annuaire;
uses wincrt;
Type
Personne = record
nom: string[30];
telephone: string[10];
nCarte: word;
end;
Tab: array[1..10] of Personne;
Var i: integer; T:Tab;
Procedure remplir(Var T:Tab);
Begin
For i:=1 to 10 do
begin
Write ('Nom : ');
readln(T[i].nom);
write('Numero de telephone : '); readln(T[i].telephone);
write('Numero de carte banquaire : ');
readln(T[i].nCarte);
writeln;
end;
BEGIN
Saisie(T);
writeln('Opération de lecture terminee!!!');
end.
Program portrait;
Type taille_t =50..250;
Couleurs_t=(Brun,Noir,Roux,Bleu,Marron,Vert);
Cheveux_t=Brun..Roux;
Yeux_t=Bleu..Vert;
Personne= Record
taille:taille_t;
cheveux:cheveux_t;
Yeux:yeux_t;
End;
Var ali, sami : personne;
Begin
ali.taille:=180; ali.cheveux:=brun; ali.yeux:=Noir;
Sami := ali;
End.
Il est possible d’affecter une variable enregistrement dans une autre à condition qu’elles
aient la même structure
Prof : Nsiri Riadh 4ème Science de l’informatique
Exemple2 :
Page 9
Type date = Record
Jour_s:(lun, mar, mer, jeu, ven, sam, dim);
Jour: 1..31;
Mois:1..12;
Annee:0..99;
End;
Employer =record
Nom: string[20];
prenom: string;
Date_embauche:date;
End;
Var e1, e2:employer;
- e1.date_embauche.annee : désigne l’année d’embauche de l’enregistrement e1
- e1.date_embauche : désigne la date d’embauche de l’enregistrement e1
Prof : Nsiri Riadh 4ème Science de l’informatique
II- Les Fichiers
1- Introduction :
À la fin de l’exécution d’un programme toutes les informations saisies et stockées dans la mémoire centrales seront perdues, pour cela les langages de programmation nous permettent de stocker les données saisies dans des fichiers sur des supports de stockage
2- Définition :
Un fichier est une structure de données de même types nommées et enregistrer sur une mémoire de masse (DD, flash disque dur, CD, ….)
3- Types de fichiers :
Essentiellement on distingue deux types de fichiers :
Fichiers texte : constitués par des lignes de types chaines de caractères.
Fichiers Typé : basé sur une structure de donnée (fichiers de réel, fichier d’enregistrements…)
4- Organisation :
Les blocs des données formant un fichier sont enregistrés les uns à la suite des autres de façon linéaire.
Il existe plusieurs types d’organisation des fichiers, nous allons voir essentiellement deux grands types :
Organisation séquentielle Organisation relative (dite aussi directe).
5- Types d’accès :
On distingue deux types d’accès à un fichier :
- Accès séquentiel- Accès direct
Activité 1 :
Nous disposant de 4 disques de couleurs différentes et un support où nous allons empiler un à un les disques (Blanc – Bleu –Rouge).
Nous voulons accéder au disque rouge. Nous ne pouvant pas le faire directement car il se trouve sous le disque bleu et ce dernier sous le disque blanc.
Page 10
Prof : Nsiri Riadh 4ème Science de l’informatique
Pour accéder à un disque dans le support, il faut retirer tous les disques placés avant lui. Ce type d’accès est appelé séquentiel.
Activité 2 :Nous disposant maintenant de 4 disques de couleurs différentes et 4 supports distincts, nous allons placer chaque disque sur un support.
Nous voulons accéder au disque rouge . Pour cela il n’est pas nécessaire de retirer le disque blanc puis le disque bleu. Nous accédons directement au disque rouge ==> Cet accès s’appelle accès direct (relatif)
a- Les Fichiers à accès séquentiels :
Un fichier à accès séquentiel (fichier séquentiel) est une suite de valeurs ou d’enregistrements disposés les uns à la suite des autres de façon que la lecture d’une valeur ne puisse se faire qu’après la lecture des valeurs précédentes.
Déclaration
En algorithmique
===>T.D.N.O
Avec types_composants représente le type des composants du fichier, ces composants peuvent être de même types exemple : Entier, réel, enregistrement…
===>T.D.O
Objet T/N Rôle
Nom_logique Nom_Nouveautype Fichier pour …..
……
Page 11
Type
Nom_NouveauType = Fichier de types_composants
Prof : Nsiri Riadh 4ème Science de l’informatique
En Pascal
Type nom_NouveauType = File of type_composants
Var nom_logique : nom_NouveauType;
Exemple1 :
Nous voulons saisir et enregistrer les noms des élèves d’une classe dans un fichier. Donner la déclaration algorithmique et en Pascal?
En algorithmique
===>T.D.N.O
Type
eleve = Fichier de chaîne de caractères
Objet T/N Rôle
Nom eleve Fichier pour les noms des élèves
En Pascal
Type eleve = File of string;
Var nom : eleve;
Exemple2 :
Nous voulons saisir et enregistrer la fiche des élèves d’une même classe dans un fichier avec fiche contient les informations suivantes :
Nom & prénom Date de naissance Sexe Note1, Note2, Note3
Donner la déclaration algorithmique et en Pascal ?
Page 12
Prof : Nsiri Riadh 4ème Science de l’informatique
Type
Fiche = enregistrementNom_prenom : chaîne [40]Date_nai : chaîneSexe: caractèreN1, N2, N3 :RéelFin FicheClasse = Fichier de Fiche
Objet T/N Rôle
eleve classe Variable pour l’utilisation du fichier
classe
===== Traitement sur les fichiers :
1ère
étape : Association (Assignation)
Pour un fichier, il existe deux noms :
Nom_interne : ou bien nom_logique : utilisé par le programme. Nom_externe : ou bien nom_physique : utilisé par le système d’exploitation.
Avant d’utiliser un fichier il faut associer son nom logique à son nom physique.
Syntaxe
En Analyse et Algorithmique En Pascal
Associer (nom_logique, nom_physique) Assign (nom_logique, nom_physique);
Page 13
Prof : Nsiri Riadh 4ème Science de l’informatique
En Analyse et Algorithmique En Pascal
Associer (F, ‘’c:\cours.dat’’) Assign (F, ‘c:\cours.dat’);Exemple 1
Exemple 2
Const NomFich = ‘c:\4si\exemples,dat’ ; ………Assign ( F, NomFich)
Exemple 3
Var NomFich : string; ………Write(‘sur quel fichier on va travailler’);Readln(NomFich);Assign ( F, NomFich)
2ème étape : Ouverture
L’instruction « recréer » permet d’ouvrir un fichier et d’effacer son contenu, si le fichier n’existe pas, il sera créé.
En Algorithmique En Pascal
Recréer (nom_logique) Rewrite (nom_logique);
L’instruction « ouvrir » permet d’ouvrir un fichier existant et de positionner le pointeur au début du fichier pour pouvoir lire ou écrire à partir du début du fichier.
Page 14
Prof : Nsiri Riadh 4ème Science de l’informatique
En Algorithmique En Pascal
Ouvrir (nom_logique) Reset (nom_logique);
L’instruction « Ecrire » permet d’écrire ou de modifier une valeur ou un enregistrement dans un fichier.
En Algorithmique En Pascal
Ecrire (nom_logique, variable) Write (nom_logique, Variable);
L’instruction « Lire » permet de lire une valeur ou un enregistrement dans un fichier (read et non readln bien sur pour les fichiers typés) car cette opération de lecture engendre systématiquement le déplacement du pointeur vers l’élément successeur
En Algorithmique En Pascal
Lire (nom_logique, variable) Read (nom_logique, Variable);
L’instruction « Fermer » permet de fermer le ou les fichier (s) ouvert (s) à la fin du traitement
En Algorithmique En Pascal
Fermer (nom_logique) Close (nom_logique);
Page 15
3ème
étape : Écriture dans un fichier
4ème
étape : Lecture à partir d’un fichier
5ème
étape : Fermeture d’un fichier
Étape intermédiaire : Test de fin de fichier
Prof : Nsiri Riadh 4ème Science de l’informatique
Dans un programme on peut tester à tout moment si nous avons atteint la fin d’un fichier par l’instruction « Fin_Fichier »
En Algorithmique En Pascal
Fin_fichier (nom_logique) EOF (nom_logique);
Remarque :
La première fois, le fichier doit être créé avec un appel à Rewrite, qui est la seule méthode pour créer un fichier vide, un appel à reset produira une erreur d’exécution puisque le fichier n’existe pas sur le disque, par contre dès la seconde exécution il faut impérativement faire appel à Reset pour ouvrir simplement le fichier sans détruire le contenu
Toutes les opérations d’entrée/sortie font automatiquement l’objet d’un contrôle d’erreur, si une erreur survient le programme se termine et affiche un message d’erreur, ce contrôle automatique peut être désactivé et réactiver en utilisant les directives de compilation {$I-} et {$I+}.
Càd lorsque une série d’instruction est précédée par {$I-}, une erreur d’E/S ne cause pas l’arrêt du programme mais suspend toute autre opération d’E/S jusqu’à ce la fonction standard Ioresult sera appelée. Ce qui permet de tenter sans risque plusieurs opérations.
La valeur 0 retournée par Ioresult signifie que toute est bien passé, toute autre valeur signifie qu'une erreur est survenue pendant la dernière opération de l’E\S.
Exemple 1 :
Lorsqu’on déclare une variable de type entier et on saisit au clavier des caractères alphabétiques dans cette variable le programme s’arrête, pour ne pas provoquer l’arrêt du programme on utilise la directive de compilation {$I-} ,
Exemple2 :
Page 16
Gestion d’erreur :
Prof : Nsiri Riadh 4ème Science de l’informatique
- Pour savoir si un fichier est utilisé pour la 1 ère fois par un programme, on désactive les erreurs d’E\S puis on essaie reset, s’il y a une erreur càd le fichier n’existait pas et l’on créer avec rewrite
Assign(F, nomF);
{$I-}Reset(F);IF Ioresult <>0 then Rewrite(F); (création) {$I+}Application 1 :
Remplir aléatoirement un tableau T de n lettres majuscules (1<=n<=50) puis le sauvegarder dans un fichier « F ».Analyser le programme et en déduire les algorithmes ainsi que le programme pascal correspondant.
Remarque :
- Il est interdit de lire ou d’écrire une partie d’un enregistrement dans un fichier d’enregistrements.
Exemple : si on a un enregistrement fiche contenant les noms et les prénoms sauvegarder dans un fichier Ffiche.
La séquence suivante n’est pas valide :
Var F : Ffiche ; P : fiche ;
……….Read (F, P.nom) ;
Si on a besoin de consulter les noms d’une personne, il faut lire l’intégralité de l’enregistrement dans une variable de type approprié puis on extraire le nom
Exemple : on veut afficher les noms inscrits dans les enregistrements d’un fichier
While not(EOF(F)) DOBeginRead(F, p) ;Writeln(p.nom) ;End ;
Application 2 :
Page 17
Prof : Nsiri Riadh 4ème Science de l’informatique
Un produit est caractérisé par les informations suivantes : Référence (10 caractères)Nom (15 caractères) PU Qte
Ecrire l’analyse d’un programme modulaire permettant de:- Saisir autant de produit jusqu’à que l’utilisateur décide de s’arrêter puis les
sauvegardés dans un fichier nommé ‘’fp.dat’’,- Afficher le nombre des produits dont le PU <= 10,000DT
Analyse du PP
Résultat = Fermer (fp1) Ecrire (FN nbproduit(fp1) ) Proc saisie (fp1) Proc Création (fp1)
TypeEnregistrement = ProduitRéférence : chaine [10]Nom : chaine [15] PU : réelQte : entierFin produitFprod : fichier de produit
Objet Type/NatureFp1NbproduitSaisiecréation
FprodFonctionProcédureProcédure
Analyse de la procédure création
DEF PROC création (var fp1 : fprod)Résultat= fp1Fp1 = []Recréer (fp1)Associer (fp1, ‘’c:\fp.dat’’)Fin création
Analyse de la procédure saisie
Page 18
Prof : Nsiri Riadh 4ème Science de l’informatique
DEF PROC saisie (var fp1 : fprod)Résultat= fp1Fp1 = []Répéter Avec P Faire Référence = Donnée Nom = Donnée PU= Donnée Qte= DonnéeFin avecEcrire (fp1, p)Ecrire (‘’voulez – vous saisir un nouveau produit (O/N’’)Rep = donnée Jusqu’à (majus (rep) = N)Fin saisie
Objet Type/NaturePrep
Produitcaractère
Analyse de la fonction nbproduit
DEF FN nbproduit (var fp1 : fprod) :octetRésultat= nbproduitnbproduit = nbnb= [ouvrir (fp1), nb 0]ouvrir (fp1) Tant que non fin_Fichier(fp1) Faire Lire (fp1,p) Si p.pu < = 10 alors nb nb +1 Fin si Fin Tant queFin nbproduit
Objet Type/NaturePnb
Produitoctet
b- Les fichiers à accès direct :
Page 19
Prof : Nsiri Riadh 4ème Science de l’informatique
Un fichier à accès direct si on peut accéder directement à chacun de ces éléments. Cette opération nécessite la procédure « Pointer (seek en Pascal) »
Syntaxe :
En Algorithmique En Pascal
Pointer (nom_logique, numero) seek (nom_logique, numero);
Remarque
Il faut faire attention de ne pas se positionner (ou demander un élément) après la fin physique du fichier. Ce contrôle de dépassement doit être fait par le programmeur grâce à la fonction « Taille _fichier ». Donc il faut que la position « numéro » doit être entre 0 et taille_fichier
Syntaxe
En Algorithmique En Pascal
Taille_fichier (nom_logique) Filesize (nom_logique);
Autres fonctions et procédures prédéfinies
Ces fonctions sont valables aussi bien pour l’accès séquentiel que pour l’accès direct.
Page 20
Prof : Nsiri Riadh 4ème Science de l’informatique
En algo En Pascal Rôle
c- Les fichiers textes :
Un fichier texte est un fichier dont le contenu représente uniquement une suite de caractères.
Page 21
Position_fichier (nom_logique)
FilePos (nom_logique); Retourne la position de l’élément sur lequel se trouve le pointeur du fichier. La position est un entier qui vaut 0 pour le premier élément
Effacer (nom_logique) Erase (nom_logique);
Suppression d’un fichier (appliquer sur un fichier ouvert ou fermer)
Renommer (Ancien nom_logique, nouveau noml_ogique)
Rename (Ancien nom_logique, nouveau noml_ogique);
Procédure qui change le nom d’un fichier
Tronquer (nom_logique)Truncate (nom_logique);
Couper le fichier à la position courante du fichier. Tout ce qui est au-delà du pointeur est alors perdu
Prof : Nsiri Riadh 4ème Science de l’informatique
Déclaration
===>T.D.O
Objet T/N Rôle
Nom_logique Texte Fichier Texte…
En Pascal
Var Nom_logique : Text;
En algo En Pascal Rôle
Ecriture d’une ligne et retour chariot
Page 22
Fin_ligne (nom_logique)
EOLn (nom_logique); Qui retourne vrai si l’on se trouve
sur le caractère (retour chario ) et faux dans le cas contraire
Chercher_fin_ ligne (nom_logique)
SeekEOLn (nom_logique);
SeekEOLn (nom_logique);
SeekEOf(nom_logique);
Ajouter (nom_logique)
Ajouter (nom_logique)
Lire_nl(nom_logique, V)Readln(nom_logique,V);
Ecrire_nl(nom_logique, V)
Writeln(nom_logique, V);
Fonction identique à fin ligne(EOLN) mais supprimant les espaces et les caractères tabulation avant d’effectuer le test.Fonction identique à fin fichier (EOF) mais supprimant les espaces et les caractères tabulation avant d’effectuer le test.Procédure qui ouvre un fichier et
positionne son pointeur à la fin de ce dernier. Seul l’ajout d’éléments est possible Procédure qui permet de lire une ligne et mettre le curseur
Prof : Nsiri Riadh 4ème Science de l’informatique
0Lire(T[ 1 ]) i 1 : Lire (T[ i ])
Lire (T[ 2 ]) i 2 : Lire (T[ i ])
Lire (T[ 3 ]) i 3 : Lire (T[ i ])
Lire (T[ 4 ]) i 4 : Lire (T[ i ])
Observation : D’après cette solution on constate qu’il y a un bloc d’instruction qui se répète. si on veut
charger un tableau de 1000 case l’algorithme devient très long. Pour cela on va utiliser
une structure de contrôle permettant de remédier ce problème. (la boucle pour).
1) Définition
Un résultat a une définition itérative complète s’il est la répétition d’une suite d’instructions un nombre fini de fois connu à l’avance.
Reprenons l’activité précédente :
La solution devient :
Résultat = Remplissage
T [ ] = pour i de 1 à 4 Faire
T [ i ] = donnée ("donner une valeur de la case n°" , i )
Fin pour
Page 23
Répétitio
Prof : Nsiri Riadh 4ème Science de l’informatique
Algorithme :
0) Début remplissage
1) Pour i de 1 à 4 faire
Ecrire ("donner une valeur de la case n°», i )
Lire(T[i])
Fin pour
2) Fin remplissage
2) Syntaxe:
Au niveau de l’analyse Au niveau de l’algorithme
Au niveau du pascal
… [init]pour compteur De Vi àVf Faire
Instruction1 Instruction2 . . InstructionN
Fin pour
… [init]pour compteur De Vi àVf Faire Instruction1 Instruction2 . . InstructionN
Fin pour
… [init] ;For compteur := Vi TO Vf DO
Begin Instruction1 ; Instruction2 ; . . InstructionN ;
End ;
Remarques :
Après chaque itération le compteur s’incrémente automatiquement de 1. Le nombre de répétition est égal à Vf-Vi+1. Les clauses Begin et End sont obligatoires si on a plusieurs instructions. Si le pas est de (-1) càd Vi >Vf , la syntaxe en pascal devient : For Compteur := Vi
Downto Vf do Exemple : afficher l’alphabet par ordre décroissant : For lettre := ‘Z’ Downto ‘A’ do
Exemple : Soit la séquence suivante :S :=0P :=1For i := 1 to 3 DoBegin S:=S + I; P :=P* I;End;
Trace d’exécution:
Etat initiale: S=0 et P=1N° i s p
Page 24
Prof : Nsiri Riadh 4ème Science de l’informatique
itération1 1 1 12 2 3 23 3 6 6
Application 1 :Ecrire un programme permettant de calculer et d’afficher la somme de n premiers termes de la suite définie par : Un= 1+3+5+……………..+ (2n-1) avec n un entier positif.
Résultat : Ecrire (‘’ la somme est’’, U)U = [U0] Pour i de 1 à n Faire U U + (2*i -1)Fin pourN= Donnée (‘’donner le nombre de terme’’)
Application2 : Ecrire un algorithme puis u programme pascal permettant de trouver et d’afficher le plus grand élément d’un vecteur T de n entiers.
Résultat = écrire (max)
Max = [ max T [ 1 ] ]
Pour i de 2 à n Faire
Si (T [ i ] > max ) alors max T [ i ]
Fin si
Fin pour
T =[ ] pour i de 1 à n faire
T[i] = Donnée
Fin pour
Page 25
Chapitre 2
Prof : Nsiri Riadh 4ème Science de l’informatique
STRUCTURES DE CONTRÔLES II
Au terme de ce chapitre, l’élève sera capable :
Distinguer entre les structures de contrôle itérative. De résoudre des programmes faisant appel à ces structures.
I- Structures itératives à condition d’arrêt :
Activité 1 : Soit l’exemple suivant de la vie courante :
Page 26
Objectifs
Prof : Nsiri Riadh 4ème Science de l’informatique
Un médecin consulte ses patients de 9h à 13h.Combien de consultation à faire par ce médecin ?Il peut consulter 1, 2, 3, …… patients comme il peut ne consulter aucun patient. Donc le nombre de consultation est inconnu.
Constations : On constate qu’on a une répétition d’action (le fait de consulter) et le nombre de répétition est inconnu.
Quand est ce que le médecin arrêt –il ses consultations.Le médecin termine ses consultations à 13h. Donc on a une condition d’arrêt.
Récapitulations : Dans cet exemple, il y a répétition d’action de consultation un nombre inconnu de fois et les consultations seront arrêtées lorsqu’une condition est vérifiée.
Est-ce qu’on peut utiliser la boucle pour, pour savoir le nombre de patient ?Pourquoi ? (Nbre de répétition n’est pas connu d’avance)Pour cela on va introduire la notion des structures itératives à condition d’arrêt.En effet il existe de formulation de structures itératives à condition d’arrêt. Répéter …jusqu’à et Tant que
1- 1ère forme : Répéter……….jusqu’à :
Activité 2 : Ecrire une analyse algorithme, programme pascal qui permet de calculer et
d’afficher la moyenne trimestrielle d’un élèves pour une matière donnée, les notes doivent
être compris entre 0 et 20.
Résultat = écrire (mt)
mt = [ ] mt (dc + 2* ds )/3
Répéter
dc = donnée (" dc =" )
jusqu’à ( dc>= 20) et (dc<= 20 )
Répéter
ds = donnée ("ds = " )
jusqu’à (ds>= 20) et (ds<= 20 )
a- syntaxe :
En analyse et en algorithme En pascal
Page 27
Prof : Nsiri Riadh 4ème Science de l’informatique
[Init]Répéter
Instruction 1Instruction 2…Instruction n
Jusqu'à Condition d’arrêt
[Init];Repeat
Instruction 1 ;Instruction 2 ;…Instruction n ;
Until Condition d’arrêt;
b- Caractéristiques :
On utilise la boucle répéter si le nombre de répétition est inconnu. La répétition est contrôlée par un sujet qui exprime la condition de sortie de la
boucle, ce sujet est évalué après chaque exécution de la séquence s’il est vrai la boucle s’arrête.
Le traitement est exécuté au moins une fois puis la condition est évaluée.
c- Application :
Lancer Turbo Pascal et écrire un programme permettant de calculer la racine carrée d’un entier saisit.
2- 2ème forme : Tant que…….Faire :Activité 3 :
Soit l’algorithme suivant :0) Début exemple1) Lire (n)2) P 1
RépéterP p*nLire (n)Jusqu’à n = 0
3) Ecrire (p)4) Fin exemple
- Que fait cet algorithme.- Est-ce que le traitement dans la boucle répéter sera exécuté si n = 0 dés le départ.
- Cet algorithme permet d’afficher le produit d’une liste de valeur saisie qui se termine par 0 (0 ne fait pas partie du produit).
- Si on va utiliser la boucle répéter le traitement itératif sera au moins exécuté une fois càd même si n=-1 dés le départ on va entrer dans la boucle. Or nous on veut pas que le calcul sera réalisé si la liste est réduite à 0Donc il faut tester la condition avant d’entrer à la boucle.
Pour cela on va utiliser la 2ème forme de structure de contrôle itérative à condition d’arrêt : Tant que…… faire :
0) Début exemple
Page 28
Prof : Nsiri Riadh 4ème Science de l’informatique
1) Lire (n)2) P 1
Tant que n< > 0 FaireP p*nLire (n)Fin tant que
3) Ecrire (p)4) Fin exemple
a- syntaxe :
[Init]Tant que non(Condition d’arrêt) faire
Instruction 1Instruction 2…
Instruction nFin Tant que
[Init] while non(Condition d’arrêt) Do Begin
Instruction 1 ;Instruction 2 ;…Instruction n ;
End ;
b- CaractéristiquesLa structure Tant que est utilisée :
- Si le traitement est la répétition d’une suite d’instructions, un nombre de fois, inconnu.- Il y a des circonstances dans lesquelles l’algorithme ne doit pas entrer dans la boucle,
même une fois (la condition est évaluée avant le traitement).- La boucle s’arrête si la condition est fausse.
c- Application :
Ecrire une analyse, un algorithme est un programme pascal permettant de calculer le PGCDDeux entiers strictement positifs en utilisant la méthode de différence.
Le principe de cette méthode est le suivant :PGCD (a,b) = PGCD (a-b, b) si a>b et on pose a=a-bOuPGCD (a,b) = PGCD (a, b-a) si b>a et on pose b=b-aLe calcul s’arrête quand a devient égal à bExemple :PGCD (24, 10) = PGCD (14, 10) = PGCD (4, 10) = PGCD (4, 6) = PGCD (4, 2) = PGCD (2, 2) =2
0) Début PGCD1) Répéter
Ecrire (‘’introduire le premiers entier’’) lire (a) Ecrire (‘’introduire le deuxième entier’’) lire (b)
Page 29
Prof : Nsiri Riadh 4ème Science de l’informatique
Jusqu’à (a>0) et (b>0)2) Tant que a # b Faire
Si ( a>b) alors aa-b Sinon bb-a Fin si
Fin Tant que
3) Ecrire (‘’le PGCD est’’, a)4) Fin PGCD
Page 30
Prof : Nsiri Riadh 4ème Science de l’informatique
Page 31
Chapitre 3
Prof : Nsiri Riadh 4ème Science de l’informatique
LES SOUS PROGRAMMES
Au terme de ce chapitre, l’élève sera capable :
Décomposer un problème en sous problème élémentaires.
Présenter les solutions sous forme des fonctions et procédures.
I. Introduction :
Page 32
Objectifs
Prof : Nsiri Riadh 4ème Science de l’informatique
Pour résoudre des problèmes complexe, il souvent préférable de les décomposer en sous problèmes. Ces derniers sont à leur tour décomposés selon le besoin. La décomposition s’arrête aux sous problèmes simples à résoudre. Par la suite, on associe à chaque sous problème un module assurant sa résolution.
II. L’analyse modulaire:
Activité 1 : On se propose de calculer la surface de cette forme géométrique :
Constatation : tache complexe, il n’y a pas de formule directe qui permet de calculer cette surface.Solution : décomposer ce problème en sous problèmes ou modules.
Module pour le calcul de la surface du triangle.Module pour le calcul de la surface du rectangle.Module pour le calcul de la surface de demi-cercle
1. Définition :
L’analyse modulaire consiste à diviser un problème en sous problèmes de difficultés moindres. Ces derniers sont aussi assujettis à cette division jusqu’à ce qu’on arrive à un niveau abordable de difficulté.
2. intérêt de l’analyse modulaire:
- Simplifier la résolution du problème- Se concentrer sur la résolution d’un sous problème à la fois- Eviter les redondances- Le programme devient plus clair et les erreurs deviennent plus facile à les détectées
1. Notion de sous programmes:
On peut regrouper un ensemble d’instructions sous un même nom, on forme donc un sous programme appelé aussi fonction ou procédure, on les utilise : chaque fois qu’une même suite d’instructions doit être exécuté plusieurs fois dans un programme grâce à des appels. On distingue donc des sous programmes appelant et appelé.
III. Les Fonctions:
Page 33
Prof : Nsiri Riadh 4ème Science de l’informatique
Activité 2 : Citer quelques exemples de fonction standard vue dans le chapitre structures des données :
Fonction Type de résultat RôleTrunc (x) entier Retourne la partie entière d’un
nombreSqrt (x) réel Retourne la racine carrée d’un
nombreChr (n) caractère Retourne le caractère correspondant
au code ascii
Constatations : Ses fonctions retournent une seule valeur
La valeur retournée par une fonction est de type simple (entier, réel, caractère, chaîne, Booléen)Le résultat (l’appel) d’une fonction peut être affecté à une Variable (Y Sqr (x)) ou bien afficher directement(Ecrire (sqr (x)))
1. Définition :
Une fonction est un sous programme qui retourne une valeur d’un seul type
2. Syntaxe :
Activité 3 : On se propose d’écrire un programme qui détermine la valeur maximale entre deux entiers saisis à partir du clavier (on suppose que A est différent de B)
Analyse du programme principal:
Résultat : Ecrire (‘’le maximum est :’’, FN MAX (N, M))
N= Donnée (‘’Donner le premier entier’’)
M = Donnée (‘’Donner le deuxième entier’’)
T.D.O
Objets Type / NatureMAXNM
FonctionEntierEntier
Algorithme du programme principal:
Page 34
Prof : Nsiri Riadh 4ème Science de l’informatique
0) Début Maximum1) Ecrire (‘’Donner le premier entier’’) lire (N)2) Ecrire (‘’Donner le premier entier’’) Lire (M)3) Ecrire (‘’le maximum est :’’, FN MAX (N, M))4) Fin Maximum.
Remarque : l’appel de la fonction est fait à l’aide de : FN MAX
Analyse de la fonction :
DEF FN MAX (A, B : entier) : entier
Résultat : MAXMax XSi A>B alors XASinon X BFin SiFin MAX
Objets Type / NatureX Entier
Algorithme de la fonction MAX
0) DEF FN MAX (A, B : entier) : entier 1) Si A>B alors XA Sinon X B Fin Si
2) MAX X3) Fin MAX
Traduction en Pascal :
Program Maximum ;{entête du programme Principale}
Page 35
Prof : Nsiri Riadh 4ème Science de l’informatique
Var N, M ; {déclaration programme principal}
Function MAX (A, B :integer) :integer ; {entête de la fonction}
Var X : Integer ; {déclaration fonction}
Begin {corps de la fonction}
If A>B Then
X: =A
Else X: =B;
End;
BEGIN {instructions du programme principal}
Writeln (‘Donner le premier entier’) ; Readln (N) ; Writeln (‘Donner le deuxième entier’) ; Readln (M) ; Writeln (‘le Maximum est :’, Max (N, M)END.
a- Syntaxe d’une fonction au niveau de l’analyse :
DEF FN nom _ fonction (paramètres formels : types) : types de résultats
Résultat = Nom_FonctionNom_Fonction Résultat calculéInstructions de la fonctionFin Nom_Fonction
b- Syntaxe d’une fonction au niveau de l’algorithme :
Algorithme de la fonction Nom_Fonction
0) DEF FN Nom_Fonction (paramètres formels : types) : type de résultat 1) Instructions de la fonction
2) Nom_Fonction Résultat calculé3) Fin Nom_Fonction
c- Syntaxe d’une fonction au niveau du Pascal :
Function Nom_Fonction (listes des paramètres formels : types) : type résultat ; {Déclarations des variables locaux}Begin Instructions de la fonction ; Nom_Fonction := Résultat calculé ;END ;
3. Variables Locales et globales :
Page 36
Prof : Nsiri Riadh 4ème Science de l’informatique
Une variable est locale pour un sous programme Q, si elle est déclarée seulement dans ce sous programme Q. Le programme qui comporte le sous programme Q ne peut pas accéder à cette variable. (exp : La variable x de type entier déclarée dans le T.D.O des objets locaux de la fonction)
Une variable est globale si elle déclarée dans le programme englobant le sous programme. Elle peut être utilisée dans le sous programme. (La Variables n est utilisée lors de l’appel de la fonction (………………………………………….) par le programme appelant (………………………..), sans quelle soit déclarée dans la partie déclarative de cette fonction)
4. les paramètres :
Un paramètre représente une donnée devant être échangée entre un programme appelant et un programme appelé. On distingue deux types :
Un paramètre FORMEL est le paramètre qui figure dans l’entête du sous programme. Un paramètre EFFECTIF est le paramètre qui figure dans l’instruction d’appel du sous
programme.
Les paramètres effectifs et formels doivent être compatibles de point de vue Type, nombre et ordre.Exemple :Max(n,m) est l’instruction d’appel de la fonction Max.Les objets n et m sont des paramètres formelsA est un paramètre efectif (Il figure dans l’entête de la fonction Max) N est un paramètre effectif correspondant au paramètre formel A
5. Mode de passage des paramètres:
Il y a deux modes de passages : Par valeur et par variable.a- Passage par valeur
Pour les fonctions la plupart des cas on utilise le passage par valeur :Exemple :En appelant la fonction MAx la fonction prend pour A la valeur n. On dit que les arguments (paramètres.) sont passés par valeur. Si la fonction modifie A, n ne sera pas modifié dans le programme appelant. La valeur du paramètre effectif est copiée dans la variable locale désignée par le paramètre formel correspondant (la variable A).
Dans le passage par valeur toute modification du paramètre formel n’entraîne pas une modification du paramètre effectif correspondant. (Garder la même valeur d’origine transmise lors de l’appel)
Dans notre exemple lors de l’appel de la fonction le paramètre effectif n est transmis par valeur, le paramètre formel correspondant A sera tout simplement ‘’initialisé’’ par la valeur de n lors de l’appel de cette fonction.Activité : Remplir le tableau suivant :
Description d’une tache Réalisable ou non par Entête/Explication
Page 37
Prof : Nsiri Riadh 4ème Science de l’informatique
à résoudre une fonctionVérifier l’existence
d’une chaîne dans un tableau de n chaînes
Supprimer un entier occupant la position i dans un tableau de n entiers
Convertir une durée donnée en secondes, en heurs, minutes et secondes
Calculer un réel à la puissance d’un entier
Application :
Ecrire l’analyse d’un programme intitulé COMBINAISON qui permet de calculer et d’afficher le nombre de combinaison de p parmi n.n et p sont deux entiers naturels strictement positifs avec n>=p.
Avec : cnp
= n !
p ! (n− p )!
But : afficher le nombre de combinaison de p parmi n
Traitement : cnp
= Factoriel (n)/factoriel (p)*factoriel (n-p)
Analyse du programme principale :T.D.O :
objet Type/natureCn, pfactoriel
RéelEntierFonction
Algorithme du programme principal :
0) Début combinaison1) Répéter
Ecrire (‘’ donner la valeur de p’’) , lire (p) Jusqu'à p>0
2) Répéter
Ecrire (‘’ donner la valeur de n’’), lire (n)Jusqu’à n>=p
3) C FN factoriel (n)/ FN factoriel (p)*FN factoriel (n-p)4) Ecrire (‘’le nombre de combinaison est :’’, C)5) Fin combinaison.
Grille d’analyse de la fonction factorielle :
Page 38
Prof : Nsiri Riadh 4ème Science de l’informatique
T.D.O :
Facti
RéelEntier
Algorithme de la fonction factorielle :0) DEF Factoriel (n :entier) :integer1) Fact1
Pour i de 1 à n Faire Fact Fact*i Fin pour
2) Factorielfact3) Fin factoriel
Traduction en Pascal :Program combinaison ;Uses wincrt ;{variable globale}Var c : real ;n, p: integer;Function Factoriel (n:integer):integer;{variable locale}Var Fact:integer; i:integer Begin Fact:=1; For i:= 1 to n do Fact := fact*i; Factoriel:=fact;End;Begin {programme principal}
C:= Factoriel (n) / Factoriel (p) * Factoriel (n-p);Writeln (‘’ la combinaison est :’’, C) ;End.
Réinvestissement :
Soit T1 et T2 deux tableau contenant respectivement n et m caractères (avec n et m <=30).
Page 39
Prof : Nsiri Riadh 4ème Science de l’informatique
On veut calculer le nombre des voyelles se trouvant dans les deux tableaux. La solution doit comporter une fonction qui permet de compter le nombre de voyelles dans un tableau.
Exercice1 :
Function Test (n: integer; T: tab; c: char):…………………………….Var ……………………………………………………………………BeginExiste:= false; i:=0RepeatI:=i+1;If T[i]=c then Existe:=trueElse existe:= false;Test:=……………………………….;Until ( existe=true) or (i>n);End;
1- Compléter les pointillés.2- Donner le résultat de cette fonction pour n=4, c=’A’
T= B A F J
3- Quel est le rôle de cette fonction4- Appeler cette fonction dans un programme principal
Exercice2 :
Soit la fonction suivante :
Function somme (a,b :integer):integer;Var p:integer; Function produit (n:integer):integer ; Var q,r :intger ; Begin Q := n div 3 ; R := n mod 3 ; Produit := q * r ; End ;BeginP :=produit(a) + produit (b) ;Somme := p ;End ;Indiquer pour chaque objet, s’il est reconnu par la fonction somme, la fonction produit ou bien les deux en mettant la lettre o pour oui et la lettre n pour non.
Page 40
Prof : Nsiri Riadh 4ème Science de l’informatique
IV. Les procédures:
Activité 2 : écrire une analyse et un algorithme « Calcul » qui permet de calculer et d’afficher, la somme, la moyenne et produit de 3 réels.
Remarque :Q : combien de résultat va retourner cet algorithme ?
Le résultat de cet algorithme est plus qu’une valeur, donc on ne peut pas utiliser une fonction puisque une fonction est un module qui retourne un résultat unique.Pour cela on va utiliser un autre type de sous programme : les procédures.On aura un programme principal qui permet de lire 3 réels, d’appeler une procédure « calculer » et d’afficher les résultats.
Analyse : Résultat : Ecrire (‘’la somme est :’’, s, ‘’la moyenne est :’’, m, ‘’le produit est’’, p)(s, m, p)= [] proc calculer (a, b, c, s, m, p)
a= Donnée (‘’Donner la valeur de a’’)b= Donnée (‘’Donner la valeur de b’’)c= Donnée (‘’Donner la valeur de c’’)
T.D.O :Objet Type/
natureA,b,c,s,
m,préel
calculer procédure
Algorithme du programme principal :
Analyse de la procédure « calculer »
DEF PROC Calculer (X, Y, Z : réel ; Var som, moy, pro :réel )
Page 41
Prof : Nsiri Riadh 4ème Science de l’informatique
Résultat : som, moy, pro som X + Y + Z moy(X + Y + Z)/ 3 pro X*Y*Z Fin calculer
N.B : X, Y, Z, som, moy, pro sont tous déclarées au niveau de l’entête de la procédure, donc on n’a pas de variable locale pour cette procédure. Donc pas de T.D.O
Algorithme de la procédure « calculer ».
Traduction en pascal :Program calcul ;Uses wincrt ;Var s, m, p, a, b, c : real;Procedure calculer (x, y, z:real; Var som, moy, prod: real); Begin Som:= x + y + z; Moy:= (x + y + z)/3 ; Prod := x * y * z ; End ;
BeginWriteln (‘introduire a:’); readln (a);Writeln (‘introduire b:’); readln (b);Writeln (‘introduire c:’); readln (c);Calculer (a, b, c, s, m, p)Writeln (‘la somme est:’, s, ‘ la moyenne est:’, m, ‘ le produit est :’, p) ;End.
1. Définition :
Une procédure est un sous programme qui peut produire plusieurs résultats.
2. Syntaxe :
a- Syntaxe d’une procédure au niveau de l’analyse :
DEF Proc nom _ Procédure (paramètres formels : types)
Résultat =Instruction de la procédureFin Nom_Procédure
b- Syntaxe d’une procédure au niveau de l’algorithme :
Page 42
Prof : Nsiri Riadh 4ème Science de l’informatique
Algorithme de la fonction Nom_Fonction
0) DEF FN Nom_Procédure (paramètres formels : types) : 1) Instructions de la procédure
2) Fin Nom_Procédure
c- Syntaxe d’une procédure au niveau du Pascal :
Procedure Nom_Pocédure (listes des paramètres formels : types) ; {Déclarations des variables locaux}Begin Instructions de la procédure ; END ;
3. Mode de passage des paramètres :On connaît que pour les sous programmes il y a deux types de passage : mode de passage par valeur déjà vu dans les fonctions et le mode de passage par variable.
Mode de passage par variable :Examinons l’entête de la procédure « calculer » :
DEF PROC Calculer (X, Y, Z : réel ; Var som, moy, pro :réel )
Les paramètres formels sont : X, Y, Z, som, moy, pro Q : Quelle est la différence, au niveau de l’écriture, entre les paramètres x, y, z et les paramètres som, moy, pro.X, Y, Z : sont des paramètres formels avec un mode de transmission par valeurSom, moy, pro : sont des paramètres formels avec un mode de transmission par variable, car ils sont précédés par le mot Var.
Les paramètres transmis par variable font communiquer l’information dans les deus sens :
Programme appelant sous programmes
Le programme appelant peut transmettre une ou plusieurs valeurs au sous programme appelé, ce dernier fournit après son exécution, un ou plusieurs résultats, au programme appelant.
Dans notre exemple :Les valeurs de s, m, p sont indéterminés avant l’appel de la procédure calculer.On suppose que les valeurs lues pour a, b, c sont respectivement : 4, 6, et 10, après l’appel et l’exécution de la procédure calculer les variables s, m, p ont les valeurs de som, moy, pro qui sont 20, 6,66 et 100.
Page 43
Prof : Nsiri Riadh 4ème Science de l’informatique
Dans ce mode de passage les paramètres effectifs doivent être obligatoirement des variables. Toutes modifications du paramètre formel entraînent automatiquement une modification de la valeur du paramètre effectif qui lui correspond en ordre au moment de l’appel.
Remarques :
- Les paramètres effectifs et les paramètres formels doivent s’accorder de point de vue nombre, ordre et type.
- Une procédure peut être sans paramètre. Ex : une procédure qui affiche « Merci » à la fin du programme :Procedure merci;Begin Writeln (‘merci’)End;- Une procédure peut contenir des déclarations locales.
Application :Ecrire une analyse et en déduire un algorithme permettant d’afficher tous les entiers formés par deux chiffres qui vérifient la propriété suivante, la somme de leurs chiffres est égale à 10.
program divis10;uses wincrt;var a,b:integer;procedure affiche;var i,d,u:integer;BeginFor i:= 10 to 99 dobeginu:= i MOD 10;d:= i DIV 10;if u + d = 10 thenwrite(i:4);End;End;BEGINaffiche;End.
Réinvestissement: Variables et paramètres :
Program principal ; N°Inst. Constatations Conclusions
Page 44
Prof : Nsiri Riadh 4ème Science de l’informatique
Uses wincrt ;
Var x :real ;
Procedure P1(a :real ;b :integer) ;
Var x :real ;
Begin
x :=a ;
b :=i ;
a :=F1(b) ;
End ;
Function F1 (y :integer) :real ;
Var i :integer ;
Begin
X :=y ;
F1 :=1/y ;
End ;
Procedure P2(a :string) ;
Var l :real ;
Begin
l :=F1(10) ;
End ;
BEGIN
i :=5 ;
P1(5) ;
P1(5,x) ;
P1(x,5) ;
END.
1
La variable globale x recevra la valeur du paramètre y
Un programme ne peut pas accéder aux objets de ces sous programmes par contre les sous programmes accèdent aux objets du programmes principal.
Un sous programme ne peut pas accéder aux objets d’un autre sous programmes.
En cas de noms identiques, les sous programmes accèdent aux objets déclarés localement.
2
Impossible, la variable locale i de la fonction F1 n’est pas accessible. Elle est en dehors de la portée du programme principal.
3
Impossible, la variable locale i de la fonction F1 n’est pas accessible. Elle est en dehors de la portée de la procédure P1.
4
La variable locale x recevra la valeur du paramètre a.
5Impossible, il manque un 2ème paramètre.
Les paramètres effectifs et formels doivent être compatible de point de vue nombre, type et ordre.6
Impossible, le 2ème effectif n’est pas compatible de point de vue type avec le paramètre formel correspondant.
7 Pas de problèmes
8
Impossible, la fonction F1 n’est pas à la portée de la procédure P1 Un sous programme peut
appeler un autre à condition que l’appelant soit déclaré après l’appelé.
9 Pas de problèmes
Application : Passage de paramètre par valeur et par variable
Page 45
3
1
9
4
2
5
67
8
Prof : Nsiri Riadh 4ème Science de l’informatique
PROGRAM PASSAGE_VALEUR ;USES WINCRT ;VAR X ,Y : INTEGER ;
Procedure Essai ( Passage de paramètre ) ;Begin
I : = 3 * I ;J := 4 * j ;Writeln(’Dans la procédure les valeurs sont :’) ;Writeln( I ) ;Writeln( J ) ;
End ;
BEGINWriteln(’donner la première valeur :’ ) ;Readln( X ) ;Writeln(’donner la deuxième valeur :’ ) ;Readln( Y ) ;Essai( X , Y) ;Writeln(’Après appel de la procédure les valeurs sont :’) ;Writeln( X ) ;Writeln( Y ) ;Readln ;
END.
Déclaration des paramètres Formels
P. Effectifs P. Formels
Type du passage
X Y I J
( I , J : Integer )A l'appel d’ESSAI I : Après exécution
d’ESSAIJ :
( VAR I , J : Integer )A l'appel d’ESSAI I :Après exécution
d’ESSAIJ :
( VAR I : Integer ; VAR J : Integer)
A l'appel d’ESSAI I :Après exécution
d’ESSAIJ :
( I : Integer ; VAR J : Integer )
A l'appel d’ESSAI I :Après exécution
d’ESSAIJ :
Exercice 1 :
Soit la fonction suivante:
Page 46
Prof : Nsiri Riadh 4ème Science de l’informatique
Function Traitement(x: integer):……………………………;Var …………………………………………………………BeginS:=0;Str(x,ch);For i:= 1 to 4 do Begin Val(ch(i],a,e); S:=s+a; End;……………………………………………………………...End;
1- Compléter les pointillées.2- Donner le résultat de cette fonction pour x = 20143- Quelle est le rôle de cette fonction.
Exercice 2 :
Soit l’algorithme de la fonction suivante:
0) DEF FN Traitement (n : entier) : entier 1) r 0
Répéter
r r + n MOD 10
n n DIV 10
Jusqu'à (n = 0)
2) Traitement r
3) Fin Traitement
1- Quelle est la valeur retournée par cette fonction pour n= 125 ?2- Quelle est la valeur retournée par cette fonction pour n= 458 ?3- Donner le rôle de cette fonction.
Application pratique :
On veut déterminer le PGCD de deux entiers naturels a et b non nul, en utilisant l’algorithme d’Euclide.
Page 47
Prof : Nsiri Riadh 4ème Science de l’informatique
Le principe est le suivant :- Faire la division euclidienne de a par b.- Si le reste est non nul, on remplace a par b et b par r et on revient à l’étape 1 sinon le
traitement se termine et le pgcd = b.
Application 2
Un entier n de 4 chiffres est dit valable, si ses trois derniers chiffres sont des multiples de son Chiffre des milliers.
Exemple : L'entier 2648 est valable car son chiffre des milliers est 2 et il est suivi par les chiffres 6, 4 et 8 qui sont tous multiples de 2.
On se propose d'écrire un programme qui permet de lire un entier positif n composé de 4 chiffres puis d'afficher s'il est valable ou non.
Exemple 1 : Si n= 2888 alors le programme affichera : Cet entier est valable.
Exemple 2 : Si n= 2179 alors le programme affichera : Cet entier n'est pas valable.
Questions 1) Analyser le problème en le décomposant en modules et en déduire l'algorithme du
programme principal.
2) Analyser chacun des modules envisagés et en déduire les algorithmes correspondants.
Page 48
Prof : Nsiri Riadh 4ème Science de l’informatique
Page 49
Prof : Nsiri Riadh 4ème Science de l’informatique
Page 50