PGR21.com
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다.
통합 규정을 준수해 주십시오. (2015.12.25.)
Date 2014/11/23 21:17:23
Name 화이트데이
File #1 img_statiumNew1.jpg (385.2 KB), Download : 16
File #2 fdbabe05649d4209b9342170f93159c6_99_20141208001202.jpg (31.5 KB), Download : 0
Subject [질문] [C++] 과제하다가 발암에 걸려 질문드립니다.




http://codepad.org/oaqZGIBW

제가 짠 코드입니다. 포인터 배우기 전에 파일처리만 배워서 만든거라서 여러모로 저질입니다.
갑자기 과제로 저걸 죄다 함수로 바꾸라는 명을 받았는데 도대체 어디부터 손대야할지 감이 안오네요.

최대한 효율적으로 파일을 코딩해보라는 교수님의 의미인 것 같은데 애초에 저리 간단한 프로그램을 무슨 수로 더 효율적으로 만들어보라는건지 이해도 잘 안가고(...).

그냥 보기 편하게 만들라는 그런 의미일까요?
아니면 함수로 변경시키면 더 예쁘장하게 바뀔 수 있는 부분이 있나요?

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
신예terran
14/11/23 21:24
수정 아이콘
예를 들면 [파일을 읽어와서 파일포인터를 반환하는 함수], [파일포인터를 주면 내용을 출력하는 함수] 등등을 메인함수 밖에서 선언하고 메인함수 안에서는 함수를 호출해서 사용하게 만들어달라는 의미시겠죠?
화이트데이
14/11/23 21:26
수정 아이콘
프로그래밍 허접의 관점인데.. 그게 정말로 효율적인가요? 더 복잡해보이기만 할 듯 한데(...).
자바초코칩
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)에서 값을 임의로 넣어줄 수 있습니다.
신예terran
14/11/23 21:32
수정 아이콘
작성한 사람의 입장에선 어찌보면 복잡해 보이겠지만, 다른사람이 보는 입장에서는 다를수 있어요.
함수라는 것이 자주쓰는 행동을 여러번 입력하지 않고 단 한줄의 코드로 여러번 효율적으로 사용하는 효과도 있지만,
다른 코더가 볼때 함수의 구현 내용을 전혀 알 필요 없이도 메인함수만 보고도 이 프로그램이 대충 어떻게 돌아가는지 효율적으로 보여주는 역할도 하고 있다고 생각해요.

메인 함수 내에 엄청난 코드가 있는데, 함수로 메인함수 밖으로 기능을 떼어내고
[파일 읽어옴]
[파일 출력함]
[파일 정렬함]
[기능 선택함]
딱 4줄(물론 그 외 선언들 때문에 4줄은 넘겠지만요)로 표현할 수 있다면 다른 사람이 코드를 보는 입장에서, 이 프로그램은 어떻게 돌아가는구나를 명확하게 알 수 있겠죠.
azurespace
14/11/23 21:36
수정 아이콘
지금 저 코드를 12개월 후에 다시 보시면 무슨 의미인지 아시겠지요.
랜드로드
14/11/23 21:55
수정 아이콘
저도 코딩 처음 시작할때 아 왜 함수 하나에 다 쓰면 금방 만들고 귀찮게 키보드도 더 많이 쳐야하는데 일일이 나누는거지? 이유를 모르겠네
난 이대로 코딩 잘하고 있는데 괜히 룰만 있어서 나누라고 하나? 이러고 무시하고 하나에 다 짜고 그랬는데
이제 코딩 10년 넘게 넘어서니 저렇게 하나에 다 되어있는 함수만 봐도 짜증나더라고요 크크
괜히 나누는게 이유가 있더라고요. 일단 간단하게 지금이야 코드 몇줄 되지도 않고 그러지만 나중에는 코드가 몇천, 몇만줄 넘어가는데
랭킹 구하는거 주석으로 써놨으니까 다 여기보면 랭킹 구하는지 알겠지?? 이러고 넘어가지만 그거 찾을려고 코드 한번 보는거
자체가 스트레스 입니다. 당연히 Get Calculate Rank 등등의 해당 기능을 표현하는 이름으로 된 함수로 따로 빠져 있어야지
바로 여기가 랭킹 구하는거인지 누구나 알 수 있습니다. 그리고 enum 같은걸 배우셨을지 모르겠지만 항상 코드는 기능 추가/삭제에
신속히 대응할 수 있어야 합니다. 이 코드에서 누가 아 3번에 "최소치 구하기" 넣어주세요. 이러면 이 코드는 switch 밑에 있는 숫자를
긴 코드 따라가면서 각각 다 바꿔야하죠. 이런걸 신속하게 대응할 수 있는 코드가 좋은 코드죠
14/11/23 21:58
수정 아이콘
조금만 큰 프로젝트 하나 해보시면 금방 알게 되실듯합니다.
화이트데이
14/11/23 22:20
수정 아이콘
쩝. 예시로 한 부분만 좀 코딩해주실 분 없나요?
도저히 짱돌이 안굴러가네요(...).
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/23 22:54
수정 아이콘
드디어 멍청한 머리가 이해했습니다.

답변해준 모든 분들 감사합니다.
J Rabbit
14/11/24 07:39
수정 아이콘
아침에 출근하다가 아빠미소 나와서 리플달아봐요 (비웃는거 아님)
프즈히님이 이미 정확하게 코드를 짜서 올려놓으셨으니 제가 더 할말은 없고..
짱돌이나 멍청이라 못따라가는게 아닙니다. 이정도 간단한 코드부터 머리굴리고 프로젝트 한두번 큰거 제대로하면 그때부턴 무난해요
화이팅!
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
53267 [질문] 삼성 scsa요즘 어떤가요?+문과 프로그래밍 [7] iPhone67137 15/02/06 7137
49094 [질문] 무명 개발자도 '스팀' 인디게임 카테고리 발매할 수 있나요? [2] 츄지Heart1217 14/12/09 1217
48984 [질문] Ctrl이나 Alt 역할을 하는 페달 같은게 있을까요? [4] Crystal Castles1176 14/12/08 1176
48782 [질문] [자바] 이클립스 단축키 관련 질문입니다. [4] Jannaphile2114 14/12/04 2114
47886 [질문] [C++] 과제하다가 발암에 걸려 질문드립니다. [14] 화이트데이2042 14/11/23 2042
47858 [질문] [C++] 버블 정렬 코딩 잘못된 부분좀 봐주세요ㅠㅠㅠ. [2] 삭제됨776 14/11/23 776
47207 [질문] 컴퓨터 조립 견적 조언 부탁드립니다.(w/ GTX 970) [4] Zwei1356 14/11/14 1356
46925 [질문] NC 소프트 인적성 검사 질문입니다. [4] 레이미드10678 14/11/11 10678
46502 [질문] 태블릿 PC 고민중이에요~ [6] 에루베루미루1941 14/11/05 1941
44859 [질문] 비전공자가 모바일 기기 코딩 배우기 [12] 도널드 트럼프1791 14/10/15 1791
44785 [질문] 질문입니다.. [2] 삼성전자홧팅533 14/10/15 533
39489 [질문] 윈도우태블릿 vs 울트라북 [4] 그림속동화782 14/08/05 782
39006 [질문] codeigniter의 세션관련 질문입니다. [2] 포포탄1226 14/07/29 1226
38825 [질문] 기계식 키보드 질문입니다.. [4] 츄지핱997 14/07/26 997
37617 [질문] 맥에서 Visual C++ 2010으로 코딩 연습할때 입력에 대해 [4] 뜨리커풀1224 14/07/10 1224
35369 [질문] 노트북 추천 부탁드립니다! [4] Felice717 14/06/12 717
33655 [질문] pc고수분 조립 도와주세요 [3] 라캉~797 14/05/21 797
32465 [질문] 리눅스 개발자가 윈도우에서 편하게 쓸만한 코드편집기 있을까요? [16] 이걸어쩌면좋아1320 14/05/07 1320
30955 [질문] 요런 웹페이지랑 비슷하게 만들려면 어떻게 해야 할까요? [3] 깜디아3378 14/04/17 3378
29491 [질문] 코딩 + 문서작업 노트북: 맥? 윈도? [19] tristan4395 14/03/28 4395
28011 [질문] 200만~300만원대 노트북 추천좀 부탁드려요! [6] 데로2160 14/03/11 2160
27091 [질문] 하위버전 익스 프린터 출력관련 질문이 있습니다. 적절한센스556 14/02/27 556
24846 [질문] 마우스 추천 부탁 드립니다. [2] 미스터키튼1202 14/01/29 1202
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로