π
<-

Problème de programmation basique

Pour le TI-Basic sur Nspire

Problème de programmation basique

Message non lude Martellus » 07 Déc 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: Tout sélectionner
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.
Avatar de l’utilisateur
Martellus
Niveau 2: MI2 (Membre Initié)
Niveau 2: MI2 (Membre Initié)
Prochain niv.: 53.3%
 
Messages: 5
Inscription: 07 Déc 2012, 19:41
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Problème de programmation basique

Message non lude Excale » 07 Déc 2012, 20:49

Bonsoir,

Martellus a écrit:- 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: Tout sélectionner
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 a écrit: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: Tout sélectionner
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: Tout sélectionner
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: Tout sélectionner
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: Tout sélectionner
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
Avatar de l’utilisateur
ExcaleAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 3.9%
 
Messages: 2955
Images: 3
Inscription: 10 Sep 2010, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Problème de programmation basique

Message non lude Hayleia » 07 Déc 2012, 20:59

Excale a écrit: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
Avatar de l’utilisateur
HayleiaGénéreux
Niveau 17: GM (Grand Maître des calculatrices)
Niveau 17: GM (Grand Maître des calculatrices)
Prochain niv.: 43.8%
 
Messages: 2509
Images: 2
Inscription: 30 Aoû 2011, 08:22
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Templar

Re: Problème de programmation basique

Message non lude Martellus » 07 Déc 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.
Avatar de l’utilisateur
Martellus
Niveau 2: MI2 (Membre Initié)
Niveau 2: MI2 (Membre Initié)
Prochain niv.: 53.3%
 
Messages: 5
Inscription: 07 Déc 2012, 19:41
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Problème de programmation basique

Message non lude Excale » 07 Déc 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.
Avatar de l’utilisateur
ExcaleAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 3.9%
 
Messages: 2955
Images: 3
Inscription: 10 Sep 2010, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Problème de programmation basique

Message non lude Martellus » 07 Déc 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: Tout sélectionner
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)
Avatar de l’utilisateur
Martellus
Niveau 2: MI2 (Membre Initié)
Niveau 2: MI2 (Membre Initié)
Prochain niv.: 53.3%
 
Messages: 5
Inscription: 07 Déc 2012, 19:41
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Problème de programmation basique

Message non lude Excale » 07 Déc 2012, 21:29

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

Code: Tout sélectionner
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: Tout sélectionner
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: Tout sélectionner
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: Tout sélectionner
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 a écrit: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.
Avatar de l’utilisateur
ExcaleAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 3.9%
 
Messages: 2955
Images: 3
Inscription: 10 Sep 2010, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Problème de programmation basique

Message non lude Martellus » 07 Déc 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 :)
Avatar de l’utilisateur
Martellus
Niveau 2: MI2 (Membre Initié)
Niveau 2: MI2 (Membre Initié)
Prochain niv.: 53.3%
 
Messages: 5
Inscription: 07 Déc 2012, 19:41
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Problème de programmation basique

Message non lude Richou-D-Hunter » 07 Déc 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
Avatar de l’utilisateur
Richou-D-Hunter
Niveau 9: IC (Compteur Infatigable)
Niveau 9: IC (Compteur Infatigable)
Prochain niv.: 32.8%
 
Messages: 58
Inscription: 28 Oct 2012, 08:59
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Première année, école d'ingénieur info

Re: Problème de programmation basique

Message non lude Bisam » 07 Déc 2012, 22:32

Au jeu de l'optimisation, on peut battre Excale à plates coutures :
Code: Tout sélectionner
Define ds2(a,b,n)=
Func
a:=approx({a,b})
For b,1,n
a:={mean(a),√(mean(a^2))}
EndFor
EndFunc
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5670
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Suivante

Retourner vers Nspire-Basic

Qui est en ligne

Utilisateurs parcourant ce forum: ClaudeBot [spider] et 6 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Ndless for CX 4.5.5 / CX II 6.2.0
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 !
12345
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
2300 utilisateurs:
>2277 invités
>16 membres
>7 robots
Record simultané (sur 6 mois):
43991 utilisateurs (le 10/09/2025)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)