2 votes

Calculer le périmètre d'un rectangle en utilisant euclidienne en C

Donc un de mes amis a un peu de mal à faire en sorte que son code crache correctement un périmètre (lorsque vous saisissez un point sous forme de "x y") en utilisant une structure avec des fonctions.

MODIFICATION : Le code est censé prendre 4 points, calculer chaque côté en utilisant une fonction euclidienne. (vous verriez la tentative dans la fonction print_Perimeter)

Aussi, le programme est censé s'arrêter après avoir appuyé sur 'n', mais il n'a pas réussi à le résoudre, y a-t-il des suggestions que quelqu'un pourrait donner ?

J'ai essayé de lui donner un peu d'aide mais je n'ai pas réussi à le résoudre moi-même non plus. Désolé si le code semble un peu bricolé, nous avons essayé quelques choses et l'avons juste enregistré tel quel.

Si quelque chose a besoin de plus de clarification, je vais essayer de faire de mon mieux pour répondre. Merci d'avance !

typedef struct Point
  {
int xCoord;
int yCoord;

}point;

int point_Print(int x, int y)
  {
printf("(X Y): %d %d\n", x, y);
}

double print_TwoPoints(int a, int b, int c, int d)
  {
double reponse = (sqrt(pow((a - c),2)) + (pow((b - d),2)));
printf("La distance entre le point (%d,%d) et le point (%d,%d) est de %.2lf.\n", a, b, c, d, reponse);
}

void print_Perimeter(Point *p1, Point *p3, Point *p4)
  {
int perimetre = 2 * sqrt(pow((p1->xCoord - p4->xCoord),2) + pow((p1->yCoord - p4->yCoord), 2))
        + sqrt(pow((p1->xCoord - p3->xCoord),2) + pow((p1->yCoord - p3->yCoord), 2))
printf("Le périmètre du rectangle est : %d.\n", perimetre);
}

int main()
  {
char toucheSortie = 'y';
//censé arrêter le programme
while(toucheSortie != 'n')

  {

point xCoord1;
point yCoord1;
printf("Veuillez saisir les valeurs du premier point, X1 Y1 : \n");
scanf("%d %d", &(xCoord1.xCoord), &(yCoord1.yCoord));

point xCoord2;
point yCoord2;
printf("Veuillez saisir les valeurs du deuxième point, X1 Y1 : \n");
scanf("%d %d", &(xCoord2.xCoord), &(yCoord2.yCoord));

point xCoord3;
point yCoord3;
printf("Veuillez saisir les valeurs du troisième point, X1 Y1 : \n");
scanf("%d %d", &(xCoord3.xCoord), &(yCoord3.yCoord));

point xCoord4;
point yCoord4;
printf("Veuillez saisir les valeurs du quatrième point, X1 Y1 : \n");
scanf("%d %d", &(xCoord4.xCoord), &(yCoord4.yCoord));

point_Print(xCoord1.xCoord, yCoord1.yCoord);
point_Print(xCoord2.xCoord, yCoord2.yCoord);
point_Print(xCoord3.xCoord, yCoord3.yCoord);
point_Print(xCoord4.xCoord, yCoord4.yCoord);

print_TwoPoints(xCoord1.xCoord, yCoord1.yCoord, xCoord2.xCoord, yCoord2.yCoord);
print_TwoPoints(xCoord3.xCoord, yCoord3.yCoord, xCoord4.xCoord, yCoord4.yCoord);

Point p1;
p1.xCoord = xCoord1;
p1.yCoord = yCoord1;

Point p3;
p3.xCoord = xCoord3;
p3.yCoord = yCoord3;

Point p4;
p4.xCoord = xCoord4;
p4.yCoord = yCoord4;

print_Perimeter(&p1, &p3, &p4);
printf("Entrez 'y' pour saisir de nouvelles coordonnées ou entrez 'n' pour quitter le programme : \n");
scanf(" %c", &toucheSortie);

}
}

1voto

user3629249 Points 6914

Le code suivant:

  1. compile proprement
  2. est direct
  3. fonctionne uniquement avec des rectangles, pas des parallélogrammes
  4. est testé pour le quadrant supérieur droit et point2 est plus haut et plus à droite que point1. donc vous devrez tester/ajuster pour les autres conditions et les 3 autres quadrants
  5. vérifie les erreurs

et maintenant le code

#include 
#include 
#include 

typedef struct Point
{
    int x;
    int y;
} point;

void print_Perimeter( point *point1, point *point2 )
{
    int horizontal = point2->x - point1->x;
    int vertical   = point2->y - point1->y; // ÉDIT: corrigé de '+' à '-'

    int perimeter  = 2*(horizontal+vertical);
    printf("Le périmètre du rectangle est: %d.\n", perimeter);
}

int main( void )
{
    int quitKey = 'y';

    //censé permettre au programme de quitter
    while( quitKey != 'n')
    {
        point point1;
        printf("Veuillez saisir les valeurs pour le premier point, X1 Y1: \n");
        if( 2 != scanf("%d %d", &point1.x, &point1.y) )
        {
            fprintf( stderr, "scanf pour les coordonnées du point1 a échoué\n");
            exit( EXIT_FAILURE );
        }

        // else implicite, scanf réussi

        point point2;
        printf("Veuillez saisir les valeurs pour le deuxième point, X2 Y2: \n");
        if( 2 != scanf("%d %d", &point2.x, &point2.y) )
        {
            fprintf( stderr, "scanf pour les coordonnées du point2 a échoué\n");
            exit( EXIT_FAILURE );
        }

        // else implicite, scanf réussi

        print_Perimeter( &point1, &point2 );

        // vider stdin
        int ch;
        while( (ch = getchar()) != EOF && '\n' != ch );

        printf("%s\n", "Saisissez 'y' pour entrer de nouvelles coordonnées ou saisissez 'n' pour quitter le programme:");
        quitKey = getchar();
        quitKey = tolower( quitKey );
    }

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X