Je dois tester si deux triangles sont semblables, congruents, et si les côtés donnés sont des triangles rectangles. J'ai inclus un fichier d'en-tête. J'ai essayé d'exécuter ce programme, mais je continue d'obtenir les mauvaises réponses.Congruence, similarité et triangles rectangles
tête:
/*
* triangles.h
* Header file for triangle class.
*/
// make sure this file is not included multiple times:
#pragma once
#include <vector>
using std::vector;
class triangle {
public:
// member functions:
// constructor:
triangle(unsigned long a=3, unsigned long b=4, unsigned long c=5):
s1(a),s2(b),s3(c) {}
unsigned long perimeter();
unsigned long area();
void print(); // prints to standard output
// member variables:
// integers for the 3 sides:
unsigned long s1;
unsigned long s2;
unsigned long s3;
};
vector<triangle> findRightTriangles(unsigned long l, unsigned long h);
bool congruent(triangle t1, triangle t2);
bool similar(triangle t1, triangle t2);
Fonctions
#include <vector>
using std::vector;
#include <algorithm>
using std::sort;
// note the "triangle::" part. We need to specify the function's
// FULL name to avoid confusion. Else, the compiler will think we
// are just defining a new function called "perimeter"
unsigned long triangle::perimeter() {
return s1+s2+s3;
}
unsigned long triangle::area() {
// TODO: write this function.
// Note: why is it okay to return an integer here? Recall that
// all of our triangles have integer sides, and are right triangles...
// put the sides in an array:
unsigned long sides[3] = {s1,s2,s3};
// sort the array:
sort(sides,sides+3);
// at this point, sides[0] <= sides[1] <= sides[2]
unsigned long b = sides[0];
unsigned long h = sides[1];
return (b*h)/2;
}
void triangle::print() {
cout << "[" << s1 << "," << s2 << "," << s3 << "]";
}
bool congruent(triangle t1, triangle t2) {
// TODO: write this function.
int a, b, c;
a = t1.s1;
b = t1.s2;
c = t1.s3;
unsigned long tr1[3] = {a,b,c};
// sort the array:
sort(tr1,tr1+3);
// at this point, tr1[0]<= tr1[1] <= tr1[2]
int d,e,f;
d = t2.s1;
e = t2.s2;
f = t2.s3;
unsigned long tr2[3] = {d,e,f};
// sort the array:
sort(tr2,tr2+3);
// at this point, tr2[0] <= tr2[1] <= tr2[2]
if(tr1[0] == tr2[0] && tr1[1] == tr2[1] && tr1[2] == tr2[2]){
true;
}
else false;
}
bool similar(triangle t1, triangle t2) {
// TODO: write this function.
int a, b, c;
a = t1.s1;
b = t1.s2;
c = t1.s3;
unsigned long tr1[3] = {a,b,c};
// sort the array:
sort(tr1,tr1+3);
// at this point, tr1[0]<= tr1[1] <= tr1[2]
int d,e,f;
d = t2.s1;
e = t2.s2;
f = t2.s3;
unsigned long tr2[3] = {d,e,f};
// sort the array:
sort(tr2,tr2+3);
// at this point, tr2[0] <= tr2[1] <= tr2[2
if(tr1[0]%tr2[0] == 0 && tr1[1]%tr2[1] == 0 && tr1[2]%tr2[2] == 0){
true;
}
else false;
}
vector<triangle> findRightTriangles(unsigned long l, unsigned long h) {
// TODO: find all the right triangles with integer sides,
// subject to the perimeter bigger than l and less than h
vector<triangle> retval; // storage for return value.
triangle t1;
t1.s1=l;
t1.s3=h;
for (unsigned long p = 0; p < t1.s3; p++) {
t1.s2=p;
if (p >= t1.s1 && p <= t1.s3 && (((t1.s1*t1.s1)+(p*p)) == (t1.s3*t1.s3))){
retval.push_back(t1);
break;
}
}
return retval;
}
Les triangles ont trois altitudes. Pour un * triangle rectangle *, si la base est une jambe, l'altitude est l'autre jambe, mais pas pour un triangle général. Mais la formule de zone est * A = 1/2 bh *, pas * bh *. –
Je ne vais pas simplement déboguer pour vous. Vous devez vous asseoir avec un morceau de papier et assurez-vous que votre algorithme fonctionne. Puis codez-le. De cette façon, vous savez quelle réponse attendre. Ensuite, si cela ne fonctionne pas, vous pouvez revenir ici et dire "Je m'y attends, mais ça arrive, comment puis-je le réparer?" – Adam
Pour la zone, vous pouvez utiliser la formule de Héron: http://en.wikipedia.org/wiki/Heron's_formula – ithenoob