IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Turbo Pascal Discussion :

Renvoyer un record dans une fonction


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de EpiTouille
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 372
    Par défaut Renvoyer un record dans une fonction
    Bonjour,
    Je cherche à renvoyé un record. J'ai vu que turbo pascal n'accepte que les types simples. Aurais-je moyen d'utiliser des pointers ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Type Tcoord = record
      x : integer;
      y : integer;
    end;
     
    type Pcoord = ^Tcoord;
     
    function x : Pcoord
    begin
    ...
    ...
    end;
    Je connais pas trop les pointers et tout ça.

    Merci de vos réponses.

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    Oui tu dois pouvoir t'en sortir avec les pointeurs.

    Un bon article expliquant ça:
    http://pascal.developpez.com/cours/ptrau/?page=page_16

  3. #3
    Membre éclairé
    Avatar de EpiTouille
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 372
    Par défaut
    Merci j'ai réussi !

    J'ai fait un ptit code, ça peut toujours aidé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
     
    program test;
     
    uses crt;
     
     
    type Tcoord = record
      x : integer;
      y : integer;
    end;
    type Pcoord = ^Tcoord;
     
    var
      CoordApple : Tcoord;
     
    function Aleatoire : Pcoord;
    var
      PcoordApple : Pcoord;
    begin
      randomize;
      new(PcoordApple);
      PcoordApple^.x := random(100);
      pcoordApple^.y := random(100);
     
      Aleatoire := PcoordApple;
    end;
     
    begin
      CoordApple := Aleatoire^; {Récupération du résultat de la fonction}
      writeln(coordApple.x,' ',coordApple.y);
    end.

  4. #4
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Par défaut
    Tu viens aussi de créer une belle fuite de mémoire. Le bloc alloué dans la fonction n'est libéré nulle part.

    1ere solution : tu mémorises le pointeur et tu le libères quand il n'est plus necessaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    program test;
     
    uses heaptrc, crt;
     
     
    type Tcoord = record
      x : integer;
      y : integer;
    end;
    type Pcoord = ^Tcoord;
     
    var
      CoordApple : Pcoord;
     
    function Aleatoire : Pcoord;
    var
      PcoordApple : Pcoord;
    begin
      new(PcoordApple); {allocation mémoire}
      PcoordApple^.x := random(100);
      pcoordApple^.y := random(100);
     
      Aleatoire := PcoordApple;
    end;
     
    begin
      randomize;  
      CoordApple := Aleatoire; {Récupération du résultat de la fonction}
      writeln(coordApple^.x,' ',coordApple^.y);
      dispose(CoordApple); {libération mémoire}
    end.
    2 eme solution bien plus propre à mon avis : tu utilises une procedure avec passage de parametre par référence

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    program test;
     
    uses heaptrc, crt;
     
     
    type Tcoord = record
      x : integer;
      y : integer;
    end;
    type Pcoord = ^Tcoord;
     
    var
      CoordApple : Tcoord;
     
    procedure Aleatoire(var Coord : Tcoord);
    begin
      coord.x := random(100);
      coord.y := random(100);
    end;
     
    begin
      randomize;  
      Aleatoire(CoordApple);
      writeln(coordApple.x,' ',coordApple.y);
    end.
    Dernière chose : il est inutile d'appeler randomize à chaque fois que tu utilises random, il suffit de le faire une fois au début du programme.

Discussions similaires

  1. Creation de plusieurs records dans une table en fonction de la valeur
    Par miniil dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 27/10/2009, 13h40
  2. Renvoyer une table dans une fonction
    Par GeantBioHazard dans le forum Services Web
    Réponses: 0
    Dernier message: 10/07/2009, 09h38
  3. Utilisez MinimizeName() dans une fonction
    Par James_ dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/05/2004, 18h05
  4. [Postgresql]Connecter à une autre base dans une fonction
    Par alex2205 dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/05/2003, 11h30
  5. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo