Re: [ssfr] utilisation de bc |
[ Thread Index |
Date Index
| More debianworld.org/shellscript-fr Archives
]
Le 2008-07-15, à 13:11:41 +0200, Marc Chantreux (marc.chantreux@xxxxxxxxxxxxxxxxxx) a écrit :
> Lignes : 18
>
> On Tue, Jul 15, 2008 at 10:02:26AM +0200, steve wrote:
> > Je sais que ce serait plus simple en perl par exemple, mais c'est en
> > shell que je veux le faire ;-)
>
> Avant que je te répondre (a coté de la plaque ...), j'aimerais comprendre
> tes motivations. pourrais-tu nous expliquer ce qui te pousse a vouloir
> ouvrir une boite de conserve avec une brosse a dent ?
Je suis un pervers assumé. Non pour être sérieux, je suis en train de
donner un cours sur les commandes *nix totalement informal à une personne et on est donc passé par des scripts, et en cherchant quelques exercices, je me suis rappelé du fameux pi par monte-carlo. Et on s'y est mis. Le perl, ce sera pour plus tard si je me suis révélé un bon prof ;-) D'ailleurs je pense proposer à mon élève de refaire l'exo mis en perl cette fois-ci, pour vraiment être un pervers assumé.
Sinon, je m'y suis remis et voici où j'en suis (en m'inspirant de la
réponse d'un des colistiers) :
#!/usr/bin/ksh
# Calcul de Pi par la méthode de Monte-Carlo
echo "Combien de tirs ?"
read N
# d'abord créer une fonction qui renvoie un nombre entre 0 et 1 compris.
# $RANDOM donne un nombre entre 0 et 32767 (entier signé sur 16 bits)
MAXRD=32767
LC_NUMERIC='C'
function get_point {
nb=$(echo "scale=6; $RANDOM/$MAXRD" | bc -l)
echo $nb
}
# Fonction qui test si le point est dans le cercle
# condition : 4 * ( x0^2 + y0^2 ) <= 1
function est_dans_cercle {
cond=$(echo "scale=6; 2.* sqrt(($1*$1 + $2*$2))<= 1.0" | bc -l)
[ "$cond" = "1" ] && echo "Point dans le cercle"
}
x0=${get_point}
y0=${get_point}
est_dans_cercle $x0 $y0
# boucle sur N
Mais ça me sort :
(standard_in) 1: parse error
Mais je ne désespère pas.
Merci pour votre aide
--
Steve
---