travail sur les liste ...
travail sur les liste ...
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.
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 ...
Pourquoi écrire un algorithme?
On peut créer la liste de nombres aléatoires par
(liste de 100 nombres entiers entre 0 et 1000), puis
pour avoir directement la médiane. Pour montrer aux élèves comment on a fait, on peut trier la liste par
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
Mais encore une fois, ça revient un peu à demander à un garagiste de réinventer la roue...
On peut créer la liste de nombres aléatoires par
Code : Tout sélectionner
liste:=alea(100,0,1000)
Code : Tout sélectionner
median(liste)
Code : Tout sélectionner
sort(liste)
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;
Re: travail sur les liste ...
Bonjour Alain,alain974 a écrit :Pourquoi écrire un algorithme?
On peut créer la liste de nombres aléatoires par
(liste de 100 nombres entiers entre 0 et 1000), puisCode : Tout sélectionner
liste:=alea(100,0,1000)
pour avoir directement la médiane. Pour montrer aux élèves comment on a fait, on peut trier la liste parCode : Tout sélectionner
median(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...Code : Tout sélectionner
sort(liste)
Ceci dit on peut créer une liste dans une boucle par
Mais encore une fois, ça revient un peu à demander à un garagiste de réinventer la roue...Code : Tout sélectionner
liste:=[] pour i de 1 jusque 100 faire liste=liste,alea(1000); fpour;
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 ...
Pour créer la liste, on peut faire simplement
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!)...
Code : Tout sélectionner
liste:=[2,7,5,3,13]
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 ...
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 ...
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 ...
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 ...
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]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 ...
Merci encore à tous les deux.
Re: travail sur les liste ...
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
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 ...
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.
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 ...
merci pour votre aide , je vais essayer ...
Re: travail sur les liste ...
bonjouralain974 a écrit :Pourquoi écrire un algorithme?
On peut créer la liste de nombres aléatoires par
(liste de 100 nombres entiers entre 0 et 1000), puisCode : Tout sélectionner
liste:=alea(100,0,1000)
.........................
Mais encore une fois, ça revient un peu à demander à un garagiste de réinventer la roue...
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.
Re: travail sur les liste ...
Non, non, les 100 nombres aléatoires sont indépendants et peuvent coincider (selon le théorème des anniversaires).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.
Oui, par exemple avec randvector(100,6)+[1$100]Est il possible d'obtenir directement par exemple 100 résultats d'un dé (1..6) ?
Re: travail sur les liste ...
le thm des anniversaires je regarderai ca aux prochaines vacances
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')
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 ...
ah oui en effet, c'est ce que dit la doc (Details), tirage sans remise. Autant pour moi!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.
Re: travail sur les liste ...
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)
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)