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

Delphi Discussion :

Fonction retournant un tableau initialisé


Sujet :

Delphi

  1. #1
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut Fonction retournant un tableau initialisé
    Bonjour,

    Je suis débutant et je viens de rencontrer une difficulté, c'est pourquoi je me tourne vers vous afin que vous puissiez m'aider. Je vous explique donc mon cas.

    J'ai un Tableau nommé TabForme qui à une structure déclarée dont voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    type TForme=record
      XDepart,YDepart,XFin,YFin,Largeur,Hauteur:integer;
      Forme_Dessinee:string[15];
      end;
    Mon tableau est déclaré comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    const
    Nbre_Maxi_Forme=50;
     
    var
      TabForme:array[1..Nbre_Maxi_Forme]of TForme;
    et ce que je souhaite faire, c'est initialiser mon tableau lors du lancement de mon programme. Je voudrais donc créer une fonction qui recoit comme paramètre mon tableau TabForme et qui retourne mon tableau TabForme initialisé.

    Voici donc mon code (qui n'est pas bon )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    function Init(MonTableau:TForme) : array of TForme;
    Pourriez vous m'éclaircir sur mon erreur s'il vous plaît.
    Merci

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 921
    Points : 6 037
    Points
    6 037
    Par défaut
    Pas besoin d'une fonction, une procédure suffit en utilisant le mot magique var....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure  Init(var MonTableau:TForme);
    passage par référence je crois...

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2003
    Messages : 43
    Points : 57
    Points
    57
    Par défaut
    Le problème c'est qu'il veut initialiser son tableau, il faut donc qu'il passe son tableau en paramètre !


    Je ne suis plus très sûr de la syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    type TFormes = array[1..Nbre_Maxi_Forme] of TForme
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    procedure Init(var MonTableau: TFormes)
    Tu modifies directement ton paramètre pour initialiser le tableau.

    Seb

  4. #4
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Je ne comprends pas trop ... Je vais essayer d'être plus clair.

    J'ai ceci :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    type
      TFenetre_Principale = class(TForm)
        MainMenu1: TMainMenu;
        Fichier1: TMenuItem;
        Nouveau1: TMenuItem;
        N1: TMenuItem;
        Ouvrir1: TMenuItem;
        Sauvegarder1: TMenuItem;
        N2: TMenuItem;
        Quitter1: TMenuItem;
        BarredOutils1: TMenuItem;
        Afficher1: TMenuItem;
        Cacher1: TMenuItem;
        StatusBar1: TStatusBar;
        PopupMenu1: TPopupMenu;
        Copier1: TMenuItem;
        Coller1: TMenuItem;
        EditerleDico1: TMenuItem;
        Ouvrir: TOpenPictureDialog;
        Enregistrer: TSavePictureDialog;
        N011: TMenuItem;
        Cardinalit1: TMenuItem;
        N001: TMenuItem;
        N012: TMenuItem;
        N111: TMenuItem;
        N1n1: TMenuItem;
        Dictionnaire1: TMenuItem;
        N3: TMenuItem;
        procedure FormCreate(Sender: TObject);
        procedure FormPaint(Sender: TObject);
        procedure Quitter1Click(Sender: TObject);
        procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure Afficher1Click(Sender: TObject);
        procedure Cacher1Click(Sender: TObject);
        procedure Nouveau1Click(Sender: TObject);
        procedure FormDblClick(Sender: TObject);
        procedure Copier1Click(Sender: TObject);
        procedure Coller1Click(Sender: TObject);
        procedure EditerleDico1Click(Sender: TObject);
        procedure Ouvrir1Click(Sender: TObject);
        procedure Sauvegarder1Click(Sender: TObject);
        procedure N001Click(Sender: TObject);
        procedure N012Click(Sender: TObject);
        procedure N111Click(Sender: TObject);
        procedure N1n1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    const
    Nbre_Maxi_Forme=50;
     
    type TForme=record
      XDepart,YDepart,XFin,YFin,Largeur,Hauteur:integer;
      Forme_Dessinee:string[15];
      end;
     
    type TFormes = array[1..Nbre_Maxi_Forme] of TForme;
     
    var 
    ...
    ...
    ...
    ...
     
    {$R *.dfm}
    procedure Init(var MonTableau: TForme);
    J'ai des erreurs dûes à ce code. Pouvez m'éclaircir et m'expliquez s'il vous plait. Merci

  5. #5
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 921
    Points : 6 037
    Points
    6 037
    Par défaut
    Il serait bien de nous dire quelles erreurs.....

    Sinon, pour pouvoir utiliser ton tableau, il faut déclarer une variable ayant ce type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Var MonTableauGobal: TFormes;
    Ensuite, dans le code, tu vas vouloir initialiser ce tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ..
    Init(MonTableauGobal);
    tu peux faire cet appel:
    • soit dans l'événement Create de ta form
    • soit dans le OnShow
    • soit ailleurs selon ton goût
    Il te reste ensuite à alimenter/initialiser ce tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonTableauGlobal[1].XDepart:= nnnnn;
    Au passage, évite de définir des types dont le nom est trop voisin des types "natifs" de Delphi: TForme et TFormes sont trop proches de TForm et peuvent prêter à confusion...

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    En employant le mot clé var en paramètre de fonction, tu demandes au compilateur de transmettre l'objet réél à la fonction et non une copie.
    Ainsi la fonction agit sur l'objet concret.

    Sans le mot clé var, une variable temporaire est créée, initalisée avec la valeur de ton paramètre puis transmise à la fonction qui dans ce cas agit sur une copie.

    Dans le cas d'un pointeur il ya bien recopie de la valeur du pointeur dans une variable de type pointeur temporaire transmise à la fonction mais alors il s'agit d'une adresse.
    Tout se passe donc comme si tu avais transmis l'objet pointé par adresse...

  7. #7
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Merci à vous ! J'ai réussi. Merci pour les explications Fabrice... MERCI à tous

    Je retourne programmer et si jamais un petit problème apparait, je posterai

    Bon Week-End

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PL/SQL] Fonction retournant un tableau
    Par moneyinthebank dans le forum SQL
    Réponses: 6
    Dernier message: 03/11/2006, 11h38
  2. Réponses: 24
    Dernier message: 24/05/2006, 19h19
  3. [TP] Fonction retournant un tableau
    Par molesqualeux dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 07/05/2006, 01h01
  4. PB avec fonction retournant un tableau
    Par T-B dans le forum Langage
    Réponses: 2
    Dernier message: 27/01/2006, 22h01
  5. fonction retournant un tableau
    Par Jero13 dans le forum C
    Réponses: 7
    Dernier message: 22/11/2005, 11h14

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