Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Membre éclairé Avatar de ChPr
    Inscrit en
    septembre 2005
    Messages
    838
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : septembre 2005
    Messages : 838
    Points : 336
    Points
    336

    Par défaut Utilisation de variables non typées

    Bonjour à toutes et à tous,

    Je n'ai jamais joué avec cela et je n'arrive pas à trouver de documentation pertinente à ce sujet.

    Je sais qu'en Pascal, on peut définir des variables non typées. Si par exemple, je déclare :

    Code :
    1
    2
    3
    procedure Echange(a, b: Integer; var S, T {pas de type});
    begin
    end;
    Cela se compile sans problème.

    Mais dès que j'essaie d'établir dans la procédure "Echange" une relation entre ces diverses variables, du genre S:= T; je me fait jeter avec une message du genre :

    Error: Assignments to formal parameters and open arrays are not possible

    Alors, comment faire, que faire de ces variables non typées ?

    Pour aller plus loin, mon but est d'avoir une procédure "générique" de tri rapide dans laquelle la variable à trier peut avoir des types différents. Voilà ce que cela donnerait :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    procedure Echange(Lo, Hi: Integer; var ALo, AHi);
    begin
      {Extraction dans les variables ALo et AHi de la partie sur laquelle peut se faire un tri}
      {Opération d'échange du genre échange de valeur et action sur les indices Lo et Hi}
    end;
     
    procedure QuickSort(var A {c'est un tableau non typé}; iLo, iHi: Integer);
    var
      Lo, Hi, Mid, T: Integer;
    begin
      Lo := iLo;
      Hi := iHi;
      Mid := A[(Lo + Hi) div 2];
      repeat
        while A[Lo] < Mid do Inc(Lo);
        while A[Hi] > Mid do Dec(Hi);
        if Lo <= Hi then
          Echange(Lo, Hi, A[Lo], A[Hi]);
      until Lo > Hi;
      if Hi > iLo then QuickSort(A, iLo, Hi);
      if Lo < iHi then QuickSort(A, Lo, iHi);
    end;
    Est-ce c'est possible ? Si oui, comment faire ou avez-vous des liens expliquant cela ?

    Merci de votre aide.

    Pierre

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    janvier 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : janvier 2010
    Messages : 235
    Points : 498
    Points
    498

    Par défaut

    Tout ce que tu peux faire avec les variables non typées c'est en récupérer l'adresse. Il me semble avoir vu une page de documentation la dessus sur le site de freepascal mais pas moyen de remettre la main dessus. L'intérêt de ce type de paramètre est de pouvoir écrire des fonctions et des procédures comme Move ,par exemple, qui permet de déplacer des blocs de données sans en connaître le type.

    Pour la généricité en pascal, à ma connaissance, tu as 3 solutions :


  3. #3
    Membre éclairé Avatar de ChPr
    Inscrit en
    septembre 2005
    Messages
    838
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : septembre 2005
    Messages : 838
    Points : 336
    Points
    336

    Par défaut

    Merci beaucoup "batyann811" pour ces liens et infos sur la généricité en Pascal. Je vais voir cela de plus près.

    Cordialement.

    Pierre

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •