π
<-

Problème de programmation basique

Pour le TI-Basic sur Nspire

Problème de programmation basique

Unread postby Martellus » 07 Dec 2012, 20:30

Bonjour à tous et toutes,

Je viens vous demander votre aide sur la création d'un programme sur TI-Nspire CX CAS (sachant que je viens originellement de la TI 82 ...)

Voilà ce que j'ai écris pour le moment :
Code: Select all
Define ds2()=
Prgm
:Local a,b,n,k,u,v
:RequestStr "a=",a
:RequestStr "b=",b
:RequestStr "n=",n
:a→u
:b→v
:0→k
:While k<n
:k+1→n
:((a+b)/(2))→u
:√(((a^(2)+b^(2))/(2)))→v
:u→a
:v→b
:EndWhile
:Disp u,v
:EndPrgm


L'algorithme est issu d'un DS de Terminale (quand j'ai passé le DS j'étais sur TI82 et je n'ai eu aucun problème, mais maintenant pour le retranscrire sur N-Spire CAS j'ai des difficultés)
J'ai différentes questions suite à cela :
- A quoi sert ce que l'on peut (doit ?) mettre en parenthèses après le nom de l'algorithme ? Define ds2()=
- Je lance le programme, il me demande les variables : a=4, b=9, n=2
Puis il me donne une erreur : "Le test n’a pas donné de résultat TRUE ou FALSE." au niveau du "While" Ce que je ne comprends pas parce que j'ai assigné 2 à n et 0 à k.

Voila les deux problèmes rencontrés.
J'espère que vous pourrez m'aider,
Merci.
User avatar
Martellus
Niveau 2: MI2 (Membre Initié)
Niveau 2: MI2 (Membre Initié)
Level up: 53.3%
 
Posts: 5
Joined: 07 Dec 2012, 19:41
Gender: Male
Calculator(s):
MyCalcs profile

Re: Problème de programmation basique

Unread postby Excale » 07 Dec 2012, 20:49

Bonsoir,

Martellus wrote:- A quoi sert ce que l'on peut (doit ?) mettre en parenthèses après le nom de l'algorithme ? Define ds2()=

Il servent à donner des valeurs au programme dès le lancement au lieu que ce soit au programme de te les demander (elles deviennent automatiquement "local")

En pratique:
Code: Select all
Define ds2(a,b,n)=
Prgm
:Local k,u,v
:a→u
:b→v
:0→k

Il te faudra alors lancer le programme de la sorte: ds2(2,5,9) (nombres pris au hasard).

Martellus wrote:Puis il me donne une erreur : "Le test n’a pas donné de résultat TRUE ou FALSE." au niveau du "While" Ce que je ne comprends pas parce que j'ai assigné 2 à n et 0 à k.

RequestStr retourne une chaine de caractères, et non un nombre :).

Une remarque de plus, il est plus logique d'écrire u:=a que a→u (même si ça fait exactement la même chose :) ).

Code: Select all
Define ds2(a,b,n)=
Prgm
:Local k,u,v
:u:=0
:v:=b
:k:=0
:While k<n
:n:=k+1
:u:=((a+b)/(2))
:v:=√(((a^(2)+b^(2))/(2)))
:a:=u
:b:=v
:EndWhile
:Disp u,v
:EndPrgm


Edit: encore une remarque de plus, la variable "u" ne sert à rien, de même que la ligne v:=b
D'où:
Code: Select all
Define ds2(a,b,n)=
Prgm
:Local k,v
:k:=0
:While k<n
:n:=k+1
:v:=√(((a^(2)+b^(2))/(2)))
:a:=((a+b)/(2))
:b:=v
:EndWhile
:Disp u,v
:EndPrgm


Edit2: Il me semble fort que la ligne "n:=k+1" soit en réalité "k:=k+1". Dans ce cas, il vaux mieux utiliser un for :).
Code: Select all
Define ds2(a,b,n)=
Prgm
:Local k,v
:For k,0,n-1
:v:=√(((a^(2)+b^(2))/(2)))
:a:=((a+b)/(2))
:b:=v
:EndFor
:Disp u,v
:EndPrgm


Edit3: Juste pour le fun d'avoir un code encore plus optimisé :P :
Code: Select all
Define ds2(a,b,n)=
Func
:a:={approx(a),approx(b)}
:For b,0,n-1
:a:={((a[1]+a[2])/(2)),√(((a[1]^(2)+a[2]^(2))/(2)))}
:EndFor
:EndFunc
User avatar
ExcaleAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 3.9%
 
Posts: 2955
Images: 3
Joined: 10 Sep 2010, 00:00
Gender: Male
Calculator(s):
MyCalcs profile

Re: Problème de programmation basique

Unread postby Hayleia » 07 Dec 2012, 20:59

Excale wrote:Une remarque de plus, il est plus logique d'écrire u:=a que a→u (même si ça fait exactement la même chose :) ).

Cela n'est ni plus logique ni moins logique (et de toute façon, comme tu dis c'est pareil). On peut trouver autant d'arguments pour → que pour :=, je t'en donne trois en faveur du → par exemple

Sachant qu'il vient d'une 82 (d'après ses dires), il est plus logique pour lui de mettre →.
En plus, a→u peut se lire de gauche à droite "on met a dans u" alors que, toujours de gauche à droite, u:=a se lirait "on met dans u a" ce qui n'est pas très français :P
Enfin, ce que fait la calculatrice derrière quand tu écris a→u ou u:=a, c'est bien d'abord évaluer a puis le mettre dans u, donc le a vient avant le u.

Bref, chacun ses préférences ;)

Image
ImageImageImage
Pokemon Topaze (Axe) discussion and download links here
(19:29:36) noelnadal: plus sérieusemen​t, j'ai très peu de problèmes
(22:45:44) Clifward: J'aime rire du malheur des autres :troll:

(2017.11.18 - 17:07:12) Fireworks: Hayleia !!!!!
(2017.11.18 - 17:07:19) TI-Bot: Fireworks has been logged out (Kicked).
(2017.11.18 - 17:07:22) TI-Bot: Ban of user Fireworks revoked.
(2017.11.18 - 17:07:25) TI-Bot: Fireworks logs into the Chat.
(2017.11.18 - 17:07:28) Fireworks: <3
(2017.11.18 - 17:07:31) Fireworks: 208
User avatar
HayleiaGénéreux
Niveau 17: GM (Grand Maître des calculatrices)
Niveau 17: GM (Grand Maître des calculatrices)
Level up: 43.8%
 
Posts: 2509
Images: 2
Joined: 30 Aug 2011, 08:22
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Templar

Re: Problème de programmation basique

Unread postby Martellus » 07 Dec 2012, 21:06

Merci pour cette réponse rapide.
J'ai eu l'habitude d'assigner avec "→", voilà le pourquoi en effet. Et oui je pense à chaque fois "a est assigné à u".
Le RequestStr = RequestString en fait ? D'où le fait qu'il renvoie à une chaine de caractères.
Et donc si je veux faire une demande de variable, non pas dès la "formule d'ouverture" du programme, mais après son lancement (comme cela se fait sur les TI82), je dois utiliser Request tout simplement ?

EDIT : je regarde tes EDITs et je te tiens au courant.
User avatar
Martellus
Niveau 2: MI2 (Membre Initié)
Niveau 2: MI2 (Membre Initié)
Level up: 53.3%
 
Posts: 5
Joined: 07 Dec 2012, 19:41
Gender: Male
Calculator(s):
MyCalcs profile

Re: Problème de programmation basique

Unread postby Excale » 07 Dec 2012, 21:08

Ben, pour la peine, je donne trois arguments en faveur du := :D :
-La plupart des langages utilisent ça (souvent sous la forme d'un simple = mais bon)
-Ça peut se lire: "u prend la valeur a", ce qui est français.
-On voit directement quelle est la variable modifiée, alors qu'avec le sto, on est obligé de déplacer son regard en fin de ligne.

Mais bon, comme tu le dis, à partir du moments où tu es plus à l'aise avec l'un de deux, autant utiliser celui que tu préfères.

Et donc si je veux faire une demande de variable, non pas dès la "formule d'ouverture" du programme, mais après son lancement (comme cela se fait sur les TI82), je dois utiliser Request tout simplement ?

Oui.
User avatar
ExcaleAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 3.9%
 
Posts: 2955
Images: 3
Joined: 10 Sep 2010, 00:00
Gender: Male
Calculator(s):
MyCalcs profile

Re: Problème de programmation basique

Unread postby Martellus » 07 Dec 2012, 21:23

Ok, alors j'avais une erreur au niveau de la première instruction après le While.
Ce qui me donne :
Code: Select all
Define ds2()=
Prgm
:Local a,b,n,k,u,v
:Request "a=",a
:Request "b=",b
:Request "n=",n
:a→u
:b→v
:0→k
:While k<n
:k+1→k
:((a+b)/(2))→u
:√(((a^(2)+b^(2))/(2)))→v
:u→a
:v→b
:EndWhile
:Disp "u=",u,"; v=",v
:EndPrgm

En partant de ça, qu'est ce qui serait inutile concrètement ?
Sachant que mon habitude du "sto→" est bien ancrée et que je préfère que le programme me demande le a, b et c ? (enfin pour de simples programmes de cours de maths pour le moment)
User avatar
Martellus
Niveau 2: MI2 (Membre Initié)
Niveau 2: MI2 (Membre Initié)
Level up: 53.3%
 
Posts: 5
Joined: 07 Dec 2012, 19:41
Gender: Male
Calculator(s):
MyCalcs profile

Re: Problème de programmation basique

Unread postby Excale » 07 Dec 2012, 21:29

Martellus wrote:En partant de ça, qu'est ce qui serait inutile concrètement ?

Code: Select all
Define ds2()=
Prgm
:Local a,b,n,k,u,v
:Request "a=",a
:Request "b=",b
:Request "n=",n
:a→u
:b→v
:0→k
:While k<n
:k+1→k
:((a+b)/(2))→u
:√(((a^(2)+b^(2))/(2)))→v
:u→a
:v→b
:EndWhile
:Disp "u=",u,"v=",v
:EndPrgm


J'inverse deux lignes:
Code: Select all
Define ds2()=
Prgm
:Local a,b,n,k,u,v
:Request "a=",a
:Request "b=",b
:Request "n=",n
:a→u
:b→v
:0→k
:While k<n
:k+1→k
:√(((a^(2)+b^(2))/(2)))→v
:((a+b)/(2))→u
:u→a
:v→b
:EndWhile
:Disp "u=",u,"v=",v
:EndPrgm


ON voit alors que le u est inutile:
Code: Select all
Define ds2()=
Prgm
:Local a,b,n,k,v
:Request "a=",a
:Request "b=",b
:Request "n=",n
:a→u
:b→v
:0→k
:While k<n
:k+1→k
:√(((a^(2)+b^(2))/(2)))→v
:((a+b)/(2))→a
:v→b
:EndWhile
:Disp "u=",u,"v=",v
:EndPrgm


Et le a→u et b→v sont inutile aussi :) :
Code: Select all
Define ds2()=
Prgm
:Local a,b,n,k,v
:Request "a=",a
:Request "b=",b
:Request "n=",n
:0→k
:While k<n
:k+1→k
:√(((a^(2)+b^(2))/(2)))→v
:((a+b)/(2))→a
:v→b
:EndWhile
:Disp "u=",u,"v=",v
:EndPrgm

Et il serait mieux d'utiliser une boucle for au lie d'une boucle while. Cf mon premier post.

Martellus wrote:Je préfère que le programme me demande le a, b et c ? (enfin pour de simples programmes de cours de maths pour le moment)

Perso je trouve que c'est beaucoup plus rapide de taper directement les arguments en entrée. Mais encore une fois, fais comme tu veux.
User avatar
ExcaleAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 3.9%
 
Posts: 2955
Images: 3
Joined: 10 Sep 2010, 00:00
Gender: Male
Calculator(s):
MyCalcs profile

Re: Problème de programmation basique

Unread postby Martellus » 07 Dec 2012, 22:13

J'ai utilisé le While parce que l'algorithme considéré de l'exercice faisait mention de "TANT QUE k<n".
Le a→u et b→v sont inutiles seulement si dès le début k<n par contre : avec n=0 ça donnerait une erreur.

Je vais continuer l'exploitation de la calculatrice, et je repasserais dans la section si cela m'est nécessaire.
Ce qui est sûr c'est que je vais passer du temps sur le site, il est fort intéressant ;)

En tout cas merci beaucoup pour votre aide et bonne soirée :)
User avatar
Martellus
Niveau 2: MI2 (Membre Initié)
Niveau 2: MI2 (Membre Initié)
Level up: 53.3%
 
Posts: 5
Joined: 07 Dec 2012, 19:41
Gender: Male
Calculator(s):
MyCalcs profile

Re: Problème de programmation basique

Unread postby Richou-D-Hunter » 07 Dec 2012, 22:15

N'oublie pas le chat, y'aure sûrement quelqu'un pour te répondre ! :)
Image
« Quelque soit la branche que vous avez choisie, dans votre vie future, appliquez-vous à développer un progrès aussi minime soit-il. Vous en ferez un bien général. »
— Gustave Eiffel
User avatar
Richou-D-Hunter
Niveau 9: IC (Compteur Infatigable)
Niveau 9: IC (Compteur Infatigable)
Level up: 32.8%
 
Posts: 58
Joined: 28 Oct 2012, 08:59
Gender: Male
Calculator(s):
MyCalcs profile
Class: Première année, école d'ingénieur info

Re: Problème de programmation basique

Unread postby Bisam » 07 Dec 2012, 22:32

Au jeu de l'optimisation, on peut battre Excale à plates coutures :
Code: Select all
Define ds2(a,b,n)=
Func
a:=approx({a,b})
For b,1,n
a:={mean(a),√(mean(a^2))}
EndFor
EndFunc
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Next

Return to Nspire-Basic

Who is online

Users browsing this forum: ClaudeBot [spider] and 1 guest

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
935 utilisateurs:
>897 invités
>31 membres
>7 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)