Le Sommaire du Quasar Net

Le Turbo Pascal

Il serait intéressant d'ajouter une section présentant les outils de développement Turbo Pascal sur CPC.

Je sais bien que le Turbo Pascal est une denrée rare sur CPC, mais je pense qu'il ne faut pas pour autant le délaisser. Ça y est, convaincus ? Alors on y va !

Les outils

→ Le Turbo Pascal 3 sous CP/M

(à développer)

Initiation

Basé sur l'article publié dans Quasar CPC numéro 1, Initiation au Turbo Pascal, par OffseT.

Préliminaires

Primo, vous devez savoir que tout programme en Turbo Pascal commence par la commande “PROGRAM nom;” et que chaque instruction doit se terminer par un ”;”. De plus, on doit déclarer ses variables en début de programme gràce à la commande “VAR variable:type;”.

Aussi fort que possible Ah ! Le type, oui, voici les plus simples :

  • INTEGER : entier,
  • REAL : réel,
  • CHAR : caractère,
  • STRING x : chaîne de caractères de longueur x
  • BOOLEAN : bouléen.

Après la déclaration des variables, il vous faut un BEGIN, pas de ”;” ici (ça n'est pas considéré comme une instruction). Ensuite, c'est parti pour le programme ! Mais attention, à la fin, il faut un END..

Ouf, après ces quelques notions de base, je m'en vais vous expliquer quelques commandes :

  • WRITE(ce qu'il y a à écrire) : cette instruction fonctionne comme le PRINT du BASIC mis à part que les chaînes de caractères seront placées entre ”'” (simple quote).
  • GOTOXY(coordonnée X, coordonnée Y) : alors là, pas de problème, c'est comme LOCATE !
  • IF condition THEN … ELSE … : ici, no comment, hors mis le fait qu'il ne doit pas y avoir de ”;” entre le IF et le THEN et, s'il y a un ELSE, il n'en faut pas non plus avant.
  • REPEAT … UNTIL condition : bon, je suis obligé de tout vous expliquer vu que ça n'a pas d'équivalent en BASIC. Le Turbo Pascal va exécuter le morceau de programe situé entre les deux bornes jusqu'à ce que la condition suivant le UNTIL soit vraie.
  • KEYPRESSED : c'est une fonction qui rend vrai si une touche est pressée et faux dans la cas contraire.
  • CLRSCR : c'est exactement comme le CLS du BASIC.

Ce sera tout pour les commandes pour le moment. Par contre, vous devez savoir que pour les attributions de variables, on ne joue pas avec le ”=” du Basic qui est rûservé aux conditions, mais plutôt avec un étrange ”:=” qui se lit “reçoit” (ex : pif:='paf').

Dès lors, je vous conseille de jeter un coup d'oeil sur le listing de ce cours qui fait rebondir une lettre sur les bords de l'écran en se servant exclusivement de ce que je viens d'expliquer.

Listing : exemple élémentaire

Télécharger le listing au format ASCII 7 bits (CP/M)

Program Exemple;          (* Introduction du programme *)
Var a,b,x,y:Integer;      (* Déclaration des variables *)
Begin                     (* On commence... *)
Clrscr;                   (* Comme CLS, on efface l'{cran *)
x:=10;                    (* x reçoit la valeur 10 *)
y:=11;                    (* y reçoit la valeur 11 *)
a:=1;                     (* Vous m'avez compris... *)
b:=1;                     (* Idem *)
Repeat                    (* Répéter... *)
 x:=x+a;                   (* On ajoute a à x *)
 y:=y+b;                   (* On ajoute b à y *)
 If x>79 Then a:=-1;       (* On teste l'arrivée sur le bord droit *)
 If x<2 Then a:=1;         (* On teste l'arrivée sur le bord gauche *)
 If y>24 Then b:=-1;       (* On teste l'arrivée en bas *)
 If y<2 Then b:=1;         (* On teste l'arrivée en haut *)
 Gotoxy(x,y);Write('a');   (* On affiche 'a' au coordonees x et y *)
 Gotoxy(x,y);Write(' ');   (* On affiche un blanc aux mêmes coordonées *)
 Until Keypressed;         (* Jusqu'à ce qu'une touche soit pressée *)
End.                      (* On arrête la pour cette fois *)

NOTA : entre ”(*” et “*)”, ce sont les remarques comme le ”'” en Basic ou le ”;” en Assembleur.

  • a est la variable qui g{n}re la progression de la lettre en x.
  • b c'est pareil mais pour y.
  • x et y sont les coordonées de la balle.

Gestion des fichiers

Basé sur l'article publié dans Quasar CPC numéro 1, Perfectionnement au Turbo Pascal, par OffseT.

Comme je l'ai entendu dire autour de moi, ce qu'il vous manque en Turbo Pascal, c'est la manipulation des fichiers. Donc, je vais de ce pas commencer par vous éclairer sur la gestion des fichiers en Turbo Pascal 3.

Mises au point

Je vais tout d'abord définir ce qu'est un fichier : c'est un ensemble de données de même type dont l'unité est une fiche (ou un enregistrement). Bon, ça c'est le barratin classique, rien de bien compliqué. Donc, pour les contemporains du diplodocus, je vais encore affiner cette définition : un fichier existe, une fois ouvert, en mémoire (tampon ou buffer) et sur la disquette (si, si, je vous assure !).

Trève de généralités simplistes. En Turbo Pascal, ils (les fichiers) s'utilisent au moyen d'un nom (de fichier) et d'une variable de type fichier (nom logique). Cette variable se déclarera à l'aide du type ”FILE OF type” et l'instruction ”ASSIGN(nom logique, nom physique)” permettra de la relier au fichier physique (sur la disquette). Je sais, je suis pas clair, mais c'est comme ça.

Les commandes de base

Maintenant que vous savez mettre en liaison la variable et son fichier, il faudrait peut-être voir à ouvrir ce petit fichier. Eh bien, là c'est très simple : deux instructions sont à votre disposition. D'abord il y a ”REWRITE(nom logique)” qui ouvre le fichier en écriture en l'initialisant totalement (c'est comme le OPENOUT du Basic). Ensuite, quelque chose de déjà plus intéressant, la commande ”RESET(nom logique)”. Alors cette instruction, c'est ce que j'appellerais le luxe et ce, pour deux raisons. Primo, cette commande ouvre le fichier en lecture (comme OPENIN). Deuzio, elle l'ouvre aussi en écriture sans en effacer le contenu. Ainsi, si vous faites un RESET vous pourrez rajouter des données ou même changer seulement une fiche sans toucher au reste du fichier ! Il y a tout de même une restriction, le fichier doit déjà exister sur la disquette, cette commande ne le créera pas si ce n'est pas le cas. Et, une dernière commande à connaître, le ”CLOSE(nom logique)” qui ferme le fichier.

Le vif du sujet

C'est bien beau de savoir configurer, ouvrir et fermer un fichier mais vous ameriez sans doute savoir y écrire et y lire non ? Et bien c'est très simple, vous connaissez déjà les deux commandes qui réalisent ces opérations :

  • WRITE(nom logique, donnée) : c'est l'équivalent du PRINT#9,donnée en BASIC,
  • READ(nom logique, variable) : quant à elle réagira comme INPUT#9,variable.

Bon, je vous ai tout dit, du moins pour les notions de base sur les fichiers. Car leur utilisation en Turbo Pascal est beaucoup plus souple qu'en Basic. Vous trouverez ci-dessous un petit programme d'exemple qui utilise les quelques commandes que je vous ai expliquées plus quelques autres dont le fonctionnement y est établi en remarque.

Listing : gestion des fichiers

Télécharger le listing au format ASCII 7 bits (CP/M)

Program Exemple;
Var fichier:File Of String 20 ;          (* Déclaration des variables *)
    numero:Integer;
    nom:String 20 ;
 
Procedure Liste;                         (* Procédure de listage *)
Var pointeur:Integer;
Begin
Writeln('Voici le contenu du fichier : ');
Seek(fichier,0);
 
(* Positionnement du pointeur sur la fiche 0 avec *)
(* Seek(nom logique, position) *)
 
While Not Eof(fichier) Do
 
(* Eof(nom logique) fonctionne comme le Eof du Basic, c'est-à-dire renvoit *)
(* VRAI si on est en fin de fichier et FAUX dans la cas contraire *)
 
 Begin
 pointeur:=Filepos(fichier);
 
(* La variable pointeur reçoit le numéro de la fiche courante *)
(* avec Filepos(nom logique) *)
 
 Read(fichier,nom);                      (* Lecture de la fiche courante *)
  Writeln('Fiche ',pointeur,' : ',nom);
 End;
End;
 
Begin
Assign(fichier,'NOMS.DAT');              (* Configuration du fichier *)
Clrscr;
Writeln('Création du fichier...');
Rewrite(fichier);                        (* création du fichier *)
Repeat
 Write('Entrez un nom (FIN pour arrêter) : ');Readln(nom);
 If nom<>'FIN' Then Write(fichier,nom);  (* Ecriture dans la fiche courante *)
Until nom='FIN';
Writeln('Fermeture du fichier...');
Close(fichier);
Clrscr;
Writeln('Ouverture du fichier avec RESET...');
Reset(fichier);                          (* Ouverture du fichier *)
Liste;
Write('Entrez un numéro de fiche à modifier : ');Readln(numero);
If numero>filesize(fichier) Then Write('Impossible !')
                            Else Begin
                                 Seek(fichier,numero);
                                 Write('Entrez le nouveau nom : ');Readln(nom);
                                 Write(fichier,nom);
                                 End;
 
(* Filesize(fichier) renvoit le numéro de la dernière fiche du fichier *)
(* Seek vous connaissez, et Write aussi, pas de problème *)
 
Liste;
Writeln('Fermeture du fichier...');
Close(fichier);                          (* Fermeture du fichier *)
Writeln('Exemple fini.');
End.

(à compléter)

Il reste à saisir les articles des numéros 2, 3, 4, 5 et 12.

 
divers/turbo_pascal.txt · Dernière modification: 2017/10/09 10:03 (édition externe)