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 :

gros débutant: recherche du plus petit indice d'un tableau


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 119
    Points : 47
    Points
    47
    Par défaut gros débutant: recherche du plus petit indice d'un tableau
    bonsoir,

    je cherche à faire un fonction qui puisse me donner le plus petit indice d'un tableau, j'arrive e php, mais en perl c'est une autre paire de manche..pas de fonction min ().....

    comment faire?

    cordialement...

  2. #2
    Membre éclairé
    Avatar de parp1
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    829
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 829
    Points : 872
    Points
    872
    Par défaut
    j'ai fait tres peux de perl. je vais te donner une solution 'lourde certe' mais ca devrais fonctionner, ne fais pas attention a mes erreur de synthaxe, le principal c'est que tu comprenne la logique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    @tab=(2,65,9,7,8,4); #tab dont on cherche le min
    $size=scalar(@tab);
    for($i=1;$i==$size;$i++)
             { if ($tab[$i]<$tab[$i-1])
                      {$min=$i}
                else{$min=$size} #ca c'est pour avoir l'indice de la valeur min, si tu veut la valeur min mets $min=$tab[$i}
              }
    Je ne suis pas sur de mon code, et j'ai pas d'outils pour verifier, prends garde a mon else....
    Voila a+
    [SIZE="2"]Dis moi qui tu suis, je te dirais qui je Hais!
    Heureux est l'étudiant, qui comme la rivière suit son cours sans sortir de son lit

    Mon premier Tutoriel


    A 80% des cas je résouts mon problème en rédigeant une nouvelle discussion, du coup je ne poste que 20% de mes problèmes...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    et hop:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    my @tableau= (4,3,6,9); 
    my $min=10; #10 car plus grand que tout les nombres du tableau...
    my $taille= @tableau; # ici $taille=4...
    for ($i=0;$i<$taille;$i++) {
    if ($tableau[$i]<$min) {
      $min=$tableau[$i];
      $indmin=$i;
     }
    }
    print "le plus petit nombre est $min et son indice est $indmin";
    voila, si tu as des questions vas-y!
    normalement le code est bon, j'ai testé sur mon pc! (sauf erreur de recopiage...)

    pour le code du dessus j'ai pas compris a quoi sert le else... ca me parait bizarre...

  4. #4
    Membre régulier Avatar de elvivo
    Inscrit en
    Mai 2002
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 105
    Points : 104
    Points
    104
    Par défaut
    J'ai bien compris, on parle d'indice et pas de valeur.
    Dans ce cas il me semble que le plus petit indice d'un tableau est 0. Ce n'est pas comme en php ou tout est hash. En perl le tableau et le hash sont deux choses bien distinctes.
    In code we trust !!

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 119
    Points : 47
    Points
    47
    Par défaut
    c'est valeur la plus petite du tableau.

    merci pour l'aide, je vais continuer mon apprentissage du Perl...

    @+

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 119
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par vjonas
    et hop:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    my @tableau= (4,3,6,9); 
    my $min=10; #10 car plus grand que tout les nombres du tableau...
    my $taille= @tableau; # ici $taille=4...
    for ($i=0;$i<$taille;$i++) {
    if ($tableau[$i]<$min) {
      $min=$tableau[$i];
      $indmin=$i;
     }
    }
    print "le plus petit nombre est $min et son indice est $indmin";
    voila, si tu as des questions vas-y!
    normalement le code est bon, j'ai testé sur mon pc! (sauf erreur de recopiage...)

    pour le code du dessus j'ai pas compris a quoi sert le else... ca me parait bizarre...
    pourquoi my mine=10???

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    j'ai mis le minimum à 10 pour initialiser la valeur... j'aurais pu mettre 100, 1100009 ou 399... le but c'était de mettre un chiffre plus grand que le plus grand chiffre du tableau!

    parceque si l'ordi prédéfini min à 0 par exemple il ne trouvera jamais un nombre plus petit et dira que le min est 0 alors qu'il n'y en a pas dans ton tableau...

    tu comprends?

  8. #8
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Ne pas réinventer la roue !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    use List::Util qw(min);
     
    my @tableau;
     
    my $min_tableau = min( @tableau );
    List::Util fait partie du CORE, c'est à dire que c'est un module distribué en standard avec Perl, donc autant l'utiliser plutôt que réécrire la fonction min() à tout bout de champ, surtout si c'est pour l'écrire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    my @tableau= (4,3,6,9); 
    my $min=10; #10 car plus grand que tout les nombres du tableau...
    my $taille= @tableau; # ici $taille=4...
    for ($i=0;$i<$taille;$i++) {
    if ($tableau[$i]<$min) {
      $min=$tableau[$i];
      $indmin=$i;
     }
    }
    print "le plus petit nombre est $min et son indice est $indmin";
    Pourquoi 10 ? Pourquoi aller inventer une valeur dont on ne peut être sûr qu'en connaissant le contenu du tableau (ce qui n'est pas forcément le cas) alors qu'on peut se contenter d'utiliser la première valeur du tableau... Et puis si l'on cherche seulement la plus petite valeur, on peut se contenter de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    my @tableau; 
    my $min = $tableau[0];
    foreach my $value (@tableau) {
     $min = $value if $value < $min;
    }
    Néanmoins si on cherche vraiment l'indice de la plus petite valeur, on est obligé d'utiliser le code ci-dessus à peu de chose près (nonobstant l'initialisation arbitraire de $min bien sûr).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    my @tableau;
    my $idx_min = 0;
    foreach my $idx ( 1..$#tableau ) {
      $idx_min = $idx if $tableau[$idx] < $tableau[$idx_min];
    }
    Si l'on cherche les deux, je recommanderais d'utiliser le code ci-dessus et List::Util::min() car min() est très rapide car écrit en C.


    --
    Jedaï

  9. #9
    vic
    vic est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Points : 498
    Points
    498
    Par défaut
    Sans vouloir être méchant, je pense que quand on ne sait pas ou qu'on ne connait pas le langage il vaut mieux ne pas répondre... En faisant ça on risque de donner de mauvaises habitudes dès le départ à celui qui a posé la question (comme calquer directement le C sans tirer parti du perl).

    Sinon comme Jedai
    Voilà.

  10. #10
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Son code est parfaitement correct, il est juste un petit peu trop C à mon goût, mais ce n'est pas le pire défaut qu'on puisse rencontrer chez un perliste... Mon reproche portait surtout sur l'apparition dangereuse et non nécessaire d'une valeur arbitraire dans son algorithme. Pourvu qu'il évite ce genre de truc, j'aimerais bien qu'il continue à participer : c'est comme ça qu'on s'améliore !

    --
    Jedaï

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    désolé, je suis un débutant en programmation!
    je n'ai commencé que cette année, et pour info je n'ai encore jamais vu le C!

    effectivement pour mon programme, c'est beaucoup plus intelligent de mettre à la place de mon 10 !!!

    je n'y avait jamais pensé!

    bon, je ne prendrai plus le risque de répondre aux autres post, pas envie de me faire lyncher! Mais la, voyant que je pouvais aider, j'ai pas pu resister...

    A+ les gens!

  12. #12
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par vjonas
    bon, je ne prendrai plus le risque de répondre aux autres post, pas envie de me faire lyncher! Mais la, voyant que je pouvais aider, j'ai pas pu resister...

    A+ les gens!
    Si si, continue à répondre, on ne te "lynchera" pas ! Si tu es débutant en info, ce genre d'erreur se comprend. Et on apprend énormément en essayant de répondre aux questions, c'est donc une bonne opportunité pour toi.

    --
    Jedaï

Discussions similaires

  1. INDICE du plus petit element dans un tableau
    Par adel25 dans le forum SL & STL
    Réponses: 1
    Dernier message: 07/12/2009, 16h16
  2. Réponses: 13
    Dernier message: 07/01/2007, 19h43
  3. Trouver le Kième plus petit élément d'un tableau
    Par katrena99 dans le forum Pascal
    Réponses: 10
    Dernier message: 15/11/2006, 23h36
  4. [Tableaux] Recuperer le plus grand indice d'un tableau
    Par schnito dans le forum Langage
    Réponses: 4
    Dernier message: 31/01/2006, 20h01
  5. Réponses: 3
    Dernier message: 16/12/2002, 16h12

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