Page 1 sur 1

travail sur les liste ...

Publié : sam. août 07, 2010 1:02 pm
par seb7477
Bonjour,
j'aimerai faire des algorithmes sur la détermination de la médiane d'une série par exemple .
Pour cela je veux que l'utilisateur rentre la série en question mais je ne vois pas du tout ce qu'il faut utiliser ( seq, li , a[] ...) et comment ?

J'ai essayé :
saisir (a[]); ( je me suis inspiré de saisir (a); pour une seule variable)
j'ai aussi essayé une boucle tant que pour que l'utilisateur rentre une à une les valeurs de la série mais ma boucle tournait dans le vide et en plus je pense qu'une boucle est complétement inutile et qu'une fonction doit permettre de rentrer d'un coup la série...

merci pour votre précieuse aide.

Re: travail sur les liste ...

Publié : sam. août 07, 2010 6:04 pm
par alain974
Pourquoi écrire un algorithme?

On peut créer la liste de nombres aléatoires par

Code : Tout sélectionner

liste:=alea(100,0,1000)
(liste de 100 nombres entiers entre 0 et 1000), puis

Code : Tout sélectionner

median(liste)
pour avoir directement la médiane. Pour montrer aux élèves comment on a fait, on peut trier la liste par

Code : Tout sélectionner

sort(liste)
Montrer un algorithme calculant la médiane consiste essentiellement à traiter des algorithmes de tri, ce qui malgré une allusion dans le doc d'accompagnement, semble nettement au-dessus de ce qu'on peut attendre de lycéens, et présente peu d'intérêt pour eux quand le tri est assuré automatiquement par xcas...

Ceci dit on peut créer une liste dans une boucle par

Code : Tout sélectionner

liste:=[]
pour i de 1 jusque 100 faire
    liste=liste,alea(1000);
fpour; 
Mais encore une fois, ça revient un peu à demander à un garagiste de réinventer la roue...

Re: travail sur les liste ...

Publié : sam. août 07, 2010 7:01 pm
par seb7477
alain974 a écrit :Pourquoi écrire un algorithme?

On peut créer la liste de nombres aléatoires par

Code : Tout sélectionner

liste:=alea(100,0,1000)
(liste de 100 nombres entiers entre 0 et 1000), puis

Code : Tout sélectionner

median(liste)
pour avoir directement la médiane. Pour montrer aux élèves comment on a fait, on peut trier la liste par

Code : Tout sélectionner

sort(liste)
Montrer un algorithme calculant la médiane consiste essentiellement à traiter des algorithmes de tri, ce qui malgré une allusion dans le doc d'accompagnement, semble nettement au-dessus de ce qu'on peut attendre de lycéens, et présente peu d'intérêt pour eux quand le tri est assuré automatiquement par xcas...

Ceci dit on peut créer une liste dans une boucle par

Code : Tout sélectionner

liste:=[]
pour i de 1 jusque 100 faire
    liste=liste,alea(1000);
fpour; 
Mais encore une fois, ça revient un peu à demander à un garagiste de réinventer la roue...
Bonjour Alain,
je crois que tu n'as pas compris ma question: je veux simplement savoir comment on peut faire rentrer à l'utilisateur la liste 2,5,34,89,14 par exemple pour pouvoir ensuite travailler dessus?
merci

Re: travail sur les liste ...

Publié : dim. août 08, 2010 9:12 am
par alain974
Pour créer la liste, on peut faire simplement

Code : Tout sélectionner

liste:=[2,7,5,3,13]
et je vois difficilement comment on peut faire plus simple pour l'utilisateur, puisqu'il faut bien que celui-ci entre les données une par une. Une entrée interactive avec le "input" des Ti devient vite lassante à l'usage...

Par contre la manipulation directe de ce genre d'objets (les listes) par les élèves va à l'encontre de la démarche algorithmique (mais ils sont surprenamment à l'aise avec ça!)...

Re: travail sur les liste ...

Publié : dim. août 08, 2010 11:29 am
par seb7477
alain974 a écrit :Pour créer la liste, on peut faire simplement

Code : Tout sélectionner

liste:=[2,7,5,3,13]
.

et je vois difficilement comment on peut faire plus simple pour l'utilisateur, puisqu'il faut bien que celui-ci entre les données une par une. Une entrée interactive avec le "input" des Ti devient vite lassante à l'usage...

Par contre la manipulation directe de ce genre d'objets (les listes) par les élèves va à l'encontre de la démarche algorithmique (mais ils sont surprenamment à l'aise avec ça!)..

oui ainsi tu es obligé de rentrer la liste dans le programme et ce n'est pas ce que je désire :(
C'est sur la saisie une à une des valeurs de la série qui m'intéresse( même si tu as bien raison c'est un petit peu lourd...), comment faut-il faire en XCAS ?

merci

Re: travail sur les liste ...

Publié : dim. août 08, 2010 3:43 pm
par parisse
La saisie d'une liste peut se faire par saisir(a) il faudra simplement entrer une liste avec les délimiteurs [] et la virgule comme séparateur. On peut bien sur aider la saisie en écrivant par exemple:
saisir("tapez une liste par exemple [1,2,3]",a);
Dans le programme on peut tester ensuite que a est bien une liste avec
si type(a)==DOM_LIST alors ...

Re: travail sur les liste ...

Publié : dim. août 08, 2010 6:28 pm
par seb7477
parisse a écrit :La saisie d'une liste peut se faire par saisir(a) il faudra simplement entrer une liste avec les délimiteurs [] et la virgule comme séparateur. On peut bien sur aider la saisie en écrivant par exemple:
saisir("tapez une liste par exemple [1,2,3]",a);
Dans le programme on peut tester ensuite que a est bien une liste avec
si type(a)==DOM_LIST alors ...
super c'est exactement ce que je voulais.En fait c'était simple ...et je suppose qu'ensuite, pour travailler sur le premier élément ,par exemple, de la liste il suffit d'utiliser a[0] :)

Merci encore à tous les deux.

Re: travail sur les liste ...

Publié : mar. août 10, 2010 12:46 pm
par seb7477
j'ai essayé un algo de tri mais quand je l'exécute j'ai un problème de dimension...
Voici le message que xcas m'affiche :

Index outside range : 5, vector size is 4, syntax compatibility mode xcas
Error: Invalid dimension"


je ne comprends pas ce message puisque je compare des éléments de la liste entre eux ...


saisir ("une serie de valeur",a);
saisir ("combien de valeur ?",n);
pour j de 1 jusque n-1 faire
k:=n
tantque j<k faire
si a[k]<a[k-1]alors b:=a[k];a[k]:=a[k-1];a[k-1]:=b;fsi;
k:=k-1
ftantque;
fpour;
afficher ("la nouvelle liste est",a);


merci pour votre aide

Re: travail sur les liste ...

Publié : mar. août 10, 2010 1:38 pm
par parisse
Attention, en mode xcas (le mode par défaut), les indices de listes commencent à 0 et finissent à la taille-1. Sinon, vous pouvez avoir la taille d'une liste avec dim ce qui évite de la demander. Plus généralement, pour mettre au point un programme, je vous conseille d'utiliser le débugueur interactif, par exemple
Tri():={
local a,b,j,n,k;
// insérez votre programme
}
puis
debug(tri())
puis cliquez sur le bouton sst (single step, raccourci F5) pour exécuter la ligne en surbrillance.
Il faut déclarer les variables intermédiaires comme variables locales pour que debug les affiche automatiquement (si vous en oubliez un message d'avertissement apparait lors de l'interprétation).
debug est d'ailleurs aussi intéressant pédagogiquement parlant car il permet de montrer pas à pas le déroulement d'un programmes.

Re: travail sur les liste ...

Publié : mer. août 11, 2010 12:40 pm
par seb7477
merci pour votre aide , je vais essayer ...

Re: travail sur les liste ...

Publié : ven. sept. 03, 2010 4:21 pm
par debimax
alain974 a écrit :Pourquoi écrire un algorithme?

On peut créer la liste de nombres aléatoires par

Code : Tout sélectionner

liste:=alea(100,0,1000)
(liste de 100 nombres entiers entre 0 et 1000), puis
.........................

Mais encore une fois, ça revient un peu à demander à un garagiste de réinventer la roue...
bonjour

Je remonte ce sujet car je travail aussi sur des activités pour mes secondes.

Je n'ai peut être pas tous compris mais alea(100,0,1000) génère 100 nombres aléatoires entre 0 et 1000 mais ils sont tous différents.
C'est comme un tirage sans remise.

Alors que pour la boucle on peut avoir des répétitions.

Est il possible d'obtenir directement par exemple 100 résultats d'un dé (1..6) ?
Avec R-cran j'utilise sample(1:6,100,re=T) mais je n'ai pas envie d'utiliser R-cran avec des secondes.

Re: travail sur les liste ...

Publié : ven. sept. 03, 2010 4:39 pm
par parisse
debimax a écrit : Je remonte ce sujet car je travail aussi sur des activités pour mes secondes.

Je n'ai peut être pas tous compris mais alea(100,0,1000) génère 100 nombres aléatoire entre 0 et 1000 mais ils sont tous différents.
C'est comme un tirage sans remise.
Non, non, les 100 nombres aléatoires sont indépendants et peuvent coincider (selon le théorème des anniversaires).
Est il possible d'obtenir directement par exemple 100 résultats d'un dé (1..6) ?
Oui, par exemple avec randvector(100,6)+[1$100]

Re: travail sur les liste ...

Publié : ven. sept. 03, 2010 4:57 pm
par debimax
le thm des anniversaires je regarderai ca aux prochaines vacances :mrgreen:

sinon alea(10,1,10) me renvoie bien 10 nombres différents entre 1 et 10, il y a un truc qui m'échappe. :?:

sinon je venais de trouver aussi [(alea(6)+1)$(k=1..100)] pour générer 100 nombres aléatoirement entre 1 et 100

merci encore

edit: ah oui on peut aussi utiliser randvector(100,'rand(6)+1')

Re: travail sur les liste ...

Publié : ven. sept. 03, 2010 6:27 pm
par parisse
debimax a écrit :
sinon alea(10,1,10) me renvoie bien 10 nombres différents entre 1 et 10, il y a un truc qui m'échappe. :?:
ah oui en effet, c'est ce que dit la doc (Details), tirage sans remise. Autant pour moi!

Re: travail sur les liste ...

Publié : ven. sept. 03, 2010 7:58 pm
par alb
Pour changer un peu du sempiternel exercice suivant :
1)Montrer que dans une classe de 30 élèves la probabilité qu'au moins
deux personnes aient le même jour anniversaire (on prendra 365 jours dans l'année) est supérieure à 70%,
on pourrait leur demander de
2)Calculer la probabilité que tous les nombres soient différents dans la séquence obtenue avec : sort((1+rand(365))$(k=1..30))
3)puis pour les plus rusés la fonction qui retourne une valeur approchée de la probabilité du 1)