Précédent   Forum du club des développeurs et IT Pro > Autres langages > Pascal > Langage
Langage Vos questions sur langage Pascal en général, ses évolutions, les technologies, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 19/06/2011, 11h47   #1
ChPr
Membre confirmé
 
Avatar de ChPr
 
Inscription : septembre 2005
Messages : 653
Détails du profil
Informations personnelles :
Âge : 67

Informations forums :
Inscription : septembre 2005
Messages : 653
Points : 246
Points : 246
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
ChPr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 08h37   #2
batyann811
Membre éprouvé
 
Homme
Inscription : janvier 2010
Messages : 226
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 40
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2010
Messages : 226
Points : 460
Points : 460
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 :
batyann811 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/06/2011, 10h54   #3
ChPr
Membre confirmé
 
Avatar de ChPr
 
Inscription : septembre 2005
Messages : 653
Détails du profil
Informations personnelles :
Âge : 67

Informations forums :
Inscription : septembre 2005
Messages : 653
Points : 246
Points : 246
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
ChPr est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 12h05.


 
 
 
 
Partenaires

Hébergement Web