Algorithmie de Base [ Ch II

download Algorithmie de Base [ Ch II

of 23

Transcript of Algorithmie de Base [ Ch II

Algorithmie

Alain MILONE Algorithmie de base

INFO/1 2006

V5

2. Algorithmie de base

On a vu que le processus de ralisation de programme passe par la description prcise des diffrents traitements qui le constitue. Il s'agit donc, une fois la dcomposition du programme en ses modules constitutifs ralise, de dfinir prcisment, pour chaque module : - Les diffrentes donnes ( types et structures ) devant tre manipules. - Les diffrents traitements raliser. Il s'agit ensuite de dcrire les enchanements entre les diffrents traitements. Cela en employant un pseudo-langage appropri permettant de raliser des descriptions prcises et non ambigus ( algorithmes ).

Dans ce chapitre on va se proccuper plus particulirement des deux premires phases de cette description ( description des donnes manipules et des traitements unitaires ). On abordera le problme de l'enchanement entre les diffrents modules dans le chapitre suivant. On va donc la fois apprendre concevoir et rdiger des algorithmes tout en apprenant les bases d'un pseudo-langage.

Il est rappel que le pseudo-langage utilis ici est un pseudo-langage parmi de nombreux autres ( il est probablement diffrent de ceux utiliss par les quipes de dveloppement professionnelles ). Il est relativement formel du fait qu'il est adapt plus particulirement la description de modules unitaires. Il s'appuie sur le principe de base suivant : Lorsqu'un mcanisme est mis en uvre par la plupart des langages de programmation actuels, il est dcrit par le pseudo-langage. Lorsqu'un mcanisme n'est mis en uvre que par un langage de programmation il n'est pas dcrit par le pseudo-langage.

Page II

. 1/23

Algorithmie

Alain MILONE Algorithmie de base

INFO/1 2006

V5

2.1 : Les variablesJusqu' prsent nous avons parl de "donnes" qui sont traites par les programmes sans plus de prcisions. Cependant, dans la ralit du domaine de la programmation, il vaut mieux utiliser le terme de variable qui, une fois dfini, permet de mieux comprendre les mcanismes mis en uvre lors de leurs diffrentes manipulations ( crations, initialisations, modifications, etc. ).Si on reprend l'exemple prcdent, on peut imaginer disposer d'une base de clients compose de plusieurs milliers de clients. Les diffrents noms de ces clients sont des donnes. Pour traiter ces noms ( en particulier pour les trier et pour les afficher ), on crit un algorithme utilisant une variable nomme Nom qui est utilise dans la description des traitements raliser afin d'obtenir la fonctionnalit souhaite. Cette variable Nom prend, successivement, la valeur de tous les noms des clients de la base et le traitement est appliqu chaque valeur prise ( par exemple le traitement permettant de savoir si le nom commence par un "M" ou non ou celui affichant les diffrents noms ).

Pour raliser les traitements, les diffrentes instructions manipulent donc des variables, selon des dispositions spcifiques chaque langage de programmation.

2.11 / Gnralits sur les variables :Pour le programme en cours d'excution, une variable est une zone mmoire alloue ( = rserve ) par le systme au programme pour que ce dernier puisse y stocker les valeurs des donnes traiter. Elle a donc une taille prdfinie. Le programme la rfrence par son adresse basse. A lexcution du programme cette variable contiendra une valeur ( = une donne ), ou ladresse dune autre zone mmoire contenant une valeur.

@1000:0000 125 @1000:0004 Au sein d'un programme une variable est une zone mmoire entirement dfinie par son adresse de dbut et par sa taille. Elle peut contenir une valeur.

Mais les variables ont une toute autre signification pour le programmeur : Elles entre pleinement dans le processus de description algorithmique en nommant les diffrentes entits manipules.

Page II

. 2/23

Algorithmie

Alain MILONE

INFO/1 2006

V5

Algorithmie de base Une variable est, dans ce cas, dfinie compltement par son nom et - on va le voir plus loin - par son type ( pour la distinguer des autres entits manipules et pour permettre de savoir quel type de variable on manipule ). Entier NombreDeTours La variable nomme NombreDeTours, ncessaire la description du traitement, sera en mesure de prendre des valeurs numriques entires.

Reprsentations d'une variable. - Le nom dune variable ne sert que dtiquette au programmeur. Elle lui permet de raliser un algorithme comprhensible ( ce qui e serait pas le cas si on utilisait des adresses ). - Le type de la variable donne, une indication sur le type de donnes manipules et sur la plage des valeurs qu'elle pourra avoir. Ultrieurement cette taille permettra d'allouer la zone mmoire adquate. Ainsi laction de dclarer, au sein dun algorithme ou d'un source, une variable a de grandes consquences lors de la compilation : Le nom dune variable est d'abord simplement un label ( = une tiquette ) qui permet de dcrire le traitement. La correspondance entre le nom de la variable et ladresse de la zone mmoire correspondante est ralise lors de la phase de compilation ou lors de ldition des liens. Le lien est ralis via des tables mises en place par l'environnement charg de la transformation. Dans lexcutable il ny a pas de rfrence au nom dune variable : elle n'est rfrence que par son adresse.

Par exemple, si lon reprend la syntaxe du langage C, les instructions suivantes permettent de dfinir des variables utilises par le programme : int i ; Dclaration dune variable de type entier appele i. Lorsque cette instruction est analyse par le compilateur, celui-ci : - Rserve, dans le module objet en cours de constitution, une zone mmoire de 2 ou 4 octets ( selon le systme dexploitation ) correspondant la taille dune variable de type entier. - Indique, dans ses tables, le lien entre le nom de la variable et ladresse de la zone alloue.

Page II

. 3/23

Algorithmie

Alain MILONE Algorithmie de base

INFO/1 2006

V5

Lors de lanalyse des lignes dinstructions ultrieures, chaque fois que le symbole i sera dtect, le compilateur saura quil sagit dune instruction portant sur la zone mmoire ainsi nomme.

char car = 'A' ;

Dclaration / initialisation dune variable de type caractre ( "char" ) appele car. Lorsque linstruction est analyse, le compilateur : - Rserve, dans le module objet en cours de constitution, une zone mmoire de 1 octet correspondant la taille dune variable de type caractre. - Indique dans ses tables le lien entre le nom de la variable et ladresse de la zone alloue. - Initialise la variable avec la valeur ASCII correspondant au caractre A ( 67 en dcimal ).

2.12 - Les pointeurs :Un pointeur est une variable dun type spcial utilise par les langages les plus labors. Il contient, comme valeur, une adresse mmoire. Un pointeur permet ainsi d'accder directement l'emplacement mmoire o est stocke la valeur dune variable sur laquelle il a t initialis ( ladresse quil contient est celle o est stocke la variable cible ). Normalement, lorsque - dans le code d'un programme - on manipule une variable, on manipule en fait une copie de la valeur de cette variable. Le fait d'utiliser un pointeur ( initialis l'adresse de cette variable ) permet d'accder directement la zone mmoire o cette valeur est stocke pour la modifier.

L'utilisation de pointeur est plus dlicate grer ( cela peut provoquer des "plantages", pour accs une zone mmoire interdite, en cas d'erreur ) mais elle permet de gnrer des programmes complexes beaucoup plus rapides et efficaces.

int i = 123 ; int *pt ; pt = &i ; i

pt

Implmentation d'un pointeur en mmoirePage II

. 4/23

pt

Algorithmie

Alain MILONE Algorithmie de base

INFO/1 2006

V5

2.2 : Langage de description dun algorithme2.21 / Structure gnrale d'un algorithme :Un algorithme, correspondant la description d'un traitement unitaire, se compose :

D'un nomLa premire ligne d'un algorithme comporte son nom ainsi, on le verra plus tard, qu'une indication sur son type. Programme TriDeFiches Sous-Programme Addition

Il est souhaitable que le nom utilis ait un rapport avec sa fonction. viter les noms de programme du type Programme1, Programme2, Programme3, etc.

D'une partie dclaration :C'est dans cette partie que sont dfinies les diffrentes variables qui seront utilises dans lalgorithme. On utilise en gnral un couple ( identifiant, type ) pour dfinir les variables qui seront utilises.La partie dclaration commence gnralement par le mot : Variable(s)

Variables : Compteur : entier i, j, k : entier

Chaque variable, ou ensemble de variables, est dfini par un identifiant et son type.

Selon le pseudo-langage utilis, on utilise la syntaxe dcrite ci-dessus ( identifiant : type ) ou la syntaxe "type identifiant".

Entier compteur Rel prixL'une ou l'autre se valent car les deux informations ncessaires la comprhension de l'algorithme sont prsentes ( la dfinition de la variable, l'aide d'un identifiant, et son type ). La seconde criture est plus facile utiliser lorsque l'on souhaite donner d'emble ( = initialiser ) une valeur une variable. Entier i 3 // La variable i est dclare et initialise avec la valeur 3.

Il ne faut pas chercher, ce moment de la cration du programme, dfinir trop prcisment les types de variables utilises ( en ayant en tte par exemple ceux manipuls par le langage de programmation cible ). Seul le type gnral importe car on ne manipule pas de la mme manire un entier, un rel ou une chane de caractre.Page II

. 5/23

Algorithmie

Alain MILONE Algorithmie de base

INFO/1 2006

V5

Dans certains cas le traitement ncessite que la variable ainsi dclare garde une valeur constante. On peut utiliser la syntaxe : Constante : Rel Pi 3,14159

D'une partie "instructions" :Cette partie, encadre par les mots Dbut et Fin, contient la description des diffrents traitements ainsi que leurs enchanements. Dans le cas gnral, un module fonctionnel est susceptible de comporter des instructions des types suivants :

Acquisition de donnesIl s'agit de l'action permettant de donner une valeur une variable par l'intermdiaire d'un priphrique d'entre du systme ( en gnral il s'agit du clavier mais cela peut tre un autre priphrique d'entre ). On dit que l'on ralise une opration d'entre. Au sein d'un algorithme cette instruction est formalise par la syntaxe suivante :

Connatre ( Identifiant )// La valeur saisie au clavier par l'utilisateur sert initialiser // la variable spcifie par son identifiant.

Exemple : Connatre ( i )// A l'issue de cette instruction, i aura la valeur qui aura // t saisie au clavier par l'utilisateur.

On peut utiliser des termes prcisant l'opration d'entre souhaite : Saisir ( i ) SaisirClavier ( i ) On ne peut pas utiliser une instruction d'entre pour initialiser une variable qui a t dclare en tant que constante.

Restitution de donnesIl s'agit de l'action permettant de fournir, via un priphrique de sortie ( en gnral l'cran ) la valeur prise par une variable. On dit que l'on ralise une opration de sortie. Au sein d'un algorithme cette instruction est formalise grce la syntaxe suivante : Restituer ( Identifiant )// La valeur de la variable spcifie par son identifiant est // affiche l'cran.

On peut utiliser des termes prcisant l'opration de sortie souhaite : Afficher ( i )Page II

. 6/23

Algorithmie

Alain MILONE Algorithmie de baseImprimer ( i )

INFO/1 2006

V5

Exemple : Afficher ( i )// A l'issue de cette instruction, l'cran affiche la valeur de i.

Lorsque l'on souhaite restituer une phrase comportant des parties littrales ( = fixes ) et des parties dynamiques ( = valeurs prises par les variables au cours du traitement ), il faut "construire" le message afficher. Afficher("La moyenne de la classe est : _ ", Moyenne )La valeur de la variable Moyenne sera insre l'emplacement de ' _ ' // Si Moyenne vaut 16,2 le message affich sera : // La moyenne de la classe est : 16,2

Afficher ( "_ + _ = _ " , A , B , C

)

// Si A vaut 3, B vaut 2 et C vaut, aprs calcul, le message affich sera : // 3+2=5

AffectationEn dehors des oprations d'entres / sorties, incontournables, le reste de l'algorithme sera constitu par une succession d'oprations d'affectation. Laffectation consiste donner une valeur une variable en fonction de traitements unitaires divers. Dans la majorit des pseudo langages elle est formalise comme suit : x valeur La valeur fournie lors de l'affectation peut l'tre de diffrentes manires :x 2 une valeur littrale x y la valeur courante d'une autre variable x ( 3 * 2 ) / ( 5 * Y ) une valeur prise suite une valuation x x + 1 une valeur calcule partir de la valeur courante de la variable elle-mme x sin ( y ) une valeur fournie par un autre sous-programme. Il est trs important de comprendre que cette affectation est en fait ralise en 2 phases

successives : - Une phase "d'valuation" qui consiste raliser l'analyse et, le cas chant, le calcul de l'expression situe droite du symbole d'affectation ( ). Cette phase peut tre trs simple ( si cette partie est une valeur littrale ) mais peut tre aussi trs complexe si l'expression valuer comporte de nombreux arguments et/ou des appels des sous-programmes. - Si, et si seulement si, l'valuation a t couronne de succs, la valeur calcule est affecte la variable dsigne par son identifiant gauche de l'oprateur d'affectation.

A droite de l'oprateur d'afffectation , l'expression peut tre aussi complexe que le ncessite l'algorithme. A gauche il ne peut y avoir que l'identifiant d'une variable, c'est Page la . 7/23 dire une zone mmoire dans laquelle II valeur calcule sera stocke via l'affectation.

Algorithmie

Alain MILONE Algorithmie de base

INFO/1 2006

V5

x a+bc+dVariable Expression

En cas d'chec de l'valuation de l'expression situe droite de , la valeur courante de la variable n'est pas modifie. Des contrles d'adquation de types sont raliss lors de l'valuation puis lors de l'affectation proprement dite. Dans certains ouvrages on dsigne par right value l'expression valuer et par left value la variable rceptacle.

Il n'est pas possible de placer une variable dclare constante gauche de l'oprateur d'affectation ( du fait qu'elle n'est pas modifiable ).

Notation et utilisation d'un pointeur : Un pointeur est avant tout une variable. : Il faut le dclarer en tant que telle lorsque l'on veut en utiliser un. Nanmoins, il faut rajouter, au couple nom + type traditionnel, une information sur le type de variable susceptible d'tre "pointe" par le pointeur. On a donc une dclaration du type :

ou

Pointeur sur < type variable > NomPointeur NomPointeur : Pointeur sur Exemple : Pointeur sur entier Pt

Une fois le pointeur dclar, une zone mmoire est rserve. Il faut alors l' "initialiser" en lui fournissant l'adresse valide de la variable pointe ( dans l'exemple une variable entire Nb dclare au pralable ). Pt @Nb // Pt contient l'adresse de la variable NB

On peut alors accder la zone mmoire, via le pointeur, comme on le ferait en manipulant directement la donne. On utilise alors la notation qui signifie "contenu de la zone mmoire l'adresse Pt" ou "contenu de la variable pointe par Pt".

Pt 10 // 10 est plac dans la zone mmoire pointe par Pt, donc Nb = 10 Pt Pt + 5/* On ajoute 5 la valeur de la variable pointe et on stocke le rsultat dans la zone pointe. Nb = 15 */

Pt

Tout ce qui est ralisable avec l'identifiant Nb de la variable l'est avec le couple

Pt Pt + 5

Nb Nb + 5 Nb Pt + 5

L'instruction d'affectation est la "signature" d'un langage dit impratif. Elle montre que ces langages restent, malgr une filiation parfois complexe, proches de la machine et qu'ils modlisent son fonctionnement interne. Dans la notion d'affectation il y a en effet la notion de "stockage" d'une valeur ou d'un rsultat, Page II

. 8/23

Algorithmie

Alain MILONE

INFO/1 2006

V5

Algorithmie de base un emplacement prvu cet effet. Au niveau de la machine cela se traduit par un stockage dans un emplacement mmoire.

2.22 / Rgles formelles :Un algorithme est constitu d'une succession d'instructions qui sont, globalement, de 3 types : - Oprations d'entres ; - Oprations d'affectation ; - Oprations de sorties. On verra plus loin que cette succession d'instruction peut se raliser : - De faon squentielle : les instructions sont excutes les une aprs les autres. - De manire conditionnelle : les instructions sont excutes ou non en fonction du rsultat de tests. Afin d'amliorer la lisibilit du texte de l'algorithme, des dispositions particulires sont mises en pratique : 1. 2. 3. On n'crit qu'une seule instruction par ligne. On distingue les ventuelles diffrentes phases de l'algorithme en sparant celles-ci par des lignes blanches. On rdige des commentaires afin d'expliciter certaines instructions. Afin de distinguer les commentaires des instructions proprement dites, on fait prcder les lignes de commentaires par un symbole particulier ( par exemple : // ) ou alors on encadre le commentaire par des symboles ( par exemple : /* .. */ ).

Au final on a donc la structure gnrale d'un algorithme suivante : Algorithme identificateur Variables : Constantes : Dbut suite dinstructions Fin.

Facultatif

Bloc d'instructions : On appelle bloc d'instruction un ensemble d'instructions qui ralise une phase du traitement : Les instructions qui composent le bloc sont en quelque sorte lies entre elles pour raliser une partie "atomique" ( c'est dire non dissociable ) du traitement. Un bloc d'instruction est compos d'une instruction ( cas extrme ) une dizaine d'instructions. Au-del, il est prfrable de crer un sous-programme ralisant la fonctionnalit souhaite.

Page II

. 9/23

Algorithmie

Alain MILONE Algorithmie de base

INFO/1 2006

V5

2.3 : Les types de variables2.31 / Gnralits :Le typage des variables est une des grandes avances apportes par la programmation structure. Il a en fait deux rles diffrents mais complmentaires : - Il permet de catgoriser les diffrentes variables manipules par un programme selon des types dfinis ( caractres, entiers courts, entiers longs, rels, .... ) faisant partie intgrante du langage de programmation utilis ou selon des types crs par le programmeur pour les besoins spcifiques du programme. - Mettre en uvre des mcanismes de contrle des donnes manipules ( afin, entre autres, de na pas mlanger par inadvertance des variables de types incompatibles ). Le typage apporte plusieurs avantages : - Optimisation de l'occupation de la mmoire ( lors de l'excution, seule la place mmoire ncessaire la variable est alloue ). - Ralisation de contrles plus prcis sur les diffrentes variables manipules (vrification de la validit dune affectation de valeur entre deux variables, contrles ventuels de dbordement de capacit ) ; - Utilisation de pointeurs ; - Scurisation du code gnr. Les langages de programmation de haut niveau, structurs, permettent le typage des donnes. Cependant le typage est plus ou moins strict : un langage propose plus ou moins de types diffrents et les contrles qui sont raliss lors des affectations sont plus ou moins labors.

2.32 / Les diffrents types :Chaque langage propose une panoplie plus ou moins importante de types prdfinis. Certains langages offrent en plus des possibilits plus ou moins labores pour dfinir des types particuliers, spcifiques l'application.Certains langages, fortement typs, proposent une quantit impressionnante de types. Le langage Pascal dispose ainsi de plusieurs types scalaires, de types boolen, intervalle, numr,.... ainsi que de diffrents autres types. Le langage C, lui, ne propose rellement que 6 types de base ( char, short, int, long, float, double ).

On distingue donc : Les types prdfinis ( simples ou complexes ) : Ils sont des types reconnus directement par le langage de programmation et par ses utilitaires associs. Ils sont dsigns laide de mots rservs.Exemples : Les types int, short, float et char en langage C ; Les types integer, real, boolean, string en Pascal.

Les types dfinis par lutilisateur :Page II

. 10/23

Algorithmie

Alain MILONE

INFO/1 2006

V5

Algorithmie de base Des variables ce type ne peuvent tre dclares qu'aprs la dfinition pralable d'un nouveau nom de type et sa description. Une fois cela fait, le nom utilis pour cette dfinition devient un mot rserv.

2.321 - Les types simples :Ce sont les types prdfinis, scalaires ou non, participant directement la dfinition d'une variable. En algorithmie, o il s'agit avant tout de dcrire un traitement sans trop se proccuper de considrations techniques, on se contentera d'utiliser les types suivants : - Variables numriques : Entier ou rel. - Variables alphanumriques : Caractres ou chane de caractres. - Variables boolennes.Exemples : Variables : Entier i 2 Rel pi 3,14159 Caractre Car 'A' , Chane Message "Bonjour" Boolen Trouve Vrai

/* On utilise les ' ' pour spcifier la valeur d'une variable de type caractre et " " pour spcifier celle d'une chane de caractres pour les diffrencier d'ventuels noms de variable. En effet si on crivait, par exemple, Caractre Car A, cela voudrait dire que l'on affecte ( copie ) la valeur de la variable A ( ici non dclare ) la variable Car */

Dans le cas des valeurs numriques, on peut utiliser un spcificateur complmentaire permettant de savoir si la variable peut avoir des valeurs positives ou relatives. Entier positif Age// On ne pourra pas affecter de valeurs ngatives Age.

En rgle gnrale si le spcificateur "positif" ( ou "non sign" ) n'est pas utilis c'est que le nombre peut prendre des valeurs ngatives. Il n'est pas conseiller de dfinir un spcificateur "strictement positif" car aucun langage n'implmente un contrle direct sur cette plage de valeur ( il faut que le programmeur ralise un test complmentaire ).

Les variables boolennes sont des variables spcifiques qui ne peuvent prendre que deux valeurs : "vrai" ou "faux". Elles sont trs utilises en algorithmie, telles quelles ou lors de l'valuation de certaines expressions l'aide d'oprateurs logiques ( voir plus loin ).

Les variables boolennes sont issues du domaine de l'analyse mathmatique de la logique, invente par G.Boole, qui traduit en termes symboliques certaines fonctions du langage naturel et ramne les lois de la pense et du raisonnement la rsolution d'quations logiques.

Page II

. 11/23

Algorithmie

Alain MILONE Algorithmie de base

INFO/1 2006

V5

2.322 - Les tableaux :Les tableaux sont des regroupements de variables de mme type. Que celles-ci soient des variables de type simple ou de type complexe, prdfinies ou non. Ils permettent d'effectuer facilement des traitements sur des suites finies de variables de mme type. En utilisant un indice on peut accder une variable particulire stocke dans le tableau.Ex : tableau Tab [ 10 ] d'entiers // tab est le nom du tableau compos de 10 entiers Entier situ la place rfrence par 3 dans le tableau. C'est une variable part entire qui peut tre manipule comme telle. Au lieu d'avoir une dnomination spcifique ( = un nom ), elle est rfrence par sa place dans le tableau Tab. // La 4 case du tableau prend la valeur 5 // La variable A prend la valeur de la 2 case du tableau

Tab [ 3 ]

Tab [ 4 ] 5 A Tab [ 2 ]

Un des avantages du regroupement de variables de mme type au sein d'un tableau est que l'on est alors certains que ces dernires sont contigus en mmoire ( ce qui permet d'laborer des algorithmes trs performants ). Certains langages font dbuter l'indice du tableau 0 ( langage C ), d'autres 1 ou tout autre indice. Dans l'exemple prcdent tab [ 3 ] est la 4 variable du tableau en langage C alors que c'est, normalement, la 3 en Pascal.

Il est possible de dfinir des tableaux plusieurs dimensions. Trs pratiques dans certains cas ( calculs matriciels, etc. ) il ne faut pas en abuser...... l'esprit humain ayant du mal manipuler des tableaux n dimensions mme si les mathmatiques, et les langages de programmation, le permettent.tab [ 10 ] [ 5 ] d'entiers : tableaux de 10 lignes sur 5 colonnes d'entiers. tab [ 10 ][ 10 ][ 10 ] d'entiers : "cube" de dimension 10.

2.323 - Les structures :Le type "structure" ( que l'on appelle aussi enregistrement ) est un type dfini par l'utilisateur constitu par le regroupement en une seule entit de variables ( de types simples ou autres types structurs ). Les types structurs permettent de modliser certaines entits du monde rel qui ne sont pas modlisables l'aide de variables de types simples. L'utilisation d'un type structur, du fait qu'il s'agit d'un type dfini par l'utilisateur, impose une dclaration / utilisation en deux phases : 1- Dclaration / description du type structur souhait. 2- Utilisation de ce type par dclarations de variables ce type.

Programme MonProgramme Types : Structure PERSONNE : Chane NomPage II

. 12/23

Algorithmie

Alain MILONE Algorithmie de base Chane Prnom Entier positif Age Fin structure

INFO/1 2006

V5

/* Cette dclaration dfinit un type structur appel PERSONNE compos des champs Nom et Prenom, de type chane de caractres et dun champ Age de type entier . A partir de l le mot PERSONNE est un mot rserv */

Variables : PERSONNE Moi , UnAutre Entier I Pour accder aux diffrents composants de la variable Moi, de type PERSONNE, il suffit alors de les rfrencer l'aide de la notation dite "pointe". Moi . Nom "Martin" Moi . Prnom "Jean" Moi . Age 30 De mme, on peut raliser diffrentes oprations / affectations sur les diffrents composants de la structure l'aide de cette notation : Moi . Age Moi . Age + Par contre l'criture : 1// Moi a 31 ans.

UnAutre Moi

copie l'intgralit des diffrents composant d'une structure dans une autre ( sous rserve que les deux structures soient du mme type ).

Certains types structurs peuvent tre dfinis en utilisant des structures dfinies au pralable.

Programme MonProgramme Types : Structure ADRESSE Entier Num Chane Rue Chane CodePostal Chane Ville Fin structure Structure PERSONNE Chane Nom Chane Prnom Entier positif Age Caractre Sexe ADRESSE Adr Fin structure Variables : PERSONNE Moi Entier I Moi.Adr.Ville "Rennes"

Page II

. 13/23

Algorithmie

Alain MILONE Algorithmie de base

INFO/1 2006

V5

Les classes, propres la programmation objet, constituent une volution majeure des types structurs.

La plupart des types donnent une indication sur la taille mmoire qui sera occupe par la variable en mmoire : En langage C, le type char provoque lallocation de 1 octet, le type long 4 octets, etc. Par contre lutilisation de certains types correspond des allocations de zones mmoires dont la taille dpend de lenvironnement ( elle correspond la taille des registres utiliss ). En langage C, lutilisation dune variable de type int provoque lallocation dune zone mmoire de 2 octets sous DOS et de 4 octets sous Windows NT et ultrieur ou sous Unix. Le problme vient du fait que ce type est celui le plus frquemment utilis en C. Ce problme est en passe dtre rsolu avec la gnralisation des architectures 32 bits dans laquelle l'entier sera assimilable un 'long'.... mais les architectures 64 bits pointent l'horizon. Quant aux variables de type structur, leurs tailles totales devraient normalement correspondre la somme des tailles de leurs diffrents constituants. En fait ce nest pas souvent vrai car la plupart des compilateurs alignent les diffrents constituants sur des adresses mmoires paires ( pour des raisons de rapidit de lecture ). De fait si une structure contient des lments de taille impaire, la taille totale de la structure sera diffrente de celle de la somme de ses composants.

2.324 - Autres types dfinis par l'utilisateur :Certains langages de programmation permettent de dfinir d'autres types de variables ( par exemple des ensembles, des numrations, etc ). Ces possibilits tant trs spcifiques et diffrentes selon les langages, elles ne sont pas voques ici.

2.33 / Conversions de types :Un langage peut tre typ mais tre relativement permissif quant aux conversions. Celles-ci peuvent tre implicites ( lors daffectation entre deux variables de types diffrents ) ou explicites ( par transtypage ). Dautres nautorisent pratiquement aucune conversion de types.

La conversion de type n'est ralisable que sur des types simples. Il n'est pas possible de convertir des types complexes ( en particulier des structures ).

Les contrles de validit s'appuyant sur le type des variables manipules se font en fait deux niveaux diffrents : - Lors de l'valuation de l'expression situe droite de l'oprateur d'affectation. - Lors de l'affectation proprement dite.Page II

. 14/23

Algorithmie

Alain MILONE Algorithmie de base

INFO/1 2006

V5

La "conversion", lors de l'valuation ou de l'affectation, ne modifie pas rellement le types des variables impliques mais seulement celui des copies ralises dans les registres pour effectuer les valuations ou les affectations.

2 : Phase d'affectation avec conversions ( implicites ou explicites ) possibles.

A

B + C + .....

+ K

1 : Phase d'valuation de l'expression pendant laquelle des conversions ( implicites ou explicites ) sont ralises.

Pendant la phase d'valuation de l'expression, les diffrents composants sont convertis automatiquement, si besoin est, dans le type le plus complexe prsent dans l'expression ( c'est dire celui qui occupe le plus de place en mmoire ). Par exemple si seule la variable C est un rel, les valeurs de toutes les autres variables sont considres comme des nombres rels pour raliser l'valuation. Pendant la phase d'affectation, il s'agit de faire "rentrer" la valeur de l'expression value dans la zone mmoire reprsente par la variable rceptacle. Si l'expression value est d'un autre type que la variable rceptacle l'affectation sera possible ( avec les risques de "tronquage" qui en rsultent ) ou non en fonction du langage utilis.Le langage C est rput, en tous cas dans sa version de base, comme relativement peu typ ( on peut manipuler au sein dune mme instruction des variables de diffrents types et raliser de nombreuses conversions de type ) alors que les langages Pascal et ADA sont trs typs. Si la variable A est un entier court, cod sur 2 octets, et la variable B un entier long cod sur 4 octets les instructions suivantes pourront, ou ne pourront pas, tre ralises, selon la rigueur ou la permissivit du langage. A B B A Interdit dans un langage typage fort. Autoris, avec les risques inhrents, dans un langage typage faible ou non typ. Interdit dans un langage typage fort. Autoris dans un langage faible contrle de typage.

Les langages fortement typs permettent donc un contrle plus strict des diffrentes affectations et garantissent l'obtention de programmes plus fiables. Cependant ces contrles se rvlent parfois pnalisant. Il est en effet des cas o le programmeur doit crire des instructions mettant en uvre des conversions et/ ou des affectations qui sont normalement interdites. La plupart des langages proposent alors des oprateurs de transtypage ( en anglais : casting ) qui permettent de se tirer d'affaire.

Page II

. 15/23

Algorithmie

Alain MILONE

INFO/1 2006

V5

Algorithmie de base Le transtypage permet en effet de raliser une conversion explicite de type ( = due la volont du programmeur ) avec tous les risques d'erreur ( troncature en particulier ) que cela implique.Exemple : Si B est un rel et A un entier, certains langages n'autorisent pas l'instruction B A, alors qu'elle ne prsente manifestement aucun risque. On peut utiliser alors les possibilits de transtypage du langage on crivant l'instruction : B ( rel ) A Lors de l'analyse initiale et avant l'affectation, la valeur de A est stocke dans une variable temporaire code comme un rel. C'est cette variable qui sert l'affectation.

2.4 : Les oprateursDe nombreux oprateurs sont utiliss en algorithmie pour dcrire les traitements raliser. Ces oprateurs sont de plusieurs catgories distinctes.

2.41 / Oprateurs arithmtiques :On privilgie, dans la rdaction de l'algorithme, l'utilisation d'oprateurs les plus proches possibles de ceux utiliss en mathmatiques de manire ce que leur signification soit la plus vidente possible. On dispose donc des oprateurs d'addition, de soustraction, de multiplication et de division traditionnels. Toutefois si on utilise effectivement les oprateurs ' + ' et ' - ' sans modification, on utilise plutt le signe ' * ' pour la multiplication pour viter toute confusion avec la lettre ' x '. De mme on utilise en gnral le signe ' / ' pour dsigner la division.

L'oprateur '/' dfinit une "division entire". Entier A 5 Entier B 2 Reel C C A / B // C vaut 2. /* Pour obtenir la valeur 2,5 ( division relle ) il faut soit dclarer un des oprandes de type rel soit utiliser la possibilit offerte par le transtypage et faire, par exemple, C ( rel ) A / B */

En algorithmie, et plus gnralement en programmation, on utilise aussi souvent l'oprateur "Modulo" qui est le reste d'une division entire. Il est souvent not "Mod".X 5 Mod 2 // X vaut 1

2.42 / Oprateurs logiques :L'algorithmie fait un usage immodr des oprateurs logiques permettant de raliser toutes sortes de comparaisons entre diffrentes valeurs de variables.

Page II

. 16/23

Algorithmie

Alain MILONE

INFO/1 2006

V5

Algorithmie de base Dans ce domaine, il y a lieu de distinguer les oprateurs logiques traditionnels des oprateurs logiques boolens.

2.421 - Oprateurs logiques :Ce sont tous les oprateurs permettant de faire des comparaisons. On rutilise, en algorithmie, les oprateurs issus des mathmatiques. < , =, > ainsi que l'oprateur

Les variables de types caractres et chanes de caractres peuvent aussi tre ainsi compares, si on respecte les rgles suivantes : a < b < c < z maman < papa < pop < popa < popo/* Dans ce dernier cas il y a discrimination caractre par caractre en commenant par la gauche. Si le premier caractre d'un mot est infrieur au premier caractre du mot comparer, le premier mot est considr comme infrieur, qsuelle que soit sa longueur. Si le premier caractre des deux mots est le mme on ralise le test sur le 2 caractre et ainsi de suite jusqu' trouver un critre discriminant. Si un mot a les mmes caractres que le mot comparer mais est plus court, il est considr comme infiruer */

2.422 - Oprateurs logiques boolens :RAPPEL: Les quations logiques boolennes, bases de l'analyse boolenne, permettent la cration des circuits intgrs complexes composs de portes logiques. Une porte logique est un composant lectronique qui, en fonction de courants lectriques appliqus sur ces diffrentes entres, gnre ou non un courant sur sa sortie qui pourra tre analys. Ce qui permet de raliser une quation logique plus ou moins complexe. Le raisonnement algorithmique utilise quant lui principalement, pour modliser des propositions logiques qu'il va falloir tester, 3 oprateurs logiques de base : - "NON" ( ou inverse ou NO ) - "ET" ( ou AND), - "OU" ( ou OR ). Et un quatrime facultatif, le "OU Exclusif" ( ou XOR ).

Les "tables de vrit" de ces oprateurs sont les suivantes : AND OR XOR

A 0 1 0 0 0 1 0 1 0 1 0 0 1

A 1 1 1 0 1 0 0 1

A 1 1 0Page II

B

B

B

. 17/23

Algorithmie

Alain MILONE Algorithmie de base

INFO/1 2006

V5

Ces tableaux se lisent comme suit : Par exemple A AND B : Si A est vrai ( 1 ) et B est faux ( 0 ) alors A AND B est faux ( 0 ) Exemple : Si ( UnePersonne . Sexe = "F" ) ET ( UnePersonne . Age > 60 ) alors Afficher ( "Peut partir la retraite" ) Sinon Afficher ( "Au travail )

L'algbre boolenne est trs intuitive. Nanmoins elle recle quelques piges dont les principaux sont traduits par les quations de Morgan :Non ( A ET B ) ( Non A ) OU ( Non B ) Non ( A OU B ) ( Non A ) ET ( Non B ) Exemple : L'inverse de la proposition "Femme 20 ans" ) et non ( "Homme > 20 ans" ). Il suffit en effet d'tre un Homme ou d'avoir plus de 20 ans pour ne pas rentrer dans la catgorie "Femme < 20 ans".

2.5 : Structures de contrlePour permettre les enchanements contrls des diffrents traitements, l'approche structure dfinit plusieurs structures permettant de raliser, ou non, un traitement en fonction du rsultat un test. Bien que diffrentes dans leur criture selon le langage de programmation utilis elles se regroupent en deux familles :

2.51 / Les structures conditionnelles :Ces structures sont charges de raliser les enchanements de traitements en fonction du rsultat un test pralable ( condition ).

2.511 - Structure "Si" :Il s'agit de la structure la plus commune. Elle a la forme gnrale suivante : Si condition Alors Bloc dinstructions FinSi Si condition Alors Bloc dinstructions 1 Sinon Bloc dinstructions 2 Structure conditionnelle stricte : Si la condition est ralise ( est vraie ) alors les instructions du bloc sont ralises. Structure alternative : Si la condition est ralise ( est vraie ) alors les instructions du bloc 1 sont ralises. Si la condition nest pas ralise ( est fausse ) ce sont les instructions du bloc 2 qui sont excutes. Page II . 18/23

Algorithmie

Alain MILONE Algorithmie de base FinSi

INFO/1 2006

V5

Exemple : Si ( X < 10 ) alors X X * 2 Sinon X X / 2

Un bloc dinstructions peut ne contenir quune instruction. Il en comporte souvent

plusieurs dont, souvent, d'autres structures de contrle dfinissant d'autres blocs d'instruction imbriqus.

Dans tous les cas, lorsqu'on utilise une structure conditionnelle, le bloc dinstructions nest excut quune seule fois.

2.512 - Structure "Dans le cas o " :Certains langages, de plus en plus nombreux, proposent des structures conditionnelles gnralises permettant un "aiguillage" vers plusieurs traitements diffrents, gnralement exclusifs les uns des autres, en fonction de la valeur courante d'une variable teste. Ces structures volues, appeles "condition gnralise" ou plus prosaquement "aiguillage", peuvent gnralement tre traduites, en pseudo-langage, sous la forme : Dans le cas o x vaut : a : faire Bloc d'instructions 1 b : faire Bloc d'instructions 2 ......... n : faire Bloc d'instructions Y FinCas /* x est la variable teste ; a,b,n sont les valeurs pouvant tre prises par cette valeur */

Exemple : Dans le cas o ( i ) vaut : 1: faire Afficher ( "i vaut 1" ) 2: faire Afficher ( "i vaut 2 et est pair" ) etc fin cas

Cette structure est la seule qui ne s'appuie pas sur une condition logique mais sur la valeur prise par une variable ( de type entier ou de type caractre ).L'implmentation physique de cette structure conditionnelle varie assez fortement en fonction du langage de programmation utilis.

Page II

. 19/23

Algorithmie

Alain MILONE Algorithmie de base

INFO/1 2006

V5

La plupart des langages utilisent une possibilit 'dfaut' qui permet d'aiguiller le traitement vers un bloc d'instructions particulier qui est excut si la variable test ne prend pas une des valeurs explicitement indiques. Dans le cas o x vaut : a : faire Bloc d'instructions 1 b : faire Bloc d'instructions 2 ......... defaut : faire Bloc d'instructions Y FinCas

2.52 / Les structures rptitives :Ces structures, plus communment appeles boucles, permettent de raliser plusieurs fois une squence dinstructions en fonction du rsultat positif d'un test.

Condition de sortie :On appelle condition de sortie la condition contrlant la structure itrative. Cette condition peut tre simple ( exemple : i

0 ) mais est souvent plus complexe formule ( exemple : ( i = 0 et j

10 ) ou k = 3 )).

Le problme de la formulation correcte de la condition de sortie est un des plus important qua rsoudre le programmeur. De fait, lors de la ralisation du programme il est parfois prfrable de commencer par raliser une boucle neffectuant aucun traitement, de manire vrifier la validit du test ralis. Ce contrle effectu le programmeur peut alors se proccuper dimplmenter le traitement adquat lintrieur de la boucle.

2.521 - Structure "Tant que" :Il s'agit de la structure la plus frquente car elle drive le plus directement d'un processus de conception. Elle a la forme suivante : Tant que condition faire Bloc dinstructions fait// Le bloc d'instructions est excut tant que la condition est ralise

Exemple :I 10 ; Tant que ( I > 0 ) faire Afficher ( I ) I I 1 fait // Il y a affichage des valeurs 10, 9, 8, 7, 6, 5, 4, 3, 2, 1

Page II

. 20/23

Algorithmie

Alain MILONE Algorithmie de base

INFO/1 2006

V5

2.522 - Structure "Faire . tant que" :Il s'agit d'une structure drive de la prcdente : Faire Bloc dinstructions Tant que condition ralise

Sous une apparente similitude, ces deux formes diffrent sur un point important : dans la deuxime structure le bloc dinstructions est au moins excut une fois (avant le test de la condition ) alors quil peut ne jamais ltre dans la premire formule.

Sauf dans des cas trs particuliers denvironnement multitches, il faut sassurer que le traitement dcrit dans le bloc dinstructions modifie, un moment donn, la variable ( ou une des variables ) entrant dans la formulation de la condition de sortie ... sinon le programme entre dans une "boucle infinie". Avec toutes les consquences que cela peut avoir ( Plantage assur ).

I 10 ; Tant que ( I > 0 ) faire Afficher ( I ) Fait /* "boucle infinie" car I n'tant pas modifi au sein du bloc d'instructions, le test est toujours vrifi */

Remarque subtile mais qui montre bien le lien qui doit exister entre l'algorithmie et les langages de programmation : Rien n'interdit de proposer une structure formalise comme suit : Faire .. Jusqu' condition ralise Par exemple : Faire ii+1 Jusqu' i = 10 Le problme vient du fait qu'aucun langage de programmation n'implmente directement cette structure. Il ne sert donc rien de l'utiliser dans un algorithme car le programmeur sera dans l'obligation de modifier la proposition pour la faire cadrer avec les possibilits de son langage ( avec les possibilits d'erreur que cela engendre ) . Il sera dans l'obligation de raliser un codage correspondant : Faire ii+1 tant que i < 10

3.523 - Structure "Pour" :Page II

. 21/23

Algorithmie

Alain MILONE

INFO/1 2006

V5

Algorithmie de base Dans certains cas, lorsque l'on sait prcisment le nombre d'itration que devra accomplir l'algorithme, on peut utiliser une structure itrative simplifie ( et historiquement la premire mise en uvre ), la boucle "Pour". Pour I de X Y faire Bloc d'instructions fait Dans ce cas, on n'a pas se proccuper de faire voluer, par une instruction particulire, la variable I au sein du bloc d'instructions. En gnral X vaut 0 ou 1 et le pas d'incrmentation de I est de 1. On peut cependant spcifier le pas d'incrmentation : Pour I de 2 20 au pas de 2 faire Bloc d'instructions Fait Par ailleurs il faut que X soit infrieur Y, sauf en cas de dcrmentation : Pour I de 100 0 au pas de -1 faire Bloc d'instructions Fait

Page II

. 22/23

Algorithmie

Alain MILONE Algorithmie de base

INFO/1 2006

V5

Page II

. 23/23