:: 게시판
:: 이전 게시판
|
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
10/10/22 11:43
main 함수 밖에 새로운 함수를 만들면 되지요.
double triangle(double width, double height) 삼각형 넓이 계산 넓이값을 리턴 한 후 main함수에서 triangle_area 함수의 리턴값을 받으면 됩니다.
10/10/22 11:34
double getTriArea(double width, double height)
return width*height/2; double getRectArea(double width, double height) return width*height; 히히, 빨리 나가셔서 점심 드세요.
10/10/22 11:49
녹차트윈스 님// ARM7TDMI 님// 답변 감사합니다! 근데 이렇게 함수를 짜면
메인함수 안에 수식부분 지워도 실행 되야하는거죠...?
10/10/22 11:46
아니죠. 출력을 위해서 그부분은 남겨두시구요. 그 위에 함수 호출해서 값을 얻어오시는 부분이 필요합니다.
triangle_area = getTriArea(width, height); rectangle_area = getRectArea(width, height); 이렇게 말이죠.
10/10/22 12:05
혹시나 해서 적습니다.
double getTriArea(double width, double height) return width*height/2; double getRectArea(double width, double height) return width*height; 이 부분을 메인밑에다 적으셨다면 메인위에 double getTriArea(double, double); double getRectArea(double, double); 이런 프로토 타입을 적어주셔야 됩니다.
10/10/22 11:56
#include <stdio.h>
double getTriArea(double width, double height) return width*height/2; double getRectArea(double width, double height) return width*height; int main() double width, height; double triangle_area, rectangle_area; printf("면적을 구할 삼각형과 사각형의 가로와 세로를 입력하세요.n"); scanf("%lf %lf", &width, &height); triangle_area=getTriArea(width, height); rectangle_area=getRectArea(width, height); printf("삼각형의 면적은 %.3lf입니다.n", triangle_area); printf("사각형의 면적은 %.3lf입니다.n", rectangle_area); return 0;
10/10/22 15:20
쓰레드가 길어졌네요..
입력이 뭐고 출력이 뭐냐를 정의하는 게 우선입니다. 삼각형 넓이 구하는 함수니, 출력은 넓이고 입력은 밑변과 높이가 되겠죠. 또 C의 모든 데이터는 타입이 있습니다. 여기에선 높이나 밑변 길이가 실수인 double type이므로 맥락상 넓이도 double이겠죠. 그러니 프로토타입은 double getTriArea( double w, double h ); 와 같은 꼴이 됩니다. 함수는 블랙박스 같은 거라서, 일단 뭐가 입력이 들어가고, 어떻게 나오는진 모르지만 출력은 뭐가 나온다는 게 분명한 상태에서 프로토타입을 정의하는 것부터 시작하시면 됩니다. 함수의 '구현'은 제일 마지막 단계에요. 입출력 관계가 분명하면 구현은 쉽습니다. 알고리즘을 생각할 때도, 처음부터 온갖 세세한 걸 다 생각하는 게 아니라, 굵직굵직한 것부터 생각하는 거죠. 1만 줄짜리 텍스트 파일에서 랜덤하게 10줄을 읽어 가나다 순으로 정렬하는 프로그램을 예로 들겠습니다. 저라면 먼저, 이 10줄을 고르기 위해 1만까지 숫자 중 랜덤하게 10개를 골라서 순서대로 정렬하겠습니다. 다음엔 한 줄 한 줄 읽으면서, 지금 내가 읽고 있는 이 줄이, 아까 골라놓은 숫자하고 일치하는지 볼 거고요. 마지막으로 10개의 골라놓은 라인을 가나다 순으로 정렬하겠습니다. 이게 큰 그림이고, 그 다음에 "어떻게" 1만까지 가운데 10개의 수를 고르는지 구체적으로 생각해야 되겠지요. 한꺼번에 모든 걸 다 생각하면, 복잡한 프로그램을 만들기 어렵습니다. 함수는 프로그래머가 이렇게 일의 단위를 나눠서 생각하도록 도와주는 역할을 한다고 봅니다. 위의 예에서도 문제를 푸는 첫 단계는, 일을 크게 나누고, 매 procedure마다, 예컨대 "어떻게"는 생략하고 무엇이 들어가서(1만까지의 자연수가 들어가서) 무엇이 나오는지(10개의 랜덤하게 선택되어 정렬된 자연수)만 확실히 했었습니다. 이게 함수의 프로토타입으로 연결되는 거고, 그러고 나면, 무엇을 구현해야 하는지도 더 분명해져요.
10/10/22 15:32
그리고 큰 프로그램은 한 사람이 다 만들지 않지요. 여러 사람이 나눠서 맡으려면, 나는 여기까지 만들테니 너는 여기를 만들어, 하는 걸 약속할 규약이 필요합니다. 가장 확실한 것 가운데 하나가 함수의 프로토타입이죠.
마지막(?)으로 mp3 플레이 하는 프로그램을 만들었다고 칩시다. DCT란 알고리즘이 들어가는데, 처음엔 아주 무겁고 좋지 못한 DCT를 써서 만들었습니다. 그런데 누가 압도적으로 좋은 DCT 알고리즘을 개발했다면, mp3 플레이어 보수할 때, 이 DCT 부분만 교체하고 싶겠죠. 그러려면, 소위 modulize가 잘 되어 있어야 합니다. C는 기계랑 가까운 언어라서, 한 가지 일이 끝나면 다른 일을 하고, 이렇게 계속 해서 결국 전체 큰 일을 끝내는 모델을 근저에 깔고 있습니다. 이 상황에서 저러한 modularization에 유리한 방식이 함수 아니었나 생각됩니다.
|