Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3056 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  Calculs sur un TdT avec contraintes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Calculs sur un TdT avec contraintes

n°2156648
thales69
Posté le 13-09-2012 à 15:53:36  profilanswer
 

Bonjour,
 
voilà un problème qui pour moi est complexe, j'arrive à résoudre une partie mais le reste j'ai du mal.
 
Je m'explique:
 
J'ai un fichier "finlande1_oa_derniers_matchs.txt"(dans le spoiler) que j'ai "spliter" dans le tableau @TdT1. Ce que je voudrais faire c'est récupérer la somme des deuxièmes champs des n premiers matchs de chaque équipes. Par exemple pour n=5, je voudrais que mon script me construise automatiquement le tableau @goals_for_home =(12, 4, 8, 9, 10, 1, 3, 12, 8, 7, 19, 7), où 12 est la somme des 2ème champs pour les 5 premières lignes où apparait HJK, ensuite 4 est la somme des 2ème champs pour les 5 premières lignes où apparait Haka .... etc. J'aimerais également que @goals_for_home soit contruit si jamais le fichier "finlande1_oa_derniers_matchs.txt"est de la forme (en fait j'aimerais que au plus 5 matchs soient pris en compte) suivante:
 
HJK ;2;0;JJK Jyv‰skyl‰ ;2012-08-18
HJK ;3;3;VPS  ;2012-08-04
HJK ;1;0;Haka ;2012-07-21
Haka ;0;3;Lahti ;2012-08-25
Haka ;0;2;Inter Turku ;2012-08-05
Honka ;1;2;VPS  ;2012-08-27
Honka ;2;2;Haka ;2012-08-12
Honka ;1;0;HJK ;2012-07-28
Inter Turku ;2;0;Lahti ;2012-05-30
Inter Turku ;2;0;VPS  ;2012-09-03
JJK Jyv‰skyl‰ ;5;0;Haka ;2012-09-02
JJK Jyv‰skyl‰ ;0;3;MyPa ;2012-08-11
Jaro ;0;3;MyPa ;2012-09-02
Jaro ;0;1;TPS ;2012-08-19
Jaro ;0;3;JJK Jyv‰skyl‰ ;2012-08-05
KuPS ;2;3;JJK Jyv‰skyl‰ ;2012-08-26
KuPS ;1;0;Lahti ;2012-08-18
KuPS ;0;2;Honka ;2012-08-05
Lahti ;3;2;Honka ;2012-08-31
Lahti ;3;0;HJK ;2012-08-12
Mariehamn ;2;0;KuPS ;2012-09-02
Mariehamn ;2;0;Jaro ;2012-08-11
Mariehamn ;3;3;JJK Jyv‰skyl‰ ;2012-07-22
MyPa ;1;1;TPS ;2012-08-26
MyPa ;2;1;Mariehamn ;2012-08-20
TPS ;9;2;Haka ;2012-08-22
TPS ;1;2;HJK ;2012-09-02
VPS ;2;1;Haka ;2012-08-19
VPS ;0;1;KuPS ;2012-08-12
VPS ;2;0;MyPa ;2012-07-29
 
 
Fichier "finlande1_oa_derniers_matchs.txt"

Spoiler :

HJK ;5;1;Mariehamn ;2012-08-26
HJK ;2;0;JJK Jyv‰skyl‰ ;2012-08-18
HJK ;3;3;VPS  ;2012-08-04
HJK ;1;0;Haka ;2012-07-21
HJK ;1;1;MyPa ;2012-07-02
HJK ;0;0;TPS ;2012-06-25
HJK ;2;0;Lahti ;2012-05-27
HJK ;3;0;Honka ;2012-05-21
HJK ;2;0;KuPS ;2012-05-12
HJK ;2;1;Inter Turku ;2012-05-06
HJK ;4;1;Jaro ;2012-04-23
HJK ;3;1;Mariehamn ;2012-04-15
Haka ;0;3;Lahti ;2012-08-25
Haka ;0;2;Inter Turku ;2012-08-05
Haka ;0;2;KuPS ;2012-07-29
Haka ;3;1;MyPa ;2012-07-15
Haka ;1;0;TPS ;2012-07-02
Haka ;3;1;JJK Jyv‰skyl‰ ;2012-06-25
Haka ;0;1;VPS  ;2012-06-16
Haka ;2;1;Honka ;2012-05-27
Haka ;0;1;HJK ;2012-05-16
Haka ;4;1;Jaro ;2012-05-05
Haka ;0;2;Mariehamn ;2012-04-22
Honka ;1;2;VPS  ;2012-08-27
Honka ;2;2;Haka ;2012-08-12
Honka ;1;0;HJK ;2012-07-28
Honka ;2;0;Jaro ;2012-07-15
Honka ;2;2;Mariehamn ;2012-07-03
Honka ;3;2;Lahti ;2012-06-25
Honka ;2;1;Inter Turku ;2012-06-16
Honka ;1;0;KuPS ;2012-05-24
Honka ;2;1;MyPa ;2012-05-16
Honka ;0;2;TPS ;2012-05-05
Honka ;0;2;JJK Jyv‰skyl‰ ;2012-04-22
Honka ;1;1;VPS  ;2012-04-15
Inter Turku ;2;0;Lahti ;2012-05-30
Inter Turku ;2;0;VPS  ;2012-09-03
Inter Turku ;3;1;Jaro ;2012-08-26
Inter Turku ;2;1;Honka ;2012-08-18
Inter Turku ;0;3;Mariehamn ;2012-07-30
Inter Turku ;3;2;JJK Jyv‰skyl‰ ;2012-07-15
Inter Turku ;2;0;HJK ;2012-07-07
Inter Turku ;1;1;VPS  ;2012-06-25
Inter Turku ;1;1;Jaro ;2012-06-19
Inter Turku ;4;1;Haka ;2012-05-24
Inter Turku ;2;1;KuPS ;2012-05-16
Inter Turku ;2;1;JJK Jyv‰skyl‰ ;2012-05-12
Inter Turku ;2;0;MyPa ;2012-04-22
JJK Jyv‰skyl‰ ;5;0;Haka ;2012-09-02
JJK Jyv‰skyl‰ ;0;3;MyPa ;2012-08-11
JJK Jyv‰skyl‰ ;2;1;TPS ;2012-07-29
JJK Jyv‰skyl‰ ;3;1;Lahti ;2012-07-08
JJK Jyv‰skyl‰ ;0;1;Honka ;2012-06-28
JJK Jyv‰skyl‰ ;1;5;KuPS ;2012-06-11
JJK Jyv‰skyl‰ ;0;3;HJK ;2012-06-16
JJK Jyv‰skyl‰ ;1;1;Jaro ;2012-05-24
JJK Jyv‰skyl‰ ;5;2;Mariehamn ;2012-05-16
JJK Jyv‰skyl‰ ;2;1;Lahti ;2012-05-05
JJK Jyv‰skyl‰ ;0;2;VPS  ;2012-04-30
JJK Jyv‰skyl‰ ;1;4;Haka ;2012-04-19
Jaro ;0;3;MyPa ;2012-09-02
Jaro ;0;1;TPS ;2012-08-19
Jaro ;0;3;JJK Jyv‰skyl‰ ;2012-08-05
Jaro ;0;0;VPS  ;2012-07-21
Jaro ;1;0;Haka ;2012-07-07
Jaro ;2;2;HJK ;2012-06-28
Jaro ;1;0;MyPa ;2012-06-25
Jaro ;0;3;Mariehamn ;2012-05-27
Jaro ;0;2;Lahti ;2012-05-21
Jaro ;0;1;Honka ;2012-05-12
Jaro ;1;0;KuPS ;2012-04-29
Jaro ;0;1;Inter Turku ;2012-05-02
KuPS ;2;3;JJK Jyv‰skyl‰ ;2012-08-26
KuPS ;1;0;Lahti ;2012-08-18
KuPS ;0;2;Honka ;2012-08-05
KuPS ;0;6;Inter Turku ;2012-07-22
KuPS ;0;3;HJK ;2012-05-02
KuPS ;1;0;Jaro ;2012-07-02
KuPS ;2;0;Mariehamn ;2012-06-25
KuPS ;1;2;Lahti ;2012-06-17
KuPS ;0;3;VPS  ;2012-05-27
KuPS ;3;0;Haka ;2012-05-21
KuPS ;1;2;MyPa ;2012-05-05
KuPS ;1;1;TPS ;2012-04-22
KuPS ;2;2;JJK Jyv‰skyl‰ ;2012-04-15
Lahti ;3;2;Honka ;2012-08-31
Lahti ;3;0;HJK ;2012-08-12
Lahti ;0;2;Jaro ;2012-07-29
Lahti ;2;0;Mariehamn ;2012-07-16
Lahti ;4;3;Inter Turku ;2012-07-02
Lahti ;1;0;VPS  ;2012-06-28
Lahti ;0;1;Haka ;2012-06-20
Lahti ;0;0;MyPa ;2012-05-24
Lahti ;2;0;TPS ;2012-05-16
Lahti ;0;5;Inter Turku ;2012-04-29
Lahti ;2;1;Honka ;2012-04-18
Lahti ;1;0;Haka ;2012-04-15
Mariehamn ;2;0;KuPS ;2012-09-02
Mariehamn ;2;0;Jaro ;2012-08-11
Mariehamn ;3;3;JJK Jyv‰skyl‰ ;2012-07-22
Mariehamn ;0;0;VPS  ;2012-07-07
Mariehamn ;1;0;Haka ;2012-06-28
Mariehamn ;2;0;HJK ;2012-06-20
Mariehamn ;0;0;MyPa ;2012-06-17
Mariehamn ;2;1;TPS ;2012-05-24
Mariehamn ;2;1;Inter Turku ;2012-05-21
Mariehamn ;2;0;Lahti ;2012-05-13
Mariehamn ;0;0;Honka ;2012-04-29
Mariehamn ;1;1;KuPS ;2012-04-19
MyPa ;1;1;TPS ;2012-08-26
MyPa ;2;1;Mariehamn ;2012-08-20
MyPa ;3;1;Lahti ;2012-08-04
MyPa ;0;0;Honka ;2012-07-22
MyPa ;1;1;KuPS ;2012-07-08
MyPa ;4;0;Inter Turku ;2012-06-28
MyPa ;0;1;JJK Jyv‰skyl‰ ;2012-05-27
MyPa ;1;0;VPS  ;2012-05-21
MyPa ;3;1;Haka ;2012-05-12
MyPa ;1;0;HJK ;2012-04-29
MyPa ;2;0;Jaro ;2012-04-19
TPS ;9;2;Haka ;2012-08-22
TPS ;1;2;HJK ;2012-09-02
TPS ;4;1;Inter Turku ;2012-08-12
TPS ;1;1;Mariehamn ;2012-08-06
TPS ;4;0;Lahti ;2012-07-22
TPS ;2;1;Honka ;2012-07-09
TPS ;3;0;KuPS ;2012-06-28
TPS ;1;0;MyPa ;2012-06-20
TPS ;2;3;Jaro ;2012-06-16
TPS ;2;3;JJK Jyv‰skyl‰ ;2012-05-21
TPS ;1;0;VPS  ;2012-05-13
TPS ;2;0;Haka ;2012-04-29
TPS ;3;1;HJK ;2012-04-19
TPS ;0;1;MyPa ;2012-04-15
VPS ;2;1;Haka ;2012-08-19
VPS ;0;1;KuPS ;2012-08-12
VPS ;2;0;MyPa ;2012-07-29
VPS ;1;3;TPS ;2012-07-14
VPS ;2;0;JJK Jyv‰skyl‰ ;2012-07-02
VPS ;2;0;Honka ;2012-06-20
VPS ;1;0;HJK ;2012-05-24
VPS ;1;1;Jaro ;2012-05-16
VPS ;1;2;Mariehamn ;2012-05-05
VPS ;2;1;Lahti ;2012-04-22
VPS ;0;2;Inter Turku ;2012-04-19


 
Voilà la partie de mon script essai.pl dans lequel j'utilise le tableau des équipes dans l'ordre alphabétique @OA = (HJK, Haka, Honka, Inter Turku, JJK Jyv‰skyl‰, Jaro, Kups, Lathi, Mariehamn, MyPa, TPS, VPS) pour comparaison et surtout pour classer toujours les équipes dans l'ordre alphabétique. LA variable $nb_eq est calculée plus haut dans mon programme, elle est ici égale à 12, c'est le nombre d'équipes du championnat. Quand je fais tourner mon programme ça me donne bien la somme voulue dans @goals_for_home sauf pour le dernier calcul où j'ai le message "Use of uninitialized value in concatenation (.) or string at essai.pl line 106", j'ai beau cherché je ne vois absolument pas pourquoi il ne veut pas calculer $goals_for_home[11] !?  
Egalement pour le deuxième cas ou il y a moins de 5 matchs joués mon script ne fonctionne pas du tout et pareil en essayant de faire le chemin dans les boucles for je ne comprend pas qu'il me calcule rien, j'ai encore le message "Use of uninitialized value in concatenation (.) or string at essai.pl line 106".
Si un cerveau plus performant que le mien traine par là je veux bien qu'il m'aiguille.
Merci.
 
 

Code :
  1. # Je classe par ordre lexical(alphabetique) les valeurs du tableau @part dans le tableau @OA
  2. my @OA = sort @part;
  3. #Je crée un tableau multidimensionnel @TdT1 qui contient tous les champs du fichier Calcul_forces_forme/france1_oa_derniers_matchs.txt
  4. open(A, "finlande1_oa_derniers_matchs.txt" ) or die ("Erreur ouverture $nomfichier8\n" );
  5. my(@TdT1, @tmp1);
  6. while($ligne = <A> ) {
  7. @tmp1 = split(/;/, $ligne);
  8. push @TdT1, [ @tmp1];
  9. $nb_ligne++;
  10. }
  11. #Je crée le tableau @goals_for_home pour 5 matchs joués à domicile
  12. my @goals_for_home = ();
  13. my $l; my $stock;
  14. for($m=0; $m <= ($nb_eq-1); $m++) {
  15. my $goals_for_home = 0;
  16. my @stock = ();
  17.  for($l=0; $l<=$nb_ligne-1; $l++) {
  18.  if($TdT1[$l][0] eq $OA[$m]) {
  19.   $stock = $l;
  20.   push @stock, $stock;
  21.   $goals_for_home += $TdT1[$l][1];
  22.    if($l == $stock[0]+4) {
  23.     push @goals_for_home, $goals_for_home;
  24.     last;
  25.             }
  26.  else {
  27.   next;
  28.    }    
  29.           }
  30.           }
  31.          }
  32. for($m=0; $m<=$nb_eq-1; $m++) {
  33. print $OA[$m]."=".$goals_for_home[$m]."\n";
  34.         }


Message édité par thales69 le 13-09-2012 à 16:04:57
mood
Publicité
Posté le 13-09-2012 à 15:53:36  profilanswer
 

n°2156663
gilou
Modérateur
Modzilla
Posté le 13-09-2012 à 16:52:46  profilanswer
 

Plutôt que créer ton tableau @goals_for_home, je construis directement ce qu'il faut dans un hash à la lecture du fichier.
La clé du hash est le nom de la ville, et il a deux champs, un ou on accumule le nb de goals marqués, et l'autre ou on compte le nb de matches comptés jusque la.
Noter que ça marche parce que les champs numériques de ce type de hash sont initialisés à 0 par défaut (c'est fait exprès en Perl pour pouvoir faire ce genre de boucles)

Code :
  1. #!/usr/local/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. my %matches;
  6. use constant MAX_MATCHES => 5;
  7. open(my $IN, 'finlande1_oa_derniers_matchs.txt' ) or die ("Erreur ouverture fichier\n" );
  8. while (<$IN> ) {
  9.  chomp;
  10.  my @fields = split /;/;
  11.  map {s/^\s*|\s*$//g} @fields;
  12.  $matches{$fields[0]}{'goals_for_home'} += $fields[1] if ($matches{$fields[0]}{'counted'}++ < MAX_MATCHES);
  13. }
  14. close($IN);
  15.  
  16. foreach my $city (sort keys %matches) {
  17.     print "$city: $matches{$city}{'goals_for_home'}\n";
  18. }


C:\Perl>perl matches.pl
HJK: 12
Haka: 4
Honka: 8
Inter Turku: 9
JJK Jyv‰skyl‰: 10
Jaro: 1
KuPS: 3
Lahti: 12
Mariehamn: 8
MyPa: 7
TPS: 19
VPS: 7


A+,


Message édité par gilou le 13-09-2012 à 17:02:11

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2156673
thales69
Posté le 13-09-2012 à 17:57:38  profilanswer
 

Et ben merci encore Gilou ! ça marche impeccablement !
Par contre il faut maintenant que je change ma façon de faire pour la suite de mon projet car les Hashs je connais pas trop.
 
Pour que je comprenne bien, en fait le Hash %matches construit ressemble à ça ?
 
%matches =('HJK'        => '12', 'Haka'     => '4', 'Honka'    => '8', 'Inter Turku'      => '9', 'JJK Jyv‰skyl‰' => '10', 'Jaro'        => '1', 'KuPS'     => '3', 'Lathi'    => '12', 'Mariehamn'      => '8', 'MyPa' => '7', 'TPS'      => '19', 'VPS' => '7');
 
 
dans la suite de mon script je vais avoir besoin des valeurs trouvées 12, 4, 8, ..... ,7 . J'ai essayé d'accéder à la valeur de la clef HJK avec $matches{HJK} mais sans succès, le terminal me retourne HASH(0x10081d108) alors que j'aurais voulu 12.
Comment accède-t-on à la valeur 12 ?
 
Merci pour tes lumières Gilou.
A+

n°2156677
gilou
Modérateur
Modzilla
Posté le 13-09-2012 à 18:09:16  profilanswer
 

%matches a la structure suivante:  
{ 'Jaro'  => { 'goals_for_home' => '1',  
                   'counted' => '12' },
   'Inter Turku' => { 'goals_for_home' => '9',  
                            'counted' => '13' },
....
   'TPS' => { 'goals_for_home' => '19',  
                  'counted' => '14' },
}
 
Il fallait faire $matches{'HJK'}{'goals_for_home'} pour accéder a la valeur 12, c'était visible dans ma boucle d'impression finale d'ailleurs.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2156699
gilou
Modérateur
Modzilla
Posté le 13-09-2012 à 21:11:02  profilanswer
 

Citation :

car les Hashs je connais pas trop

C'est vraiment un des trucs de base à connaitre en Perl, car c'est super-pratique, en particulier sous la forme que j'ai utilisé, le hash de hashes.
A+,


Message édité par gilou le 13-09-2012 à 21:12:25

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2156700
thales69
Posté le 13-09-2012 à 21:23:08  profilanswer
 

Merci pour les explications Gilou, je comprend un peu mieux le code que tu as posté.
 
A+

n°2156701
thales69
Posté le 13-09-2012 à 21:30:48  profilanswer
 

Oui j'étais tombé sur un chapitre sur les tableaux de Hachages(je crois que c'était sur PERLDSC la documentation de Perl), à la première lecture j'avais eu beaucoup de mal et hônnetement j'avais pas compris grand chose, peut-être que maintenant avec "un peu" plus d'expérience je comprendrais un peu plus, je pense que je vais relire ce chapitre. Il est vrai que pour l'instant dans mon projet je n'ai utilisé que les tableaux simples ou multidimensionnels mais je suis certain que j'aurais pu utilisé les tableaux de hachages pour simplifié et optimisé mon code. Merci pour le conseil je vais me pencher dessus car comme les expressions régulières ça à l'air également puissant et pratique.
 
A+


Message édité par thales69 le 13-09-2012 à 21:31:54
n°2156757
gilou
Modérateur
Modzilla
Posté le 14-09-2012 à 12:19:21  profilanswer
 

Si tu lis l'anglais, tu peux lire le livre en pdf qui se trouve ici: http://onyxneon.com/books/modern_perl/  qui est très bien.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2156822
thales69
Posté le 14-09-2012 à 23:28:06  profilanswer
 

OK, je vais regarder ça avec attention et ça me fera une bonne leçon technique d'Anglais ;)
Merci à toi.
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  Calculs sur un TdT avec contraintes

 

Sujets relatifs
Calculs mathématiques en phpCalculs financiers avec vba excel
Agencement d'une page web avec calculsContraintes php/mysql pour site à grand nombre de visiteurs
Problème de requête de calculs de moyennes[résolu] calculs avant la compilation, avec le pré-processeur
Calculs et notes de calculCréer calculs à trou donnant résultat
combinaison d'un nombre a 12 chiffres + contraintesCalculs élaborés avec Excel
Plus de sujets relatifs à : Calculs sur un TdT avec contraintes


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR