C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[71113] Re:Re:Re:C++ 함수 프로토타입 수정 도움 좀 부탁드려요ㅠㅠ
빌더초보 [] 2982 읽음    2014-03-27 00:31
예전에 비해서 많이 깔끔해진것 같습니다.

jumsu와 grade 비교해서 i*0.5+1 하는게 참신하다 라고 생각하던 중, F가 빠졌음에도
루프를 8 까지 돌린게 보이더군요.
8까지 돌린다고 무조건 애러가 나는 것은 아닌데, A+ 밖의 쓰레기 값을 참고하여 의도치 않은 결과가 발생할 수도 있습니다.

아마 average 함수에서 에러가 발생하는 이유가 그 때문이 아닌가 싶네요.

또...

지금 만든 PrintAllData 함수가 프로토타입에서 말하는 PrintOne 함수네요.
PrintAllData 는 지금 만든 case 2: 내용으로 바꾸시면 될것 같습니다.

search 함수는 저도 이해가 안되네요.
주소를 리턴하려는 것은 PrintOne 을 하기위한것 같은데,
찾으려는 학생 이름과 전체 학생 수도 input 인자로 들어가야 될텐데...

Student* StdSearch(char *inname, Student *pSt, int student_num)
{
	for (int i = 0; i < student_num; i++)
	{
		if (strcmp(inname, pSt[i].stdName) == 0)
			return &pSt[i];
	}

	cout << "그런 학생 없는데?" << endl;
	return 0;
}


case 3:은 아래와 같이 바꾸시고...

		 case 3: //PrintAllData은 PrintOne으로 바꾸셔야합니다.
		 {
			 cout << endl << endl << endl << endl;
			 char inname[20];
			 cout << "검색 할 학생 이름 : ";
			 cin >> inname;
			 Student *tmp = StdSearch(inname, stu, student_num);
			 if (tmp!=0)
				 PrintAllData(tmp);
			 system("pause");
			 break;
		 }


만약 프로토타입과 같은 형태로 돌아 갈라면 학생수(student_num)와 찾으려는 학생 이름(inname[20])이 전역 변수여야합니다.

적다보니 조금 늦어졌는데,

도움이 되셨기를







전성훈 님이 쓰신 글 :
: 프로그램을 작성하면서 함수입력출력 형태에 상관없이 일단 만들어보고
:
: 프로토타입을 체크한다음 수정하면 쉽게 변형시킬 줄 알았습니다.
:
: 하지만 막상 함수 하나씩 수정을 하려는데
:
: 먼저  printone 함수를 printall 함수에 연결시킨다는게 이해가 안되고
:
: search 함수도 주소를 반환해서 함수에 연결하는 형태가 이해가 안됩니다.
:
: 지금 계속해보고 있는데 오류만 생기고 진도를 뺄수가 없네요...
: (오류는 건드리지도 않은 average 함수가 계속 에러가 나네요. 코드 지웠다가 복사하고 붙여넣으면 제대로 실행되는데 왜 이러는건가요??)
:
: 지식이 짧다보니 제가 막히는 부분을 똑부러지게 설명을 못하겠습니다;;;
:
: 물론 제가 작성한 프로그램은 맞구요
:
:
:
: 아루스 님이 쓰신 글 :
: : 본인이 작성하신 코드가 맞다면 작성된 코드의 내용으로 보아 수정내용을 다 수행할 수 있을 것으로 보입니다.
: : "과제를 해주세요" 가 아닌 "이 부분이 모르겠어요" 정도의 질문을 해주셔야 할 듯 합니다.
: : 그런데 아무리 보아도 로직은 다 만들어진 상태에서 코드의 위치만 바꾸는 정도의 작업이 어려운 이유를 모르겠습니다.
: :
: :
: :
: : 전성훈 님이 쓰신 글 :
: : : 안녕하세요. C++ 코드 함수 프로토타입 변형에 관련되어 애로가 많아 질문드립니다.
: : :
: : : 현재 문제에서 주어진 요구사항을 출력시키는데는 전혀 문제가 없지만
: : :
: : : 문제가 제시한 상세 사항(함수)을 충족시키려하는데 어려움이 많아 도움을 구해보고 싶습니다.
: : :
: : : 요구 사항은 다 제대로 작동하기에 함수 프로토타입 요구 조건만 충족시켜서 첨삭해주실 고수 분 찾아봐요ㅜㅜ...
: : :
: : : =========================================================================================
: : :
: : : 1. 개인 학생의 교과목 평균 평점을 구할 때 사용하는 코드를 묶어 CalcAveGPA()라는 함수를 구현
: : :
: : : 함수의 프로토타입 : float CalcAveGPA(Subject* Sub, int SubjectNum);
: : :
: : : // Sub : 교과목 정보가 담긴 Subject 포인터 변수
: : :
: : : // SubjectNum : 과목 수
: : :
: : :
: : : 2. 개인의 신상 정보와 성적 정보를 출력하는 PrintOneData()라는 함수를 구현
: : :
: : : Student 구조체 매개변수 인자는 반드시 레퍼런스로...
: : :
: : : 함수의 프로토타입 : void PrintOneData(const Student& rSt);
: : :
: : : // rSt : 학생 정보가 담긴 Student 레퍼런스 변수
: : :
: : :
: : : 3. 전체 학생의 신상 정보와 성적 정보를 출력하는 부분을 PrintAllData()라는 함수를 구현
: : :
: : : 이 함수는 개인의 학생 정보를 출력하는 PrintOneData() 함수를 호출하여 사용
: : :
: : : 함수의 프로토타입 : void PrintAllData(const Student* pSt, int StudentNum);
: : :
: : : // pSt : 학생 정보가 담긴 Student 포인터 변수
: : :
: : : // StudentNum : 전체 학생 수
: : :
: : : // 모든 학생의 정보를 출력하기 위해 학생 개인의 정보를 출력하는 PrintOneData() 함수 호출
: : :
: : :
: : : 4. 특정 학생의 이름을 검색하여 해당 학생 정보가 있는 주소를 리턴하는 기능을 가진 StdSearch()라는 함수를 구현
: : :
: : : 특정 학생의 이름을 사용자로부터 입력받고, 해당되는 학생이 있는지 검색한 후, 검색에 성공하면 해당 학생의 정보가 있는 곳의 주소를, 성공하지 못하면 NULL을 리턴받고 에러 메시지 출력.
: : :
: : : 함수의 프로토타입 : Student* StdSearch(Student *pSt);
: : :
: : : // pSt : 학생정보가 담긴 Student 포인터 변수
: : :
: : : // 리턴값 : 해당 학생의 정보가 있는 곳의 주소
: : :
: : :
: : :
: : : #include <iostream>
: : : #include <iomanip>
: : : using namespace std;
: : :
: : : const char jumsu[8][3] = { "D0", "D+", "C0", "C+", "B0", "B+", "A0", "A+" };
: : : typedef struct subject
: : : {
: : :    char subName[30];
: : :    int hakjum;
: : :    char grade[10];
: : :    float gpa;
: : : }SubJect;
: : :
: : : typedef struct student
: : : {
: : :    char stdName[20];
: : :    int hakbun;
: : :    SubJect sub[3];
: : :    float ave_gpa;
: : : }Student;
: : :
: : : void PrintMenu(void)
: : : {
: : :    cout << "===== 메뉴 =====" << endl;
: : :    cout << "1. 학생 성적 입력" << endl;
: : :    cout << "2. 전체 학생 성적 보기" << endl;
: : :    cout << "3. 학생 이름 검색" << endl;
: : :    cout << "4. 프로그램 종료" << endl << endl;
: : :    cout << "원하는 기능을 입력하세요 : ";
: : : }
: : :
: : : float average(int hakjum, char* grade)
: : : {
: : :    for (int i = 0; i < 9; i++)
: : :    {
: : :       if (strcmp(jumsu[i], grade) == 0)
: : :       return hakjum * ((i * 0.5f) + 1);
: : :    }
: : :    return 0;
: : : }
: : :
: : : void CalcGPA(SubJect& Sub)
: : : {
: : :    cout << "교과목명 : ";
: : :    cin >> Sub.subName;
: : :    cout << "과목 학점수 : ";
: : :    cin >> Sub.hakjum;
: : :    cout << "과목등급(A+ ~ F) : ";
: : :    cin >> Sub.grade;
: : :    Sub.gpa = average(Sub.hakjum, Sub.grade);
: : :    cout << endl;
: : : }
: : :
: : : void PrintAllData(Student* stu)
: : : {
: : :    cout << "이름 : " << stu->stdName << "  학번 : " << stu->hakbun << endl;
: : :    cout.width(10); cout << "========================================================" << endl;
: : :    cout.width(20); cout << "과목명";
: : :    cout.width(10); cout << "과목학점";
: : :    cout.width(10); cout << "과목등급";
: : :    cout.width(10); cout << "과목평점" << endl;
: : :    for (int j = 0; j < 3; j++)
: : :    {
: : :       cout.width(20); cout << stu->sub[j].subName;
: : :       cout.width(7); cout << stu->sub[j].hakjum;
: : :       cout.width(10); cout << stu->sub[j].grade;
: : :       cout.width(11); cout << stu->sub[j].gpa << endl;
: : :    }
: : :    cout << "========================================================" << endl;
: : :    stu->ave_gpa = (stu->sub[0].gpa + stu->sub[1].gpa + stu->sub[2].gpa) / 3;
: : :    cout.width(46); cout << "평균평점 : " << stu->ave_gpa << endl;
: : :    cout << endl << endl;
: : : }
: : :
: : : void StdSearch(char* inname, student *pSt)
: : : {
: : :    if (strcmp(inname, pSt->stdName) == 0)
: : :    PrintAllData(pSt);
: : : }
: : :
: : : int main(void)
: : : {
: : :    bool check = true;
: : :    int menu_input = 0;
: : :    int student_num = 0;
: : :    Student stu[10];
: : :    cout.setf(ios::fixed, ios::floatfield);
: : :    cout.precision(2);
: : :    while (check)
: : :    {
: : :       PrintMenu();
: : :       cin >> menu_input;
: : :       switch (menu_input)
: : :       {
: : :          case 1:
: : :          student_num++;
: : :          cout << endl << "* " << student_num << "번째 학생 이름과 학번을 입력하세요." << endl;
: : :          cout << "이름 : ";
: : :          cin >> stu[student_num - 1].stdName;
: : :          cout << "학번 : ";
: : :          cin >> stu[student_num - 1].hakbun;
: : :          cout << endl << "* 수강한 과목 3개와 각 교과목명, 과목학점, 과목등급을 입력하세요." << endl;
: : :          for (int i = 0; i < 3; i++)
: : :          CalcGPA(stu[student_num - 1].sub[i]);
: : :          break;
: : :          case 2:
: : :          cout << "전체 성적 보기" << endl;
: : :          cout << "========================================================" << endl;
: : :          for (int i = 0; i < student_num; i++)
: : :          PrintAllData(&stu[i]);
: : :          system("pause");
: : :          break;
: : :          case 3:
: : :          cout << endl << endl << endl << endl;
: : :          char inname[20];
: : :          cout << "검색 할 학생 이름 : ";
: : :          cin >> inname;
: : :          for (int i = 0; i < student_num; i++)
: : :          StdSearch(inname, &stu[i]);
: : :          system("pause");
: : :          break;
: : :          case 4:
: : :          check = false;
: : :          break;
: : :          default:
: : :          break;
: : :       }
: : :       system("cls");
: : :    }
: : :    cout << "프로그램을 종료합니다." << endl;
: : :    return 0;
: : : }  
: : :

+ -

관련 글 리스트
71102 C++ 함수 프로토타입 수정 도움 좀 부탁드려요ㅠㅠ 전성훈 3605 2014/03/26
71104     Re:C++ 함수 프로토타입 수정 도움 좀 부탁드려요ㅠㅠ 아루스 2983 2014/03/26
71111         Re:Re:C++ 함수 프로토타입 수정 도움 좀 부탁드려요ㅠㅠ 전성훈 2970 2014/03/26
71113             Re:Re:Re:C++ 함수 프로토타입 수정 도움 좀 부탁드려요ㅠㅠ 빌더초보 2982 2014/03/27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.