Recherche
1 connecté

  Actuellement : 1 commentaire DELPHI

DELPHI

Quelques bases du language pascal

 

III Procédures et fonctions

                a) Cékoi une procédure?

                                Une procédure est un morceau de code qui peut être appellé à n'importe quel moment. Elle peut aussi demander quelques paramètres pour agir selon ces paramètres. Il existe des procédures toutes faites, comme writeln ou readln. Le code de writeln lui permet d'afficher son paramètre à l'écran.

 

                b) Créer ses propres procédures

                                Si vous utilisez souvent une même portion de code dans un programme, vous pouvez mettre ce code dans une procédure, et appeller la procédure à chaque fois que vous voudrez appeller le code. Exemple:

 

program Project1;

 

{$apptype console}

 

procedure Bonjour;

begin

  writeln('Bonjour!');

  writeln('Comment ça va?');

  readln;

end;

 

begin

  Bonjour;

  writeln('Je répète:');

  Bonjour;

end.

 

                                Ce programme équivaut au suivant:

 

program Project1;

 

{$apptype console}

 

begin

  writeln('Bonjour!');

  writeln('Comment ça va?');

  readln;

  writeln('Je répète:');

  writeln('Bonjour!');

  writeln('Comment ça va?');

  readln;

end.

 

                                J'ai simplement remplacé chaque "Bonjour;" par le contenu de la procédure Bonjour. Intéressons-nous à celle-ci. Pour la créer, j'ai mis, après la clause program et avant le begin .. end principal, le code de la procédure. Ca commence par "procedure Nom_de_la_procedure;", et c'est suivit d'un bloc begin .. end. Ce bloc-ci est fermé par un point-virgule, contrairement au bloc principal qui est fermé par un point. En effet, seul le end du bloc principal, qui clôt le programme, est fermé par un point; tous les autres blocs begin .. end sont fermés par des points-virgules.

 

                c) Procédures avec paramètres

                                La procédure Bonjour créée plus haut ne sert qu'à empêcher un morceau de code d'être répété, ce qui n'est pas très utile étant donné la longueur dudit code. En fait, la plupart des procédures nécessitent des paramètres, qui modifieront le travail de la procédure. Par exemple, selon le paramètre que l'on donne à writeln, le texte affiché à l'écran sera différent.

 

                                Imaginons que l'on veuille afficher "Bonjour, Jacques-Henri!", au lieu de "Bonjour!", dans la procédure Bonjour, et que l'on veuille passer le nom (ici Jacques-Henri) en paramètre. Il faut créer la procédure suivante:

 

procedure Bonjour(nom: string);

begin

  writeln('Bonjour, ', nom, '!');

  writeln('Comment ça va?');

  readln;

end;

 

                                Ainsi, pourrait appeller la procédure Bonjour avec un nom; par exemple:

 

var string1: string;

 

begin

  Bonjour('Jean-Pierre');

  Bonjour('Anaïs');

  string1:='Pam';

  Bonjour(string1);

end.

 

                                Voilà :) on peut aussi créer une procédure avec plusieurs paramètres:

 

procedure Bonjour(nom, prenom: string; age: integer);

 

                                Ici, on peut et on doit passer deux string et un integer en paramètre. Ainsi, dans le bloc begin .. end de la procédure (mais pas dans le bloc principal!), on pourra utiliser les variables nom, prenom, et age. Attention, si vous modifiez ces variables dans la procédures, les vraies variables passées en paramètre ne seront pas modifiées. Par exemple:

 

procedure Test(str: string);

begin

  writeln(str); // affiche le contenu de str

  str:='coucou';

  writeln(str); // affiche "coucou"

end;

 

var s: string;

 

begin

  s:='bonjour';

  test(s); // affiche "bonjour" et "coucou"

  writeln(s); // affiche "bonjour", et non pas "coucou"

  test('test'); // affiche "test" et "coucou"

  readln;

end.

 

                                Voilà. La variable locale str est modifiée dans la procédure, mais la variable globale s n'est pas modifiée. Il y a un moyen pour qu'en modifiant un paramètre de la procédure dans la procédure, cela modifie la variable qui a été passée en paramètre. Il suffit de modifier la déclaration de la procédure:

 

procedure Test(var str: string);

 

                                J'ai simplement rajouté var devant str; ainsi, on devra obligatoirement passer une variable à la procédure (passer une constante comme 'test' sera impossible), et cette variable pourra être modifiée par la procédure. Faites l'essai en utilisant l'exemple précédent (supprimer la ligne "test('test');" qui ne pourra pas marcher). Observez la différence! On peut faire pareil avec une procédure à plusieurs paramètres:

 

procedure Bonjour(nom, var prenom: string; age: integer);

 

                                On pourra modifier la variable prenom, mais pas les variables nom et age.

 

                d) Principe d'une fonction

                                Une fonction est une procédure qui renvoie une valeur. Par exemple, la fonction StrToInt est une procédure qui traite son paramètre (de type string) pour renvoyer son équivalent integer. En fait, une procédure est une fonction qui ne renvoie pas de valeur!

 

                e) Création d'une fonction

                                La syntaxe ressemble beaucoup à celle d'une procédure. On la met aussi entre la clause program et le begin principal. Par exemple:

 

function somme(int1, int2: integer): integer;

begin

  result:=int1+int2;

end;

 

                                Cette fonction, très simple, renvoie la somme de ses deux paramètres. Exemple d'utilisation:

 

begin

  writeln(somme(5, 10)); // affiche 15

  readln;

end.

 

                                Notez les différences par rapport aux procédures:

                                - On écrit function au lieu de procedure

                                - Après la parenthèse des paramètres (ou après le nom de la fonction si celle-ci ne possède pas de paramètre), on met un deux-points puis le type de donnée renvoyée par la fonction (ici integer). Ensuite, on met le point-virgule habituel.

                                - Une fonction contient une variable result qui contient le résultat de la fonction. La modifier permettra de modifier la valeur renvoyée par la fonction.

 

                f) Variables locales

                                Outre les variables passées en paramètres à la procédures, on peut créer des variables locales qui ne pourront être utilisées que par la procédure. C'est similaire aux variables d'un programme normal: on crée une clause var avant le begin. Exemple:

 

procedure test;

var i: integer; // Voilà not' variable!

begin

 

end;

 

                                Notez qu'on peut aussi, entre procedure et begin, insérer d'autres procédures ou fonction! Celles-ci ne pourront être utilisées que par la procédure (ou la fonction) qui les contient. On les appelle des fonctions ou procédures locales. En théorie, il est possible de créer des procédures locales dans des procédures locales; mais bon, en pratique, c'est un peu fouillis!

 

                g) Ce qu'on a appris d'important

                                - On sait cékoi une procédure et une fonction, à quoi ça sert et comment en créer

                                - On connait (en principe...) la différence entre une variable globale et une variable locale.

 

                h) Exemple plus compliqué

                                Voici un exemple. En guise d'exercice, tapez-le, testez-le et... comprenez-le!

 

program Project1;

 

{$apptype console}

 

function somme(int1, int2: integer): integer;

begin

  result:=int1+int2;

end;

 

procedure affichesomme(int1, int2: integer);

begin

  writeln(int1, ' + ', int2, ' = ', somme(int1, int2));

end;

 

var int1, int2: integer;

 

begin

  writeln('Entrez un nombre:');

  readln(int1);

  writeln('Encore un, merci:');

  readln(int2);

  affichesomme(int1, int2);

  writeln('Ca vous parait correct?...');

  readln;

end.