travail sur les liste ...

Discussion sur l'enseignement de l'algorithmique avec Xcas au lycee
Répondre
seb7477
Messages : 12
Inscription : jeu. août 05, 2010 4:25 pm

travail sur les liste ...

Message par seb7477 » sam. août 07, 2010 1:02 pm

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.

alain974
Messages : 104
Inscription : lun. mai 24, 2010 11:15 am

Re: travail sur les liste ...

Message par alain974 » sam. août 07, 2010 6:04 pm

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...

seb7477
Messages : 12
Inscription : jeu. août 05, 2010 4:25 pm

Re: travail sur les liste ...

Message par seb7477 » sam. août 07, 2010 7:01 pm

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

alain974
Messages : 104
Inscription : lun. mai 24, 2010 11:15 am

Re: travail sur les liste ...

Message par alain974 » dim. août 08, 2010 9:12 am

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!)...

seb7477
Messages : 12
Inscription : jeu. août 05, 2010 4:25 pm

Re: travail sur les liste ...

Message par seb7477 » dim. août 08, 2010 11:29 am

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

parisse
Messages : 5082
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: travail sur les liste ...

Message par parisse » dim. août 08, 2010 3:43 pm

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 ...

seb7477
Messages : 12
Inscription : jeu. août 05, 2010 4:25 pm

Re: travail sur les liste ...

Message par seb7477 » dim. août 08, 2010 6:28 pm

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.

seb7477
Messages : 12
Inscription : jeu. août 05, 2010 4:25 pm

Re: travail sur les liste ...

Message par seb7477 » mar. août 10, 2010 12:46 pm

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

parisse
Messages : 5082
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: travail sur les liste ...

Message par parisse » mar. août 10, 2010 1:38 pm

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.

seb7477
Messages : 12
Inscription : jeu. août 05, 2010 4:25 pm

Re: travail sur les liste ...

Message par seb7477 » mer. août 11, 2010 12:40 pm

merci pour votre aide , je vais essayer ...

debimax
Messages : 49
Inscription : mer. mars 10, 2010 8:44 am

Re: travail sur les liste ...

Message par debimax » ven. sept. 03, 2010 4:21 pm

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.
Dernière modification par debimax le sam. sept. 04, 2010 7:54 am, modifié 1 fois.

parisse
Messages : 5082
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: travail sur les liste ...

Message par parisse » ven. sept. 03, 2010 4:39 pm

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]

debimax
Messages : 49
Inscription : mer. mars 10, 2010 8:44 am

Re: travail sur les liste ...

Message par debimax » ven. sept. 03, 2010 4:57 pm

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')

parisse
Messages : 5082
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: travail sur les liste ...

Message par parisse » ven. sept. 03, 2010 6:27 pm

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!

alb
Messages : 1229
Inscription : ven. août 28, 2009 3:34 pm

Re: travail sur les liste ...

Message par alb » ven. sept. 03, 2010 7:58 pm

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)

Répondre