La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

CSI3525: Concepts des Langages de Programmation Notes # 10: Controle ( Lire Chapitre 7 )

Présentations similaires


Présentation au sujet: "CSI3525: Concepts des Langages de Programmation Notes # 10: Controle ( Lire Chapitre 7 )"— Transcription de la présentation:

1 CSI3525: Concepts des Langages de Programmation Notes # 10: Controle ( Lire Chapitre 7 )

2 2 Plan du Cours Introduction et mecanismes de controle de base Sequences d’instructions Selections: Simples et Multiples Repetitions: a Test Logique et a compteur L’Instruction Goto Commandes Gardees.22

3 3 Introduction Afin de rendre la programmation utile et flexible, il faut, en plus des affectations, des intructions de controles. C’est a dire: Un moyen de choisir entre des alternatives de code differentes, Un moyen de repeter des collections d’instructions. De plus, afin de faciliter la conception des instruction de controle, il faut un mecanisme qui permette de former des collections d’instructions.

4 4 Mecanismes de Structuration de Base Il y a, donc, trois mecanismes de structuration d’instruction fondamentaux et indispensables: Les instructions composees/sequences: begin-end Les instructions de selection/conditionnelles: if- then-else Les repetitions/boucles: while-do Ces trois mecanismes peuvent etre utilises pour construire toute instruction structuree. De meme, tous les autres mecanismes de structuration peuvent etre derives de ces mecanismes de base. En fait, il a ete prouve que seulement 2 mecanismes de structuration sont necessaires: les gotos et les selections a une branche. Neanmoins, les gotos ne permettent pas de style aussi elegants que les begin- end, if-then-else et while-do.

5 5 Examples de Derivation d’autres Mecanismes de Structuration if C then S  if C then S else null repeat S until C  S; while ~C do S for i:= lo to hi do S  i:= lo; while i<= hi do begin S; i := succ(i) end case i of C1: S1; ….  if i=C1 then S1 else …

6 6 Sequences L’instruction composee a tout d’abord ete introduite en Algol 60 sous la forme: begin … end L’idee d’une instruction composee est que plusieures instructions peuvent etre abstraites en une seule. Dans certains langages, de plus des instrctions composees, il peut y avoir des declarations de donnees. Dans ce cas on parle de bloc. Algol, Pascal, Ada: begin … end; C: { … }; Algol 68: if-fi, do-od, case-esac, etc. Fortran (vieux): pas d’instructions composees; Prolog: instruction composee implicite: a :- b, c, d.

7 7 Selection En Pascal, il peut y avoir une ambiguite avec les if- then-else emboites:if C1 then if C2 then S1 else S2 a quoi s’attache le “else”? Reponse: au “then” le plus proche. En Algol-60 pas d’ambiguite est possible car seulement une instruction simple est permise apres “then”. En Modula-2 et en Ada, il n’y a pas d’ambiguite non plus car les if-then-else instructions doivent etres terminees par un end (Modula-2) ou end if (Ada). En Ada, il existe aussi le elsif, pour les if-then-else emboites.

8 8 Formes Speciales de Selection Le goto calcule en Fortran (primitif, car pas d’encapsulation): go to (label1, … labeln), expression En C, l’instruction switch similaire au goto calcule: switch (expression){ case const1: S1; … case constn: Sn; default: Sn+1} Probleme: une fois l’instruction Si execute, le controle va a Si+1 a moins que des “break”s ne soient utilises.

9 9 Formes Speciales de Selection (Continue) Pascal Case expression of constList1: S1; … constListn: Sn; else Sn+1 end Ada Case espression is when constList1 => S1; … when consListn => Sn; when others => Sn+1; end case En Pascal et en Ada, il y a les instructions de cas dans lesquels chaques cas est separe (on n’a pas besoin de “breaks” comme en C).

10 10 Selection en Prolog En Prolog, plutot que d’etre conduit par ce qui est vrai ou faux, la selection est conduite par le succes ou l’insucces. La selection est implicite dans le backtracking. eat_or_drink(Stuff) :- solid(Stuff), eat(Stuff). eat_or_dring(Stuff) :- liquid(Stuff), drink(Stuff).

11 11 Representation Graphique de la selection: flowcharts : Ceci represente un test: Est-ce que C est vrai? Si oui, prendre le chemin de gauche. Sinon, prendre le chemin de droite. C OuiNon S : Ceci represente une instruction S ou bien une sequence d’instructions S.

12 12 Iterations a test logique Il y a deux variations sur les iterations: les iterations pre-test et les iterations post-test. En Pascal: Pre-test: while C do S; Post-test: repeat S until C; En C: Pre-test: while (expr) S; Post-test: do S while (expr); En Ada: Pre-test: while C loop S end loop; Post-test: Non-definie

13 13 Iterations a test logique (Continue) En Ada, le prefix “while C” est une extension de l’instruction d’teration de base: loop S end loop Un autre prefix est: “for i in range” L’instruction de de base sans prefix doit etre terminee a l’interieur de la boucle avec une instruction de sortie: “exit” Cette instruction est ou bien: exit; --- sans condition exit when C; En fait, le prefix while est une abbreviation de l’instruction de base “loop” avec un “exit when”...

14 14 Iterations a Compteur Les iterations a compteur (for loops) sont apparu plus tot, historiquement, que les iterations a test logique. Elles sont aussi moins generales. On peut lesvoir, sous des formes differentes, en: Fortran Algol 60 Pascal Ada C En Prolog et Scheme, par contre, il n’y a pas d’terations, mais l’iteration existe sous forme de recursion (cela peut, d’ailleurs, aussi etre fait dans les langages imperatif qui permettent la recursion)

15 15 L’instruction Goto L’instruction goto est un transfer de controle sans restriction a un point different du programme. C’est le seul mecanisme de transfer present dans les langages de bas-niveau. Le mecanisme est dangereux, mauvais pour la lisibilite et doit etre evite. Les structure de controle plus avancee permettent de faire beaucoup de choses typiques et des chose atypiques egalement. De plus, le goto peut laisser des choses inachevees derriere lui. Certains langages ont tout de meme conserve le goto, mais restrictent son usage et le rendent peu commode a utiliser.

16 16 Commandes Gardees Il existe une forme de selection et de boucle completement differente: les commandes gardees [Dijkstra, 1975]. L’idee d’une commande gardee est la suivante: etant donne plusieurs choix: 1. Si aucun de ces choix n’est possible, il y aura une erreur a l’execution. 2. Si un seul de ces choix est possible, l’instruction correspondant a ce choix est executee. 3. Si plus d’un choix est possible, l’un de ces choix est choisi de facon non-determine (au hasard) et l’instruction correspondant a ce choix est executee.

17 17 Commandes Gardees (Continue) La motivation pour ces commandes etait de creer une methodologie qui permettait de verifier la validite d’un programme pendant son developpement plutot qu’une fois que le programme etait termine. Cette technologie n’a pas ete adoptee a part dans le cas de calculs simultanes. Ada permet de tels calculs et, donc, inclut les commandes gardees. Les commandes gardees sont elegantes a utiliser lorsqu’un choix doit etre fait entre plusieures possibilites mais que chacunes de ces possibilites ont la meme priorite: il faut, a ce moment la, une construction qui permettent de choisir au hasard parmi les possibilites diverses.

18 18 Commandes Gardees: Exemples en Ada I if Garde_1  Instructions_1 [] Garde_2  Instructions_2 [] …. [] Garde_k  Instructions_k fi  Les gardes sont evalues en parallele, l’un des garde qui est vrai est choisi au hasard, et les instructions y correspondant sont executees.  Si aucun garde n’est vrai, il y aura une erreur au moment de l’execution

19 19 Commandes Gardees: Exemples en Ada II do Garde_1  Instructions_1 [] Garde_2  Instructions_2 [] …. [] Garde_m  Instructions_m od  Repeter: evaluer tous les gardes en parallele, choisir au hasard parmi les gardes qui sont vrai, executer les instructions correspondant a ce garde

20 20 Commandes Gardees: Exemples en Ada III Comment exprimer les instructions suivantes avec des commandes gardees: If-then-else If-then Case-of While-do Repeat-until


Télécharger ppt "CSI3525: Concepts des Langages de Programmation Notes # 10: Controle ( Lire Chapitre 7 )"

Présentations similaires


Annonces Google