Bonjour,
je suis en 1ère S SI et je dois faire un algorithme sur algobox permettant de trouver la médiane d'une série mais je n'y arrive pas du tout... J'ai fait 3 tentatives mais ma prof m'a dit qu'il fallait tout changer.
Je doit le rendre pour lundi et ce forum est mon ultime recours car je n'y comprend vraiment rien.
Bonjour,
Un peu vague comme énoncé.
Les valeurs dont on cherche la médiane sont données sous quelle forme et vont être interprétées comment par l'algorithme ?
Avant de faire chercher la médiane par une quelconque machine, comment ferais-tu avec tête et un crayon ?
Voici l'énoncé : "Ecrire un algorithme qui donne la médiane d'une série entrée par l'utilisateur sous la forme d'une liste L donnée de valeurs. On notera L[k] l'élément numéro k de la liste L, la numérotation commençant à 1".
A la main, je sais que :
- si N est pair alors la médiane est la valeur de rang : N/2+1
- si N est impair alors la médiane est la valeur de rang : (N+1)/2
J'ai oublié de préciser que ma prof m'a dit de ne pas trier la liste par ordre croissant car c'est déjà fait.
Alors il faut donc commencer par saisir les valeurs données dans une liste.
Et ensuite comment ferais tu pour savoir si un nombre est pair ou pas ?
je n'ai pas les valeurs donc voilà ce que j'ai fait mais qui ne marche pas (il faut enlever la partie qui trie la liste et j'ai confondu n avec N).
Pour savoir si un nombre est pair je pense qu'il faudrait demander si celui-ci se finit par 0, 2, 4, 6, 8 et pour savoir si un nombre est impair il faudrait demander s'il se termine par 1,3,5,7,9 ?
En effet ton prof a eu raison de te dire qu'il fallait tout refaire
1èrement ta saisie est faite par une boucle du style
Pour i allant de 1 à k ...... or k est inconnu quand on arrive sur cette instruction ! Alors premier beug
2èment aucune machine ne sait dire si un "nombre est pair" ou "impair" .... il faut faire un calcul à la machine pour le savoir comme toi
On verra la suite plus tard
merci de m'aider mais j'avoue que je ne vois pas quoi faire
Est - ce que le début est bon ou pas du tout...? je ne suis vraiment pas douée pour les algos....
Aucune machine ne peut savoir si un nombre N se termine par 0 , 2 , 4 , 6 , ou 8 !
Il faut faire un calcul.
Pour savoir si N est pair, il faut que le reste de N divisé par 2 soit nul.
Il faut trouver la méthode pour exprimer le reste d'une division de N par 2
N = 2*q + r avec q = quotient entier de N par 2 et r le reste
r = N - 2*partie entière de (N/2)
si tu n'as jamais vu cela , je ne vois pas comment tu pourrais l'inventer
Pas d'algo en seconde, alors il va falloir t'accrocher parce que celui-ci est plutôt hard
On doit saisir N valeurs
Il faut commencer par connaître N
Ensuite on regarde si N est pair ou pas
Et en fonction de la réponse précédente on peut conclure
Tu essayes ce que tu peux
Au lieu de faire des essais non productifs, tu pourrais essayer de comprendre mes indices !
Il faut connaître N le nombre de valeurs à saisir, avant de les saisir, alors
Une instruction du genre "Saisir N" serait la bienvenue avant la boucle
Pour i variant de 1 à n
Saisir L(i)
Fin pour
Maintenant , essayons de traduire avec ce qu'une machine peut faire pour savoir si N est pair ou impair.
calculons le reste de la division de N par 2 soit : r = N - 2*partie entière de (N/2)
désolé
Donc si N=0 alors N/2=0
afficher N est pair
si N différent de 0 alors N/2=r
r=N-2*(N/2)
afficher r
si r différent de 0 alors N est impair
et ensuite on fait intervenir la médiane ?
Si N est pair
alors med est le terme de rang N/2+1
faire N/2+1
afficher résultat
affecter à med le terme de rang (résultat)
afficher med
sinon med est le terme de rang (N+1)/2
faire (N+1)/2
afficher résultat
affecter à med le terme de rang (résultat)
afficher med
Fin
Il ne faut pas rajouter une étape pour lui faire comprendre la médiane ?
Commencer ton algo par si N = 0 est un peu contre productif ! On va donc saisir 0 valeur .... pas facile de trouver la médiane de 0 valeur !
J'ai juste voulu te démontrer que ton premier test Si N/2 = 0 est stupide !
je n'y comprend rien et même quand on m'explique je suis perdue, je suis une quiche et cet algorithme commence sérieusement à me gaver...
ducoup il faudrait mettre :
N a un minimum de 1 ....?
Je te donne un coup de pouce pour le début
Saisir N
(pas besoin d'afficher N .... celui qui utilise le programme se souvient de ce qu'il vient de saisir ! sauf s'il est atteint d'une maladie gravissime de mémorisation ! )
Pour i variant de 1 à N
Saisir L(i)
Fin pour
Maintenant on se pose la question N est pair ou pas ? Quel calcul faire ?
Dommage, en réfléchissant un tout petit pu tu aurais pu y arriver mais je ne suis pas à ta place.
Tu ne veux pas progresser, c'est ton choix. il est stupide mais c'est le tien !
je ne disais pas ça contre vous mais la prof ne nous a donné aucune aide et l'algorithme est très compliqué de base en plus comme c'est un des premiers que je fait je suis totalement perdue...
d'après ce que je crois avoir compris de vos explications :
pour savoir si N est pair ou impair on réalise N/2
pour n'importe quel nombre saisi on doit obtenir un reste r (N/2=r)
et on a r=N-2*(N/2)
ducoup on calcule r et on affiche r
si r =0 alors n est pair car :
pour N = 4 : 4/2=2
r= 4-2*2= 0
pour N = 5
5/2 = 2,5
r = 5 - 2*2,5 =0
mais ca marche pas ducoup.... parce que n est impair mais r vaut quand même 0
j'essaye avec N = 13
13/2=6,5
r=13-2*6,5=0
ca veut dire que pour tous entiers N, r = 0 .....? ca me parait très bizarre ça, quoi que non c'est logique car on enlève à N deux fois N (sa moitié) donc c'est logique d'obtenir 0
donc pour tous entiers N, N est pair donc on n'as jamais de cas où N est impair ?
je dois être la seule personne sur Terre à avoir des difficultés et à trouver la 1eS dure alors
je n'ai jamais dit que je ne voulais pas progresser, je pose régulièrement des questions en cours et en maths je fait volontairement des exos plus durs que je fait corriger par la prof pour essayer de combler mes lacunes et justement de progresser
Je t'ai dit que cet algorithme n'était pas simple à trouver . je te guide pour y arriver , tu peus peut-être essayer de me suivre !
Le reste de la division de N par 2 se trouve en calculant N - 2*partie entière de (N/2)
5/2 = 2,2
la partie entière de 5/2 vaut 2
et
5 - 2*partie entière de (5/2) = 5 - 2*2 = 1
Donc 5 n'est pas divisible par 2
Il est l'heure d'aller au lit.
Tu reviens demain en réfléchissant de façon plus zen et plus concentrée.
donc si j'ai N/2= 4,3
la partie entière est 4 donc on fait : r=N-2*4 ?ducoup c'est le résultat de r qui définit si N est pair ?
Oui c'est ce que je te dis depuis in certain temps !
Un nombre est pair si le reste de sa division par 2 est 0 et je t'ai donné la méthode pour trouver le reste de la division de N par 2
Ton exemple N/2= 4,3 est étrange cela voudrait dire que N = 2 * 4,3 = 8,6 , étrange pour un entier !
ducoup si en fesant N/2=r puis r = N-2*partie entière de (N/2) on a r=0 (si et seulement si on a 0) alors N est pair et sinon N est impair ?
après il suffit d'appliquer :
- si n est pair alors
-med est la valeur de rang N/2+1
- afficher med
- si n est impair alors
-med est la valeur de rang (N+1)/2
- afficher med
j'ai pris l'exemple de 4,3 au hasard juste pour être sûre d'avoir compris la notion de "partie entière", je vous rassure je sais quand même ce qu'est un entier malgré mes lacunes !
Horreur dans mon dernier post : il faut bien sûr lire école primaire.
Et dans Algobox la partie entière d'un nombre x est calculée par floor(x)
Et je viens de vérifier Algobox possède une fonction % utilisée en x%y donne le reste de la division de x par y
Bonjour
J'avais vu la faute aussi mais c'est pas grave
Bref j'ai retravaillé l'algorithme avec un ami, je vous l'envoie ce soir.
Bonne après-midi
Alors pour ceux qui en auraient besoin, l'algorithme que j'ai fait:
1 VARIABLES
2 n EST_DU_TYPE NOMBRE
3 r EST_DU_TYPE NOMBRE
4 L EST_DU_TYPE LISTE
5 i EST_DU_TYPE NOMBRE
6 med EST_DU_TYPE NOMBRE
7 DEBUT_ALGORITHME
8 LIRE n
9 POUR i ALLANT_DE 1 A n
10 DEBUT_POUR
11 LIRE L[i]
12 FIN_POUR
13 r PREND_LA_VALEUR n%2
14 SI (r==0) ALORS
15 DEBUT_SI
16 med PREND_LA_VALEUR (L[n/2]+L[n/2+1])/2
17 FIN_SI
18 SINON
19 DEBUT_SINON
20 med PREND_LA_VALEUR L[(n+1)/2]
21 FIN_SINON
22 AFFICHER med
23 FIN_ALGORITHME
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :