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 Perl Discussion :

Probleme avec une fonction prenant des references en parametre et une boucle !


Sujet :

Langage Perl

  1. #21
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juillet 2009
    Messages : 176
    Points : 61
    Points
    61
    Par défaut Manquait plus que ca !
    Bonjour !
    Je rouvre ce sujet car l'essentiel y est deja mis alors c'est plus facile
    Voila, je presente l'avancement de mon projet a mon boss et voila qu'il se met en tete que au lieu de stocker mes donnees dans un tableau (cf @P=($P0,...) )
    vaudrait mieux une table de hachage..
    Bon alors je recommence a ecrire mon programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    our %P = (P0 => $P0,
            P1=> $P1,
            P2=> $P2,
            P3=> $P3,
            P4=> $P4);
    Mais voila je bloque...Avec un tableau, facile de faire des paires avec mes Pi en faisant une double boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for (my $i=0;$i<@P;$i++){
            for (my $j=$i+1;$j<@P;$j++){
                    my $isngb=neighbour($P[$i],$P[$j]);
                    if ($isngb==1){
                            my $pj="P$j";
                            my $pi="P$i";
                            push @{$Poly[$i]->{nghbr}},"$pj";
                            push @{$Poly[$j]->{nghbr}},"$pi";
                    }
            }
    }
    Mais avec les tables de hachages ??? Le seul outils que je connaisse pour parcourir une table est "foreach" et je vois pas comment faire avec..
    Une idee a me suggerer ?

  2. #22
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juillet 2009
    Messages : 176
    Points : 61
    Points
    61
    Par défaut Contournage !
    Je suis toujours interessee par la reponse a la question que j'ai pose au-dessus mais je vous soumet en attendant ce que j'ai fait : (et au passage un autre probleme lol)..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    our %P = (P0=>$P0,
            P1=> $P1,
            P2=> $P2,
            P3=> $P3,
            P4=> $P4);
    Voila la table de hachage demandee
    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
    sub new 
    {
            my $class = shift;
            my $name = shift;
            my $points = shift;
    #Points of the polygon
            my $rect = shift;
    #Rectangle which contain the polygon
            my $nghbr =[] ;
    #neighbours of the polygon
            my $self = {
                    name => $name,
                    points => $points,
                    rect => $rect,
                    nghbr => $nghbr
            };
     
            bless ($self,$class);
            return $self;
    }
    Je remet ce bout de code parce que j'ai rajoute une categorie name.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    our @Poly =();
    foreach my $k (keys (%P))
    {
            ????
     
     
    }
    La je bloque
    En gros ce que j'aurais voulu mettre c'est quelquechose du genre (vous fachez pas hein, c'est du similicode )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    our @Poly =();
    foreach my $k (keys (%P))
    {
         my $poly=new Polygon($k,$P{$k},rectangle($P{$k}) );       
         push @Poly, $poly ;
     
    }
    Sauf que forcement je sens bien que ca va bloque car pour la meme reference $poly, je "veux" creer plusieurs objet Polygon.
    Des idees, si vous voyez ou je veux en venir ?

    Et la fin de mon programme pour l'instant :
    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
     
    &filln();
     
     
    sub filln
    {
    my $test1=0;
    my $test2=0;
     
            for (my $i=0;$i<@P;$i++){
                    for (my $j=$i+1;$j<@Poly;$j++){
                            my $isngb=neighbour($Poly[$i]->{points},$Poly[$j]->{points});
                            if ($isngb==1){
                                    my $pj=$Poly[$j]->{name};
                                    my $pi=$Poly[$i]->{name};
                                    foreach my $n1 (@{$Poly[$i]->{nghbr}})
                                    {
                                            if ($n1 eq $pj)
                                            { $test1=1; }
                                    }
                                    if ($test1==0)
                                    { push @{$Poly[$i]->{nghbr}},"$pj"; }
                                    foreach my $n2 (@{$Poly[$j]->{nghbr}})
                                    {
                                            if ($n2 eq $pi)
                                            { $test2=1; }
                                    }
                                    if ($test2==0)
                                    {push @{$Poly[$j]->{nghbr}},"$pi";}
                            }
                    }
            }
    }
    Sinon vous en pensez quoi ?


    Edit : lol... Apres avoir fait un petit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    print"suite\n";
    for ( my $q=0;$q<@Poly;$q++)
            {
            print"$Poly[$q]->{name} : \n";
            foreach my $voisin (@{$Poly[$q]->{nghbr}})
                    { print"$voisin\n";}
            }
    ..Il s'avere que ca marche ! Je pensais vraiment pas !
    Je ne met pas ce post en resolu juste pour avoir la reponse a mes questions mais sinon je suis trop contente de m'etre debrouillee toute seule

  3. #23
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juillet 2009
    Messages : 176
    Points : 61
    Points
    61
    Par défaut
    Personne ne veut repondre ? Philouuuuuuuu tu es ou ?
    Tant pis.. Je remet ce post en resolu..
    a une prochaine

  4. #24
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Citation Envoyé par Saita Voir le message
    En gros ce que j'aurais voulu mettre c'est quelquechose du genre (vous fachez pas hein, c'est du similicode )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    our @Poly =();
    foreach my $k (keys (%P))
    {
         my $poly=new Polygon($k,$P{$k},rectangle($P{$k}) );       
         push @Poly, $poly ;
     
    }
    Sauf que forcement je sens bien que ca va bloque car pour la meme reference $poly, je "veux" creer plusieurs objet Polygon.
    Des idees, si vous voyez ou je veux en venir ?
    Mmmhh... en affectant localement $poly avec une nouvelle instance de Polygon, puis, en ajoutant au tableau @Poly cette nouvelle référence de Polygon, cette dernière est "sauvée" dans le tableau. Certes, $poly est éphémère pour la sauvegarde de ton objet (la référence à Polygon créée par la méthode new du package Polygon), mais ton objet n'est pas perdu pour autant.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  5. #25
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juillet 2009
    Messages : 176
    Points : 61
    Points
    61
    Par défaut
    Ah Philou mon sauveur
    En fait je parlais plutot de cette question la :
    Mais avec les tables de hachages ??? Le seul outils que je connaisse pour parcourir une table est "foreach" et je vois pas comment faire avec..
    Une idee a me suggerer ?
    Je suis contente je pense que je commence a maitrise la manipulation des tables de hachage, tableaux, references..
    C'est pas si evident

  6. #26
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Je ne vois pas non plus, car en passant pas une table de hachage, on perd la notion d'ordre dans la table (la lecture par clé est aléatoire), et donc d'indexation directe par numéro d'ordre.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  7. #27
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juillet 2009
    Messages : 176
    Points : 61
    Points
    61
    Par défaut
    D'accord merci
    Je m'emerveille chaque jour un peu plus sur ce site
    Je fais un sujet qui touche au maths comme tu as du t'en rendre compte, et voila que je remarque en faisant des recherches que ya meme un forum de maths ici trop la classe !
    Il est trop bien ce site
    Je peux parler de mon sujet sur Apache (je galere trop sur celui la..), de Perl ici, de petit soucis de desinstallation Linux dans un autre forum, et de maths ! lol
    Quoi demande de plus ?
    Vraiment bravo pour ce forum (actif qui plus est ! Suffit pas d'ouvrir les categories..)

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 17
    Dernier message: 16/07/2012, 15h10
  2. Réponses: 1
    Dernier message: 27/03/2012, 18h14
  3. Renommer une fonction dans un select ou concevoir autrement une fonction
    Par tavarlindar dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 30/05/2008, 18h17
  4. mettre des tableaux en parametre d'une fonction
    Par vbeno dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/01/2008, 04h14
  5. [C#] Passer des contrôles comme parametre dans une fonction
    Par sara21 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 20/09/2006, 14h05

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