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 :

Somme element tableau


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Par défaut Somme element tableau
    Bonjour à tous,
    J'ai un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @t = (0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
    Je cherche à réaliser plusieurs somme sur ce tableau, 9éléments par 9 éléments jusqu'à ce que la somme soit égal à 0; je m'explique :

    J'ai ecris ceci, qui ne fonctionne pas ...
    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
    my @t = (0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
    my $i = 0;
    my $j = $i+9;
    my @index;
     
    if($j<17){
    	@index = $i...$j;
    	print "$i\t$j\n";
    	my @tab = @t[@index];
    	print "@tab\n";
    	if (sum(@tab)==0){
    		print "$i\t$j\t@tab";
    	}
    	else{
    		$i++;
    		$j++;
    	}
    }
    quelqu'un pourrait il m'aider ?
    Dans mon exemple, le script devrai s'arrêter à $i = 2 et $j = 11 ....

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 63
    Par défaut
    C'est quoi :
    Notamment le "..."
    Chez moi ça donne une erreur.

    Sinon je pense pas avoir saisi la question : Tu souhaite faire la somme des 9 premiers éléments, si celle si n'est pas égale à 0 tu fais la somme des 9 suivant ?

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Par défaut
    Pour le
    c'est les entiers entre 0 et 9 ... d'après ce que j'ai compris.
    Et oui, je veux calculer les "sous liste" de longueur 9 jusqu'à ce que la somme soit égale à 0 ...

    J'ai essayé de modifier ainsi :
    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
    my @t = (0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
    my $i = 0;
    my $j = $i+9;
    my @index;
     
    foreach my $element (@t){
    	@index = $i...$j;
    	#print "$i\t$j\n";
    	my @tab = @t[@index];
    	#print "@tab\n";
    	if (sum(@tab)==0){
    		print "$i\t$j\t@tab\n";
    	}
    	else{
    		$i++;
    		$j++;
    	}
    }
    Mais cela m'affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    2	11	0 0 0 0 0 0 0 0 0 0
    2	11	0 0 0 0 0 0 0 0 0 0
    2	11	0 0 0 0 0 0 0 0 0 0
    2	11	0 0 0 0 0 0 0 0 0 0
    2	11	0 0 0 0 0 0 0 0 0 0
    2	11	0 0 0 0 0 0 0 0 0 0
    2	11	0 0 0 0 0 0 0 0 0 0
    2	11	0 0 0 0 0 0 0 0 0 0
    2	11	0 0 0 0 0 0 0 0 0 0
    2	11	0 0 0 0 0 0 0 0 0 0
    2	11	0 0 0 0 0 0 0 0 0 0
    2	11	0 0 0 0 0 0 0 0 0 0
    2	11	0 0 0 0 0 0 0 0 0 0
    2	11	0 0 0 0 0 0 0 0 0 0
    C'est à dire que ca m'affiche le résultat autant de fois qu'il y a d'éléments dans le tableau ....

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 63
    Par défaut
    Tu dois utiliser des modules que j'ai pas donc je ne peux pas tester le code. Mais à vu de nez je dirais que tu ne sort pas de la boucle foreach au bon moment.

    Modifie voir ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (sum(@tab)==0){
       print "$i\t$j\t@tab\n";
    	}
    Par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (sum(@tab)==0){
       print "$i\t$j\t@tab\n";
       last;
    	}
    Dit moi si ça fonctionne.
    Tu utilise quel module par curiosité ?

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Par défaut
    Cela fonctionne parfaitement , merci
    j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    use List::Util qw(sum);

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 63
    Par défaut
    Voilà, l'opérateur last permet de sortir des boucles en sautant toutes les instructions qui le suivent. Il te positionne juste à la sortie de la boucle, dans ton cas :

    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
    34
    35
    36
    37
    38
     
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    my @t = (0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
    my $i = 0;
    my $j = $i+9;
    my @index;
     
    foreach my $element (@t){
    	@index = $i...$j;
    	#print "$i\t$j\n";
    	my @tab = @t[@index];
    	#print "@tab\n";
    	if (sum(@tab)==0){
    		print "$i\t$j\t@tab\n";
    		last;
    	}
    	else{
    		$i++;
    		$j++;
    	}
    }
    #Il te positionne ici
    List::Util je note, j'ai jamais eu à faire des opérations très compliquées sur un tableau mais sa peut toujours être utile.

    Au plaisir.

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

Discussions similaires

  1. [V6] Faux doublons pour somme dans tableau croisé
    Par arbras dans le forum Deski
    Réponses: 8
    Dernier message: 11/06/2009, 13h01
  2. [WD10] Somme dans tableau
    Par bigby dans le forum WinDev
    Réponses: 10
    Dernier message: 19/12/2008, 11h43
  3. Récupérer element tableau lors d'un clique sur une ligne
    Par Nimothenicefish dans le forum Langage
    Réponses: 8
    Dernier message: 26/11/2008, 10h41
  4. Somme dans tableau croisé
    Par dsoexo7 dans le forum Deski
    Réponses: 11
    Dernier message: 09/11/2007, 14h09
  5. [Tableaux] ajout d'un élément tableau
    Par Anduriel dans le forum Langage
    Réponses: 3
    Dernier message: 20/06/2006, 23h03

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