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


---


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/