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

Langage Delphi Discussion :

Appel de tableau en paramètres de fonction


Sujet :

Langage Delphi

  1. #1
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut Appel de tableau en paramètres de fonction
    Bonjour,

    Voici mon problème(je pense que c'est un problème de syntaxe mais je n'en suis pas sûr):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // J'ai déclaré pour simplifier un type général (utilisé à pas mal d'endroit).
    TTypeTableau: array[0..2] of Double
    //et une fonction:
    MaFonction( pMonTableau : TTypeTableau)
    //  Je cherche à appeler ma fonction de cette façon
    // Cela marche si le paramètres est un array of Double mais pas en TTypeTableau
    MaFonction([0.0,1.0,3.5]);
    Auriez-vous une idée?
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  2. #2
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var
      t: TTypeTableau;
    begin
      t[0] := 0.0;
      t[1] := 1.0;
      t[2] := 3.5;
      MaFonction(t);
    Akim Merabet

  3. #3
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    C'est une solution que je voulais éviter.

    ça me fait "économiser" une variable et des initialisations dans un code déjà chargé.

    Dans ce cas là, je mettrais le paramètre de MaFonction en array of double et ferais le contrôle de la taille dans le code de MaFonction.
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 468
    Points : 24 896
    Points
    24 896
    Par défaut
    Essaye const, je vais regarder mes sources car je l'ai fait avec des tableaux de chaines ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Entre nous je vois pas trop l'intérêt de passer en paramètre un tableau si celui ci n'est pas dynamique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    function MaFonction(d, d1, d2: double): UnTrucEnRetour;
    c'est interessant si le tableau est dynamique.

    Mais bon j'imagine que tu as tes raisons que ma raison ignore...
    Akim Merabet

  6. #6
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    J'appelle ma fonction de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaFonction([maVariable1, maVariable2, maVariable3]);
    Il n'y a pas de type de retour (J'aurais du l'appeler MaProcedure ).
    Ce sont des résultats de champs d'une requête. J'avais mis des valeurs fixes pour l'exemple.

    Le but est de provoquer des erreurs à la compilation si le type TTypeTableau est modifié. Plutôt qu'avec une erreur de vérification à l'exécution.


    >Shai Je n'ai pas résussi avec le const. J'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaFonction(const pMonTableau : TTypeTableau);
    Mais j'ai la même erreur de compilation sur [maVariable1, maVariable2, maVariable3], il attend un type ordinal et non un double.
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    et comme çà

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaFonction(VarArrayOf([0.0,1.0,3.5]));
    Il faut rajouter Variants dans les uses normalement
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 468
    Points : 24 896
    Points
    24 896
    Par défaut
    Si tu as Delphi 6 ou plus, il y a l'unité Types, et le TDoubleDynArray ... mais c'est un soucis quand tu "type" le tableau ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function Abc(A: TDoubleDynArray): Boolean; // Passe pas 
    begin
      Result := Length(A) > 0;
    end;
     
    function Abc2(A: array of double): Boolean; // Passe mais soulève d'autres problèmes ...
    begin
      Result := Length(A) > 0;
    end;
     
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    abc([0.1, 0.2]);  // Passe pas 
    abc2([0.1, 0.2]);  // OK
    EDIT : en fait, c'est juste pour une fonction qui renvoie un tableau qu'il faut utiliser le type, pour le passage de paramètre, cela semble ne pas poser de soucis

    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
     
    var
      AT: TDoubleDynArray;
      ATL: array of Double;
    begin
      if Abc2([0.1, 0.2]) then // OK
        Beep;
      if Abc2(AT) then // OK
        Beep;
      if Abc2(ATL) then // OK
        Beep;
      if abc([0.1, 0.2]) then // Ordinal Requi
        Beep;
      if Abc(AT) then // OK
        Beep;
      if Abc(ATL) then // Type différents
        Beep;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Le VarArrayOf me gêne tout autant, il me renvoie un tableau de variants. Du coup mon contrôle à la compilation ne fonctionne pas (ou alors je n'ai pas réussi).

    Le type de variable TTypeTableau est utilisé dans différentes unités, et je voualis au maximum bloqué les modification à la compilation.

    Je vais me rabattre sur le contrôle à l'exécution avec l'array of double.
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/04/2010, 06h31
  2. Réponses: 12
    Dernier message: 31/03/2010, 16h19
  3. c++ vers c# tableau comme paramétres de fonction
    Par punto dans le forum Windows Forms
    Réponses: 3
    Dernier message: 21/03/2008, 11h21
  4. tableau en paramètre de fonction
    Par tom31 dans le forum C
    Réponses: 1
    Dernier message: 09/02/2008, 08h55
  5. Tableau en paramêtre de fonction
    Par LeSkaMan dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/01/2007, 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