모두. 필자는 꽤 많은 시간을 보냈으며, 특정 범위 내의 경계를 가진 모든 직각 삼각형을 철저하게 검색하는 함수를 작성하려고했습니다. 명확히하기 위해, 함수가 같은 삼각형으로 헤더 파일에 정의 된 클래스를 사용합니다 :C++ : 찾기 직각 삼각형 알고리즘이 예상 결과를 얻지 못했습니다.
/*
* 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 (this is an inline version):
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);
함수 findRightTriangles이 완료 될 필요가 구현 파일의 함수입니다. 지금까지, 나는 이것을 가지고있다 :
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.
unsigned long a = 1, b = 1, c = l;
for (a = 1; h >= (a+b+c); a++) { //perimeter a+b+c is less than h
if (((a*a) + (b*b)) == (c*c)) { //check if a, b, and c are sides of a right triangle, then plug them into retval.
triangle t1(a,b,c);
retval.push_back(t1);
}
for (b = 1; h >= (a+b+c); b++) { //go through values of b for right triangles.
if (((a*a) + (b*b)) == (c*c)) {
triangle t1(a,b,c);
retval.push_back(t1);
}
for (c = l; h >= (a+b+c); c++) {
if (((a*a) + (b*b)) == (c*c)) {
triangle t1(a,b,c);
retval.push_back(t1);
}
}
}
}
return retval;
}
그러나 main.cpp에서 함수를 호출하면 아무것도 반환하지 않는다. 나는 논리를 따라하기 위해 시간과 노력을 다했지만 기능이 실패한 곳을 볼 수 없다. 어떤 도움을 주시면 감사하겠습니다.
디버그를 도와 줄 수 있도록 문제를 보여주는 완전한 (그러나 최소한의) 컴파일 가능한 코드 집합을 제공하십시오. – merlin2011
귀찮은 코드가 너무 많습니다. 게시 한 코드의 양을 줄이고 어떤 값이 예상과 다른지 정확하게 보여줍니다. –