|
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Bienvenue dans le fabuleux monde du Pascal ! Ensemble, nous allons découvrir ce langage de programmation créé spécialement pour l'enseignement par le professeur Wirth. Les bases Et pour commencer, un peu de culture générale sur ce langage (ne vous inquiétez pas, ce ne sera pas long)... Le Pascal est un langage évolué (pour nous) développé comme une aide à la programmation des ordinateurs suivant une approche dite de "programmation structurée". Il a été créé par le professeur Wirth (également père du Modula II, qui descend du Pascal). Il est un des langages les plus utilisés (si ce n'est le plus utilisé) et peut servir aussi bien pour des applications système (par exemple, l'écriture du système Mac), que pour la programmation éducative et personnelle. Pascal existe sur de nombreuses machines (MS-DOS, Mac, UNIX) ce qui permet une certaine portabilité (il existe un standard décrit dans le livre de Wirth et Jensen : Pascal User Manual and Report). Le Pascal possède de nombreux avantages, dont ceux de structurer la pensée, de faciliter l'implémentation d'algorithmes, de simplifier la correction d'un programme (si on se borne à respecter quelques règles de présentation et d'écriture). De plus, le langage est rapidement assimilable et permet d'acquérir une méthodologie qui vous sera utile dans d'autres langages plus laxistes. Et comme pour tout langage, il dépend de son implémentation sur machine. Pour nous, ce sera le très célèbre PCQ de Patrick Quaid. Vous pourrez trouver ce compilateur sur la disquette Fish 339. En résumé, nous avons une disquette nommée PCQ: devant contenir au moins les répertoires et fichiers suivants :
Quelques notes sur le compilateur PCQ : il n'est pas tout à fait standard, mais Patrick Quaid a importé des facilités (procédures et autres conventions) du Turbo-Pascal de Borland et du Quick Pascal de Microsoft que l'on trouve dans le monde MS-DOS, ainsi que certaines du Modula II. Le source Pascal est traduit en assembleur et produit un fichier assez gros. Si vous avez de la mémoire (1 Mo minimum), utilisez le RAM Disk. Remarques importantes : si vous jonglez avec les minuscules et les majuscules, sachez qu'en Pascal, elles sont équivalentes : Toto = TOTO = TotO. Mais les caractères accentués, eux, ne le sont pas et je ne les recommande pas. Par la suite, nous supposerons que vous connaissez tout ce qui est externe au Pascal, et même la façon de compiler, d'éditer un texte et d'exécuter un programme, car tout ceci dépend du système d'exploitation et ce n'est pas le but de cette initiation. Pour réussir quelque chose en Pascal, il faut pouvoir écrire un programme. Un programme est un texte, comme celui que vous lisez en ce moment même, mais il obéit à des règles bien précises, autant sur le vocabulaire que sur la syntaxe (et c'est là toute la difficulté !). Pour débuter cette initiation, voici un petit exemple que nous allons étudier (accrochez-vous !).
Tapez, sauvez, compilez puis exécutez (non pas au fusil !) ce programme et, ô joie, le texte "Vive AMIGA !" apparaît sur l'écran. Vous aurez deviné le rôle du programme, ce que l'on nomme sa spécification : "afficher un texte chauvin sur la plus belle des bécanes". Ainsi, votre prochaine mission, si vous l'acceptez, sera de faire l'inverse : à partir d'une spécification, vous produirez un texte Pascal équivalent. Étude du programme Séquence description Le premier mot du texte est "PROGRAM" suivit du nom du programme et d'un point-virgule, puis du mot "BEGIN" puis un grand mot "writeln('Vive AMIGA !);", un texte entre accolades et enfin, le mot "END" avec un point. Séquence explications Nous sommes en présence de ce que nous nommerons un bloc. Il commence au mot "PROGRAM", qui signifie que tout ce qui suit forme un programme. Le mot "Premier Exemple" est en fait un identificateur : une suite (ou plutôt une séquence, car le sens a de l'importance) de lettres et du signe de soulignement "_". Le point-virgule termine ce que nous appellerons l'en-tête du bloc (ici, le bloc programme). Après cet en-tête, nous avons une grande phrase commençant par "BEGIN" et finissant par "END". Cette partie est la zone (séquence, ou segment) d'instructions ; elle sera exécutée à chaque appel du programme. La seule chose qui semble compter est donc, en fait, le fameux grand mot dont seul ce qui est entre quotes (les Français disent apostrophes) est affiché. C'est ce que l'on appelle une constante chaîne de caractères. Le premier sous-mot est en fait l'appel d'une procédure qui porte le nom de "writeln". Une procédure est le résumé d'une séquence d'instructions. A chaque référence de ce nom (un appel), cette séquence sera exécutée. Dans le cas de notre exemple, la procédure est appelée avec un argument, qui est la chaîne de caractères. La spécification de "writeln" est : "envoie sur la sortie standard les arguments sous forme de chaînes ASCII avec un retour chariot tout à la fin". Cette procédure est prédéfinie, ce qui nous évite de le faire, car il existe une règle importante en Pascal : tout ce qui est utilisé doit être défini plus haut dans le texte. La règle n'est pas complète et nous verrons un peu plus tard comment définir quelque chose (on dira "définir un objet [du programme]"). J'ai volontairement passé sous silence la cinquième ligne (celle avec des accolades) parce que j'ai joué au compilateur : tout ce qui est mis entre les signes "{" et "}" est ignoré (à l'exception des directives de compilation) et le tout est considéré comme un séparateur (comme un blanc ou une tabulation). En Pascal, il est toujours bon de commenter un programme afin de le comprendre quelques mois plus tard. De ce que nous venons de voir, nous déduisons que le plus court programme Pascal qui soit est le suivant :
Si vous le compilez, vous verrez que le source produit par PCQ et assemblé par A68K est de 62 lignes et que le code final est de 2048 octets (2 ko tout juste) en mémoire (2752 sur disque). Une autre constatation : les retour-chariots équivalent à un simple séparateur comme les commentaires, les espaces, les tabulations. Le seul séparateur d'instructions est le point-virgule. Mais une question s'impose "qu'est-ce qu'une instruction ?". Les instructions Une instruction est un ordre Pascal qui sera compilé sous forme de code machine exécutable (en opposition aux données qui sont les objets manipulés par le programme). Elle peut être une affectation, un appel de procédure, ou un contrôle du flux d'exécution. Nous avons déjà vu l'appel de procédure. Un résumé de sa syntaxe générale serait : le nom de la procédure à appeler suivi, si nécessaire, d'une parenthèse ouvrante, d'une séquence d'expressions (calcul au sens large) séparées par des virgules (les arguments) et une parenthèse fermante. Quelques exemples avec la procédure writeln (qui n'a pas un nombre d'arguments fixe) :
Dans un segment d'instructions, on peut mettre plusieurs instructions à la suite, que l'on sépare par un point-virgule comme :
Remarquez que le dernier appel de fonction n'a pas de point-virgule du fait que "END" est considéré comme la fin d'une instruction. En Pascal, le couple "BEGIN...END" (où les trois points représentent une séquence d'instructions) équivaut à une seule instruction. Donc, nous pouvons aussi avoir, en reprenant l'exemple ci-dessus :
Dans cet exemple, cette technique n'est pas très pratique, mais pour certaines formes d'expression où une seule instruction est autorisée, il est très utile de l'étendre de la sorte. Nous ne verrons pas tout de suite ces expressions car cela dépasse le cadre de cet article. Les variables Les variables sont des objets qui sont manipulés par le segment d'instructions. Une variable est une place réservée en mémoire dans laquelle on range des valeurs susceptibles de changer dans le temps. Le compilateur utilise une méthode pour coder cette valeur, méthode différente pour chaque type de variable. En informatique, une variable est souvent représentée par le quadruplet nom/type/portée/adresse. Le nom permet simplement de référencer la variable (comme pour les procédures). Le type indique la méthode de stockage utilisée par le compilateur (qui est le plus souvent transparente au programmeur), ainsi que les opérations possibles sur cette variable. La portée indique en quel(s) endroit(s) du programme la variable est connue et donc référençable. C'est l'un des principes fondamentaux du Pascal, sur lequel nous reviendrons en temps et en heure. Enfin, l'adresse de la variable indique tout simplement où dans la mémoire de l'ordinateur elle est stockée. Comme précisé plus haut, pour utiliser un objet quelconque, il faut d'abord le déclarer. Donc... Les déclarations Certains types de variables sont prédéfinis en Pascal. Nous les étudierons le moment venu. Pour l'instant, sachez seulement que la forme syntaxique de la déclaration de variable en Pascal est :
Où "Identificateur" est le nom de la variable, et "type" le nom du type de la variable. Le mot "VAR" indique au compilateur que ce qui suit est une zone de déclarations de variables (car il peut y en avoir plusieurs à la suite). Un exemple pour fixer les idées.
Dans un programme Pascal, il faut mettre toute déclaration entre l'en-tête et le mot "BEGIN". Cette zone est appelée (devinez ?) zone de déclarations locales. Pourquoi locales ? Parce que les variables ne sont connues que du programme (et pas des autres, na !). Bon, à ce niveau, on peut oublier le local, mais on touche là l'une des difficultés du Pascal (ce que l'on nomme les "effets de bord" et la "localité"). Encore un petit programme, pour clarifier la situation.
Bon, on s'arrêtera là pour aujourd'hui, ça fait déjà beaucoup de notions nouvelles à assimiler d'un coup : variables, architecture d'un programme simple (trop simple pour certains, je sais !), type integer et procédure writeln... Le mois prochain, on reprendra le tout mais avec plus de précision et on avancera un peu plus dans la pratique. En attendant, je vous laisse un petit devoir : trouvez la spécification du programme suivant.
Bye et au mois prochain, pour de nouvelles z'aventures Pascalissimes.
|