Université D’AntAnAnArivO Faculté des Sciences . Département de Physique ( L.I.E.R ) ALGORITHMIQUE ET PROGRAMMATION ( LANGAGE PASCAL ) APPLICATION A L’ANALYSE NUMERIQUE Filière : L.I.E.R. - 3èMe Année Année Universitaire – 2012 RAKOTOSALAMA EXCLU DE PRÊT Attention ! Toute reproduction intégrale ou partielle de cet ouvrage , par quelque procédé que ce soit constituerait une contre – façon sanctionnée par le code pénal 1 CoursAlgoLIER2011B / AlgoLIER2011 / Bureau / Toshiba1 NOTION D’ALGORITHMIQUE 1°) Définitions d’un algorithme , d’un programme et d’une instruction . Un algorithme est une suite finie de règles à appliquer dans un ordre déterminé à un nombre fini de données pour arriver , en un nombre fini d'étapes , à un certain résultat , et cela indépendamment des données . Le rôle de l’algorithme est fondamental : il doit être indépendant du langage de programmation dans lequel il est traduit ainsi que de l’ordinateur qui va exécuter les différentes instructions du programme . Un programme est la traduction de l’algorithme pouvant être interprétée puis exécutée par un ordinateur . Une instruction est , soit une action à effectuer , soit une description de données . Exemple : Afficher a l’écran un message , une expression . Déclarer une variable 2°) Qualités d’un algorithme ( ou un programme ) Tout programme fourni à l'ordinateur n'est que la traduction dans un langage de programmation d'un algorithme mis au point pour résoudre un problème donné . Pour obtenir un bon programme , il faut partir d'un bon algorithme . Il doit posséder les qualités suivantes: être clair, facile à comprendre par tous ceux qui le lisent . présenter la plus grande généralité possible pour répondre au plus grand nombre de cas possibles être d'une utilisation aisée ( facile ) même par ceux qui ne l'ont pas écrit et ce grâce aux messages apparaissant à l'écran qui indiqueront quelles sont les données à fournir et sous quelle forme elles doivent être introduites ainsi que les différentes actions attendues de la part de l'utilisateur être conçu de manière à limiter le nombre d'opérations à effectuer et la place occupée en mémoire. 3°) Méthodologie Trois étapes caractérisent la résolution du problème sur ordinateur : préciser les données fournies : les entrées ou input en anglais préciser les résultats que l'on désire obtenir : les sorties ou output en anglais . déterminer le processus de transformation des données en résultats en utilisant les formules mathématiques . 4°) Structures rencontrées en algorithme Pour représenter n'importe quel algorithme , on dispose les trois possibilités suivantes : la structure de séquence qui indique que les opérations doivent être exécutées les unes après les autres la structure de choix qui indique quel ensemble d'instructions doit être exécuté suivant les circonstances la structure de répétition qui indique qu'un ensemble d'instructions doit être exécuté plusieurs fois. 5°) Syntaxe général d’un algorithme ( ou d’un programme ) En général , un algorithme est constitué par : Un en – -tête donnant un nom à l’algorithme . Une partie déclarative qui regroupe les caractéristiques des variables manipulées dans l’algorithme . Un bloc d’instructions encadré par les mots DEBUT et FIN 2 Prenons un exemple : Exprimer un nombre de secondes sous forme d'heures , minutes , secondes . La seule donnée est le nombre total de secondes qu’on appelle nsec ; les résultats consistent à trouver 3 nombres entiers h , m , s L’algorithme doit répondre à la syntaxe suivante : Algo secondes ( En – -tête ) entier nsec, h, m, s ( Déclaration des variables avec leur type ) Début écrire "Introduisez le nombre de secondes:" lire nsec s nsec mod 60 m (nsec \ 60) mod 60 h nsec \ 3600 écrire nsec , "valent : ", h , "heure(s)", m , "minute(s) et", s , "seconde(s)" Fin. ( Instructions ) Remarques : \ : quotient entier de 2 nombres entiers ; Ex : 13 \ 2 = 6 , par contre 13 / 2 = 6,5 mod : reste entier de la division de 2 nombres entiers ; Exemple : – 10 mod 3 = –1 L’instruction : écrire "Introduire le nombre de secondes:" , donne l’ordre à l’ordinateur d’afficher à l’écran ou d’imprimer les expressions entre guillemets . L’instruction : lire nsec demande au programmeur de taper au clavier la valeur de la variable nsec . 6°) Définition d’une constante et d’une variable en programmation Une constante est une valeur qui ne change jamais tout au long de l’exécution d’un algorithme . En programmation , une variable est un objet destiné à recevoir des valeurs (nombres , chaînes de caractères , ou autres) et à garder la place mémoire nécessaire . Les variables jouent le rôle de "tiroirs" ou ‘’ cases ‘’ dans lesquels on place une valeur durant l'exécution de l'algorithme . Alors , l’instruction lire X signifie que l'on introduit dans le tiroir ( ou la case ) baptisé X la valeur numérique entrée au clavier lors de l'exécution du programme . Le contenu de ce tiroir peut être modifié en y plaçant le résultat d'un calcul . 7°) Symbole d’affectation ( ou d’assignation ) en algorithme En algorithme , le symbole d’affectation ( ou d’assignation ) est représenté par une flèche orientée vers la gauche ( ) . Variable Expression Exemple s nsec mod 60 signifie que l'on place dans le tiroir s , le résultat de l'opération figurant à droite de la flèche . Cette instruction se lit : assigner ( ou affecter ) à la variable s la valeur de l'expression de droite 8°) Définition d’une expression en programmation Une expression est une formule algébrique utilisée pour calculer une valeur . Cette formule fait intervenir les noms des variables , des constantes numériques et des symboles mathématiques ( " + " : addition , " – " : soustraction , " * " : multiplication , " / " : division , " \ ": quotient entier de 2 nombres entiers , " mod ": reste entier de la division de 2 nombres entiers ) On utilise également des fonctions mathématiques usuelles : ln x , sin x , etc., …. En notation algorithmique , l’opération de concaténation ( juxtaposition de 2 chaînes pour en former une nouvelle ) est symbolisée par & séparant les 2 chaînes originelles . 3 Exemple : Notation algorithmique Traduction en Pascal A : = ‘ Bon ’ B : = ‘ jour’ C:=A+B A ‘’ Bon ‘’ B ‘’ jour ‘’ C A & B C vaut ‘’ Bonjour ‘’ 9°) Définition du type d’une variable . Le type d’une variable est l’ensemble dans lequel la variable prend ses valeurs . Il y a 2 sortes de types de variables : les types prédéfinis et les types déclarés . Les types prédéfinis sont définis dans le langage de programmation ( ici Pascal ) . Il y a 2 sortes de types prédéfinis : les types scalaires et le type structuré . Les types scalaires sont : entier , réel , caractère , chaîne et booléen . Le type structuré est le type tableau . Les types déclarés sont créés par le programmeur Exemples : Enumération ( Lundi , Mardi , Mercredi , Jeudi , Vendredi , Samedi , Dimanche ) Intervalle Vendredi .. Dimanche 10°) Définition d’un tableau . Un tableau est une structure de données ayant une dimension et un type déterminés , permettant de stocker en mémoire plusieurs variables de même type . Ces valeurs sont appelées éléments du tableau ou variables indicées . Chacun de ces éléments est repéré par un indice indiquant sa position relative par rapport au début du tableau . Dimension : le nombre d’éléments que peut contenir le tableau détermine la dimension du tableau . Type : désigne la nature des valeurs stockées dans le tableau ( entier ,caractère , chaîne , réel , …. ) Elément : désigne une valeur du tableau . Indice : c’est un entier naturel dont les valeurs varient de 1 à la dimension du tableau . A chaque valeur de l’indice correspond une seule valeur dans le tableau . Exemples : tableau a(i,j,k),i=0..12 , j=1..5 , k=12..19 d'entier b(i),i=12..25 de chaînes c(i,j,k) , i = 1..6 , j = 1..15 , k = 1..9 de réel Commentaires Soit la déclaration suivante : d(i , j) , i = 1..5 , j = 1..3 de réel Chaque variable indicée doit être décrite dans la partie déclarative de l'algorithme ; la description comprend trois parties : 1° La première partie décrit le nom de la variable et ses indices : d ( i , j ) 2° La deuxième partie décrit pour chaque variable les valeurs que peuvent prendre ces indices : les entiers i = 1 à 5 et j = 1 à 3 pour la variable indicée d . 3° La troisième partie définit le type de chaque élément constituant le tableau : d ( i , j ) est un tableau dont les éléments sont des réels . Remarque : Toutes les composantes d'un tableau doivent être du même type 4 NOTION DE PROGRAMMATION : TURBO PASCAL 1°) Les règles de base de la structure du langage Pascal . 1° Un programme Pascal se compose de trois parties: un en – tête , caractérisé par le mot PROGRAM une section déclarative introduite par le mot VAR une section instruction ou corps du programme , délimitée par les mots BEGIN et END. Attention : Le programme se termine par un point . 2° L' en – tête sert à donner un nom au programme selon la forme : PROGRAM identificateur; 3° Un identificateur en Pascal doit débuter par une lettre suivie par un nombre quelconque de lettres , chiffres ou de " _ " ( caractère souligné ) . Les identificateurs ne peuvent contenir d'espacement ( caractère " blanc " ) ou de caractères tels que % , ? , * , la version 3 ) . . , – ,. mais peuvent être aussi longs que l'on veut ( six pour 4° Les variables doivent faire l'objet d'une déclaration de type de la forme: VAR liste des variables : type; 5° Des points-virgules sont obligatoires pour séparer les trois parties et pour séparer les instructions . 6° Les instructions de lecture et d'écriture se traduisent respectivement par READ ( ou READLN ) et WRITE ( ou WRITELN ) suivis d'une liste de variables ou d'expressions placées entre parenthèses et séparées par des virgules . L'ajout du suffixe LN après WRITE ou READ oblige le passage à la ligne suivante lors de l'affichage à l'écran 7° L'assignation ( ou l’affectation ) se représente par " := " 8° Les opérateurs arithmétiques sont identiques à ceux de la notation algorithmique( ou langage de description d'algorithme ( LDA ) . Toutefois , X \ 3600 est traduit par X DIV 3600 . En effet , outre les quatre opérations + , – , * , et / , Pascal utilise deux opérateurs supplémentaires : DIV fournissant la partie entière du quotient de deux nombres entiers MOD fournissant le reste de la division de deux nombres entiers Ainsi , 13 / 5 fournit la valeur 2 . 6 ; 13 DIV 5 fournit 2 et 13 MOD 5 fournit 3. 9° Les mots PROGRAM , VAR , BEGIN , END , DIV , MOD , ..... ont un sens précis dans le langage: ce sont des mots réservés qui ne peuvent être choisis comme identificateurs ( noms ) par le programmeur. Un certain nombre de mots tels que INTEGER , READLN , WRITE , ... ont une signification prédéfinie . Pour éviter toute erreur , on évite de les choisir comme identificateur . 10° Les mots du langage et les identificateurs doivent être séparés les uns des autres par un ou plusieurs ‘‘ blancs’’. 2°) Manipulation des nombres. Pascal reconnaît deux types de nombres : les types entier et réel. a ) Le type entier. En algorithme , on placera dans la déclaration des variables , une ligne telle que: entier age , note qui se traduira en Pascal par : VAR age , note : integer; 5 b )Le type réel. En algorithme , on placera dans la déclaration des variables une ligne telle que : réel taux , moyenne qui se traduira en Pascal par : VAR taux , moyenne : real ; 3°) Manipulation des chaînes de caractères . Il existe deux types de variables alphanumériques : les caractère et chaîne. a ) Le type caractère. Le type caractère est réservé aux variables contenant un seul caractère ( lettre , symbole , ponctuation , ...) . Il est possible d'en déterminer les successeur / prédécesseur / position dans la liste des codes ASCII ( American Standard Code for Information Interchange ) . Exemple : le successeur de "B" est "C", son prédécesseur "A" et son code ASCII est 66 . En algorithme ,, on placera dans la déclaration des variables une ligne telle que: caractère lettre , initiale qui se traduira en Pascal par: VAR lettre , initiale : CHAR; b )Le type chaîne. Les variables du type chaîne peuvent contenir : soit une suite de caractères ( un mot , une phrase , ...) , soit un caractère , soit aucun caractère : on parle alors de chaîne vide . En algorithme , une variable de type chaîne se déclare comme suit : Chaîne nom , adresse qui se traduira en Pascal par : VAR Nom , adresse : string; 6 STRUCTURE DE CHOIX ( OU STRUCTURE CONDITIONNELLE ). 1°) Définition La structure de choix permet d’exécuter , à un instant donné une action , ou une autre action , exclusivement l’une de l’autre ( exclusif : qui ne s’intéresse qu’à une seule action en excluant les autres ) . Il existe 2 structures de choix : l'alternative et le choix multiple . 2°). La structure alternative. a ) Forme générale d’une structure alternative . En notation algorithmique , la structure alternative se présente en général sous la forme : si expression alors première séquence d'instructions sinon deuxième séquence d'instructions fsi b ) Traduction en langage Pascal . Elle se traduit en Pascal par : IF expression THEN BEGIN séquence d'instructions; END ELSE BEGIN séquence d'instructions ; END; expression conditionne le choix d'un des deux ensembles d'instructions . Cette expression peut être soit vraie soit fausse . Si l'expression est vraie , la première séquence d'instruction sera exécutée et la seconde sera ignorée ; si l'expression est fausse , seule la seconde séquence d'instructions sera effectuée . Le mot sinon indique où se termine la première séquence d'instructions et où commence la seconde . Le mot fsi ( abrégé de "fin de si" ) indique où se termine la seconde séquence d'instructions . Dans certains cas , lorsque l'expression est fausse , aucune instruction ne doit être exécutée . La condition s'exprime alors plus simplement sous la forme: Si expression alors séquence d'instructions fsi Ceci se traduit en Pascal par : IF expression THEN BEGIN séquence d'instructions END; Remarques : … BEGIN END peuvent être omis lorsque la séquence d’instructions se réduit à une seule instruction . Quelle que soit la séquence choisie et exécutée , les instructions qui suivent fsi seront exécutées . Il est interdit de mettre un ; avant ELSE ( ou après le END indiquant la fin de la séquence d'instructions qui suit le THEN ) . Chacune des séquences d'instructions d'un si ... fsi peut contenir des si...fsi . On dit alors que les structures sont imbriquées. 3°) Expression logique Une expression logique se construit à partir d'une affirmation qui est , soit vraie , soit fausse . Par exemple , une condition telle que " reste = 0 " n'impose pas à la variable reste d'être nulle . Il ne s'agit pas d'une assignation mais d'une condition qui ne sera réalisée et n'aura pas donc la valeur " vrai " que si la variable reste a été assignée à 0 . Dans les autres cas , cette condition prendra la valeur " faux ". 7 On peut combiner des affirmations à l'aide des opérateurs logiques : ou , et et non . Ces opérandes ne peuvent prendre que deux valeurs : vrai ou faux . Le tableau suivant donne les valeurs des expressions NON A , A ET B , A OU B pour les valeurs possibles de A et de B . A B NON A A ET B A OU B Vrai Vrai Faux Vrai Vrai Vrai Faux Faux Faux Vrai Faux Vrai Vrai Faux Vrai Faux Faux Vrai Faux Faux 4°) Variable booléenne On peut stocker la valeur d'une expression logique dans une variable . Cette variable ne peut prendre que la valeur vrai ou faux ( true ou false en Pascal ) . Cette variable est appelée variable logique ou booléenne . En algorithme , les variables de type booléenne ( exemple : OK , pair ) se déclarent comme suit : Booléen OK , pair qui se traduit en Pascal par : VAR OK , pair : BOOLEAN; 5°) Le choix multiple ( ou sélection ) . a ) Définition Le choix multiple permet de présenter une solution à des problèmes où un nombre important de cas , mutuellement exclusifs , sont à envisager en fonction des valeurs prises par une seule variable ou expression ( exclusif : qui ne s’intéresse qu’à un seul élément en excluant les autres ) Puisque chaque action est exclusive des autres , la structure sélective correspond à une imbrication d’alternatives . b ) Forme générale d’une sélection Algorithme ,. entier i début lire i selon que i=1 : oq i=2 : oq i=3 : autrement fselon Fin Le mot oq i instructions1 instructions2 instructions3 écrire "Mauvais choix" est l'abréviation de " ou que ". Traduction en langage Pascal Var i: integer ; Begin read (i); Case i of i=1 : instructions1 ; i=2 : instructions2 ; i=3 : instructions3 else write (‘Mauvais choix ’); end ; End ; 8 Forme équivalente utilisant une structure alternative imbriquée Algorithme entier i Début lire i si i =1 alors instructions1 sinon si i =2 alors instructions2 sinon si i =3 alors instructions3 sinon écrire " Mauvais choix " fsi fsi fsi Fin Traduction en langage Pascal Var i: integer ; Begin read (i); if i =1 then instructions1 else if i =2 then instructions2 else if i =2 then instructions3 else Write (‘Mauvais choix’); End; STRUCTURES REPETITIVES 1°) Définition La structure répétitive est une action permettant de répéter un ensemble d’instructions jusqu’à ce qu’une condition soit réalisée . Il existe plusieurs formes de structures répétitives : chacune est bien adaptée à des circonstances particulières . Ce sont les boucles tant que , répéter ... jusqu'à et pour . 2°) La boucle " tant que ". a ) Algorithme En notation algorithmique , une boucle "tant que" se présente comme suit : tant que expression logique faire ftant séquence d'instructions En premier lieu , l'expression logique est évaluée ( il faut donc veiller à sa valeur lors de l'entrée dans la boucle ) : si sa valeur est vrai , le corps de la boucle est exécuté puis l'expression logique est réévaluée ( il faut donc qu'elle puisse changer de valeur pour sortir de la boucle ) et si elle a la valeur faux , on exécute l'instruction qui suit ftant . Les mots faire et ftant ( abréviation de "fin de tant que" ) encadrent les instructions qui doivent être exécutées plusieurs fois . On indique entre tant que et faire les conditions dans lesquelles on doit exécuter le corps de la boucle . 9 b ) Traduction en langage Pascal La forme : tant que expression logique faire séquence d'instructions ftant se traduit en Pascal par : WHILE expression logique DO BEGIN séquence d'instructions; END; où la séquence d'instructions est entourée par un BEGIN et un END qui peuvent être omis lorsque la séquence se réduit à une seule instruction . 3°) . La boucle " pour". La structure répétitive permet de répéter l’exécution d’une ou plusieurs instructions un nombre de fois déterminé . Lorsque le nombre des répétitions est connu ou déterminable avant la première exécution de l’action concernée , on utilise la boucle « Pour » . L’exécution est conditionnée par l’observation d’une variable de test ( de contrôle ) , appelée indice de boucle ou compteur , qui est initialisée puis incrémentée ( c.à.d. augmentée d’une quantité donnée ) ou décrémentée après chaque passage dans la boucle . a ) Algorithme.. En notation algorithmique , une boucle " POUR " se présente comme suit : Pour vc de premval à dernval par incr faire séquence d'instructions fpour où vc est le nom de la variable de contrôle premval est la première valeur ( ou valeur initiale ) dernval est la dernière valeur ( ou valeur finale ) incr est l'incrément , c'est-à-dire la quantité non nulle ajoutée à la variable de contrôle à la fin de chaque exécution du corps de la boucle . Les mots faire et fpour ( abréviation de " fin du pour " ) encadrent les instructions qui doivent être exécutées plusieurs fois . Avant chaque exécution du corps de la boucle , la valeur de la variable de contrôle est comparée à la dernière valeur . L'exécution s'arrête : lorsque la variable de contrôle a une valeur strictement supérieure à la dernière valeur si l'incrément est positif lorsque la variable de contrôle a une valeur strictement inférieure à la dernière valeur si l'incrément est négatif . La première valeur , la dernière valeur et l'incrément sont des entiers numériques . b ) Traduction en langage Pascal La forme : Pour vc de premval à dernval par incr faire séquence d'instructions fpour se traduit en Pascal par : FOR vc := premval TO dernval DO BEGIN séquence d'instructions ; END; N.B. : Le Pascal n'accepte que l'incrément égal à 1 et – 1 et n’exige pas de le spécifier . Begin …End peut être omis lorsque la séquence se réduit a une seule instruction . 10 4°) La boucle " répéter ... jusqu'à ". Comme la boucle " tant que ", ce type de répétitive est utilisé lorsque le nombre de fois que la séquence d'instructions à répéter est inconnu au moment où cette séquence est abordée pour la première fois mais le corps de la boucle est toujours exécuté au moins une fois . a ) Algorithme.. Sa formulation générale est: Répéter séquence d'instructions jusqu'à (expression logique) L'expression logique est évaluée après l'exécution du corps de la boucle : si sa valeur est faux , le corps de la boucle est exécuté à nouveau puis l'expression logique est réévaluée ( il faut donc qu'elle puisse changer de valeur pour sortir de la boucle ) et si elle a la valeur vrai , on exécute l'instruction qui suit jusqu'à . b ) Traduction en langage Pascal La traduction en Pascal de : Répéter séquence d'instructions jusqu'à (expression logique) se fait pratiquement mot à mot : REPEAT séquence d'instructions ; UNTIL (expression logique); Remarque: La séquence d'instructions n'est pas entourée par BEGIN ... END. DECLARATION DU TYPE TABLEAU EN PASCAL En Pascal , un tableau est déclaré du type ARRAY et le nombre de dimensions ( indices ) du tableau s'indique entre crochets en citant les valeurs minimales et maximales successives des différents indices , .. séparées par deux points ( ) . La déclaration du type des éléments contenus dans le tableau se fait en ajoutant OF INTEGER , ou OF REAL ou of string ... Exemple: tableau a(i,j,k),i=0..12 , j=1..5 , k=12..19 d'entier b(i),i=12..25 de chaîne c(i,j,k),i=1..6 , j=1..15 , k=1..9 de réel Cette déclaration se traduit en Pascal par : Type vecteurA = ARRAY[ 0..12,1..5,12..19 ] OF INTEGER; vecteurB = ARRAY[ 12..25 ] OF STRING; vecteurC = ARRAY[1..6,1..15,1..9 ] OF REAL; Var A : vecteurA; B : vecteurB; C : vecteurC; Remarque : l'élément a( i , j , k ) en notation algorithmique d’un tableau s'écrit , a[i,j,k] en Pascal . 11 FONCTIONS ET PROCEDURES I –. FONCTION a ) Définition Une fonction est une entité qui calcule un résultat unique en fonction d’un ou de plusieurs paramètres d’entrée . Exemple : L’aire S d’un rectangle de largeur x et de longueur y : S = f (x , y ) = x * y . x et y sont les paramètres ou les arguments d’entrée de la fonction . Pour évaluer la fonction , il faut que tous les paramètres soient définis au moment de l’appel de la fonction . Une fonction se caractérise par un en – tête , qui décrit le nom de la fonction et les paramètres à transférer , suivi d’un corps , qui représente l’algorithme effectuant les traitements associés à la fonction . Une fonction peut elle – même contenir d’autres fonctions . Tous les objets définis à l’intérieur d’une fonction sont dits locaux : ils ne sont pas accessibles en dehors du corps de cette fonction . b ) Algorithme Exemple : Calcul de l’aire S d’un rectangle de largeur x et de longueur y . Fonction airerectangle ( x,y : réel ) : réel En - tête Réel S Partie déclarative Début S x*y Airerectangle Fin. Bloc d’instructions S L’en – tête identifie la fonction par son identificateur , nom donné par le programmeur ( ici : airerectangle ) et fournit une liste de paramètres ( ici , x et y ) avec leur type ( ici réel ) . L’en – tête précise aussi le type de la valeur retournée par la fonction ( ici réel ) Le corps d’une fonction comporte toutes les sections d’un programme : déclarations et bloc d’instructions exécutables . c ) Traduction en Pascal L’exemple ci – dessus se traduit en Pascal par : Function airerectangle ( x,y : real ):real; Var S : real ; Begin S:= x*y ; Airerectangle:= S ; End ; En - tête Partie déclarative Bloc d’instructions d ) Appel de la fonction Algorithme Algo Surface Réel x,y,S En – tête du programme Partie déclarative Fonction airerectangle ( x1,y1 : réel ) : réel Réel S1 Début S1 x1*y1 Airerectangle Fin. En - tête Partie déclarative Déclaration de la fonction Bloc d’instructions S1 12 DEBUT Ecrire ‘‘ Introduire la valeur de la largeur x : ’’ Lire x Ecrire ‘‘ Introduire la valeur de la largeur y : ’’ Lire y S airerectangle( x , y ) Ecrire ‘‘ S( ’’, x , ‘‘ , ’’ , y ,‘‘ ) = ’’, S FIN . Programme principal : appel de la fonction L’en – tête identifie la fonction par son identificateur , nom donné par le programmeur ( ici : airerectangle ) et fournit une liste de paramètres ( ici , x et y ) avec leur type ( ici réel ) . L’en – tête précise aussi le type de la valeur retournée par la fonction ( ici réel ) Le corps d’une fonction comporte toutes les sections d’un programme : déclarations et bloc d’instructions exécutables . Traduction en Pascal Program surface; Var x,y,S:real; En – tête du programme Function airerectangle ( x1,y1 : real ):real; Var S1: real ; Begin S1:= x1*y1; Airerectangle:= S1; End ; En - tête Partie déclarative Partie déclarative Bloc d ’ instructions de la fonction Begin write (‘ Donner la valeur de x : ’); readln (x); write (‘ Donner la valeur de y : ’); readln (y); S := airerectangle( x , y ); writeln (‘ S( ’, x:6:2 , ‘ , ’ , y:6:2 ,‘ ) = ’, S:6:2 ); End . 13 Programme principal : appel de la fonction II –. PROCEDURE a ) Définition Une procédure est un bloc de programme travaillant sur des données fournies ou contenues dans le bloc du programme . Ces données sont définies à l’appel de la procédure , et leur traitement permet de retourner des résultats accessibles au bloc appelant . Données et résultats constituent les paramètres ou arguments de la procédure b ) Déclaration d’une procédure Toute procédure doit être déclarée dans la section appropriée du programme . Une déclaration de procédure comprend un en – tête et un corps : l’ en – tête contient l’identificateur ( le nom ) de la procédure , suivi entre parenthèses de la liste des paramètres avec leur type . Les différents types de paramètres sont séparés par des points virgules alors que les paramètres de même type le sont par des virgules . le corps d’une procédure est un bloc . Il peut donc contenir toutes les déclarations et instructions du langage . Dans le corps d’une procédure , tous les objets non transmis comme paramètres doivent être déclarés . Il est possible de définir d’autres procédures ou fonctions à l’intérieur d’une procédure . Des emboîtements de fonctions et procédures sont donc possibles à plusieurs niveaux de la procédure . c ) Appel de la procédure L’appel d’une procédure constitue une instruction composée du nom de la procédure suivi , éventuellement entre parenthèses , de la suite des paramètres effectifs , séparés par des virgules . d ) Algorithme Exemple : Calcul de l’expression A + cos (B) , utilisant une procédure nommée calculAB , pour différentes valeurs de A et B . Algo Calcul En – tête de l’algorithme Réel x , y , z Partie déclarative de l’action principale Procedure SaisieAB (A,B:réel ) En – tête de la procédure Début Ecrire ‘‘ Donner la valeur de A : ’’ Lire A Ecrire ‘‘ Donner la valeur de B : ’’ Lire B Fin Procédure 1 Procedure calculAB ( A,B:réel ; resultat: réel ) En – tête de la procédure 2 Réel D Partie déclarative de la procédure 2 ( Variable locale ) Début D cos(B) Resultat A + D Procédure 2 Bloc d’instructions de la procédure 2 Fin DEBUT saisieAB( x , y ) Appel de la procédure saisie calculAB( x , y , z ) Appel de la procédure calculAB ecrire ‘‘ Le resultat est : resultat = ’’, z FIN . 14 Programme principal : appel des procédures e ) Traduction en Pascal Program Calcul ; En – tête du programme Var x , y , z : real ; Partie déclarative du programme principal Procedure SaisieAB ( Var A,B:real ) ; En – tête de la procédure Begin write (‘ Donner la valeur de A : ’); readln (A) Procédure 1 Bloc d’instructions de la procédure 1 write (‘ Donner la valeur de B : ’); readln (B); End; Procedure calculAB ( A,B :real; Var resultat : real) ; En – tête de la procédure 2 Var D : real ; Begin D := cos(B) ; Resultat := A + D ; End ; BEGIN saisieAB( x , y ) ; Partie déclarative de la procédure 2 ( Variable locale ) Procédure 2 Bloc d’instructions de la procédure 2 Appel de la procédure saisie Programme principal : calculAB( x , y , z ) ; Appel de la procédure calculAB writeln(‘ Le resultat est :resultat = ’, z :8 :3 ); END. Résultat de l’exécution Donner la valeur de A : 6.7 Donner la valeur de B : 1.0472 Le resultat est : resultat = 7.200 15 appel des procédures RECURSIVITE 1°) Définition La récursivité donne la possibilité de faire figurer dans la définition d’un objet une référence à ce même objet . Par exemple , la somme des n premiers entiers peut faire référence à la somme des ( n – 1 ) premiers entiers en écrivant : Som(n) = n + Som(n-1) avec Som(1) = 1 Une procédure ou une fonction récursive est un sous-programme qui appelle lui – même , et qui fait intervenir une variable de contrôle permettant d’arrêter le processus d’appel . 2°) Exemple numérique simple Calcul de la somme de n premiers entiers en utilisant une méthode récursive . a ) Méthode classique Algorithme Algo Somme1 ( En – tête ) entier i , N , som ( Déclaration des variables avec leur type ) Début écrire " Donner un nombre entier N : " Lire N som 0 pour i de 1 à N par 1 faire som som + i fpour écrire " Somme = " ,som Fin . Traduction en Pascal : PROGRAM Somme1; ( En – tête ) VAR i , N, som : INTEGER; ( Déclaration des variables avec leur type ) BEGIN Write (‘ Donner un nombre entier N : ‘ ); Readln ( N ); Som:= 0; FOR i := 1 to N do som := som + i Writeln (‘ Somme = ‘ , som ); END. Résultat de l’exécution Donner un nombre entier N : 4 Somme = 10 ( Instructions ) ( Instructions ) b ) Méthode récursive Algorithme Algo Somme2 Entier N ( En – tête ) ( Déclaration de la variable avec son type ) Fonction som ( val : entier ) : entier Début Si val =1 alors som 1 Sinon som val + som ( val – 1 ) Fsi Fin DEBUT Ecrire ‘‘ Donner un nombre entier N : ’’ Lire N Ecrire ‘‘ Somme = ’’ , som(N) FIN. 16 Fonction récursive ( Action principale ) Traduction en Pascal : PROGRAM Somme2; ( En – tête ) VAR N : INTEGER; ( Déclaration de la variable avec son type ) Function som ( val : integer ) : integer ; Begin If val =1 then som:=1 else som := val + som ( val – 1 ); End; BEGIN Write (‘ Donner un nombre entier N : ’ ); Readln ( N ); Writeln (‘ Somme =’ , som( n ) : 5 ); END. Résultat de l’exécution Donner un nombre entier N : 4 Somme = 10 Fonction recursive ( programme principale ) 3°) Exercice d’application Calcul de N! en utilisant la méthode récursive . Algorithme Algo Factoriel ( En – tête ) Entier N ( Déclaration de la variable avec son type ) Fonction Fac ( val : entier ) : entier Début Si val =1 alors fac 1 Sinon fac val * fac ( val – 1 ) Fsi Fin DEBUT Ecrire ‘‘ Donner un nombre entier N : ’’ Lire N Ecrire ‘‘ Factoriel(‘‘,N,’’ ) = ‘‘ , fac(n) FIN. Fonction récursive ( Action principale ) Traduction en Pascal : PROGRAM Factoriel; ( En – tête ) VAR N : INTEGER; ( Déclaration de la variable avec son type ) Function Fac ( val : integer ) : integer ; Begin If val =1 then fac:=1 else fac:= val * fac( val – 1 ); End; BEGIN Write (‘ Donner un nombre entier N : ‘ ); Readln ( N ); Writeln (‘ Factoriel(‘,N,’) = ‘ , Fac( n ) : 5 ); END. Résultat de l’exécution Donner un nombre entier N : 4 Factoriel(4) = 24 17 Fonction recursive ( programme principale ) APPLICATION : ANALYSE NUMERIQUE Séparation des racines de l’équation algébrique f(x) =0 Séparer dans un intervalle [ a , b ] les racines réelles d’une équation algébrique f(x) = 0 , consiste à établir des segments [ x , x + dx ] les plus serrés possibles contenant une racine et une seulement . Principe On subdivise I en n domaines [ x i , x i+1 ] de largeur x , i variant de 0 à n – 1 : x x i1 x i ba Cte n Un domaine [ x i , x i+1 ] contient une racine si f ( x i ) . f ( x i+1 ) < 0 METHODE DES APPROXIMATIONS SUCCESSIVES POUR LA RESOLUTION DE L’EQUATION F(X) = 0 1° ) Principe de la méthode Soit l’équation f(x) = 0 où f(x) est une fonction continue sur le segment [ a , b ] . On remplace l’équation par x = (x ) . On sélectionne par un moyen quelconque une valeur grossièrement approchée de la racine : xo On calcule successivement : x1 = x2 = x3 = x4 = ( xo ) ( x1 ) ( x2 ) ( x3 ) . . . x N = ( xN –-1 ) avec N = 1 , 2 , 3 , ….. Si la suite converge , alors : lim x N est la racine cherchée . N 18 Remarques : La solution s’obtient : sous forme d’une ligne échelonnée si ‘ ( x ) > 0 , en spirale si ‘ ( x ) < 0 Le théorème suivant donne une condition suffisante de convergence du processus itératif : Théorème : Soit la fonction (x ) définie et dérivable sur b ] . S’il existe un nombre q tel que ‘ ( x ) 1°) le processus itératif xN = initiale xo [ a , b ] . 2°) la valeur limite lim x N le segment [ a , b ] avec toutes ses valeurs (x ) [ a , q 1 pour a < x < b : ( xN –-1 ) converge indépendamment de la valeur est l’unique racine de l’équation x = (x ) sur [ a , b ] . N On peut prendre q la plus petite valeur ou la borne inférieure de ‘ ( x ) pour a < x < b . L’équation f ( x ) = 0 peut être mise sous la forme x = (x ) par différentes façons . La condition , ‘ ( x ) q 1 est la représentation la plus avantageuse pour le processus itératif . 2° ) Organigramme représentation graphique d'un algorithme . Un organigramme est donc un diagramme qui montre le cheminement des données dans un programme ou dans un système d'information , ainsi que les opérations pratiquées sur ces données lors des différentes étapes du traitement . Ces opérations sont représentées par des cases dont les formes sont normalisées : rectangles pour les calculs , losanges pour les tests, parallélogrammes pour les entrées et les sorties de données . Ces cases sont reliées entre elles par des lignes fléchées qui indiquent le cheminement . L'organigramme est ainsi un outil graphique qui peut servir d'aide pour comprendre le fonctionnement ou le comportement d'un programme donné . Organigramme : 19 RESOLUTION NUMERIQUE D’UN SYSTEME TRIANGULAIRE 1° ) Principe de la méthode Soit le système d’équations : A 1,1 . X1 + A 1,2 . X2 + A 1,3 . X3 + … + A 1,N . XN = B1 A 2,2 . X2 + A 2,3 . X3 + … + A 2,N . XN = B2 A 3,3 . X3 + … + A 3,N . XN = B3 ………. ……..… A N,N . XN = BN Une condition nécessaire et suffisante pour que ce système triangulaire admette une et une seule solution est que les éléments diagonaux soient différents de zéro ( AI,I 0 : I = 1 à N ) . Les valeurs des solutions sont obtenues en résolvant d’abord la dernière équation : XN BN AN, N Puis en remontant , X N 1 1 A N 1 , N 1 B N 1 A N 1 , N . X N …… XI 1 A I, I B I A I , I 1 . X I 1 A I, N . X N …… X1 1 A 1,1 B1 A 1, 2 . X 2 A 1, N . X N 2° ) Exemple numérique 2.X1 + 3. X2 – X3 = 1 0.X1 + X2 – 5. X3 = – 3 0.X1 + 0. X2 + 6 . X3 = 2 2 3 1 X1 1 0 1 5 . X 2 3 0 0 6 X 2 3 X3 2 1 4 ; X2 6 3 3 20 et X 1 8 3 3° ) Organigramme RESOLUTION D’UN SYSTEME D’EQUATIONS LINEAIRES ( A*X = B ) PAR L’ALGORITHME DE GAUSS 1° ) Principe de la méthode Soit le système de N équations linéaires à N inconnues , A 1,1 . X1 + A 1,2 . X2 + A 1,3 . X3 + … + A 1,N . XN = B1 A 2,1 . X1 + A 2,2 . X2 + A 2,3 . X3 + … + A 2,N . XN = B2 A 3,1 . X1 + A 3,2 . X2 + A 3,3 . X3 + … + A 3,N . XN = B3 ……. …. …… A N,1 . X1 + A N,2 . X2 + A N,3 . X3 + … + A N,N . XN = BN Où les coefficients A I , J et BI sont donnés et les XI , inconnues . La méthode de Gauss est la méthode classique de substitution ou de triangulation . La matrice d’origine est transformée en une matrice triangulaire supérieure droite de la manière suivante : A partir de la 1ère équation , on extrait l’expression de X1 en fonction des autres inconnues . Ensuite , dans toutes les équations suivantes , on remplace X1 par cette expression . On obtient alors un système linéaire d’ordre N dans lequel tous coefficients de X1 sont nuls , sauf dans la 1ère équation . On répète ce processus sur les N – 1 autres inconnues pour obtenir finalement un système linéaire triangulaire . On sait résoudre un tel système . 21 EXEMPLE Soit le système de 3 équations linéaires à 3 inconnues suivant : A 1,1 . X1 + A 1,2 . X2 + A 1,3 . X3 = B1 A 2,1 . X1 + A 2,2 . X2 + A 2,3 . X3 = B2 A 3,1 . X1 + A 3,2 . X2 + A 3,3 . X3 = B3 Substitution de X1 A1,2 A1,3 B A1,1 s’appelle le premier pivot . X1 .X 2 .X 3 1 A1,1 A1,1 A1,1 On pose , A1(,22) A1,2 A1(,23) ; A1,1 ( 2) A1,3 A1,1 ( 2) B1( 2) et B1 A1,1 ( 2) ( 2) ( 2) ( 2) 1ère équation X1 A1,2 .X 2 A1,3 .X 3 B1 X1 B1 A1,2 .X 2 A1,3 .X 3 On remplace X1 par cette expression dans les équations suivantes : ( 2) 2ème équation A 2,1. B1 A 2, 2 3,2 A 2,1. A1(,22) .X 2 A 2,3 A 2,1. A1(,23) .X 3 B 2 A 2,1.B1( 2) ( 2) 3ème équation A 3,1. B1 A A1(,22) .X 2 A1(,23) .X 3 A 2,2 .X 2 A 2,3 .X 3 B 2 A1(,22) .X 2 A1(,23) .X 3 A 3,2 .X 2 A 3,3 .X 3 B 3 A 3,1. A1(,22) .X 2 A 3,3 A 3,1. A1(,23) .X 3 B 3 A 3,1.B1( 2) On obtient le système suivant : X1 A 1(,22) .X 2 + + A A . X 2,2 A 2,1. A1(,22) . X 2 3, 2 A 3,1. A1(,22) ( 2) 2 ( 2) On pose : A 2,2 A 2,2 A 2,1.A1,2 A A A1(,23) . X 3 B1( 2) .X 2,3 A 2,1. A1(,23) . X 3 B 2 A 2,1.B1( 2) 3,3 A 3,1. A1(,23) 3 B 3 A 3,1.B1( 2) ; A (22,3) A 2,3 A 2,1.A1(,23) ; A 3(2,2) A 3,2 A 3,1.A1(,22) A 3( 2,3) A 3,3 A 3,1.A1(,23) ; B(22) B 2 A 2,1.B1(2) ; B3(2) B3 A 3,1.B1(2) On obtient alors le système suivant : X1 A1(,22) .X 2 A1(,23) .X 3 B1( 2) A (22,2) .X 2 A (22,3) .X 3 B (22) A 3( 2,2) .X 2 A 3( 2,3) .X 3 B 3( 2) Substitution de X2 ( 2) La première équation reste inchangée . La 2ème équation est divisée par le coefficient A 2,2 de X2 . A (22,2) est appelé le 2ème pivot . On obtient X2 3ème A (22,3) B (22) A (22,3) .X 3 X2 A (22,2) A (22,2) (2) A (2) 2,3 ( 2) ( 2) ( 2) B 2 équation A 3,2 . .X 3 + A 3,3 . X 3 B 3 ( 2 ) ( 2 ) A 2,2 A 2,2 A (22,2) .X 3 B (22) A (22,2) 22 ( 2) A ( 2) ( 2) ( 2) ( 2) B 2 ( 2) 2,3 A 3,3 A 3,2 . (2) . X 3 = B3 A 3,2 . (2) A 2,2 A 2,2 A (23,3) On pose B (23) A (22,3) A (22,2) B (22) A (22,2) A ( 2) (3) ( 2) ( 2) 2,3 ; A 3,3 A 3,3 A 3,2 . A (22,2) ( 2) (3) ( 2) ( 2) B 2 ; B3 B3 A 3,2 . A (22,2) On obtient alors , finalement le système triangulaire suivant : X1 A1(,22) .X 2 A1(,23) .X 3 B1( 2) X2 A (23,3) .X 3 B (23) A 3(3,3) .X 3 B 3(3) On sait résoudre ce système triangulaire . 2° ) Exemple numérique Soit le système de 3 équations linéaires à 3 inconnues suivant : 2 . X1 X1 – X1 + 3 . X2 – X3 + X2 + 2. X3 – X2 + X3 = 1 = 2 =–1 3 1 1 1 3 1 = 1 X1 .X 2 .X 3 X1 .X 2 .X 3 2 2 2 2 2 2 1 5 3 1 1 3 X1 + X2 + 2. X3 = 2 .X 2 .X 3 X 2 2.X 3 2 .X 2 .X 3 2 2 2 2 2 2 1 1 1 1 1 3 .X 2 .X 3 – X1 – X2 + X3 = – 1 .X 2 .X 3 X 2 X 3 1 2 2 2 2 2 2 2 . X1 + 3 . X2 – X3 D’où , 3 1 1 X1 .X 2 .X 3 2 2 2 X 2 5. X 3 3 X 2 X3 1 X 2 5. X 3 3 X 2 3 5 . X 3 X 2 5 . X 3 3 X 2 X3 1 3 5. X 3 X 3 1 6.X 3 2 D’où , 3 1 1 X1 .X 2 .X 3 2 2 2 X 2 5 . X 3 3 1 0 0 6.X 3 2 C’est un système triangulaire dont on sait résoudre : La solution est 1 4 8 X 3 ; X 2 ; X 1 3 3 3 23 3 2 1 0 1 1 X1 2 2 5 . X 2 3 6 X 3 2 TABMATAlgo2011B / AlgoLIER2011 / Bureau / Toshiba1 ALGORITHMIQUE ET PROGRAMMATION ( Langage Pascal) Pages NOTION D’ALGORITHMIQUE 1°) Définitions d’un algorithme d’un programme et d’une instruction . 2°) Qualités d'un algorithme ou d'un programme. 3°) Méthodologie 4°) Structures rencontrées en algorithme 5°) Syntaxe général d’un algorithme ( ou d’un programme ) 6°) Définition d’une constante et d’une variable en programmation 7°) Symbole d’affectation ( ou d’assignation ) en algorithme 8°) Définition d’une expression en programmation 9°) Définition du type d’une variable . 10°) Définition d’un tableau . NOTION DE PROGRAMMATION : TURBO PASCAL 1°) Syntaxe générale d’un algorithme 2°) Manipulation des nombres. a ) Le type entier. b ) Le type réel. 4°) Manipulation des chaînes de caractères . a ) Le type caractère. b ) Le type chaîne. STRUCTURE DE CHOIX ( OU STRUCTURE CONDITIONNELLE ). 1°) Définition 2°) La structure alternative. a ) Forme générale d’une structure alternative . b ) Traduction en langage Pascal . 3°) Expression logique 4°) Variable booléenne 5°) Le choix multiple ( ou sélection ) . a ) Définition b ) Forme générale d’une sélection STRUCTURES REPETITIVES . 1°) Définition 2°) La boucle " tant que ". a ) Algorithme b ) Traduction en langage Pascal 3°) La boucle " pour". a ) Algorithme.. b ) Traduction en langage Pascal 3°) La boucle " répéter ... jusqu'à ". a ) Algorithme.. b ) Traduction en langage Pascal DECLARATION DU TYPE TABLEAU EN PASCAL FONCTIONS ET PROCEDURES I –. FONCTION a ) Définition b ) Algorithme c ) Traduction en Pascal d ) Appel de la fonction II –. PROCEDURE a ) Définition b ) Déclaration d’une procédure c ) Appel de la procédure d ) Algorithme 24 2 2 2 2 2 2 3 3 3 4 4 5 5 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 9 9 9 9 9 10 10 10 11 11 11 11 12 12 12 12 12 12 14 14 14 14 14 Pages 15 16 16 16 16 16 17 e ) Traduction en Pascal RECURSIVITE 1°) Définition 2°) Exemple numérique simple a ) Méthode classique b ) Méthode récursive 3°) Exercice d’application APPLICATION : ANALYSE NUMERIQUE 18 SEPARATION DES RACINES DE L’EQUATION ALGEBRIQUE F(X) =0 Principe de la méthode METHODE DES APPROXIMATIONS SUCCESSIVES POUR LA RESOLUTION DE L’EQUATION F(X) = 0 1°) Principe de la méthode 2° ) Organigramme RESOLUTION NUMERIQUE D’UN SYSTEME TRIANGULAIRE 1° ) Principe de la méthode 2° ) Exemple numérique 3° ) Organigramme RESOLUTION D’UN SYSTEME D’EQUATIONS LINEAIRES (A*X=B) PAR L’ALGORITHME DE GAUSS 1° ) Principe de la méthode 2° ) Exemple numérique 18 18 18 18 19 20 20 20 21 21 21 23 TABLE DES MATIERES 24 ------------------------------------- 25