Bonjour je suis actuellement en pleine galere pour un dm de maths et jai vraiment besoin d'aide.
Le plan est muni d'un repère orthonomé (O, I, J)
On se donne un entier naturel "n" non nul
On se propose de compter le nombre de points à coordonnées entières contenus dans le disque de rayon de centre O et de rayon (racinne carée de "n")
Voici l exemple de la figure correspondante lorsque n=4
(On voit que le disque touche le 2,2, -2 et -2)
Question 1: Elaborer un programme sous Python qui demande a l utilisateur de donner le nombre "n", et qui renvoie le nombre de points a coordonees entieres contenus dans le disque de rayon de centre O et de rayon (racine carree de "n")
Bonsoir,
c'est pas très difficile, tu demandes n
puis tu testes tous les nombres i et j allant de 1 à partie entière de racine de n (avec deux boucles).
si i²+j² < n alors tu incrémentes une variable
et à la fin tu l'affiches
bonjour,
reste à décider si le disque est ouvert ou fermé (si son pourtour est compté ou pas) pour savoir si on met < n ou bien n
et puis ....
Bonjour merci pour votre aide mais moi le probleme est que je ne comprend pas quel est le programme que je dois ecrire
celui décrit par Glapion :
pour chaque valeur de i de 1 au rayon du cercle
pour chaque valeur de j de 1 au rayon du cercle
# i et j sont les coordonnée d'un point à coordonnée entières
si i²+j² < n # si ce point est intérieur au disque, (Pythagore, distance à l'origine < rayon)
le compter
# (fin du si)
# (fin de la boucle pour j)
# (fin de la boucle pour i)
compléter et afficher le nombre de points total
ceci est le "squelette" de l'algorithme, en français ordinaire (en langage dit "naturel")
décrivant les opérations à effectuer
on doit toujours commencer par ça.
mettre en forme la méthode en la décrivant explicitement
il ne (te) reste plus qu'à mettre ça en forme avec des détails de programmation (comment compter ... comment écrire "pour" etc),
en accord avec la syntaxe du langage Python (voir doc)
et à tenir compte de mon petit dessin :
les points comptabilisés par cet algorithme sont les seuls points à coordonnées positives strictement)
et pas tous les points à coordonnées entières (dans ) du disque
et puis à décider si < n ou si n
points strictement intérieurs au disque
ou bien points dans le disque y compris son pourtour (y compris sur le cercle)
si tu mets n = 1000000 tu devrais obtenir à peu de chose près 1000000 fois pi
3141549 points alors que 1000000 fois pi = 3141593 arrondi à l'entier le plus proche
salut
une remarque en complément de la solution proposée par mathafou:
une seule boucle suffit :
si 0 < i < n (ou n) alors le nombre de points à ordonnées entière et positive (de la droite x = i) est
...
ce qui évite une deuxième boucle et permet de gagner du temps ...
mathafou : je pense que tu as utilisé ggb pour la figure de 23h20 ... mais comment as-tu fait la partie colorée ?
merci par avance
attention, le n de l'énoncé est déja le carré du rayon.
(le rayon est racine de n)
tu as parfaitement raison pour l'accélération et la réduction du nombre de boucles
je ne faisais que détailler l'algo proposé par Glapion
HS : la partie colorée a été composée par morceaux (polygone et arcs de cercles)
plus subtil est la création d'une figure dynamique avec un curseur pour la valeur de n
faut chercher comment marchent les "séquences" et les "listes" avec Geogebra pour savoir comment générer les points en nombre variable et colorier différemment (et tant qu'à faire les compter) les points intérieurs et les points extérieurs.
je ne me suis pas foulé et la parte "observée" est juste un rectangle dans cette nouvelle mouture,
qui montre d'ailleurs mieux l'algo "Glapion" avec le balayage pour x de 1 à R et y de 0 à R = les points du rectangle rose, frontière comprise.
je vais mettre le fichier ggb sur GeogebraTube
lien dès que c'est fait.
Me revoila , apres beaucoup de tentatives , j'aurai bien besoin d'aide de quelqun ou d'un document pour tout mettre en language python, je patoge enormement
qu'as tu commencé à écrire ? qu'as tu essayé d'écrire ?
c'est en corrigeant ses propres erreurs et errements qu'on apprend, pas en "lisant" des trucs tout faits.
(parce que il y a plusieurs façons de "rédiger", donc il vaut mieux partir du tien, même s'il ne marche pas, et on te dira pourquoi)
En gros on fait python ya super longtemps en debut d annee , et justement ce dm il nous la donné a faire quand on veux dans l annee et sa comptera comme une note et jen ai besoin ^^
oui et alors ?
qu'as tu commencé à écrire en Python ? ...
"rien" n'est pas crédible : "apres beaucoup de tentatives"
lesquelles précisément ?
mathafou : merci .. mais comment as-tu fait ce quart de cercle coloré et avec les arrondis aux "coins" (d'ailleurs à deux sur trois) de ta première figure ...
Bah en gros jai demarer en mode lycee normal , jai essayer de rentrer ce que tu ma dit mais justement mon probleme est de transcrire jai essayer plusieurs mots et jy arrive pas
mais encore une fois qu'as tu précisément essayé
"pour chaque valeur de i de 1 au rayon du cercle"
il faut donc déja le calculer ce rayon du cercle !!
et donc lui donner un nom : par exemple on va l'appeler r
"... à partie entière de racine de n" disait Glapion
c'est ça "r" ! la partie entière de racine de n
donc en Python ça s'écrira r = floor(sqrt(n))
"pour chaque valeur de i de 1 à r (inclus)"
"pour" va se traduire
soit par une boucle explicitement "fabriquée" :
i = 1
while (i <=n):
...
i = i+1
soit par la syntaxe du "pour" de Python
for i in range(1,r+1):
...
pas besoin d'incrémenter i
attention que la borne supérieure du "range" est non comprise, d'où r+1 pour avoir jusqu'à r inclus
etc
vas y...
comme on demande de le faire avec Python, donner un programme tout fait avec Xcas est juste "pour info"
from lycee import*
n=demande("entrer un nombre")
r=floor(sqrt(r))
for i in range(1,r+1):
...
continues
que doit il y avoir dans cette première boucle "for" là ?
rappel du "squelette" à traduire
entrée de n et calcul de r
pour chaque valeur de i de 1 au rayon du cercle
pour chaque valeur de j de 1 au rayon du cercle
# i et j sont les coordonnée d'un point à coordonnée entières
si i²+j² <= n # si ce point est intérieur au disque, bord compris, (Pythagore, distance à l'origine <= rayon)
le compter
# (fin du si)
# (fin de la boucle pour j)
# (fin de la boucle pour i)
compléter et afficher le nombre de points total
on a fait ce qui est en rouge
dans cette boucle il y a donc une deuxième boucle (à la place des "..." de là où on en est)
(même si carpediem a signalé qu'on pouvait le faire avec une seule boucle et une autre méthode, savoir faire des boucles imbriquées est important)
"trucs intéressants" à propos de ce sujet, mais HS de l'exo
il y des truc sur pi etc, on en reparlera à la fin et pas avant
peinture Geogebra : j'ai crée une autre discussion là dessus peintures Geogebra (carpediem)
on doit traduire ce qui est écrit
"Pythagore" c'est pour expliquer pourquoi on calcule i²+j²
tu sembles ne pas comprendre la démarche globale et générale pour faire des algorithmes
1) analyse mathématique du problème
choix d'une méthode mathématique pour le résoudre
à ce stade toute la partie mathématique, ce qu'on calcule et pourquoi on le calcule et comment doit être parfaitement clair
sinon ce n'est même pas la peine de continuer.
à ce stade on vérifie déja que la méthode théorique marche effectivement sur des exemples.
ici on a décidé qu'on allait tester pour chaque point d'un certain rectangle si il était dans le disque ou pas
c'est à dire si sa distance à l'origine était <= n ou pas (c'est là Pythagore)
et de les compter
2) on formalise en français cela sous la forme d'un squelette d'algorithme "en langage naturel"
qui décrit explicitement ce qu'il faut faire pour réaliser cette méthode
on peut y laisser des "commentaires" pour rappeler le pourquoi du comment défini dans la phase 1
3) on le traduit dans le langage qu'on veut
à ce stade on ne se pose plus la question de pourquoi on utilise Pythagore !!
c'est la réflexion mathématique de la première étape qui dit ça.
là aussi on peut (et même on doit) mettre des commentaires expliquant pourquoi on fait ça, à quoi sert telle variable etc
la phase 1 a été en gros faite par le message de Glapion du 12-01-18 à 22:41
mais peut être n'avais tu pas compris ausi bei que cela doit l'être à cette étape
d'où mes dessins pour illustrer la méthode sur des exemples
je t'ai fait la phase 2 le 13-01-18 à 00:04
et maintenant on traduit ça (phase 3) en Python
ce n'est que de la traduction compte tenu des contraintes du langage
sauter des étapes ou tout faire en vrac dan ce processus de réflexion, est le plantage, ou le blocage, assuré.
il y a marqué "pour" ... donc ça se traduit par un deuxième "for" à l'intérieur du premier
traduire c'est pas réinventer
c'est traduire dans une autre langue (Python) ce qui est déja écrit (= la même chose) en français
from lycee import*
n=demande("entrer un nombre")
r=floor(sqrt(r))
for i in range(1,r+1):
for j in range(1,r+1):
...
Maintenant je dois traduire sa?
le compter
# (fin du si)
# (fin de la boucle pour j)
# (fin de la boucle pour i)
pour compter quelque chose il te faut une variable supplémentaire
que tu initialise à 0 tout au début
et "le compter" se traduira par
cette_variable = cette_variable +1
ou en "raccourci Python"
cette_variable += 1
tu l'appelles comme tu veux, c'est ton algorithme, mais il est recommandé que son nom reflète sa fonction : compter un nombre de points
quant aux "# fin trucmuche"
c'est le mécanisme d'indentation de Python qui définit les fin de blocs d'instructions
(contrairement à d'autres langages ou il y a des mots clkés explicites pour ça)
on peut les mettre en commentaires (commençant par # en Python) qui ne seront pas interprétés par Python
juste pour nous, pour voir au premier coup d'oeil en lisant la programme où sont les boucles.
????
réfléchis !!!
à croire que tu n'as jamais écrit le moindre algorithme en quoi que ce soit de ta vie
ni sur calculette ni rien.
initialiser ça veut dire donner une valeur initiale à la variable
donc un :
variable = cette valeur
placé tout au début (avant les boucles)
Donc:
from lycee import*
n=demande("entrer un nombre")
r=floor(sqrt(r))
print(cette_variable)
for i in range(1,r+1):
for j in range(1,r+1):
cette_variable
Moralite
Quand un posteur veut un programme:
soit on ne donne rien
soit on donne tout
soit on y passe la nuit
faut dire que ... sans commentaire
recopier un
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :