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 & moyenne d'un @tab


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    Par défaut Somme & moyenne d'un @tab
    Tout d'abord, bonjour à tous.
    Je suis nouveau sur le forum et, pour le peu que j'en ai lu,
    cette communauté m'a l'air conviviale.

    Maintenant que les présentations sont faites,
    on va pouvoir rentrer dans le vif du sujet.

    Je débute dans la programmation en Perl mais je me débrouille
    vaille que vaille avec mes bouts de connaissances en Java.
    Cependant, ce coup-ci, je bloque et même mes recherches
    sur google n'y ont rien fait.

    Je travaille sur un petit script qui donne les valeurs minimales et maximales d'un fichier .txt qui est sensé représenter les différentes températures au cours d'une journée. Dans ce fichier .txt, chaque ligne représente une heure de la journée. Vous l'aurez devinez, il y en a 24.
    Cependant, j'aimerais que mon script puisse faire la moyenne d'un fichier avec plus de ligne (dans le cas où j'aurais les valeurs d'une semaine, heure par heure, ligne après ligne).

    En commençant mon script, je pensais que trouver la somme de ma tableau
    serait le plus facile, et pourtant voilà 2h que je bloque.

    Sauriez-vous m'aider ?

    Voici un extrait de mon travail à l'heure actuelle :

    #=========================================================
    # Script : temp_max_min_moy.pl
    # Date : 01/03/2010
    # USAGE :
    #=========================================================

    open(FICHIER, "test.txt");
    @texte = <FICHIER>;

    #=========================================================
    #Calcul de la temperature minimale
    #=========================================================
    sub ascen { return $a <=> $b }
    @out = sort ascen @texte;

    $tempmin = @out[0];
    chomp($tempmin);
    $nbretempmin = 0;

    #Demande de l'heure exacte de la temperature minimale
    foreach $ligne (@texte)
    {
    if ( $ligne != $tempmin )
    {
    $nbretempmin++;
    }
    else
    {
    last
    }
    }

    #=========================================================
    #Calcul de la temperature maximale
    #=========================================================
    sub descen { return $b <=> $a }
    @out = sort descen @texte;

    $tempmax = @out[0];
    chomp($tempmax);
    $nbretempmax = 0;

    #Demande de l'heure exacte de la temperature maximale
    foreach $ligne (@texte)
    {
    if ( $ligne != $tempmax )
    {
    $nbretempmax++;
    }
    else
    {
    last
    }
    }
    #=========================================================
    #Calcul de la moyenne
    #=========================================================

    # C'est ici que ça bloque !

    #$nbre = 0;
    #@texte = @somme;
    #
    #foreach $ligne2 (@somme)
    #{
    # $nbre++;
    # @somme[$nbre] = $add;
    # $somme = $ligne2 + $add;
    # if ($ligne2 = undef){
    # last
    # }
    #
    #}




    print("Temp. min. : $tempmin ($nbretempmin h)\n");
    print("Temp. max. : $tempmax ($nbretempmax h)\n");
    print("Temp. moy. : $moyenne \n");

    close(FICHIER);

  2. #2
    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 : 59
    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
    Par défaut
    En premier lieu, utilise la balise [code] au lieu de la balise [QUOTE] pour insérer du code (icône ), il sera bien indenté et colorisé

    Ensuite, pour faire la somme d'une liste, il existe un module qui fait ça tout seul : List::Util.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    use strict;
    use warnings;
    use List::Util qw(sum);
     
    my @liste = (10, 20, 14, 15, 8);
    my $moyenne = sum(@liste) / @liste;
    Le module List::Util fourni également les fonctions min et max.

    Ton script devrait se pouvoir se resumé à quelques lignes (on peut même l'envisager en uniligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    perl -MList::Util=min,max,sum -e 'chomp(@liste = <STDIN>);print "min=", min(@liste), ", max = ", max(@liste), ", moy = ", sum(@liste)/@liste, "\n"' < temp.txt

  3. #3
    Membre chevronné
    Avatar de Schmorgluck
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2006
    Messages : 371
    Par défaut
    Je ne comprends pas bien comment tu cherches à procéder. Mais tout d'abord, le conseil habituel : utilise le pragma strict, surtout pour un programme de plus de dix lignes. Il te forcera à déclarer toutes tes variables avec my.

    D'autre part, tu devrais utiliser les balises CODE (symbole # dans la barre) plutôt que les balise QUOTE quand tu postes du code.

    Pour faire la somme des éléments d'un tableau, il n'y a rien de plus simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    # soit un tableau @tableau
    my $somme=0;
    foreach my $element (@tableau)
    {
      $somme+=$element ;
    }
    #on aurait pu également écrire :
    # $somme+=$element foreach my $element (@tableau);
    # et voilà, la variable $somme contient la somme des éléments de @tableau.
    # et si tu veux la moyenne...
    my $moyenne=$somme/@tableau if @tableau>0;

    EDIT: pris de vitesse, et oui, utiliser List::Utils est mieux, mais je voulais mettre en avant certains fondamentaux du langage qui me semblent échapper à SonyBlack.

  4. #4
    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 : 59
    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
    Par défaut
    Citation Envoyé par Schmorgluck Voir le message
    EDIT: pris de vitesse, et oui, utiliser List::Utils est mieux,
    Sans le s à la fin de Utils, c'est encore mieux
    Mais ne pas oublier de l'ajouter pour MoreUtils
    mais je voulais mettre en avant certains fondamentaux du langage qui me semblent échapper à SonyBlack.
    Ca, ça ne fait jamais de mal

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    Par défaut Good Job
    Merci beaucoup.

    En effet, je sais que j'ai encore beaucoup de progrès à faire
    en Perl mais je crois que ça viendra petit à petit.
    Je vais acheter un bon bouquin un de ces quatre et
    le lire de fond en comble pour mieux comprendre ce merveilleux
    langage.


    Encore merci à vous.

    Have A Nice Day.

  6. #6
    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 : 59
    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
    Par défaut
    Un lama book ou mieux, un Camel book...
    Dommage qu'ils n'existent plus en édition française...

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

Discussions similaires

  1. somme de moyennes
    Par camyo dans le forum Requêtes
    Réponses: 4
    Dernier message: 06/12/2012, 09h25
  2. [XL-2007] Sous_total somme et moyenne à la fois dans une meme ligne
    Par hadi2007 dans le forum Excel
    Réponses: 1
    Dernier message: 09/02/2012, 15h04
  3. Réponses: 5
    Dernier message: 27/05/2011, 10h57
  4. [2K8] Matrice et somme des moyennes
    Par skynet dans le forum SSRS
    Réponses: 1
    Dernier message: 19/03/2010, 11h18
  5. Somme et moyenne
    Par torn33260 dans le forum Débuter
    Réponses: 4
    Dernier message: 22/05/2008, 10h12

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