답을 아래와 같이 작성했는데..
VS2013에서는 제대로 답이 나오는데 제가 잘못한건가요..?
아래 코드 기입합니다.
문의한 코드는 삭제합니다. 답변에 필요한 코드만 남겨둡니다.
for (int i = 0; i < (sizeof(p) / sizeof(struct Point2D)); i++){
if (i + 1 == (sizeof(p) / sizeof(struct Point2D)) continue;
(도장_ 관리자에 의해 편집됨 - 원문 제출일 2017년 11월 23일, 목요일, 오후 4:00 )
문의한 코드와 테스트한 코드가 다른 것 같습니다.
문의한 코드는 컴파일되지 않습니다.
error C2143: 구문 오류: ')'이(가) 'continue' 앞에 없습니다.
아...네, 질문에 괄호하나를 빼먹었네요.
여하간 지금도 안되는건 마찬가지입니다.
문법오류말고 그냥 답이틀렸다고나와요.
도와주세요~~~
문의한 코드는 삭제합니다.
(도장_ 관리자에 의해 편집됨 - 원문 제출일 2017년 11월 23일, 목요일, 오후 7:11 )
문의한 코드에 다음 좌표를 입력했을 때의 결과입니다.
40 20 60 90 200 300 500 800
905.538514
그러나 올바른 코드라면 다음과 같은 결과가 나와야 합니다.
40 20 60 90 200 300 500 800
908.284878
다른 값을 대입해도 비슷합니다.
40 20 20 20 800 800 900 900
1230.447073
올바른 코드는 다음과 같습니다.
40 20 20 20 800 800 900 900
1264.507935
점과 점의 길이를 각각 구해서 더해야 합니다.
또한, struct Point2D는 int x, y를 두 개 갖고 있으므로 일반적인 시스템에서는 8바이트의 크기를 갖습니다.
struct Point2D p[4]는 Point2D를 4개 갖는 배열이므로 8 * 4 = 32바이트의 크기를 갖습니다.
이 문제에서는 좌표가 4개일 때 3번의 반복만 필요합니다. 즉, 점이 n개 있으면 선은 항상 n-1개입니다. 따라서 for 문에서는 조건식에
i < (sizeof(p) / sizeof(struct Point2D))
대신
i < (sizeof(p) / sizeof(struct Point2D)) - 1
로 쓰면 if 문과 continue를 쓰지 않아도 됩니다.
정성스러운 답변 감사드립니다.
허나, 아무리 해도 같은결과가 나옵니다.
직접 수작업으로 계산기를 뚜드려봐도 제가 작성한 코드랑 같은 답이나오고요.. 제가 수학에 약해서 계산하는 방법이 잘못된걸까요?....
보내주신 입력예시에 따른 답이 또 미묘하게 차이가나서.
자료형을 바꿔봐도 마찬가지고..
확 차이가나면 뭔가 잘못되었다 생각할텐데 . 도무지 생각이안납니다.
코드를 삭제하기 귀찮으시겠지만 혹시몰라 다시 적어요.
문의한 코드는 삭제합니다.
혹시 여유가 되시면 이메일로 어떤코드를 적용했는지 알 수있을까요?
감사합니다.
(도장_ 관리자에 의해 편집됨 - 원문 제출일 2017년 11월 27일, 월요일, 오전 11:44 )
두 점 사이의 거리를 구해서 더해야 하는 문제입니다.
값을 모두 더해서 한 번에 구하려 하면 안 됩니다.
두 점 사이의 거리를 구하려고 제곱근을 이용합니다. 제곱근은 두 번 곱해서 그 수가 나오는 것을 말합니다.
2의 제곱근(즉, 루트 2)은 윈도의 계산기로 입력해보면
1.4142135623730951
입니다.
2의 제곱근 + 2의 제곱근 + 2의 제곱근
을 구해야 한다면
1.4142... + 1.4142... + 1.4142...
처럼 계산해야 하며
결괏값은
4.242640687119286
가 됩니다. C 언어에서 float 타입을 쓰면 소수 6번째 자리까지 표시되고, 7번째 자리 수에 따라 올림이 됩니다.
2의 제곱근을 뭐하러 세 번하지? 2 + 2 + 2를 계산해서 한 번에 6의 제곱근을 하면 되잖아? 하고 생각할 수 있습니다. 그러면 6의 제곱근이 구해집니다. 6의 제곱근은 제곱을 해서 6이 나오는 수를 말합니다. 그러니 2의 제곱근이 3개 있는 것과 6의 제곱근은 값이 다릅니다. 6의 제곱근은 다음과 같습니다.
2.449489742783178
지금의 풀이 방식은 6의 제곱근을 구하는 방식이고, 문제가 요구하는 건 각각의 제곱근입니다.
아, 그렇군요. 답변 감사합니다.
완전 잘못생각하고 있었네요.
정말감사합니다. 도움 많이 되었습니다. 고생하세요~