나는 율리우스 력과 그레고리력 및 다른 많은 것들과 관련하여 날짜를 검증하는 표현식을 만들어야하는 미친 숙제를 가지고있다 ...C++에서 표현식에 변수를 정의 할 수 있습니까?
문제는 그것이 모두 하나의 표현식이어야한다는 것이다. 임의로 사용하지 마십시오 ;
variable in expression을 정의 할 수있는 옵션이 있습니까? 내가 정의하고 하나 개 이상의 변수를 초기화하고 ;
를 사용하지 않고 하나 개 표현에서 사용할 수
d < 31 && (bool leapyear = y % 4 == 0) || (leapyear ? d % 2 : 3) ....
같은 뭔가?
편집 : 명시 적으로 한 줄로 된 표현식이어야합니다. 어떤 기능이 없습니다 ..
이이를 해결하는 유일한 적합한 방법입니다처럼이
#define isJulian(d, m, y) (y < 1751 || (y == 1752 && (m < 9) || (m == 9 && d <= 2)))
#define isJulianLoopYear(y) (y % 4 == 0)
#define isGregorian(d, m, y) (y > 1573 || (y == 1752 && (m > 9) || (m == 9 && d > 13)))
#define isGregorianLoopYear(y) ((y % 4 == 0) || (y % 400 = 0))
// etc etc ....
같은 물건을 끝낸다 내가 지금 그것을하고 있어요 매크로를 작성하고이를 확대 방법, 이렇게 본다 문제
편집 : 여기에 원래의 질문을하다
한다고 가정 우리가 일, 월 및 연도를 포함하는 변수 d
m
및 y
있습니다. 작업은 날짜가 유효한지 여부를 결정하는 하나의 단일 표현식을 작성하는 것입니다. 날짜가 유효하면 값은 true (0이 아닌 값)이고 날짜가 유효하지 않으면 false (0) 여야합니다.
if (log (d) == 1752) m = 1;
나 :
이 잘못 답변의 예 (안 표현)이다d + 4 == y^85 ? ~m : d * (y-2)
을 :
이
는 (정확한 표현은 다음과 같이 보일 것이다) 표현의 예입니다for (i = 0; i < 32; i ++) m = m/2;
;
없이 하나의 표현식 만 포함 된 파일 만 제출 끝. 명령이나 전체 프로그램을 제출하지 마십시오. 그 날짜가 율리우스 력에서 그레고리력
- 는 율리우스 력이었다.
- 그레고리오 (Gregorian) 달력은 어느 해보다 도약 연도는 4로 나눌 수 있지만 100으로 나눌 수는 없습니다. 400으로 나눌 수있는 연도는 또 다른 예외이며 윤년입니다.
- 1800, 1801, 1802, 1803, 1805, 1806, ..., 1899, 1900, 1901, ..., 2100, ..., 2200은 루프 연가가 아닙니다. 1752년 2월 9일이 때 9 월 1752
- 또 다른 예외는
- 1896, 1904, 1908, ..., 1996, 2000, 2004, ..., 2396, ..., 2396, 2400 루프 년 있습니다 14.9.1752 다음에 3.9.1752, 4.9.1752, ..., 13.9.1752는 유효하지 않습니다.
매크로를 사용하고 사전 처리 된 표현식을 제출 하시겠습니까? 또한 윤년 규칙은 그보다 더 복잡합니다. 그런데이 숙제의 핵심은 무엇일까? 표현이 아닌 함수가 아니라고 확신합니까? – UncleBens
윤년 규칙은 좀 더 복잡 할 수 있지만, 엣지 경우는 2400 년까지는 발생하지 않으므로 무시해도 안전하다고 생각합니다. –
@UncleBens : 넵 매크로는 지금까지 생각해 낸 유일한 해결책입니다 ... 참/거짓으로 평가되는 한 줄의 표현식이어야합니다. 솔직히 말해서 숙제는 모두 매우 어리 석다. –