Programme pour tracer un cercle en c

Résolu
Halidc Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour, j'ai fait un programme pour tracer un cercle en c .

// ce programme a pour but de tracer un cercle (continue) en utilisant des caracteres.
// probleme: le cercle tracer n est pas continue, comment faire ?

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int r , x, y, rep=1;
    
    while(rep==1)
        {
        system("clear");
            printf("Entrer le rayon du cercle : ");
            scanf("%i",&r);
            for (y = -r; y < r+1; y++) 
            {   
                printf("\n");       
                for (x = -r; x < r+1 ; x++) 
                    {            
                         if((x * x) + (y * y) == (r * r) )
                             {                     
                                printf(" 0 ");                                         
                             }
                         else 
                             {                                              
                                printf("   ",x,y);                       
                             }         
                    }                
            } 
            printf("\n\nrepeter (oui=> 1)? ");
            scanf("%i",&rep);
        }
    system("clear");
    printf("\n============>  AUREVOIR  <===========\n");
    return 0;
}


2 réponses

Halidc Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   13
 
// ce programme a pour but de tracer un cercle (continue) en utilissant des caracteres.
// probleme: le cercle tracer n est pas continue, comment faire ?

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int r , x, y, rep=1;
    
    while(rep==1) {
        system("clear");
            printf("Entrer le rayon du cercle : ");
            scanf("%i",&r);
            for (y = -r; y < r+1; y++)  {   
                printf("\n");       
                for (x = -r; x < r+1 ; x++) {            
                         if(abs((x * x) + (y * y)-(r * r)) <= (r/2)) {                     
                                printf(" * ");                                         
                        }
                         else  {                                              
                                printf("   ");                       
                        }         
                }                
            } 
            printf("\n\nrepeter (oui=> 1)? ");
            scanf("%i",&rep);
        }
    system("clear");
    printf("\n============>  AUREVOIR  <===========\n");
    return 0;
}
16
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Et ?
Cela te convient ou pas ?
0
Halidc Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   13
 
Mieux que ca si possible !!
Merci quand meme.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Il faut mieux expliquer tes attentes, cela ne coûte pas plus cher et te permettra d'avoir des réponses convenant mieux à tes attentes...

En interprétant ce que tu souhaites (voir en extrapolant), tu souhaites un cercle parfait dans une console ? Si c'est le cas, c'est impossible. Dans la console, tu ne peux afficher que des caractères à des coordonnées entières, ce qui n'est pas le cas d'un cercle...
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,
Le problème est que tu affiches des points sur un repère dont les coordonnées sont des entiers. Donc forcément, ça ne sera pas un cercle parfait.
En revanche, ce que tu peux faire est d'autoriser une certaine tolérance.
Tu affiches tous les points qui satisfont la condition suivante :
if( abs((x * x) + (y * y)-(r * r))<epsilon)

A toi de jouer avec epsilon. Tu peux même t'arranger pour qu'il soit fonction de x, y et r.

Note :
printf(" ",x,y);
C'est incorrect ça. Il faut enlever x et y. Ou alors si tu veux afficher les valeurs, il faut utiliser %d...

Cdlt,
0