Obligement - L'Amiga au maximum

Samedi 20 avril 2024 - 00:52  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z,
ALL


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


Programmation : Pascal - Initiation
(Article écrit par Olivier Garrigues et extrait d'Amiga News Tech - janvier 1992)


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 :
  • c (dir)
  • A68k
  • Az (ou tout autre éditeur de votre choix)
  • BLink
  • Pascal
  • include (dir)
  • les "i" du Pascal
  • pcq.lib
Pour compiler, j'utilise le script de Pascal Amiable (à l'époque) que je nomme "make".

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 !).

PROGRAM Premier Exemple;
BEGIN
  writeln('Vive AMIGA !')
  { Whaou, l'exemple ! }
END.

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 :

PROGRAM plusPetit;
BEGIN
END.

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) :

writeln;
writeln('toto');
writeln ('toto', 'mon héro');

Dans un segment d'instructions, on peut mettre plusieurs instructions à la suite, que l'on sépare par un point-virgule comme :

BEGIN   {Seul le segment d'instruction est donné }
  writeln('on ne change pas de procédure');
  writeln('toujours ce bon writeln');
  writeln   {sans argument cette fois on passe simplement à la ligne }
END.

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 :

BEGIN  {Seul le segment d'instruction est donné }
  Begin
    writeln('on ne change pas de procédure');
    writeln('toujours ce bon writeln')
  End;  {remarquez le point-virgule indiquant la fin d'une instruction }
  writeln; {le point-virgule n'est pas autorisé devant un end
           mais beaucoup de compilateurs dont PCQ l'acceptent } 
END.

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 :

VAR Identificateur type;

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.

VAR UnEntier : integer ;
{ déclaration de la variable "UNENTIER" du type entier }

VAR UnAutre, PuisUnAutre : integer ;
{ déclaration multiple de variable de même type }

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.

PROGRAM Essai 4;

var UnPetitNbre integer ; { déclaration de UNPETIT de type entier }

BEGIN
  UnPetitNbre := 1 + 1 ;
  { on affecte à la variable UnPetit la valeur 1+1 (1+1 est de
    même type qu'UNPETIT, c-à-d integer) }

  writeln ('le résultat de 1 + 1 est ',UnPetitNbre);

  { L'aventage de certains types prédéfinis est qu'ils peuvent
    être affichés sans difficulté supplémentaire }

END.

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.

Program Pas_Encore_de_Specification;

var age,date, cetteAnnee : integer;

BEGIN
  write ('Quel est-on âge, mon petit ? _');
  readln (age);
  writeln(' Ho tu ne fais pas tes ',age,' ans, mon grand !');

  { avouez que je commence fort, non ? }

  write ('Quel est ton année de naissance :');
  readln (date);
  cetteAnnee := age + date;
  { additionne la valeur de la variable age avec celle
    de date et la stocke dans la variable CETTEANNEE }
  { en gros, je complique la mathématique }
  writeln ('On ne serait pas en ',CetteAnnee,' ?');
  { qui dit que l'informatique est très intellectuel ? }
END.

Bye et au mois prochain, pour de nouvelles z'aventures Pascalissimes.


[Retour en haut] / [Retour aux articles] [Article suivant]