Bonjour, je créer un algorithme permettant de tracer un disque. Mais pour une raison qui m'échappe, seulement la partie inférieure de la figure est affichée...
Est-ce un problème du logiciel ?
Merci de l'attention.
Je m'aperçois que j'ai mis un nom de sujet erroné. Je ne sais pas comment le changer; j'en suis désolé...
Bonjour
Ce n'est pas un problème de logiciel , c'est un problème de compréhension de ce que peut faire une machine du genre ordinateur ou calculatrice
Si on lui donne des nombres , la machine peut calculer les carrés de ces nombres, et plein d'autres choses à partir du moment où on lui donne les informations qui lui sont nécessaires et les calculs à réaliser.
Quelle définition pourrais tu donner d'un cercle ?
Avec les variables
abscisse du centre : xCentre
ordonnée du centre : yCentre
mesure du rayon : rayon
tu devrais y arriver sans les autres variables
Oui un cercle de centre O et de rayon R est l'ensemble des points M tels que la distance OM = R
Le disque de centre O et de rayon R est est l'ensemble des points M tels que la distance OM = R
Avec les coordonnées de O et la valeur de R on peut y arriver.
Oui, et mon but est d'afficher tous les points d'un carré plein de coté diamètre du centre qui vérifient cette condition !
Essaye de revenir demain après avoir passé une bonne nuit qui va reposer tes neurones et te permettre de réfléchir plus efficacement.
Tu es convaincu de la véracité de la phrase : " mon but est d'afficher tous les points d'un carré plein de coté diamètre du cercle qui vérifient cette condition ! "
Tu penses que cette phrase a un sens ?
Excusez moi.
Correction : " mon but est d'afficher tous les points d'un carré plein de coté de longueur du diamètre du cercle qui vérifient cette condition ! "
Saisir abscisse du centre xO
Saisir ordonnée du centre yO
Saisir mesure su rayon R
Pour x variant de x0-R à xO+R
Pour y variant de yO -R à yO+ R
si (x-xO)^2 + (y-yO)^2 R^2 alors afficher le point de coordonnées x et y
Fin pour
Fin pour
Je ne suis pas certaine que ton algorithme soit beaucoup plus clair que le mien.
Mais tu as le droit de ne pas suivre mon conseil.
Il faut juste adapter le pas des boucles "Pour ....... " pour ne pas avoir des points trop éloignés les uns des autres
Dans le mien, il suffit de lire "origineXCarre" pour savoir qu'il y a une manipulation avec un carré. Et si quelqu'un ne connaît/reconnaît pas la formule des distances, il pourrait tout de même comprendre les intentions !
Parce que tu crois que la machine quand elle va voir la variable "origineXCarre" elle (la machine) va comprendre qu'il faut prendre le carré de quelque chose ?
Il va falloir apprendre ce que peut faire une machine :
saisir des données dans des variables
faire des calculs avec des nombres et/ou des variables
faire des tests
afficher le contenu de variables
un point c'est tout !
Bien sûr, ne vous en fait pas pour ça ! Je veux dire que si une autre personne veut jeter un coup d'œil voir s'en servir dans un programme, sa compréhension n'en sera que meilleur ! Sinon, je n'en aurait même pas évoqué le sujet...
Les boucles
Tant que ......
ou
Pour .. variant de ... à ... avec un pas de ....
ne sont que des successions des opérations qu'une machine peut effectuer (opération sur une certaine valeur, test sur la valeur d'une variable .....)
Ah d'accord.
Je fais aussi de la programmation est sais donc beaucoup de choses (pour un élève de première), donc ne vous en fait pas; j'en sais définitivement assez pour savoir que les ordinateur ne peuvent pas "réfléchir".
Certes une boucle Pour ........ avec un pas différent de 1 ne semble pas marcher avec Algobox
Comment la transformes tu avec un Tant que .....
Ton premier sujet ne parle que de Pour ..... jamais de Tant que ......
Tu les as fait comment tes dessins de 01h01 et 01h33 ?
Les dessins sont directement sortis d'Algobox, il suffit d'utiliser les outils dans l'onglet "Dessiner dans un repère" en bas de la fenêtre.
Une boucle "Pour ... allant de ... a ..." N'est rien d'autre que la simplification d'une boucle "Tant que ..." assez particulière :
Et avec cet algorithme sur Algobox écrit comme tu l'as transcrit au début on obtient le truc bleu que tu nous envoies !
Faut pas nous prendre pour ce que nous ne sommes pas = stupides
Bien sûr que non, je voulais seulement expliquer car j'avais compris que vous ne saviez pas comment faire... Après tout, tout le monde peut avoir des moments d'incompréhension, pouvant même paraître totalement "stupide" comme vous dites; je pensais juste que cela en était un...
Je sais faire :
algo 01h50 avec les transformations de boucles Pour en Tant que ...,
C'est à toi de réagir
Très bien, alors l'algorithme marche. Cependant, pour éviter les boucles infinies Algobox fixe un nombre de boucles à ne pas dépasser. La différence de crénelage n'est pas assez différente pour qu'il n'y ai un ressentie visuel. Comme un disque et une figure symétrique, je pense à tracer plusieurs points par tours de boucles et ainsi passer d'une complexité algorithmique quadratique à une complexité linéaire. Ce qui devrait non seulement limiter le nombre de boucles, mais aussi réduire le temps d'exécution du programme...
En fait, je me suis trompé; la classe de complexité restera quadratique... Mais le temps d'exécution est divisé par 4 !
J'ai réussi, la vitesse est bien divisée par quatre. Cependant, le crénelage ne change pas; il faut dire que algobox n'est pas fait pour dessiner...
On pourrait croire que dessiner juste un cercle ferait une grande différence, mais non plus...
Algorithme 1 :
******************************************
Algorithme permettant de tracer un disque sur un repere 2D
******************************************
1 VARIABLES
2 x EST_DU_TYPE NOMBRE
3 y EST_DU_TYPE NOMBRE
4 origineXCarre EST_DU_TYPE NOMBRE
5 origineYCarre EST_DU_TYPE NOMBRE
6 x2Carre EST_DU_TYPE NOMBRE
7 y2Carre EST_DU_TYPE NOMBRE
8 tailleCote EST_DU_TYPE NOMBRE
9 xCentre EST_DU_TYPE NOMBRE
10 yCentre EST_DU_TYPE NOMBRE
11 rayon EST_DU_TYPE NOMBRE
12 distance EST_DU_TYPE NOMBRE
13 tracerDisque EST_DU_TYPE NOMBRE
14 DEBUT_ALGORITHME
15
16 AFFICHER "Ecrivez 1 si vous voulez tracer un disque, sinon ecrivez 0 pour tracer un cercle"
17 LIRE tracerDisque
18 LIRE xCentre
19 LIRE yCentre
20 LIRE rayon
21
22 //En conciderant que l'origine est le coin inferieur gauche
23 origineXCarre PREND_LA_VALEUR xCentre - rayon
24 origineYCarre PREND_LA_VALEUR yCentre - rayon
25
26 tailleCote PREND_LA_VALEUR 2*rayon
27
28 x2Carre PREND_LA_VALEUR origineXCarre + tailleCote
29 y2Carre PREND_LA_VALEUR origineYCarre + tailleCote
30
31
32 x PREND_LA_VALEUR origineXCarre
33
34 TANT_QUE (x <= xCentre) FAIRE
35 DEBUT_TANT_QUE
36 y PREND_LA_VALEUR origineYCarre
37
38 TANT_QUE (y <= yCentre) FAIRE
39 DEBUT_TANT_QUE
40
41 distance PREND_LA_VALEUR sqrt(pow(x - xCentre, 2) + pow(y - yCentre, 2))
42
43 SI (tracerDisque == 1) ALORS
44 DEBUT_SI
45 SI (distance <= rayon) ALORS
46 DEBUT_SI
47 //Dessiner le point et ses symetries par rapport au centre.
48
49 TRACER_POINT (x,y)
50 TRACER_POINT (2 * xCentre - x,y)
51 TRACER_POINT (2 * xCentre - x,2 * yCentre - y)
52 TRACER_POINT (x,2 * yCentre - y)
53 FIN_SI
54 FIN_SI
55 SINON
56 DEBUT_SINON
57 SI (distance == rayon) ALORS
58 DEBUT_SI
59 //Dessiner le point et ses symetries par rapport au centre.
60
61 TRACER_POINT (x,y)
62 TRACER_POINT (2 * xCentre - x,y)
63 TRACER_POINT (2 * xCentre - x,2 * yCentre - y)
64 TRACER_POINT (x,2 * yCentre - y)
65 FIN_SI
66 FIN_SINON
67
68
69 y PREND_LA_VALEUR y + 0.02
70 FIN_TANT_QUE
71 x PREND_LA_VALEUR x + 0.02
72 FIN_TANT_QUE
73
74 FIN_ALGORITHME
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :