Retourner une liste privée des multiples d'un nombre

Retourner une liste privée des multiples d'un nombre - Perl - Programmation

Marsh Posté le 08-10-2006 à 12:49:21    

Bonjour,
 
j'ai écrit une fonction Intervalle(n,x) qui permet de retirer l'élément n d'une liste allant de 1 à n.
Je souhaite utiliser cette fonction pour retirer tous les multiples de x qui sont dans cet intervalle.
La fonction NonMult(n,x) doit faire celà
Le problème est que cette dernière fonction ne fonctionne pas comme je le souhaite.
 
Voici mon code :

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. sub Intervalle
  4. {
  5.     my ($n,$x) = @_;
  6.     my @tab;
  7.     for(my ($i)=1; $i<$x; $i++){
  8. push(@tab,$i);
  9.     }
  10.     for(my ($j)=$x+1; $j<=$n; $j++){
  11. push(@tab,$j);
  12.     }
  13.     return @tab;
  14. }
  15. sub NonMult
  16. {
  17.     my ($n,$x) = @_;
  18.     my @t;
  19.     for(my ($i)=1; $i*$x<=$n; $i++){
  20. @t = Intervalle($n,$i*$x);
  21.     }
  22.     return @t;
  23. }
  24. print join(" ",Intervalle(10,7))."\n";
  25. print join(" ",NonMult(20,3))."\n";

Reply

Marsh Posté le 08-10-2006 à 12:49:21   

Reply

Marsh Posté le 09-10-2006 à 11:49:54    

Dans ta boucle for de ta fonction NonMult, tu écrases à chaque fois ta liste @t.
Ca doit pas aider ou alors j'ai pas compris ton code.
 
Et puis pour simplifier tout ça, tu devrais peut être regarder du côté de la fonction grep, ça pourrait t'aider.

Reply

Marsh Posté le 09-10-2006 à 12:17:56    

Perso j'aurais tout fait en une fonction beaucoup plus simplement:

Code :
  1. sub Intervalle {
  2.   my ($n,$x, $mult) = @_;
  3.   my @tab;
  4.   foreach(1..$n){
  5.     push(@tab,$_) if !( $_==$x || ( defined $mult && $mult==1 && !($_%$x)));
  6.   }
  7.   return @tab;
  8. }


Si tu passes 1 comme troisième argument, il vire aussi les multiples sinon il vire juste le 2eme argument

Reply

Marsh Posté le 09-10-2006 à 23:11:35    

Ca ne repond pas a ta question, mais ta fonction Intervalle peut s'ecrire simplement return (1 .. $x-1, $x+1 .. $n).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed