Page 1 sur 2

Saisir une liste de nombres

Publié : mar. avr. 10, 2012 8:32 am
par insan
Bonjour,

Voici une partie du code qui s'exécute de manière incorrecte :

Code : Tout sélectionner

saisir("p = ? ",p);
pour k de 1 jusque p faire
saisir("V[",k-1,"] = ",V[k-1]);
fpour;
Ensuite j'ai modifié la commande de la boucle POUR en :

Code : Tout sélectionner

afficher("V[",k-1,"] = "); saisir(V[k-1]);
mais ça réagit pareillement.

Merci pour toute aide.

Re: Saisir une liste de nombres

Publié : mar. avr. 10, 2012 9:17 am
par alb
Peut-être quelque chose de ce style ?

Code : Tout sélectionner

SaisirListe():={
  local p,L,k;
  saisir("p = ? ",p);
  L:=[0$p];
  pour k de 1 jusque p faire
    saisir("entrez la valeur numéro "+k,L[k-1]);
  fpour
  retourne L
}:;
Si tu veux conserver ta syntaxe pour saisir, je pense qu'il faut faire plutôt:

Code : Tout sélectionner

saisir("V["+(k-1)+"] = ",V[k-1])

Re: Saisir une liste de nombres

Publié : mar. avr. 10, 2012 9:54 am
par insan
Merci ...

J'ai toujours le même problème : une fenêtre qui s'affiche où est marqué "p = ?" et qui attend une valeur et après d'autre fenêtres du même style qui attendent à saisir des valeurs MAIS sans un message écrit (comme plus haut avec : p = ?) et aussi sans prendre en compte les valeurs saisies ...

Re: Saisir une liste de nombres

Publié : mar. avr. 10, 2012 10:39 am
par insan
Je viens d'installer la nouvelle version (0.9.6) et maintenant ça marche SAUF que dans la fenêtre invitant à saisir les valeurs de la liste, il est toujours affiché L[k-1] ... je ne sais pas s'il y aurait une possibilité pour que la valeur de k change à chaque demande de saisie ?

Merci.

Re: Saisir une liste de nombres

Publié : mar. avr. 10, 2012 11:08 am
par parisse
Il faut definir V avant comme une liste et mettre des + dans saisir pour concatener les chaines avec la valeur numerique. Vous pouvez utiliser des () pour l'adressage en commencant a 1 ce qui donnerait ici

Code : Tout sélectionner

V:=[];
saisir("p = ? ",p);
pour k de 1 jusque p faire
saisir("V("+k+") = ",V(k));
fpour;
Attention toutefois a ne pas ecrire V(k):=qqchose, sinon il definira une fonction. Avec des crochets ca donnerait

Code : Tout sélectionner

V:=[];
saisir("p = ? ",p);
pour k de 1 jusque p faire
saisir("V["+k-1+"] = ",V[k-1]);
fpour;

Re: Saisir une liste de nombres

Publié : mar. avr. 10, 2012 1:06 pm
par insan
Merci pour votre réponse ... mais j'obtiens toujours le message V(k)= qui m'invite à saisir une valeur de la liste : c'est-à-dire que j'obtiens le nom de la variable k et nom pas valeur (qui change à chaque saisie)...

Autre chose : le retour de ce programme dans le "niveau des réponses" donne des nombres entre ( ) et [ ] correspondant apparemment aux valeurs de différentes variables du programme. Y aurait-il une possibilité pour éviter cet affichage ?

Dernière chose : Existerait-t-il une commande permettant de fixer le nombre de décimales pour les valeurs des variables affichées ? Je voudrais éviter l'utilisation de evalf() pour ne pas encombrer les expressions. La commande Digits est similaire mais fixe le nombre total de chiffres.

Merci infiniment d'avance.

Re: Saisir une liste de nombres

Publié : mar. avr. 10, 2012 2:46 pm
par alb
Sur ces 3 points:
1/ saisir("L["+(k-1)+"] = ",L[k-1]) marche tres bien, je ne comprends pas
2/ pour la valeur de retour c'est une séquence ou une liste ce qui permet d'appeler la fonction SaisirListe
dans une autre fonction, par exemple:

Code : Tout sélectionner

SaisirListe():={
  local p,L,k;
  saisir("p = ? ",p);
  L:=[];
  pour k de 1 jusque p faire
    saisir("L["+(k-1)+"] = ",L[k-1]);
  fpour
  retourne L
}:;
SommeCarres():={
  local L,s,res,k;
  L:=SaisirListe();
  s:=dim(L);
  res:=0;
  pour k de 0 jusque s-1 faire
    res:=res+L[k]^2
  fpour
  retourne res
}:;
3/ round(pi,3) renvoie 3.142

Re: Saisir une liste de nombres

Publié : mar. avr. 10, 2012 4:52 pm
par insan
Merci pour cette réponse détaillée ...

En fait, je voudrais présenter ce programme sous forme "classique" et non pas sous forme d'une fonction...

Sinon, je dois dire que la commande:

Code : Tout sélectionner

saisir("L["+(k-1)+"] = ",L[k-1]);
donne une fenêtre avec le message :
L[k-1]

Alors que la commande

Code : Tout sélectionner

saisir("L[k-1] = ",L[k-1]);
donne le message :
"L[k-1]="

Et donc presque la même chose (la variable k ne varie pas) ... (j'utilise la version 0.9.6 sous Windows Vista)

Une question : quelle est la différence entre evalf(pi,3) et round(pi,3) ?

Merci.

Re: Saisir une liste de nombres

Publié : mar. avr. 10, 2012 9:04 pm
par alb
Je vais essayer de décrire ce qui se passe chez moi (0.9.7 sous linux)
Dans une ligne de commande je tape (remarque: les :; c'est pour ne pas afficher le résultat)

Code : Tout sélectionner

saisir("p = ? ",p):;
L:=[]:;
pour k de 1 jusque p faire
saisir("L["+(k-1)+"] = ",L[k-1])
fpour:;
Je valide
"p=?"
Je tape 3 et je valide
"L[0]="
Je tape 5 et je valide
"L[1]="
Je tape 6 et je valide
"L[2]="
Je tape 7 et je valide
Puis je vérifie que L contient la liste [5,6,7] et que p contient 3
En apparence aucune difficulté !

Pour evalf et round je pensais que evalf(...,5) donnait 5 chiffres significatifs et
round(...,5) 5 chiffres après la virgule, mais c'est la même réponse, du coup je ne sais plus bien quelle est la différence !

Re: Saisir une liste de nombres

Publié : mer. avr. 11, 2012 8:27 am
par parisse
en effet, il n'y a pas de difference entre round et evalf si le nombre de digits est <14 en tout cas.

Re: Saisir une liste de nombres

Publié : mer. avr. 11, 2012 11:11 am
par insan
Bonjour,

alb,
J'ai exécuté le code que tu as donné et voici ce que ça me donne (je reprends ton post) :
Je valide
"p=?"
Je tape 3 et je valide
"L[k-1]="
Je tape 5 et je valide
"L[k-1]="
Je tape 6 et je valide
"L[k-1]="
Je tape 7 et je valide


Et rien n'est affiché comme réponse sauf le (Done, Done, Done) dans le niveau de réponse grâce aux :; (merci pour cet idée !)

Par contre si j'ajoute dans la boucle la ligne :

Code : Tout sélectionner

afficher("L["+(k-1)+"] = "+L[k-1]);
Je vois affiché en dessous du programme :

L[0]=5
L[1]=6
L[2]=7


Peut-être que ce "problème" viendrait de la version 0.9.6 par rapport à la 0.9.7 ...

Merci beaucoup en tout cas.

Re: Saisir une liste de nombres

Publié : mer. avr. 11, 2012 1:27 pm
par alb
Je viens d'essayer sous windows avec la 0.9.6, effectivement le (k-1) n'est pas évalué dans saisir
Reste à savoir si c'est un pb de version ou d'OS

Re: Saisir une liste de nombres

Publié : mer. avr. 11, 2012 3:36 pm
par parisse
Ca semble plutot etre un pb d'OS, ca ne marcherait pas sous win et mac.
(Info pour moi: inputform_pre_analysis non appele dans Xcas_debugger lorsque status==3 et v non vide, c'est peut-etre la cause).

Re: Saisir une liste de nombres

Publié : mer. avr. 11, 2012 4:53 pm
par insan
J'espère que ce problème finira par être contourné dans la (ou les) prochaine(s) version(s)...

Re: Saisir une liste de nombres

Publié : mer. avr. 11, 2012 7:42 pm
par parisse
Si c'est bien ce que j'ai indique, il ne devrait pas y avoir de problemes, je mettrai ca dans la 0.9.7.