2017-10-19 12 views
-3

Je ne suis pas sûr de ce que je fais mal. L'une des erreurs est que le rectangle est mentionné en premier dans int main(). J'ai besoin du programme pour demander à l'utilisateur les dimensions de 2 rectangles et faire quelques calculs et retourner ces valeurs. Je veux aussi qu'il incorpore en quelque sorte les noms de structure dans le fichier d'en-tête. merciprogramme continue de s'écraser, d'autres problèmes avec le programme

rectangle2.h

struct rectangle 
{ 
    double length;  // variable to store length 
    double width;  // variable to store width 
}; 

// function to calculate the area 
double area( struct rectangle jane ); 
// function to calculate the perimeter 
double perimeter(struct rectangle luis); 
// function to calculate the diagonal length from one corner to another 
double diagonal(struct rectangle adrian); 
// function to determine if the rectangle is a square 
// returns true when it is a square, false when it is not 
bool isSquare(struct length fernie); 
// function to determine whether the rectangle is golden 
// https://en.wikipedia.org/wiki/Golden_rectangle 
// (a + b)/a is equal to a/b 
// returns true when it is a golden rectangle, false when it is not 
bool isGolden(struct length claudia); 
// function to determine if two rectangles are similar 
// two rectangles are similar if the ratio of the length and width of 
// one rectangle is equal to the ratio of the length and width of 
// the other rectangle 
bool areSimilar(struct rectangle pedro, struct rectangle omar); 

rectangle.c

#include "rectangle2.h" 
#include <stdio.h> 
#include <stdbool.h> 

double area(struct rectangle jane) //to calculate area of rectangle 
{ 
return jane.width * jane.length; 
} 

double perimeter(struct rectangle luis) //to calculate perimeter of rectangle 
{ 
return 2 * (luis.length + luis.width); 
} 

double diagonal(struct rectangle adrian) //to calculate diagonal of rectangle 
{ 
return (adrian.length * adrian.length) + (adrian.width * adrian.width); 
} 

bool isSquare(struct length fernie ) //checks if rectangles are square 
{ 
    if((fernie.width * fernie.length) == (fernie.length * fernie.length)) 
     return true; 

    else 
     return false; 
} 

bool isGolden(struct length claudia) //checks if rectangles are golden 
{ 
if(((claudia.width + claudia.length)/claudia.width) == (claudia.width/claudia.length)) 
return true; 

else 
return false; 
} 

bool areSimilar(struct rectangle pedro, struct rectangle omar) //checks if rectangles are similar 
{ 
if((pedro.length/pedro.width) == (omar.length/omar.width)) 
return true; 

else 
return false; 
} 

main.c

int main() 

{ 
struct rectangle sides; 
sides.length; 
sides.width; 


//asks the user for the length and width for 2 rectangles 
printf("\nEnter dimensions of Rectangle 1: "); 

printf("\nEnter Length: "); 

scanf("%lf" , sides.length); 

printf("\nEnter Width: "); 

scanf("%lf" , sides.width); 
printf("\nEnter dimensions of Rectangle 2: "); 

printf("\nEnter Length: "); 

scanf("%lf",sides.length); 

printf("\nEnter Width: "); 

scanf("%lf" , sides.width); 


//printing statements after all calculations have been made 

printf("\nArea of Rectangle 1 is: %lf" , area(&jane)); 
printf("\nArea of Rectangle 2 is: %lf",area(rectangle.jane)); 

printf("\nPerimeter of Rectangle 1: %lf" , perimeter(rectangle.rec1.luis)); 
printf("\nPerimeter of Rectangle 2: %f",perimeter(rectangle.rec2.luis)); 

printf("\nDiagonal of Rectangle 1: %lf" , diagonal(rectangle.rec1.adrian)); 
printf("\nDiagonal of Rectangle 2: %lf" , diagonal(rectangle.rec2.adrian)); 

return 0; 
} 
+3

"Conserve les plantages" et "autres problèmes" ne sont pas vraiment descriptifs. Puis-je vous référer à e.g. https://ericlippert.com/2014/03/05/how-to-debug-small-programs/? – Evert

+0

A première vue, votre programme ne peut même pas compiler: il y a une référence à une variable 'jane' dans' main() ', et un membre' jane' d'une structure 'rectange', les deux qui n'existent pas. – Evert

+0

Ne compile même pas. Qu'est-ce que 'rectangle.jane' est supposé être dans' main() '? Il n'y a pas de variable nommée 'rectangle' dans' main() '. – AlexP

Répondre

0

votre programme ne peut pas compiler pour de multiples raisons.

rectangle2.h est la plupart du temps ok. Vous devez modifier le paramètre des fonctions isSquare et isGolden de struct length à struct rectangle, car struct length n'est pas défini

Voici une version du fichier complet qui fonctionnera comme vous l'avez envisagé.

rectangle2.h

typedef enum {false, true = !false} bool; 

struct rectangle 
{ 
    double length; 
    double width; 
}; 

double area(struct rectangle jane); 
double perimeter(struct rectangle luis); 
double diagonal(struct rectangle adrian); 
bool isSquare(struct rectangle fernie); 
bool isGolden(struct rectangle claudia); 
bool areSimilar(struct rectangle pedro, struct rectangle omar); 

à rectangle.c vous n'avez pas besoin d'inclure stdio.h que vous n'imprimer et de numériser dans ce fichier. vous devez inclure math.h pour que la fonction diagonale soit mathématiquement correcte. Si vous ne parvenez pas à le faire fonctionner, changez la fonction comme avant, sans sqrt().
vous devrez également remplacer struct length par struct rectangle dans les fonctions isSquare et isGolden pour correspondre aux prototypes dans rectangle2.h.

rectangle.c

#include "rectangle2.h" 
#include <math.h> 

double area(struct rectangle jane) 
{ 
    return jane.width * jane.length; 
} 

double perimeter(struct rectangle luis) 
{ 
    return 2 * (luis.length + luis.width); 
} 

double diagonal(struct rectangle adrian) 
{ 
    return sqrt(adrian.length*adrian.length + adrian.width*adrian.width); 
} 

bool isSquare(struct rectangle fernie) 
{ 
    return (fernie.width == fernie.length); 
} 

bool isGolden(struct rectangle claudia) 
{ 
    double p = (claudia.length + claudia.width)/claudia.length; 
    double q = claudia.length/claudia.width; 
    return p == q; 
} 

bool areSimilar(struct rectangle pedro, struct rectangle omar) 
{ 
    return (pedro.length/pedro.width) == (omar.length/omar.width); 
} 

et enfin votre main.c est le pire. Je suis sûr que vous comprendrez ce qui n'allait pas en regardant mon exemple, mais sinon demander librement.

main.c

#include "rectangle2.h" 
#include <stdio.h> 

struct rectangle rect1, rect2; 
char *s; 

int main() 

{ 
    printf("\nEnter dimensions of Rectangle 1:"); 
    printf("\nEnter Length: "); 
    scanf("%lf", &rect1.length); 
    printf("\nEnter Width: "); 
    scanf("%lf", &rect1.width); 

    printf("\nEnter dimensions of Rectangle 2:"); 
    printf("\nEnter Length: "); 
    scanf("%lf", &rect2.length); 
    printf("\nEnter Width: "); 
    scanf("%lf", &rect2.width); 

    printf("\nArea of Rectangle 1 is: %lf", area(rect1)); 
    printf("\nArea of Rectangle 2 is: %lf", area(rect2)); 

    printf("\nPerimeter of Rectangle 1: %lf", perimeter(rect1)); 
    printf("\nPerimeter of Rectangle 2: %lf", perimeter(rect2)); 

    s = areSimilar(rect1, rect2) ? "true" : "false"; 
    printf("\nRectangle 1 & 2 are similar: %s", s); 

    s = isSquare(rect1) ? "true" : "false"; 
    printf("\nRectangle 1 is square: %s", s); 

    printf("\nDiagonal of Rectangle 1: %lf" , diagonal(rect1)); 
    printf("\nDiagonal of Rectangle 2: %lf\n" , diagonal(rect2)); 

    return 0; 
} 

pour faire un exécutable que vous aurez besoin de compiler main.c et rectangle.c, voici un exemple sur un terminal Linux: cc -o rec main.c rectangle.c -lm. le commutateur -lm est là pour inclure la bibliothèque mathématique. Je pense que le même exemple dans un terminal Windows utilisant le compilateur de ligne de commande borland serait comme ceci: bcc32 main.c rectangle.c.

J'espère que cela aide. désolé, pas le temps d'écrire plus pour le moment.