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 :

passer une partie d'un tableau en paramettre.


Sujet :

Langage Delphi

  1. #1
    Membre régulier Avatar de monstroplante
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 107
    Points : 76
    Points
    76
    Par défaut passer une partie d'un tableau en paramettre.
    Bonjour,
    Dans mon application, je manipule un tableau de valeurs booléenes à 3 dimmentions.
    Je me represente ce tableau comme un tableau à 2 dimmentions avec pour chaque case, un essembe de valeurs booléenes.
    Mon probleme c'est que j'ai besoin de pouvoir envoyer une partie de ces cases en parametre à une fonction.
    J'ai dabord pensé à faire un tableau de pointeurs qui aurraient pointé sur des "array of boolean" mais delphi n'accepte pas qu'on pointe sur un array...
    J'ai vu aussi qu'il existait une fontion "slice" mais je n'ai pas compris comment définir (x_debut, x_fin, y_debut, y_fin).

    Avez-vous une solution a me proposer ?

  2. #2
    Membre actif Avatar de declencher
    Inscrit en
    Mai 2003
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 441
    Points : 251
    Points
    251
    Par défaut
    Bonjour,

    Pourquoi dis tu que delphi n'accepte pas qu'on pointe sur un array ?
    Essaie de déclarer des type record qui contiendrait ton array.

  3. #3
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    salut!
    Je ne vois pas où est le problème...
    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
    Type TTab = Array Of Array Of Array Of Boolean;
     
    {----------------------------------------------------------------}
    Procedure SetTab(var tab: TTab; d1, d2, d3: Integer);
    Var x, y: Integer;
    Begin
      SetLength(tab, d1 + 1);
      For x:=Low(tab) To High(tab) Do
      Begin
        SetLength(tab[x], d2 + 1);
        For y:=Low(tab[x]) To High(tab[x]) Do
          SetLength(tab[x], d3 + 1);
      End;
    End;
     
    {----------------------------------------------------------------}
    // Exemple :  
    Var tab: TTab;
     
    SetTab(tab, 2, 5, 8);

    Lien tout en bas à gauche de cette fenêtre
    De retour parmis vous après 10 ans!!

  4. #4
    Membre régulier Avatar de monstroplante
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 107
    Points : 76
    Points
    76
    Par défaut
    je n'ai jamais déclaré de type. Je vais me mettre les idées au clair sur le sujet.
    J'essayais comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var
    tab:array[1..10,1..10,1..10] of boolean;
    pointeurs:array of ^array of boolean;
    ce qui me valait le message suivant :
    "[Erreur] Unit1.pas(27): Identificateur attendu(e) mais 'ARRAY' trouvé(e)"

  5. #5
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Citation Envoyé par monstroplante
    je n'ai jamais déclaré de type.
    bah tu devrais essayer une fois au moins !

    Bon courage, à+
    De retour parmis vous après 10 ans!!

  6. #6
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    une idée pas plus
    au lieu d'utlisé un tableu de boolean (<32 ou meme <64) utlise un simple integer qui contient 32 bits (ou un int64 >64bits) chaque bits représente une valeur boolean
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  7. #7
    Membre régulier Avatar de monstroplante
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 107
    Points : 76
    Points
    76
    Par défaut
    Pour que vous compreniez mieux mes contraintes il me parait interessant de vous péciser que mon logiciel à pour but de résoudre les grilles de sudoku. J'ai vu qu'il y a des personne qui discutent de ce sujet sur le forum mais je ne veux pas trop participer à ces débats parceque je veux :
    -mettre en oeuvre ma propre approche sans etre influencé par celle des autres
    -trouver la solution par moi meme.
    -en profiter pour progesser en programmation.

    Le tableau à 3 dimmentions que j'utilise pour le moment represent la grille de sudoku (x,y) et les possibilitées pour chaque case (z).

    utlise un simple integer qui contient 32 bits
    j'avai pensé à cette solution mais je pense que les traitements seront plus compliqués.

    Aprés avoir lu l'article cité dans mon précedent post, je pense proceder comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    type
      Tpossibilite = 1..9;
      Tcase = set of Tpossibilite;
    var
      tab:array[1..9,1..9] of Tcase;
      pointeurs:array of ^Tcase;
    Cette solution me permetra de faire assez simplement des comparaisons sur le contenu de mes cases ou de supprimer des possibilitées.
    Mais je ne sait pas bien manipuler les ensembles.
    Je ne sais meme pas comment afficher un essemble dans un string pour pouvoir le visualiser...

    Si vous avez un article simple (pas un pavé...) à me conseiller, je suis interessé. Pour le moment je n'ai rien trouvé de satifesant.

  8. #8
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    J'ai programmé un jeu d'échecs et l'échiquier a cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Type TTable=Array[0..7,0..7]Of TCase;
    Donc je pense que tu as une bonne approche.

    Par contre, je n'utilise à aucun moment les pointeurs car aucune utilité.
    Si tu veux jeter un oeil au jeu, voici l'adresse : http://sub0.developpez.com/delphi/exe/TableB5.zip

    à+
    De retour parmis vous après 10 ans!!

  9. #9
    Membre régulier Avatar de monstroplante
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 107
    Points : 76
    Points
    76
    Par défaut
    Le principe que je veux appliquer, c'est d'avoir une procedure qui resoud les cases 9 par 9. Je veux donc pouvoir lui envoyer 9 cases du tableau principale pour qu'il travail descu.
    J'ai pensé faire un tableau de pointeur pour passer l'ensemble de case en parametre mais il existe peut etre un moyens plus simple, plus élégant ?

    J'ai téléchargé ton fichier, je vais regarder, merci

    Ce que je voudrait surtout savoir maintenant c'est :
    -Comment connaitre le nombre d'element d'un essembe de type Tcase tel que je l'ai défini dans mon précedent post ?
    -Comment récuperer la liste des éléments d'un essemble et, par exemple, l'afficher dans une variable de type string ?

  10. #10
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Regarde l'aide en ligne de Delphi (touche F1) sur "set", tout est expliqué.
    De retour parmis vous après 10 ans!!

  11. #11
    Membre régulier Avatar de monstroplante
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 107
    Points : 76
    Points
    76
    Par défaut
    Je n'ai pas trouvé toute les reponses à mes questions d'ans l'aide Delphi mais j'ai trouvé cette page : http://cyberzoide.developpez.com/info/turbo/chap25.php3
    Je n'ai pas encore regardé mais ca à l'ai complet.

    Merci bcp pour votre aide !

  12. #12
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    De plus, un même élément n'apparaît qu'une seule fois dans un ensemble. Et il n'existe pas de fonction qui renvoit le nombre d'éléments d'un ensemble.
    A mon avis, tu devrais songer à utiliser autre chose...

    A propos du jeu d'échecs, voici les sources (arbitre sans IA) si ça peut t'aider :
    http://sub0.developpez.com/delphi/Table5m.zip

    Si tu as des questions, n'hésite pas, à+
    De retour parmis vous après 10 ans!!

  13. #13
    Membre régulier Avatar de monstroplante
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 107
    Points : 76
    Points
    76
    Par défaut
    De plus, un même élément n'apparaît qu'une seule fois dans un ensemble. Et il n'existe pas de fonction qui renvoit le nombre d'éléments d'un ensemble.
    Oui, j'ai lu ca... Mais je trouve ca tellement étonant que j'ai du mal à y croire ...
    De toute facon, dans mon cas, il n'est pas difficil de fair une fonction qui s'en charge :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function Tform1.CountPos(e:Tcase):byte;
    var i:integer;
    begin
    result:=0;
    for i:=1 to 9 do
      if i in e then inc(result);
    end;
    Si tu t'y connais en programmation récursive, tu peux peut etre apporter une réponse au post que j'ai mis dans la section algo.

    Merci bcp pour ton aide !

  14. #14
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Citation Envoyé par monstroplante
    Si tu t'y connais en programmation récursive, tu peux peut etre apporter une réponse au post que j'ai mis dans la section algo.

    http://www.developpez.net/forums/viewtopic.php?t=283003
    http://www.streamsec.com/combutil.htm
    http://www.developpez.net/forums/viewtopic.php?t=60051
    http://www.developpez.net/forums/viewtopic.php?t=333738
    etc...


    Lien tout en bas à gauche de cette fenêtre
    De retour parmis vous après 10 ans!!

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

Discussions similaires

  1. passer une variable string en tableau
    Par Mario Rousson dans le forum VBA Access
    Réponses: 3
    Dernier message: 23/06/2008, 21h03
  2. Réponses: 3
    Dernier message: 05/02/2008, 20h08
  3. Réponses: 2
    Dernier message: 11/09/2007, 18h54
  4. Scrollbar sur une partie d'un tableau
    Par Dams59 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 24/04/2007, 09h40
  5. [Tableau] récupérer une partie d'un tableau
    Par keyra dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 07/02/2006, 22h17

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