문제:
- 함수는 사용자가 입력한 정수 값과 반올림할 자리값을 나타내는 두 정수를 인자로 가진다.
- 함수는 다음 리턴 값을 가진다.
- 0 또는 양의 정수: 반올림 한 값
- -1: 인자의 값이 음수이거나, 반올림하고자 하는 값보다 자리수가 더 클 경우
- 프로그램은 사용자의 잘못된 입력을 걸러낼 수 있어야 한다. 입력한 자리값과 숫자에 대해 함수의 리턴 값이 -1인 경우 에러 메시지를 출력하고 프로그램을 종료한다.
| input an integer: 35249 input the position of the number to be rounded: 2 result: 35200 |
입니다.
제가 구현한 프로그래밍입니다.
#include <stdio.h>
int upanddown(int integer, int position) /*반올림하는 함수*/
{
int position10 = 1, n; /*position10은 반올림 하는 자리의 10의 자리값.ex) position이 2면 position10은 100이다.
n은 position10을 이런식으로 만들기 위해 for문에 넣으려고 선언.*/
for (n = 0; n < position; n++)
position10 *= 10;
if (integer<0 || (integer%position10)==0)/*정수가 0 이하이거나, 반올림 하는 자리가 정수보다 클경우 -1로 반환한다.*/
{
return -1;
}
else /*position10을 반으로 나눈값이 반올림의 기준이 된다.
반올림의 공식을 활용하여 return값에 반올림의 값을 반환해 주었다.*/
{
if ((integer%position10) >= ((position10) / 2))
return (((integer / position10) + 1)*position10);
else
return ((integer / position10)*position10);
}
}
int main(void)
{
int integer, position,result; /*정수와 반올림할 자릿수, 반올림한 결과값을 정수로 선언한다.*/
printf("Input an integer: ");
scanf_s("%d", &integer);
printf("\nInput the position of the number to be rounded: ");
scanf_s("%d", &position);
result = upanddown(integer, position); /*결과값에 위의 함수의 값을 넣는다.*/
if (result == -1)
{
printf("양의정수를 입력하시오. 양의 정수를 입력하셨다면 자릿수를 잘못 입력하신겁니다.\n");
return 0;
}
else
printf("result: %d\n", result);
return 0;
}
- -1: 인자의 값이 음수이거나, 반올림하고자 하는 값보다 자리수가 더 클 경우
이부분입니다. 여기서 음수입력까지는 에러문 잘 뜨는데 자릿수 초과하는게 에러문이 뜨지않고 계속 0으로 떠서요. 분명 (integer%position10)==0 이렇게 if문을 구현해서
350에 5이런거 입력하면 저 if문이 발동되고 return -1이 되야되는데...ㅠㅠ
한번만 도와주시면 감사하겠습니다. 다른 과목도 할게 많은데 이것만 한시간째네요...
일요일 밤인데 한시간째라니? 주말동안 한시간 밖에 안 하셨어요?
반올림하는 함수 이름 정하는건 니맘이지만 보통 round라고들 많이 쓰더라고
이게 6번이고 앞에 5문제랑 공수랑 기계공작법이라는 과목 공부했네요. 어제는 불꽃축제봤구요.ㅎㅎ프로그래밍 갤러리에서 프로그래밍 공부가 뒷전인 느낌으로 얘기해서 죄송합니다.
한번 오류 봐주실 수 있으신지요 시간 조금 괜찮으시다면..ㅎㅎ
크기 비교하면 되는 걸 %가 왜 나오냐
% 쓰려고 한다면 쓸순있는데, 크기 비교하는게 더 명료하겠다
반올림하는 자리에서 얘가 5가 넘느냐 안넘느냐가 중요하고, 그 다음자리에 1을 더하냐 안더하냐가 딸려나오니까 이거만 해결하면 되겠네 뭐
ㄴ 정말 고맙습니다 ㅠㅠㅠ 크기비교로 해서 어느정도 해결은 했습니다만
반올림은 현재 다 해결돼
됐구요. 350에 자릿수 6 이런게 계속 0이 떠서 문제였는데
이제 이것도 해결되었는데 350에 3일경우 0이 나와야되는데 제가 if (integer<0 || (integer<position10))/*정수가 0 이하이거나, 반올림 하는 자리가 정수보다 클경우 -1로 반환한다.*/ { return -1; }
이렇게 해서 350의 100의자리 반올림이 안되네요 지금 ㅋㅋㅋㅋㅋㅋㅋㅋ하...다왔는데.
ZARA
for (n = 0; n < position; n++)
position이 3일 때 n= 0, 1, 2 세번 도니까
350, 3 쓰면 0이 나와야되는데 이걸 에러취급하고있는거 아닌가몰라?
ㄴ 맞아요 ㅁㅁ님 그거에요
이걸 계속 에러취급해서
if (0 < integer * 10 % position10&&integer; * 10 % position10 < 10) { return 0; }
이거를 for반복문 밑에 바로 넣어줘서 제일먼저 구현되게 해봐쓴데 그래도 똑같네요..
350, 2 쓰면 400 나오나 확인해보고, 그렇게 나오면 걍 자라
존나 이프문 저따위로 써놓으면 니말고 읽고싶은마음이 드냐?
니가 10년후 읽는다고 생각하고 써
350에 2쓰면 400은 잘나오는데 ㅠㅠㅠ 아무래도 그냥 머릿속에서 수학적으로 생각한걸 프로그래밍으로 구현하다 보니 상당히 수식이 지저분해진거 같네요
350에 2 쓰면 400나오는 문제는 위에서 얘기했네 NoOTL이
그냥 숫자 하나만 바꿔주면 넌 잘수있다 어여 자라
if (0 < integer * 10 % position10&&integer; * 10 % position10 < 10) { return 0; } 댓글에 쓴 거 세미콜론이 있는데?
if 조건 integer;
오타인거같아요!
지금 코딩해놓은거엔 없는데 어떻게 저렇게 들어갔찌 ㅋㅋ 복붙인데
숫자 하나만 바꾸다니 어떤말씀이시지...ㅠㅠㅠㅠ 아 pow함수 더블만 할 수 있는줄 알고 이딴식으로 해쓴ㄴ데 친구는 pow로 엄청쉽게 햇다네요 하...
숫자하나를 못찾으면 넌 못잔다 빨리 찾어라 답은 위에서 다가르쳐줬네 나빼고
ex) position이 2면 position10은 100이다. 라고 주석을 달아놓았구나..
멘탈 다터져서 나가서 노래듣고 소리지르다 왓네요 ㅠㅠㅠㅠ
도저히 못찾겠어서 일단 제끼렵니다 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ다음문제도 해야해서...
오밤중에 소리지르지말어...for문에서 n이 0부터 시작하는걸 1로 시작혀
다음문제가 있다하니 알려주는거다 언넝하고 자라