Calculer pi à l'aide d'un cercle trigo
Calculer pi à l'aide d'un cercle trigo
Bonjour à tous,
Tout d'abord merci pour ce forum que je trouve très intéressant.
Je voudrais faire une activité info sous xcas pour calculer pi à l'aide d'un demi cercle de centre 0 et de rayon 1 et d'un polygone régulier:
calculpi:= proc(n)
local i;
begin
noir
cercle(point([0,0]),1):
for i from 1 to n do
segment(point([cos((i-1)*180/n),sin((i-1)*180/n)]),point([cos(i*180/n),sin(i*180/n)])):
end_for;
end_proc;
La compilation se fait sans pb (xcas compatible mapple).
Mais à l'affichage apparait uniquement le dernier segment.
Existe-t-il une solution ?
D'avance merci pour vos réponses
Tout d'abord merci pour ce forum que je trouve très intéressant.
Je voudrais faire une activité info sous xcas pour calculer pi à l'aide d'un demi cercle de centre 0 et de rayon 1 et d'un polygone régulier:
calculpi:= proc(n)
local i;
begin
noir
cercle(point([0,0]),1):
for i from 1 to n do
segment(point([cos((i-1)*180/n),sin((i-1)*180/n)]),point([cos(i*180/n),sin(i*180/n)])):
end_for;
end_proc;
La compilation se fait sans pb (xcas compatible mapple).
Mais à l'affichage apparait uniquement le dernier segment.
Existe-t-il une solution ?
D'avance merci pour vos réponses
Je me réfère au fil que j'avais moi même posé ici :
http://pcm1.e.ujf-grenoble.fr/XCAS/view ... light=#282
et donc en syntaxe xcas cela donne :
Stéphane Lejoly
P.s. avec Xcas (=syntaxe xcas, Maple connais pas) i est réservé.
http://pcm1.e.ujf-grenoble.fr/XCAS/view ... light=#282
et donc en syntaxe xcas cela donne :
Code : Tout sélectionner
calculpi(n):={
local j,res;
res:=NULL;
C:=cercle(point([0,0]),1):;
pour j de 1 jusque n faire
res:=res,segment(point([cos((j-1)*180/n),sin((j-1)*180/n)]),point([cos(j*180/n),sin(j*180/n)])):;
fpour;
return (C,res);
};
P.s. avec Xcas (=syntaxe xcas, Maple connais pas) i est réservé.
Quand je dis configuration mapple il faut aller ds cfg configuration du cas et dans prog style choisir mapple.
Je trouve intéressant d'habituer les élèves à une syntaxe mapple ai-je tort ?
ce qui donne :
calculpi:= proc(n)
local i,poly;
begin
poly:=NULL;
C:=cercle(point([0,0]),1);
for i from 1 to n do
poly:=poly,segment(point([cos((i-1)*180/n),sin((i-1)*180/n)]),point([cos(i*180/n),sin(i*180/n)]));
end_for;
RETURN(C,poly);
end_proc;
Je trouve intéressant d'habituer les élèves à une syntaxe mapple ai-je tort ?
ce qui donne :
calculpi:= proc(n)
local i,poly;
begin
poly:=NULL;
C:=cercle(point([0,0]),1);
for i from 1 to n do
poly:=poly,segment(point([cos((i-1)*180/n),sin((i-1)*180/n)]),point([cos(i*180/n),sin(i*180/n)]));
end_for;
RETURN(C,poly);
end_proc;
Moi aussi.Je trouve vraiment xcas très intéressant pour le lycée
Oui et non, c'est un choix, mais moi, ne travaillant pas en prépa, et n'utilisant que Xcas, j'ai toujours utilisé la syntaxe Xcas, de plus pour le lycée l'avantage c'est que les commandes d'Xcas existent aussi en français (solve = resoudre, si alors sinon fsi, deriver, factoriser, simplifier etc.) ce que je trouve moins déroutant pour des élèves notamment de seconde.... cfg configuration du cas et dans prog style choisir mapple.
Je trouve intéressant d'habituer les élèves à une syntaxe mapple ai-je tort ?
Mais Bernard Parisse (le grand manitou) donnerait sûrement d'autres arguments quant à la syntaxe à utiliser.
Bonne nuit.
Stéphane Lejoly
Merci pour les commentaires, ça fait plaisir!
Sur la question du graphique, Stephane Lejoly a répondu, j'ajoute que de même que les résultats intermédiaires d'un programme ne sont pas affichés, de même les objets graphiques intermédiaires ne sont pas affichés en réponse. Ils sont par contre affichés dans la fenêtre "DispG" (qu'on peut faire apparaitre dans le menu Cfg).
Concernant le choix de syntaxe, il y a des arguments pour et contre. Pour maple, il y a la compatibilité (pour les élèves qui auront à se servir de maple plus tard). Pour la syntaxe xcas, il y a la plus grande proximité avec pas mal de langages (C, java,...). Mais de toutes façons les deux syntaxes sont assez proches et on peut le plus souvent utiliser une tournure à la maple en mode xcas et inversement (il faut toutefois faire attention aux variables réservées comme i ou I et aux délimiteurs de blocs {} ou d'ensemble, ainsi qu'à quelques instructions comme subs). Il faut faire attention toutefois que certains progs écrits en mode maple sous xcas ne passeront pas avec maple, en particulier si on utilise les noms francisés de commande.
Sur la question du graphique, Stephane Lejoly a répondu, j'ajoute que de même que les résultats intermédiaires d'un programme ne sont pas affichés, de même les objets graphiques intermédiaires ne sont pas affichés en réponse. Ils sont par contre affichés dans la fenêtre "DispG" (qu'on peut faire apparaitre dans le menu Cfg).
Concernant le choix de syntaxe, il y a des arguments pour et contre. Pour maple, il y a la compatibilité (pour les élèves qui auront à se servir de maple plus tard). Pour la syntaxe xcas, il y a la plus grande proximité avec pas mal de langages (C, java,...). Mais de toutes façons les deux syntaxes sont assez proches et on peut le plus souvent utiliser une tournure à la maple en mode xcas et inversement (il faut toutefois faire attention aux variables réservées comme i ou I et aux délimiteurs de blocs {} ou d'ensemble, ainsi qu'à quelques instructions comme subs). Il faut faire attention toutefois que certains progs écrits en mode maple sous xcas ne passeront pas avec maple, en particulier si on utilise les noms francisés de commande.
Problème fonction input
Merci pour les informations!
J'ai peut-être une info pour vous.......
J'avais remarqué comme d'autres utilisateurs je pense un problème pour la fonction input("a",a) dans une fonction ou une procédure lorsque a est déclaré comme variable locale. En effet, la fonction donne à la variable locale a le nombre 0 quelque soit la valeur donnée pour a.
Le problème disparaît lorsque l'on déclare a comme variable globale.
Bizarre non ?
Bonne soirée
J'ai peut-être une info pour vous.......
J'avais remarqué comme d'autres utilisateurs je pense un problème pour la fonction input("a",a) dans une fonction ou une procédure lorsque a est déclaré comme variable locale. En effet, la fonction donne à la variable locale a le nombre 0 quelque soit la valeur donnée pour a.
Le problème disparaît lorsque l'on déclare a comme variable globale.
Bizarre non ?
Bonne soirée
Je viens de rentrer le programme
dichotomie:=proc()
local a,b,m:
begin
input("borne inf",a);
print(a);
output("borne inf",a);
end_proc
une fenêtre s'ouvre avec la bonne valeur de a entrée (résultat de output) mais en ligne de commande il s'affiche a:0 (résultat de print(a)).
Par contre
dichotomie:=proc()
local b,m:
begin
input("borne inf",a);
print(a);
output("borne inf",a);
end_proc
j'obtiens la bonne valeur de a avec print.
dichotomie:=proc()
local a,b,m:
begin
input("borne inf",a);
print(a);
output("borne inf",a);
end_proc
une fenêtre s'ouvre avec la bonne valeur de a entrée (résultat de output) mais en ligne de commande il s'affiche a:0 (résultat de print(a)).
Par contre
dichotomie:=proc()
local b,m:
begin
input("borne inf",a);
print(a);
output("borne inf",a);
end_proc
j'obtiens la bonne valeur de a avec print.
deuxième essai :
avec le programme qui prend en entrée une fonction pour en déduire une valeur approchée de sa racine dans l'intervalle [binf,bsup]
dichotomie:=proc(fonct)
begin
input("borne inf",binf);
input("borne sup",bsup);
input("précision",prec);
f:=x->fonct;
while bsup-binf>prec do
mil:=approx((binf+bsup)/2);
if f(binf)*f(mil)>0
then binf:=mil;
else bsup:=mil;
end_if
end_while
print("borne inf",binf);
print("borne bsup",bsup);
output("borne inf",binf);
output("borne sup",bsup);
end_proc
le programme fonctionne très bien mais je suis obligé de ne pas utiliser la déclaration local bsup,binf,mil;
sinon il ne fonctionne pas.
Je pense qu'il y a un problème avec la déclaration des variables locales.
avec le programme qui prend en entrée une fonction pour en déduire une valeur approchée de sa racine dans l'intervalle [binf,bsup]
dichotomie:=proc(fonct)
begin
input("borne inf",binf);
input("borne sup",bsup);
input("précision",prec);
f:=x->fonct;
while bsup-binf>prec do
mil:=approx((binf+bsup)/2);
if f(binf)*f(mil)>0
then binf:=mil;
else bsup:=mil;
end_if
end_while
print("borne inf",binf);
print("borne bsup",bsup);
output("borne inf",binf);
output("borne sup",bsup);
end_proc
le programme fonctionne très bien mais je suis obligé de ne pas utiliser la déclaration local bsup,binf,mil;
sinon il ne fonctionne pas.
Je pense qu'il y a un problème avec la déclaration des variables locales.
Bon, ca marche bien sous linux. Le probleme est un probleme windows avec input, je testerai en début de semaine sous win. Avez-vous bien testé avec la toute dernière version windows (qui date de lundi dernier)?
Sinon, pour le programme avec argument, l'argument est une expression dépendant de x, le nom de variable peut preter à confusion (faire croire que c'est une fonction). Il vaudrait peut-etre mieux soit passer en argument une fonction, soit passer en argument une expression et utiliser subst pour évaluer.
Sinon, pour le programme avec argument, l'argument est une expression dépendant de x, le nom de variable peut preter à confusion (faire croire que c'est une fonction). Il vaudrait peut-etre mieux soit passer en argument une fonction, soit passer en argument une expression et utiliser subst pour évaluer.
Re: Calculer pi à l'aide d'un cercle trigo
J'ai essayé (syntaxe xcas):
sous Mac et quand je tape ensuite dichotomie() la fenêtre ("borne inf") s'ouvre mais tout est bloqué (?).
Stéphane Lejoly
Code : Tout sélectionner
dichotomie():={
local a,b,m;
saisir("borne inf",a);
afficher(a);
output("borne inf",a);
}:;
Stéphane Lejoly
Re: Calculer pi à l'aide d'un cercle trigo
En effet, probleme de focus. Je vais faire comme sous windows. L'image mac devrait etre mise a jour d'ici 16h.