Mise à jour : 03 Fevrier 1997 .

Initiation à la programmation en Turbo PASCAL

TP Numéro 1

Téléchargement !
UN.PAS

program un; {Mon premier programme en Pascal}
USES CRT;
Var a:char; {Déclare la variable 'a' comme un caractere}
Begin
    clrscr; {efface l'écran}
    writeln('Bonjour les amis'); {Affiche 'Bonjour les amis' à l'écran}
    a:=readkey; {attente d'une touche clavier}
End.

Lancez le programme en cliquant sur RUN. Le programme va etre compilé et exécuté . En cas d'erreur de syntaxe, vérifiez bien votre listing (n'oubliez pas la ponctuation ; , . (etc))
Attention , le compilateur ne s'arrete pas toujours sur la cause de l'erreur, il faut parfois regarder la ligne précédente ! Souvent vous oublierez un point virgule ou un point sur la ligne précédente.


TP Numéro 2

Téléchargement !
DEUX.PAS

program deux; {Initiation Turbo Pascal}
USES CRT;
Var a:char;
ma_chaine:STRING; {'ma_chaine'est déclarée comme chaine de caractères}
Begin
    clrscr; {efface l'écran}
    writeln('Entrez un texte de moins de 255 caractères');
    writeln('Puis appuyez sur entrée');
    readln(ma_chaine); {Lecture de caractères au clavier}
    writeln;
    write('Ce que vous venez de taper est : ');
    writeln(ma_chaine);
    a:=readkey; {attente d'une touche}

    {Note : writeln permet de faire un passage à la ligne à
    la différence de write qui permet d'écrire à la suite}

End.
Lancez le programme en cliquant sur RUN.
'ma_chaine' est une variable ou vous pourrez stoker du texte.
Si vous utilisez une variable non déclarée, le compilateur affichera un message d'erreur (et oui c'est pas du Basic !).



TP Numéro 3

Téléchargement !
TROIS.PAS

Sans structure de contrôle, un langage de programmation serait bien limité (Du genre HTML par ex) . Voici donc pour commencer le programme TROIS.PAS qui contient 2 boucles :

-La première For I=1 to 100 ..... permet d'éxecuter 100 fois des instructions. On aurait pu écrire aussi For i=200 to 999 ou for i=1 to 4 pour réaliser 800 ou 4 itérations ...

-La seconde Repeat ... until est exécutée tant que l'on n'appuie pas sur la touche 1. On pourrait très bien mettre une autre condition de sortie .

program trois; {Les structures de controle}
USES CRT;

Var a:char;
i: Integer; {Declare i comme un nombre entier}

Begin
    clrscr; {efface l'ecran}
    for i:=1 to 100 do
    begin
      write('i=',i,' ');
      {Toutes les instructions que vous mettrez ici seront executées 100 fois}
    End;
    a:=readkey; {attente d'une touche}

    repeat
      writeln('Appuyez sur 1 pour sortir cette boucle');
      a:=readkey;
      writeln('Code de la touche :',ord(a));
    Until a='1';
End.



TP Numéro 4

Téléchargement !
QUATRE.PAS

Structure de contrôle suite : IF condition THEN action ELSE autre_action.
SI (la condition est vraie) ALORS j'exécute action SINON j'exécute autre_action.
Voici un programme d'exemple : Il suffit de le lire et l'éxécuter pour comprendre :


program Quatre;     {Les structures de controle suite}

USES CRT;

Var a:char;
    ma_chaine:STRING; {'ma_chaine'est declaree comme chaine de caracteres}
    i: Integer;       {Declare i comme un nombre entier}

Begin
  clrscr;     {efface l'‚cran}
  { La struture de controle IF (condition) THEN action ELSE action }
  writeln(' EXEMPLE 1: IF sans ELSE :');
    writeln('Tapez sur la touche A ou la touche B (echap pour sortir)');

  repeat
    a:=UPCASE(readkey);   {Upcase transforme une lettre minuscule en majuscule}
    if a ='A' THEN
    Begin
       writeln('Vous avez appuye sur la touche A');
    End;
    if a ='B' THEN
    Begin
       writeln('Vous avez appuye sur la touche B');
    End;
  until ord(a) = 27;  {code ascii de touche ECHAP =27}


  writeln(' EXEMPLE 2: IF avec ELSE :');
   writeln('Tapez sur la touche A ou autre (echap pour sortir)');

  repeat
    a:=UPCASE(readkey);   {Upcase transforme une lettre minuscule en majuscule}
    if a ='A' THEN
    Begin
       writeln('Vous avez appuye sur la touche A');
    End        {Remarquez qu'il n'y a pas de point virgule ici}
    Else       {c'est que a<>'A'}
    Begin
       writeln('Vous avez appuye sur une autre touche ');
    End;
  until ord(a) = 27;  {code ascii de touche ECHAP =27}

End.



TP Numéro 5

Téléchargement !
CINQ.PAS

Et maintenant , nous allons faire notre premier petit jeu ! Nous utilisons quelques instructions supplémentaires (Trunc , random...) mais cela n'est pas compliqué à comprendre !
NOTE : Random renvoie un nombre réel d'où l'obligation de déclarer la variable nb_alea comme REAL . Pour obtenir ensuite uniquement la partie entière, nous utilisons TRUNC qui renvoie lui un entier (d'ou la déclaration de nb_recherche comme INTEGER)

program Cinq;     {Mon premier petit jeu}

USES CRT;

Var a:char;
    ma_chaine:STRING; {'ma_chaine'est declaree comme chaine de caracteres}
    i,nb,inf,sup,nb_recherche: Integer;
    nb_alea:real;
BEGIN

  textcolor(Yellow);    {Couleur du texte entre 0 (black) et 15 (white)}
  textbackground(Blue); {Couleur du fond entre 0 (black) et 8 }
  clrscr;
  inf:=0;
  sup:=100;
  randomize;   {pour avoir un nb aléatoire different a chaque lancement
                          du programme}
  nb_alea :=random(100); {Initialise un nombre aléatoire &Lt 100 }
  nb_recherche:=TRUNC(nb_alea); {Prend la partie entière}

  writeln('Objectif du jeu : trouver un nombre caché ');
  writeln('Pour arreter le jeu tapez un nombre > 100');

  repeat

    writeln('Entrez un nombre compris entre ',inf,' et ',sup);
    readln(nb);
    if nb > nb_recherche then  sup:=nb; {Pour réduire l'intervale}
    if nb &Lt nb_recherche then  inf:=nb;

  until (nb=nb_recherche) or (nb > 100); {conditions de sortie}

  if nb=nb_recherche then
  Begin
    writeln('BRAVO ! Vous avez gagné !');
    sound(440);  {jouer un son}
    Delay(500);
    nosound;
    a:=readkey;
  End;

END.



TP Numéro 6

Téléchargement !
SIX.PAS

Programme de RESOLUTION D'UNE EQUATION DU SECOND DEGRE.
La gestion des erreurs de frappes est mieux gérée ici grâce à l'utilisation de l'instruction VAL qui permet de récupérer la valeur numérique d'une variable de type Chaine (string) (En effet , si vous faites readln(a), avec a variable numérique, si vous entrez au clavier 'toto', le programme plante. Par contre, avec readln(a1), a1 déclaré comme string, si vous entrez 'toto', le programme ne plante plus .
Remarque : VAL('Toto',a,err) renvoie dans a la valeur 0
mais VAL('123',a,err) renvoie dans a la valeur 123 ...nuance !
Err est un paramètre obligatoire mais ici inutile.

Note : Pour les élèves de Terminale : Essayez de modifier le programme pour trouver les solutions dans C .

program Six;     {résolution d'une Equation}

USES CRT;

Var ch:char;
    err : integer;
    {*** Variable pour mes equations *****}
    A1,B1,C1,Xm1,Xm2 : STRING;
    A,B,C,DELTA,X1,X2 : Real;
BEGIN

  textcolor(Yellow);    {Couleur du texte entre 0 (black) et 15 (white)}
  textbackground(Blue); {Couleur du fond entre 0 (black) et 8 }
  clrscr;
  repeat
    writeln;
    writeln;
    writeln('Résolution d''une Equation du Second degré ');
    writeln('Du type Ax^2+Bx+c = 0');
    writeln('Vous devez entrer les coefficient A,B et C');
    Write('Entrez A :');
    readln(A1);
    VAL(A1,A,err);   {A1 string est transformée en A valeur numérique integer}

    Write('Entrez B :');
    readln(B1);
    VAL(B1,B,err);   {B1 string est transformée en B valeur numérique integer}

    Write('Entrez C :');
    readln(C1);
    VAL(C1,C,err);   {C1 string est transformée en C valeur numérique integer}

    DELTA := B*B-(4*A*C);
    IF (DELTA < 0) THEN
    Begin
      Writeln('Pas de solution dans R, Delta négatif =',DELTA);
    End
    ELSE
    IF (A = 0) THEN
    Begin
      Writeln('A = 0, ce n'est pas une Equation du second degré');
    END
    ELSE
    BEGIN
      X1:=(-B-SQRT(DELTA))/(2*A);
      X2:=(-B+SQRT(DELTA))/(2*A);
      writeln(' Les solutions sont :');
      writeln(' X1 = ',X1);
      writeln(' X2 = ',X2);
      str(X1:10:3,Xm1);  {Valeur X1 transformée en chaine caractère Xm1}
      str(X2:10:3,Xm2);  {10 et 3 représente formatage c-a-d le nb de chiffre avant et
                          après la virgule}
      writeln('Et de façon plus lisible :');
      writeln(' X1 = ',Xm1);
      writeln(' X2 = ',Xm2);
    END;
    Writeln('Voulez vous sortir ? (O/N)');
    ch:=readkey;
  Until (UPCASE(ch)='O') OR (ORD(ch)=27);   {O ou Echap pour sortir}
END.


Avant de faire du graphisme, on va quand même voir la notion de procedures (sous programmes).


TP Numéro 7

Téléchargement !
SEPT.PAS

NOTIONS DE PROCEDURES

Une procedure est un sous programme que l'on peut appeler plusieurs fois à partir du programme principal ou d'une autre procedure ou fonction. Dans notre exemple nous avons déclaré 4 procedures (totot1 à toto4) appelées à partir du programme principal.
Dans une procedure , vous pouvez déclarer des variables locales qui seront crées à chaque appel de la procedure et détruites à la fin de l'exécution de la procedure.
Les variables globales (declarées au debut de votre programme) sont aussi utilisables dans les procedures .
Attention : si vous redéclarer la variable Glob1 (variable globale) dans une procedure, le compilateur va accepter mais il faut savoir alors que Glob1-variable globale- n'est plus accessible par la dite procedure. En effet c'est une variable Glob1 locale qui est crée et différente de Glob1 globale (bien que portant le même nom !)

Analysez le programme ci-dessous , testez le et faites des modifications pour essayer de bien comprendre.
Essayez d'appeler la procedure toto1 par toto2.
program Sept;     {Appel de procedures}

USES CRT;

{*** Les variables globales de mon programme sont declarees ici ***}
Var ch:char;
    err : integer;
    glob1,glob2: integer;

{*** D‚claration de mes procedures ***}
Procedure Toto1;
Begin
  writeln;
  writeln('Execution de la procedure Toto1');
  writeln(' J''affiche n''importe quoi ');
  writeln('... et on sort de la procedure toto1');
  writeln;
End;

Procedure Toto2;
Var a,b : Integer; { a et b variables locales ne sont connues que par la procedure toto2}
Begin
  a:=10;
  b:=15;
  writeln;
  writeln('Execution de toto2');
  writeln('a = ',a);
  writeln('b = ',b);
  writeln('Fin d''execution de toto2');
  writeln;
End;

Procedure Toto3(x,y : integer );
Begin
  writeln;
  writeln('Execution de toto3: x et y sont passés en  paramètres');
  writeln('x= ',x);
  writeln('y= ',y);
  x:=x+y;
  writeln('Je modifie la valeur de x :');
  writeln('x:=x+y = ',x);
  writeln('Fin d''execution de toto3');
  writeln;
End;

Procedure toto4(x,y : integer);
Var a,b : real;  {variables de type reel declarées en local}
Begin
  writeln;
  writeln('Execution de toto4');
  b:=100;
  a:=glob1+glob2+b;  {Je peux utiliser glob1 et glob2 dans mes procédures }
  writeln('Dans toto4 a = ',a);
  writeln('Fin de toto4');
  writeln;
End;


BEGIN

  textcolor(Yellow);    {Couleur du texte entre 0 (black) et 15 (white)}
  textbackground(Blue); {Couleur du fond entre 0 (black) et 8 }
  clrscr;

  repeat
   clrscr;
    { Appel de la procedure toto1 }
    toto1;
    { Appel de la procedure toto2 }
    toto2;

   {Appel de la procedure toto3 avec 2 parametres: Glob1 et Glob2 }
    glob1:=10;
    glob2:=20;

    toto3(glob1,glob2);
    writeln('... mais Glob1 et glob2 ont gard‚ leur valeur');
    writeln('Glob1 = ',glob1);
    writeln('Glob2 = ',glob2);
    writeln('Appuyez sur une touche pour executer toto4');
    ch:=readkey;
    toto4(glob1,glob2);
    Writeln('Voulez vous sortir ? (O/N)');
    ch:=readkey;
  Until (UPCASE(ch)='O') OR (ORD(ch)=27);   {O ou Echap pour sortir}
END.

NOTE : Naturellement nous n'avons pas fait le tour de la question au sujet des procedures (loin s'en faut ...) mais c'est largement suffisant pour commencer !


TP Numéro 8

Téléchargement !
HUIT.PAS


LES GRAPHISMES

Voici comment initialiser le mode graphique haute résolution en Turbo Pascal . J'ai mis quelques instructions de base pour réaliser des lignes changer les couleurs ... etc .
Les coordonnées de l'écran (0,0) commencent en haut à gauche.

Notes Importantes :

1) Vous devez spécifier le chemin d'accès du répertoire BGI de Turbo Pascal (cela dépend de votre installation) dans l'appel d'initgraph, sans quoi çà ne marche pas !

2) Si votre compilateur affiche "graph.tpu" non trouvé, recherchez ce fichier dans le répertoire Units et recopiez le dans votre répertoire courant (où se trouve votre programme) . Vous pouvez aussi spécifier les chemins d'accès des .exe et Tpu dans "directories" du menu option de Turbo pascal.

3) A l'avenir, si vous rencontrez ce genre de problème, faites tout d'abord BUILD (au lieu de COMPILE) puis si le pb persiste recherchez et recopiez les fichiers dans le répertoire courant.

Le programme :

PROGRAM Huit;     {Programme graphique}

USES CRT,Graph;
Var pilote,mode,i,fonte,direc,taille: Integer;
    x,y:real;

    a: char;


Begin
  pilote:=DETECT;  {Initialisation du mode graphique}
  InitGraph(pilote,mode,'c:\tp7\tp\bgi'); {Donnez le chemin du repertoire bgi}

   {**** Instructions pour tracer des lignes et changer couleur ****}

   setcolor(white);       {choisissez la couleur}
   line(10,10,200,200);   {dessine une ligne du point coordonnees (10,10)
                           au point (200,200)}
   setcolor(red);
   lineto(70,350);
   setcolor(5);           {15 max pour la couleur}
   lineto(500,350);       {Trace une ligne … partir du dernier point}

   putpixel(400,50,yellow); {dessine un point jaune en haut a droite ecran}

     {******  Affichage du texte ******}
   fonte:=2;    {0 à 4}
   direc:=0;    {0 ou 1}
   taille:=8;   {facteur d'agrandissement}
   setcolor(blue);
   settextstyle(fonte,direc,taille);
   outtextXY(100,50,'Appuyez sur une touche :'); {Ne pas utiliser writeln !!}
   a:=readkey;

     {******* Courbe sinus ********}
   x:=0;
   for i:=0 to 1000 do
   begin
     x:=x+0.05;
     y:=100*sin(x);    {Pour avoir une courbe sinus}
     putpixel(trunc(x*10),200-trunc(y),yellow); {trunc renvoie la partie entiere}
   end;

  a:=readkey;
  closeGraph;         {Ferme le mode Graphique}
End.



Capturé par MemoWeb à partir de http://www.guetali.fr/home/creole/debutant.htm le 10/02/97