PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2010/01/12 18:17:46
Name Valueinvester
Subject c++ 고수님들께 질문드립니다
안녕하세요. C++을 배운지 얼마 안되는 초보입니다.
정말 여쭤볼게 수없이 많지만 그중에서도 가장 이해 안가는 부분을 여쭤보려고 합니다.
교수님께서 가르쳐 주실 때,
메인함수에 모든 연산을 넣으면 보기도 짜기도 불편하니
모듈처럼 어떤 함수를 정의하고 메인함수에서는 필요할 때 호출하여 불러쓰면 된다고 가르쳐 주셨습니다.
그러면서 어떤 경우는 모듈함수에서 리턴(함수 마지막에 return 어쩌고 쓰는거 말입니다)을 쓸 경우가 있고 또 아닐 경우가 있다고 하시는데
이게 언제 리턴을 써야 하고 안 써야 하는지를 잘 모르겠습니다.

다음은 제가 짜본 간단한 프로그램입니다(버블정렬인데, 첫번째 함수는 임의의 변수를 만들어 넣었고 두번째 함수는 swap명령어를 썼습니다)

#include<iostream>
using namespace std;
void maketemp(int x[]);                          //함수 원형
void makeswap(int x[]);
void main()                                            //메인함수
{
        int num[5]={11,12,13,14,15};
        maketemp(num);                            //각각의 함수를 호출합니다. 이때 결과를 출력하고 싶은데 메인에서 출력하는 법과
        makeswap(num);                           //각각 함수에서 출력하는 방법을 잘 모르겠습니다
}

void maketemp(int x[])                            //함수1:임시변수를 만들어 바꾸고 정렬합니다
{
        for(int i=0;i<4;i++)
        {
                for(int j=0;j<4;j++)
                {
                        if(x[j]>x[j+1])
                        {
                                int temp;
                                temp=x[j];
                                x[j]=x[j+1];
                                x[j+1]=temp;
                        }
                }
        
        }
        for(int i=0;i<5;i++)
                cout<<x[i];
        
return;                                                //리턴이라고만 쓰면 되는지, 함수타입이 void가 되는게 맞는지 모르겠습니다
}

void makeswap(int x[])                      //함수2:스왑 명령어로 정렬하는 함수입니다
{
        for(int i=0;i<4;i++)
        {
                for(int j=0;j<4;j++)
                {
                        if(x[j]>x[j+1])
                        {
                                swap(x[j],x[j+1]);
                        }
                }
        }
        for(int i=0;i<5;i++)
                cout<<x[i];
return;                                        //리턴이라고만 쓰면 되는지, 함수타입이 void가 되는게 맞는지 모르겠습니다
}


여기서 질문드립니다. 저 상태가 과연 알맞게 함수 두개를 호출한 것인지 일단 궁금하구요.
둘째로, 메인이 void가 맞는지, 리턴은 필요없는지,
그리고 각 함수가 void가 맞는지, 리턴을 저렇게 해주는게 맞는지 궁금합니다
또 메인함수에서 저 두 함수들을 써서 정렬이 되는지 출력해보려면 어떻게 수정해야 하는지 궁금합니다.

제가 짠 코드라서 고수분들이 보시기엔 왜저렇게 했지-_-;;
라고 생각하시는 분들이 많을텐데
한번 봐 주시고 지적 많이많이 해 주시고

대체 어떤 경우에 보이드 메인/인트 메인 등이 갈리고 또 리턴은 언제는 해주고 언제는 안해주는지 등등
개념을 설명해주시면 정말 감사하겠습니다.

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
10/01/12 18:27
수정 아이콘
우선 기본적으로 oop로 modulation을 구현하는 것이 어떤 의미인지
특히 리턴 밸류와 관련해서는 캡슐화의 의미를 되새겨 보셔야 합니다.
그리고 위와 같은 경우에는 함수에 parameter를 넣을 때 call by value인지 call by reference인지에 대해서도
고민이 있으셔야 정확한 프로그래밍을 하실 수 있습니다.
레버딘
10/01/12 18:29
수정 아이콘
맞는지 확신은 안서지만... 일단 보니까 함수와 프로시저의 차이점에 대한 이해가 필요할 것 같네요.

함수는 입력값을 넣으면 출력값이 나오는 것을 말하고 프로시저는 어떠한 명령을 수행하기 위한 동작을 정의한 것이라 보시면 됩니다.

함수는 함수 타입을 명확히 적어야 하고(int, float 등등) 프로시저는 void로 지정하시면 됩니다.

함수는 리턴값(즉 출력값)을 가져야 하고 프로시저는 출력값이 없어도 됩니다.

main에도 int값을 넣어주는게 좋다고 하던데 정확한 이유는 모르겠네요.

아마 운영체제에서 함수로 처리해서 그렇지 않을까 예상해봅니다.
무한의 질럿
10/01/12 18:41
수정 아이콘
간단히 설명드리자면 함수가 돌아가고 나서 결과값을 반환해야 할 필요가 있으면 함수 이름 앞에 타입을 선언한 다음에 return을 써서 결과값을 원래 돌아가고 있는 메인 함수로 돌려주는겁니다. (int로 선언한 함수에서 char타입을 반환하면 망하겠죠. 선언한 함수에서 반환하는 값은 선언한 타입과 일치해야 합니다.)
값을 반환할 필요 없이 본문의 프로그램처럼 스왑하고 그냥 끝내도 된다면 void를 쓰는거구요.

예를 들어 rand()같은 함수는 결과값을 반환하는 함수라고 보시면 됩니다. 이 함수는 결과값을 왼쪽에 변수에 입력하게 되어있죠.
결과값을 반환하지 않고 자기가 알아서 뚝딱 끝내는 함수는 글 올리신 분이 만드신 swap함수같은 거구요.

많이 짜보시면 감이 올겁니다.
10/01/12 22:08
수정 아이콘
생각 보다 어렵네요;;;휴
Valueinvester
10/01/13 01:02
수정 아이콘
답변해주신 분들 다 감사드립니다^^
역시 많이 해보는게 답이겠네요.
좋은 답변들 꼭 참고하여 공부하겠습니다
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
71935 컴활 시험 쳐보신분들 질문좀 드리겠습니다 [2] 캐리건을사랑3171 10/01/12 3171
71934 던파 발키리에 대한 질문입니다 [2] Cand2534 10/01/12 2534
71933 무릎과 허리의 운동에 대한 질문입니다. [4] 세느1586 10/01/12 1586
71932 FM2010 영국리그를 즐기시는 분들께 질문드립니다. [9] 소녀시대김태2316 10/01/12 2316
71931 티스토리 스킨 만들기? [2] 김재혁2205 10/01/12 2205
71930 재즈 혹은 뉴에이지 음악 질문입니다.(녹음해 왔습니다.) -2 [3] 안티테란1633 10/01/12 1633
71929 서명좀 부탁드립니다..를 영어로; [3] coolasice4306 10/01/12 4306
71928 c++ 고수님들께 질문드립니다 [5] Valueinvester1717 10/01/12 1717
71927 아이폰 데이터 사용량 관련 질문입니다 [4] kisling1956 10/01/12 1956
71926 혹시.. "구순염" 걸려보신 분 계신가요? [4] 참소주3923 10/01/12 3923
71925 다이렉트X10 질문 [1] 권보아2135 10/01/12 2135
71924 처방전 받아왔는데요 이중에 직접적으로 감기치료 효과가 있는게 뭔가요? [8] 윤성호2800 10/01/12 2800
71923 컴퓨터 구입 질문 입니다. [2] 사발라면2083 10/01/12 2083
71921 어디 갈만한곳 추천부탁드려요~ [8] 체념토스2132 10/01/12 2132
71919 대구 근교 가볼만한곳?데이트코스 당일치기 [3] 사랑의바보20654 10/01/12 20654
71918 세종시에 관해서 질문이요.. [7] 민최강2001 10/01/12 2001
71917 원피스 스릴러바크 에피소드에서 [9] 생마린2828 10/01/12 2828
71916 블루투스 헤드셋 관련 [세부 : 쿠키폰] [4] 앙팡2290 10/01/12 2290
71915 동창이 아버지상을 당했다고 합니다. [8] 거침없는몸부2700 10/01/12 2700
71914 애완동물로 토끼를 키우려고 합니다. [6] 비야레알3095 10/01/12 3095
71913 벅스이용에 대한 질문입니다(앨범아트 + 가사) [2] 초록추억2186 10/01/12 2186
71912 윈도우7 동영상 질문입니다. [1] 야광팬돌이1627 10/01/12 1627
71911 익스플로러에서의 윈도우 미디어 재생에 관해서 음악세계2103 10/01/12 2103
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로