• Aucun résultat trouvé

1 Dr Manel Seddiki Département Informatique https://manel-seddiki.jimdo.com/

N/A
N/A
Protected

Academic year: 2022

Partager "1 Dr Manel Seddiki Département Informatique https://manel-seddiki.jimdo.com/"

Copied!
16
0
0

Texte intégral

(1)

1

Dr Manel Seddiki

Département Informatique https://manel-seddiki.jimdo.com/

1. Introduction

1.1 Exemple introductif

Ecrire un algorithme qui lit n entiers, calcule la somme des entiers divisibles par 3 parmi les n lus ensuite affiche si la somme est divisible par 10 ou non.

Solution :

Algorithme calcul1 ; Var

x,r,n,cpt,s :Entier ; Début

Lire (n) ; s 0 ;

Pour cpt de 1 à n faire Lire (x) ;

r x ;

Tant que (r>=2) faire rr-2 ;

Fait ;

Si (r==0) ss+x ; Fait ;

r s ;

Tant que (r>=10) faire rr-10 ;

Fait ;

Ecrire (s) ; Si (r==0)Alors

Ecrire (‘ divisible par 10’) ;

Sinon Ecrire (‘non divisible par 10’) ; Fsi ;

Fin.

1.2 La programmation structurée

Plus le problème est complexe et plus le nombre d’instructions devient important et certaines instructions agissant à résoudre un problème se répètent à plusieurs endroits différents. Il est donc nécessaire de structurer l’algorithme. La programmation structurée consiste découper le problème principal en sous-problèmes, regrouper sous le même nom, les sous-problèmes en commun et faire l’intégration pour avoir la solution globale.

(2)

2

Dr Manel Seddiki

Département Informatique https://manel-seddiki.jimdo.com/

Découpage Intégration

Les avantages de la programmation structurée sont :

 La réduction de la taille d’un algorithme,

 L’amélioration de la lisibilité de l’algorithme,

 La facilité de mise au point et la correction des erreurs

 La réutilisation des sous-algorithmes.

Découpage

Si nous prenons l’exemple précédant, nous découpons notre problème principal en sous-problèmes comme suit :

 Somme de n entiers divisible par 2 o Divisibilité de a par b

 Reste de division de a par b

 Divisibilité de la somme par 10 o Divisibilité de a par b

 Reste de division de a par b

Nous constatons qu’il y’a des sous problèmes qui sont en commun. Ceci nous mène au schéma suivant :

Problème globale

Sous-problème 1 Sous-problème 2 Sous-problème 1

Algorithme global

Somme de n entiers divisible par 2 Divisibilité par 10

Divisibilité de a par b

Reste de division de a par b

(3)

3

Dr Manel Seddiki

Département Informatique https://manel-seddiki.jimdo.com/

Intégration

Nous allons maintenant résoudre les sous-problèmes progressivement et faire l’intégration.

Etape 1 : résoudre le problème du reste de la division de a par b Algorithme Reste ;

Var

a,b,r : Entier ; Debut

Lire (a,b) ; ra ;

Tant que (r>=b) Faire r r-b ;

Fait ; Ecrire(r) ; Fin.

Etape 2 : Intégrer le problème du reste de la division pour résoudre le problème de la divisibilité de a par b

Algorithme Divisibilite ; Var

a,b : Entier ;

resultat : Booleeen ; Reste ();

Debut

Lire (a,b) ;

Si (Reste (a,b)==0) Alors resultat  Vrai ; Sinon resultat  Faux ;

Ecrire(resultat) ; Fin.

Etape 3 : Intégrer le problème de la divisibilité de a par b pour résoudre le problème final Algorithme Finale ;

Var

val,n, cpt, s : Entier ; Divisibilte () ;

Debut

/*Lire les n entiers*/

Lire (n) ;

/* somme de n entiers divisible par 2*/

Pour cpt de 1 à n Faire Lire(val) ;

Si (Divisibilite(val,2)==Vrai) ss+val ; Fait ;

/* vérifier la divisibilté de la somme par 10*/

(4)

4

Dr Manel Seddiki

Département Informatique https://manel-seddiki.jimdo.com/

Si (Divisibilite(s,10)==Vrai) Alors Ecrire (‘ divisible par 10’) ; Sinon Ecrire (‘non divisible par 10’) ;

Fsi ; Fin.

Exemple 2

Algorithme Questions ; Var

Rep : Car ; Debut

Ecrire ("Etes-vous étudiant ?") ; Répeter

Ecrire ("Tapez Oui ou Non") ; Lire (rep) ;

Tant Que (Rep <> ‘O’) ET (Rep <> ‘N’) ; Ecrire (rep) ;

Ecrire ("Etes vous majeur ?") ; Lire (rep) ;

Tant Que (Rep <> ‘O’) ET (Rep <> ‘N’) ; Ecrire (rep) ;

Ecrire ("Avez-vous des frères et sœurs ?") ; Lire (rep) ;

Tant Que (Rep <> ‘O’) ET (Rep <> ‘N’) ; Ecrire (rep) ;

Fin.

Découpage :

 Question1

o Réponse par oui ou non

 Question2

o Réponse par oui ou non

 Question3

o Réponse par oui ou non

(5)

5

Dr Manel Seddiki

Département Informatique https://manel-seddiki.jimdo.com/

Intégration

Etape 1: Résoudre le problème de la réponse par oui ou non Algorithme ReponseOuiNon ;

Var

Rep : Car ; Debut

Lire (rep) ;

Tant Que (Rep <> ‘O’) ET (Rep <> ‘N’) ; Ecrire (rep) ;

Fin.

Etape 2 : résoudre le problème des questions en intégrant le problème de réponse oui ou non.

Algorithme Principal ; Var

Rep : Car ;

ReponseOuiNon() ; Debut

Ecrire ("Etes-vous étudiant ?") ; ReponseOuiNon() ;

Ecrire ("Etes vous majeur ?") ; ReponseOuiNon() ;

Ecrire ("Avez-vous des frères et sœurs ?") ; ReponseOuiNon() ;

Fin.

2. Les actions paramétrées

2.1 Définition

En algorithmique, on appelle action paramétrée, l’algorithme permettant de résoudre un sous-problème particulier dans un autre algorithme. Dans les exemples précédents, l’algorithme du reste de la division de a par b, l’algorithme de la divisibilité et l’algorithme de la réponse par oui ou non sont des actions paramétrées.

Algorithme global

Question 1 Question 2 Question 3

Réponse par oui ou non

(6)

6

Dr Manel Seddiki

Département Informatique https://manel-seddiki.jimdo.com/

L’action paramétrée est appelée autant de fois que nécessaire dans l’algorithme appelant. La communication entre les deux se fait grâce au passage de paramètres.

L’action paramétrée peut être considérée comme un bloc qui reçoit des données en entrées nécessaires à la résolution du problème (appelés paramètres d’entrée) à partir de l’algorithme appelant, et fournit un résultat (appelés paramètres de sortie) à l’algorithme appelant comme sur le schéma suivant :

Les paramètres d’une action paramétrée représentent l’interface de communication entre l’action paramétrée et l’algorithme qui l’appelle.

2.2 Structure d’un algorithme utilisant une action paramétrée

Syntaxe :

Algorithme idf ; Const

<Déclaration des constantes>

Var

<Déclaration des variables>

<Déclaration des actions paramétrées >

Debut

<action 1> ;

<action 2> ;

………..

<Appel à l’action paramétrée> ;

<action n> ; Fin.

Le corps de l’action paramétrée est déclaré dans la partie des déclarations de l’algorithme. L’appel à cette action se fait dans le corps de l’algorithme (entre Début et Fin).

Selon le type de résultat que nous voulons avoir, les actions paramétrées sont divisées en deux

catégories: les procédures et les fonctions. Les procédures sont des actions paramétrées qui fournissent zéro ou plusieurs résultats tandis que les fonctions sont des actions paramétrées qui fournissent

exactement un résultat.

AP

Algorithme appelant de l’AP

Paramètre d’entrée

Paramètre de sortie

(7)

7

Dr Manel Seddiki

Département Informatique https://manel-seddiki.jimdo.com/

2.3 Les procédures

Plusieurs entrées

Aucune, une ou plusieurs sorties

2.3.1 Déclaration d’une procédure

Syntaxe :

Procédure < identificateur_procédure> ([<liste des paramètres formels>]) ;

<Partie déclarations>

Début

<actions>

Fin;

Syntaxe de la liste des paramètres formels

(paramètre 1, paramètre 2, paramètre 3, ….paramètre n) ;

Chaque paramètre formel est défini par un identificateur, un type et un mode de transmission mode de transmission/ identificateur_paramètre :type_paramètre Le nom et le type du paramètre est défini de la même façon que pour les variables. Le mode de transmission spécifie si le paramètre est un paramètre d’entrée, de sortie ou d’entrée/sortie. On appelle aussi le mode de transmission Entrée, un passage par valeur et le mode de transmission Entrée/Sortie un passage par adresse.

On spécifie le mode de transmission comme décrit que le tableau suivant :

Mode de transmission Symbole syntaxique

Entrée (passage par valeur) E

Sortie S

Entrée/sortie (passage par adresse) ES Notes importantes :

 il est possible de regrouper plusieurs paramètres (séparés par des virgules) quand ces derniers ont le même type et le même mode de transmission.

 L’ordre des paramètres dans une action paramétrée est important.

Procédure

(8)

8

Dr Manel Seddiki

Département Informatique https://manel-seddiki.jimdo.com/

2.3.2 Appel de la procédure

Quand un algorithme veut utiliser une action paramétrée, il fait appel à cette dernière à travers une instruction.

Syntaxe :

<identificateur_procédure> ([<liste des paramètres réels>]) ; Les paramètres réels sont les paramètres passés de l’algorithme appelant à la procédure. Chaque paramètre réel va correspondre à un paramètre formel.

Exécution d’appel d’une procédure :

Etape 1 : copie des paramètres réels d’entrée dans les paramètres formels d’entrée en respectant l’ordre Etape 2 : exécution de la procédure

Etape 3 : copie des paramètres formels de sortie dans les paramètres réels de sortie en respectant l’ordre

Exemple : Calcul du reste et du quotient d’une division de x par y.

Algorithme alg1 ; Var

X,Y,Quotient,Reste : Entier ;

/*La déclaration de la procédure se fait ici*/

Procedure Quotient_reste (E/A,B : Entier,S/R,D :Entier) /* A et B sont les paramètres formels d’entrée*/

/* R et Q sont les paramètres formels de sortie*/

Debut RA;

Q0 ;

Tant que (R>= B) Faire R R-B;

Q Q+1 Fait;

Fin ; Debut

Lire (X,Y) ;

/*L’appel de la procédure se fait ici*/

Quotient_reste (X,Y ,Reste, Quotient) ;

/* X et Y sont les paramètres réels d’entrée*/

/* Quotient et Reste sont les paramètres réels de sortie*/

Ecrire (Reste) ; Ecrire (Quotient) ; Fin.

(9)

9

Dr Manel Seddiki

Département Informatique https://manel-seddiki.jimdo.com/

L’appel à la procédure Quotient_reste avec les paramètres réels d’entrée X et Y et les paramètres réels de sortie Reste et Quotient se fait comme suit :

 Copie de X dans A et copie de Y dans B

 Exécution de la procédure (Calcul du reste et du quotient)

 Copie de R dans Reste et Q dans Quotient

2.3.3 Exercice d’application

Ecrire une procédure Calcul qui calcule la somme et le produit de deux entiers x et y.

Algorithme Proced ; Var

x,y,somme, produit : Entier ;

Procedure Calcul (E/A,B:Entier,S/S,P :Entier) Debut

SA+B ; PA*B ; Fin ; Debut

Lire (x,y) ;

Calcul (x,y ,somme, produit) ; Ecrire (somme) ;

Ecrire (produit) ; Fin.

2.4 Les fonctions

Plusieurs entrées

Une seule sortie

2.4.1 Déclaration de la fonction

Syntaxe 1:

Fonction < identificateur_fonction > ([<liste des paramètres formels>]) :< type du résultat retourné> ;

<Partie déclarations>

Début

Fonction

(10)

10

Dr Manel Seddiki

Département Informatique https://manel-seddiki.jimdo.com/

<actions>

identificateur_fonction  <résultat> ; Fin ;

Syntaxe 2:

Fonction < identificateur_fonction > ([<liste des paramètres formels>]) :< type du résultat retourné> ;

<Partie déclarations>

Début

<actions>

Return <résultat> ; Fin ;

Note importante : une fonction ne contient que des paramètres d’entrée. Le résultat en sortie est renvoyé par la fonction elle-même. C’est pour cela qu’il faut spécifier le type de retour.

2.4.2 Appel de la fonction

Syntaxe :

<identificateur_fonction> ([<liste des paramètres réels>]) ; L’appel d’une fonction renvoi directement un résultat et elle est semblable à une expression. Nous pouvons l’utiliser d’ailleurs, dans une expression.

Exécution d’appel d’une fonction :

Etape 1 : copie des paramètres réels dans les paramètres formels en respectant l’ordre Etape 2 : exécution de la fonction et renvoi du résultat

Exemple : vérifier si un entier est positif ou négatif en utilisant une fonction Algorithme alg1 ;

Var

X : Entier ;

Fonction Verif (A:Entier) : Booléen ; Debut

Si (A>=0) Alors Return Vrai ; /* ou bien Verif Vrai ; */

Sinon Return Faux ; /* ou bien Verif Faux ; */

Fin ; Debut Lire (X) ;

/*L’appel de la fonction est mis directement dans l’instruction Ecrire comme une expression*/

Ecrire (Verif(X)) ; Fin.

(11)

11

Dr Manel Seddiki

Département Informatique https://manel-seddiki.jimdo.com/

2.4.3 Exercice d’application

Reprendre l’exemple introductif : Ecrire un algorithme qui lit n entiers, calcule la somme des entiers divisibles par 3 parmi les n lus ensuite affiche si la somme est divisible par 10 ou non.

Algorithme calcul1 ; Var

x,n,cpt,s :Entier ;

Fonction Reste(a,b :Entier) :Entier ; Var r :Entier ;

Debut r a ;

Tant que (r>=b) faire rr-2 ;

Fait ; Return r ; Fin ;

Fonction Divisibilité(r :Entier) : Booléen ; Début

Si (r==0) Alors Return Vrai ; Sinon Return Faux ;

Fin ; Début Lire (n) ; s 0 ;

Pour cpt de 1 à n faire Lire (x) ;

Si ((Divisibilité (Reste(x,2))==Vrai ) Alors ss+x ; Fsi ;

Fait ;

Si ((Divisibilité (Reste(s,10))==Vrai ) Alors Ecrire (‘ divisible par 10’) ;

Sinon Ecrire (‘non divisible par 10’) ; Fsi ;

Fin.

3. Les variables locales et globales

3.1 Les variables locales

Les variables locales sont les variables déclarées dans la partie déclaration de l’action paramétrée. La visibilité de ces variables est limitée à l’action paramétrée dans laquelle elle est utilisée. Elle se termine dès la terminaison de l’action paramétrée.

Exemple : Permutation de deux entiers

Algorithme algorithme_principal;

(12)

12

Dr Manel Seddiki

Département Informatique https://manel-seddiki.jimdo.com/

Var X, Y : entier;

Procédure Permuter (ES /a, b : entier);

Var c : entier; /*La variable c est une variable locale, elle n’est visible que dans la procédure Permuter */

Début c  a ; a  b ; b  c ; Fin;

Début

Lire (X, Y);

Permuter (X, Y);

Ecrire (X, Y);

Fin.

3.2 Les variables globales

Les variables globales sont les variables déclarées dans la partie déclaration de l’algorithme appelant.

Leur visibilité est plus grande que celle des variables locales car elle se termine avec la terminaison de l’algorithme appelant.

Exemple : Permutation de deux entiers

Algorithme algorithme_principal;

Var X, Y : entier;

Var c : entier; /*La variable c est une variable globale, elle est visible dans tout l’algorithme et compris la procédure Permuter */

Procédure Permuter (ES /a, b : entier);

Début c  a ; a  b ; b  c ; Fin;

Début

Lire (X, Y);

Permuter (X, Y);

Ecrire (X, Y);

Fin.

(13)

13

Dr Manel Seddiki

Département Informatique https://manel-seddiki.jimdo.com/

Exercices d’application :

Donnez le déroulement de l’algorithme suivant : Algorithme algorithme_principal;

Var a, b : entier;

Procédure affichage ();

Var a : entier;

Début

(a) a  1;

(b) Ecrire(a, b) ;

Fin;

Début (*algorithme principal*) (1) a  4; b  3;

(2) affichage ( );

(3) Ecrire (a, b);

Fin.

Déroulement

Variables globales Variables locales

Instruction a b a Ecran

(1) 4 3

(2) (a) 4 3 1

(2) (b) 4 3 1 1 3

(3) 4 3 1 4 3

Note importante : Dans la procédure Affichage, on remarque qu’il y’a une variable a qui est locale et il y’a aussi une variable a qui est globale. On dit que ces deux variables sont homonymes. La procédure va prendre en compte sa variable locale et on dit que la variable globale a été masquée par la variable locale.

4. Imbrication des actions paramétrées

Une action paramétrée AP1 peut appeler une autre action paramétrée AP2 à condition que l’action paramétrée appelée (i.e AP2) soit accessible par l’action paramétrée appelante (i.e AP1).

(14)

14

Dr Manel Seddiki

Département Informatique https://manel-seddiki.jimdo.com/

AP2 est accessible par AP1 si :

 AP2 est la même que AP1

 AP2 est directement déclarée à l’intérieur de AP1

 AP2 est déclarée au même niveau que AP1 et avant AP1 Exemple : Soit l’algorithme suivant :

On peut schématiser la hiérarchie des actions paramétrées de cet algorithme comme suit :

Les possibilités d’appel dans cet algorithme sont résumées sur le tableau suivant :

principal A B C D E F

principal oui oui

A oui oui

B oui oui oui

C oui oui oui

D oui oui

E oui

F oui oui

(15)

15

Dr Manel Seddiki

Département Informatique https://manel-seddiki.jimdo.com/

Notes importantes :

 Une action paramétrée peut appeler elle-même, on parle ici d’un appel récursif.

 L’imbrication est tolérée dans certains langages (Pascal, Caml…. ) et elle est interdite dans d’autres (C,C++,..)

Exercice d’application

Dérouler l’algorithme suivant : Algorithme affichage;

Var a, b, c : entier;

Procédure P1 ();

Var

a , c : entier;

Procédure P2 ();

Var b : entier;

Début

(2,3,1) : a ← 4; b ← 5 ; (2,3,2) : écrire (a, b, c)

Fin;

Début

(2,1) : c ← 6;

(2,2) : écrire (a, b, c) (2,3) : P2() ;

(2,4) : écrire (a, b, c)

Fin;

Début (*algorithme principal*) (1) : a ← 1; b ← 2 ; c ← 3;

(2) : P1();

(3) : Ecrire (a, b,c );

Fin.

(16)

16

Dr Manel Seddiki

Département Informatique https://manel-seddiki.jimdo.com/

Déroulement :

Affichage P1 P2

Instruction a b c a c b Ecran

(1) 1 2 3 / / /

(2) (1) 1 2 3 / 6 /

(2) (2) 1 2 3 / 6 / / 2 6

(2) (3)(1) 1 2 3 4 6 5

(2) (3)(2) 1 2 3 4 6 5 4 5 6

(2) (4) 1 2 3 4 6 5 4 2 6

(3) 1 2 3 4 6 5 1 2 3

5. Exercices

Les actions paramétrées à écrire sont à intégrer dans un algorithme principal :

1. Ecrire une AP qui permet d’entrer deux valeurs M et N et d’afficher toutes les valeurs paires entre M et N si M < N

2. Ecrire une AP qui permet de vérifier si un entier naturel A est divisible par B.

3. Ecrire une AP qui permet de vérifier si un entier A est un nombre premier.

4. Ecrire une AP qui permet de vérifier si un entier A est un nombre parfait. Un nombre parfait est un nombre dont la somme de ses diviseurs est égale à lui-même.

5. Ecrire une AP qui permet de vérifier si une un caractère donné c est une voyelle ('a','e','i','o','u','y').

6. Ecrire une AP qui permet de vérifier si un nombre entier naturel N représente un carré parfait.

N est dit carré parfait s'il existe un entier i, tel que N=i*i.

7. Ecrire une AP qui permet de résoudre une équation du second degré dans R

8. Ecrire une AP qui permet d’avoir un nombre entier positif et afficher son image miroir.

Exemple le nombre est 3524, on doit afficher 4253.

Références

Documents relatifs

pour alpha = 0,5, DeltaI = 5.14 A (valeur maximale); il s'agit d'une ondulation très importante par rapport à In; il faudrait ensivager un Th

Vérifier la pertinence du résultat trouvé, notamment en comparant avec des estimations ou ordres de grandeurs connus.. Comparer le résultat obtenu avec le résultat d’une autre

- Préciser le matériel dont vous avez besoin pour mettre en œuvre votre stratégie ; - Mettre en œuvre votre protocole expérimental pour obtenir des résultats exploitables.. Si

a) Numéroter chacune des étapes de la démarche et les nommer à l’aide d’un titre significatif. c) Toujours inscrire la réponse avec l’unité

Précédemment, nous avons prouvé que soit (1) la description en mécanique quantique de la réa- lité donnée par la fonction d’onde n’est pas complète, soit (2) quand les

Université d’Oran faculté de médecine service d’histologie-embryologie module d’embryologie (1année médecine 2018-2019) (Dr Messala, Dr

De par les complications qu’elle entraîne (cirrhose, carcinome hépatocellulaire se développant parfois sur un foie non cirrhotique), la NASH est devenue récemment l’une des

Lors de l’évaluation d’une variable (dans le corps d’une fonction), si la variable est Locale, sa valeur est prise, sinon si la variable est dans une fonction Englobant, sa valeur