:: 게시판
:: 이전 게시판
|
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다. 통합 규정을 준수해 주십시오. (2015.12.25.)
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
14/11/23 21:24
예를 들면 [파일을 읽어와서 파일포인터를 반환하는 함수], [파일포인터를 주면 내용을 출력하는 함수] 등등을 메인함수 밖에서 선언하고 메인함수 안에서는 함수를 호출해서 사용하게 만들어달라는 의미시겠죠?
14/11/23 21:29
어떤 부분의 효율을 말씀 하시는건지 잘 모르겠습니다만..
함수화가 이쁘게 잘 되 있으면 기본적으로 코드의 재사용성 + 가독성이 증가합니다.
14/11/23 21:32
함수 쪽 공부가 제대로 안되있어서 드리는 질문인데,
예를 들어 A라는 함수를 선언해서 int A(doubble B, int C) { int D; int E; } 이렇게 한다고 했을 때, 소괄호 안에 적힌 변수들과 중괄호 안에 적힌 변수들의 차이점은 뭔가요?;;
14/11/23 21:35
어떤 차이점을 말씀 하시는건지요??
double B, int C는 파라미터이고, int D와 int E는 A 함수 내 로컬 변수죠. 당연한 얘기지만 B와 C는 파라미터기 때문에 함수를 호출하는 곳(caller)에서 값을 임의로 넣어줄 수 있습니다.
14/11/23 21:32
작성한 사람의 입장에선 어찌보면 복잡해 보이겠지만, 다른사람이 보는 입장에서는 다를수 있어요.
함수라는 것이 자주쓰는 행동을 여러번 입력하지 않고 단 한줄의 코드로 여러번 효율적으로 사용하는 효과도 있지만, 다른 코더가 볼때 함수의 구현 내용을 전혀 알 필요 없이도 메인함수만 보고도 이 프로그램이 대충 어떻게 돌아가는지 효율적으로 보여주는 역할도 하고 있다고 생각해요. 메인 함수 내에 엄청난 코드가 있는데, 함수로 메인함수 밖으로 기능을 떼어내고 [파일 읽어옴] [파일 출력함] [파일 정렬함] [기능 선택함] 딱 4줄(물론 그 외 선언들 때문에 4줄은 넘겠지만요)로 표현할 수 있다면 다른 사람이 코드를 보는 입장에서, 이 프로그램은 어떻게 돌아가는구나를 명확하게 알 수 있겠죠.
14/11/23 21:55
저도 코딩 처음 시작할때 아 왜 함수 하나에 다 쓰면 금방 만들고 귀찮게 키보드도 더 많이 쳐야하는데 일일이 나누는거지? 이유를 모르겠네
난 이대로 코딩 잘하고 있는데 괜히 룰만 있어서 나누라고 하나? 이러고 무시하고 하나에 다 짜고 그랬는데 이제 코딩 10년 넘게 넘어서니 저렇게 하나에 다 되어있는 함수만 봐도 짜증나더라고요 크크 괜히 나누는게 이유가 있더라고요. 일단 간단하게 지금이야 코드 몇줄 되지도 않고 그러지만 나중에는 코드가 몇천, 몇만줄 넘어가는데 랭킹 구하는거 주석으로 써놨으니까 다 여기보면 랭킹 구하는지 알겠지?? 이러고 넘어가지만 그거 찾을려고 코드 한번 보는거 자체가 스트레스 입니다. 당연히 Get Calculate Rank 등등의 해당 기능을 표현하는 이름으로 된 함수로 따로 빠져 있어야지 바로 여기가 랭킹 구하는거인지 누구나 알 수 있습니다. 그리고 enum 같은걸 배우셨을지 모르겠지만 항상 코드는 기능 추가/삭제에 신속히 대응할 수 있어야 합니다. 이 코드에서 누가 아 3번에 "최소치 구하기" 넣어주세요. 이러면 이 코드는 switch 밑에 있는 숫자를 긴 코드 따라가면서 각각 다 바꿔야하죠. 이런걸 신속하게 대응할 수 있는 코드가 좋은 코드죠
14/11/23 22:36
파일을 읽는 부분을 예시로 들자면 int read(fstream, int*, int*) 으로 짜고 저기 있는 for문과 그 위의 파일 입출력 부분을 몽땅 집어넣을 수 있겠죠..;
이러면 좋은 점이 읽기가 편해지고 다른 코드에서 저 함수 부분만 따서 따로 쓰기가 편해지고 추후 파생될 코드관리에도 유리해집니다.
14/11/23 22:44
뭐 숙제가 아니라 실제 회사라고 칩시다.
원래는 std_info.txt를 읽어서 어쩌고 저쩌고 하는 프로그램이었습니다. 그런데 갑자기 다른 부서랑 협의를 어쩌고 저쩌고 하다보니 읽어야 할 파일이 std_info001.txt 부터 std_info100.txt 까지 100개로 늘어버렸어요. 이 경우 FILE *fp, *fpw; /*fp = 파일 포인터 선언, *fpw = 파일 작성*/ fp = fopen("std_info.txt", "r"); fpw = fopen("result_std_info.txt", "w"); printf("▶파일을 읽고 있습니다.n"); if(fp == NULL) { printf("▶ERROR : 파일을 열 수 없습니다.n"); } printf("번호t이름t키n"); for(i=0; i<N; i++) { fscanf(fp, "%s", &name[i]); fscanf(fp, "%d", &height[i]); printf("%2d %10s %4dn", i+1, name[i], height[i]); } printf("nn▶파일을 모두 읽었습니다. 파일을 정렬합니다.nn"); 이 부분을 100번 복사 붙여넣기 할 수는 없겠죠. 처음부터 void readfile(){ filename, name, height} FILE *fp, *fpw; /*fp = 파일 포인터 선언, *fpw = 파일 작성*/ fp = fopen("filename", "r"); fpw = fopen("filename + info.txt", "w"); printf("▶파일을 읽고 있습니다.n"); if(fp == NULL) { printf("▶ERROR : 파일을 열 수 없습니다.n"); } printf("번호t이름t키n"); for(i=0; i<N; i++) { fscanf(fp, "%s", &name[i]); fscanf(fp, "%d", &height[i]); printf("%2d %10s %4dn", i+1, name[i], height[i]); } printf("nn▶파일을 모두 읽었습니다. 파일을 정렬합니다.nn"); } 뭐 이런식으로 짜뒀다면 뒷 일이 편하겠죠.
14/11/24 07:39
아침에 출근하다가 아빠미소 나와서 리플달아봐요 (비웃는거 아님)
프즈히님이 이미 정확하게 코드를 짜서 올려놓으셨으니 제가 더 할말은 없고.. 짱돌이나 멍청이라 못따라가는게 아닙니다. 이정도 간단한 코드부터 머리굴리고 프로젝트 한두번 큰거 제대로하면 그때부턴 무난해요 화이팅!
|