[perl]operation de probabilites

Fermé
fredo10 Messages postés 31 Date d'inscription vendredi 25 novembre 2005 Statut Membre Dernière intervention 4 février 2006 - 4 févr. 2006 à 13:41
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 4 févr. 2006 à 17:21
salut a tous,
je n'arrive pas a me tirer d'affaire avec le perl alors j'ai besoin d'un petit coup de main.
En fait je dois faire une code qui prend en parametre une chaine de caractere qui est une operation arithmetique de probabilite.
ex d'execution:
>201event "1+-8" 0,954
>201event "1+3+5" 0,978

ben j'ai d'abord essayer de recuperer les chiffres dans un tableaux puisqu'il ya une operation prealable a faire pour chaque chiffre avant d'effectuez l'operation visible.voici mon code:
if(scalar @ARGV < 2)
{
print("201event needs some arguments \n");
exit 0;
}

my @tab = $ARGV[1];
$i = 0;
$a = 0;
my @opr;

while($tab[$i])
{
if($tab[$i] == '-')
{
$opr[$a] = 1 - (((4 * $tab[$i + 1]) + 5) / (10 * $tab[$i + 1]));
print ("$opr[$a]");
print ("$tab[$i + 2]");
}
else
{
$opr[$a] = (((4 * $tab[$i]) + 5) / (10 * $tab[$i]));
print ("$opr[$a]");
print ("$tab[$i + 1]");
}
$i += 2;
$a++;
}
print ("bon test");
exit 0;

et il me met une erreur comme suit:
./201event.pl: No match.
alors jene comprends pas vraiment pourkoi il me met cette erreur la vu que je suis encore debutant en perl, j'aimerai bcp que vs m'aidiez dans ce sens a parfaire ce code.merci d'avance pour votre comprehension.

2 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
4 févr. 2006 à 16:49
Salut,

je veux bien t'aider mais d'abord j'ai besoin de quelques petits détails:

1. que veux tu faire exactement avec tes arguments ?

Tu dis que ton script prends une chaine de caractere qui est une operation arithmetique de probabilite mais je vois 2 arg "1+3+5" et 0,978 ?

2. ton tableau my @tab = $ARGV[1]; contient que le 2ème arg 0,978.
donc print scalar @tab te donnera le resultat 1.
[lamitest@localhost corbeille]$ cat ddd
#! /usr/bin/perl
use warnings;
use strict;

my @tab=$ARGV[1];
print scalar @tab,"\n";
[lamitest@localhost corbeille]$ perl ddd "1+3+5" 0,978
1
[lamitest@localhost corbeille]$
Donc je ne vois pas le sens de ta boucle qui incrémente $i de 2 ( $i +=2), à moins que tu préconises utiliser plusieurs arguments et que tu ne veux traiter que les arguments dont leur position et paire (0,2,4....)

En bref expliques ton problème. D'où tu dois partir et que tu veux obtenir.
Je t'expliquerai un peu la façon d'ecrire le code.

Ex:
print avec paranthéses et consideré comme une fonction
print sans paranthèses et un opérateur de liste.
[lamitest@localhost corbeille]$ cat print
#! /usr/bin/perl

use warnings;
use strict;

print (1+2),3;
print "\n";
print 1+2,3;
print "\n";

[lamitest@localhost corbeille]$ perl print
print (...) interpreted as function at print line 6.
Useless use of a constant in void context at print line 6.
3
33
[lamitest@localhost corbeille]$

A la place de
if(scalar @ARGV < 2)
{
print("201event needs some arguments \n");
exit 0;
} 
écrit plutôt
while( @ARGV < 2){
        die "201event needs some arguments \n";
        last;
}
ou même
while( @ARGV < 2){
        die "201event needs some arguments \n" and last;
}

Donc je n'ai pas essayé de déchiffrer ton code pour l'instant puisque je n'ai pas compris ce que tu veux.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
4 févr. 2006 à 17:21
Encore une chose. Quand tu fait un test d'égalité en perl
 if($tab[$i] == '-') 
sache qu'il y a un opérateur pour les nombres == et un pour les chaînes de caractères eq.

Je ne crois pas que '-' est un nombre.
Plutôt
 if($tab[$i] eq '-') 
0