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...
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...
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.
Je ne suis pas sur de mon code, et j'ai pas d'outils pour verifier, prends garde a mon else....
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} }
Voila a+
et hop:
voila, si tu as des questions vas-y!
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";
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...
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.
c'est valeur la plus petite du tableau.
merci pour l'aide, je vais continuer mon apprentissage du Perl...
@+
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?
Ne pas réinventer la roue !
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 use List::Util qw(min); my @tableau; my $min_tableau = min( @tableau );
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
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";
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 my @tableau; my $min = $tableau[0]; foreach my $value (@tableau) { $min = $value if $value < $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.
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]; }
--
Jedaï
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à.
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ï
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 !!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part $tableau[0]
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!
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.Envoyé par vjonas
--
Jedaï
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager