:: 게시판
:: 이전 게시판
|
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
07/06/01 13:33
/*******************************************************************************/
// 헤더파일 포함 /*******************************************************************************/ #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <memory.h> /*******************************************************************************/ // 데이터 정의 /*******************************************************************************/ struct StudentInformation int m_StudentNum; int m_Homework_1; int m_Homework_2; int m_HalfwayResult; float m_Average; float m_Variance; StudentInformation* m_pNodeNext; StudentInformation* m_pNodePrev; /*******************************************************************************/ // 변수 선언 /*******************************************************************************/ StudentInformation* pStudentInfo = NULL; unsigned int InputCount; float AllAverage; float AllVariance; /*******************************************************************************/ // 함수 선언 /*******************************************************************************/ bool Initialize(void); bool Process(void); void Release(void); bool InputStudentInformation(void); void AverageResult(void); void VarianceResult(void); 답글달고 오전에 함 짜봤습니다. 헤더파일은 이렇게 했구요. 혹시 아직 못하셨으면 이거 보고 짐작해서 생각해보세요. cpp 내용은 요청하시면 이따 저녁 때쯤 올려드림.
07/06/01 20:23
/*******************************************************************************/
// 헤더파일 포함 /*******************************************************************************/ #include "Main.h" /*******************************************************************************/ // 데이터 정의 /*******************************************************************************/ /*******************************************************************************/ // 엔트리 포인트 /*******************************************************************************/ int main(void) if( !Initialize() ) { return 0; if( !Process() ) return 0; return 0; } /*******************************************************************************/ // 데이터 초기화 /*******************************************************************************/ bool Initialize(void) InputCount = 0; AllAverage = 0.0f; AllVariance = 0.0f; pStudentInfo = (StudentInformation*)malloc(sizeof(StudentInformation)); memset(pStudentInfo, 0, sizeof(StudentInformation)); return true; /*******************************************************************************/ // 데이터 해제 /*******************************************************************************/ void Release(void) if(pStudentInfo) { free(pStudentInfo); } /*******************************************************************************/ // 명령을 입력받아 해당 명령을 처리 /*******************************************************************************/ bool Process(void) static InputContinue = true; printf("I : 학생정보 입력\n" "A : 평균 출력\n" "V : 분산 출력\n" "E : 종료\n"); while(InputContinue) { char InputKey = 0; printf("명령을 입력하세요\n"); InputKey = getch(); switch(InputKey) { case 'I' : case 'i' : InputStudentInformation(); break; case 'A' : case 'a' : AverageResult(); break; case 'V' : case 'v' : VarianceResult(); break; case 'E' : case 'e' : InputContinue = false; break; } Release(); return true; } /*******************************************************************************/ // 학생 정보를 입력 /*******************************************************************************/ bool InputStudentInformation(void) StudentInformation* pTempInformation = NULL; float Deviation_1 = 0.0f; float Deviation_2 = 0.0f; float Deviation_3 = 0.0f; pTempInformation = (StudentInformation*)malloc(sizeof(StudentInformation)); memset(pTempInformation, 0, sizeof(StudentInformation)); printf("%d번째 학생의 학번, 숙제1, 숙제2, 중간성적을 입력하세요\n : ", InputCount + 1); scanf("%d%d%d%d", &(pStudentInfo->m_StudentNum), &(pStudentInfo->m_Homework_1), &(pStudentInfo->m_Homework_2), &(pStudentInfo->m_HalfwayResult)); // 현재 노드 데이터의 평균을 구해서 저장 pStudentInfo->m_Average = (float)(pStudentInfo->m_Homework_1 + pStudentInfo->m_Homework_2 + pStudentInfo->m_HalfwayResult) / 3; // 현재 노드 데이터의 분산을 구해서 저장 Deviation_1 = (float)pStudentInfo->m_Homework_1 - pStudentInfo->m_Average; Deviation_1 *= Deviation_1; Deviation_2 = (float)pStudentInfo->m_Homework_2 - pStudentInfo->m_Average; Deviation_2 *= Deviation_2; Deviation_3 = (float)pStudentInfo->m_HalfwayResult - pStudentInfo->m_Average; Deviation_3 *= Deviation_3; pStudentInfo->m_Variance = (Deviation_1 + Deviation_2 + Deviation_3) / 3; // 전체 노드 데이터의 평균을 구하기 위해 데이터를 더한다. AllAverage += (pStudentInfo->m_Homework_1 + pStudentInfo->m_Homework_2 + pStudentInfo->m_HalfwayResult); if(InputCount == 0) // 노드 입력이 처음일 경우 이전 노드 링크는 값이 없으므로 NULL 입력 { pStudentInfo->m_pNodePrev = NULL; pStudentInfo->m_pNodeNext = pTempInformation; // 1. 현재 노드의 다음 링크를 새로 생성한 노드의 주소로 치환 pTempInformation->m_pNodePrev = pStudentInfo; // 2. 새로 생성한 노드의 이전 링크를 현재 노드 주소로 치환 pStudentInfo = pTempInformation; // 3. 현재 노드의 주소를 새로 생성한 노드의 주소로 치환(이 노드의 다음 주소링크는 1번 과정에 의해 자동으로 갱신된다.) pStudentInfo->m_pNodeNext = NULL; // 현재 노드가 마지막으로 추가한 노드일 경우에만 의미가 있다. ++InputCount; // 입력할 때마다 증가하는 전역변수. 학생 수로 쓰인다. return true; } /*******************************************************************************/ // 평균 출력 /*******************************************************************************/ void AverageResult(void) StudentInformation* pSaveNode = pStudentInfo; // 현재 노드로 되돌아오기 위해 주소를 저장해둠 pStudentInfo = pStudentInfo->m_pNodePrev; // 정보가 없는 현재 노드는 건너뛰고 출력하기 위함 while(pStudentInfo) { printf("%d학생평균 : %.2f\n", pStudentInfo->m_StudentNum, pStudentInfo->m_Average); pStudentInfo = pStudentInfo->m_pNodePrev; // 전체 학생 평균 출력 AllAverage = AllAverage / (InputCount * 3); printf("전체평균 : %.2f\n", AllAverage); pStudentInfo = pSaveNode; } /*******************************************************************************/ // 분산 출력 /*******************************************************************************/ void VarianceResult(void) StudentInformation* pSaveNode = pStudentInfo; // 현재 노드로 되돌아오기 위해 주소를 저장해둠 pStudentInfo = pStudentInfo->m_pNodePrev; // 정보가 없는 현재 노드는 건너뛰고 출력하기 위함 while(pStudentInfo) { // 전체 노드 데이터의 분산을 구하기 위해 데이터를 더한다. AllVariance += ((pStudentInfo->m_Average - AllAverage) * (pStudentInfo->m_Average - AllAverage)); printf("%d학생분산 : %.2f\n", pStudentInfo->m_StudentNum, pStudentInfo->m_Variance); pStudentInfo = pStudentInfo->m_pNodePrev; // 전체 학생 분산 출력 AllVariance = AllVariance / InputCount; printf("전체분산 : %.2f\n", AllVariance); pStudentInfo = pSaveNode; } cpp파일입니다. 위의 헤더와 같이 사용하면 컴파일됩니다. 분산은 공식을 맞게 적었는지 잘 모르겠음.(수학이 약해서..;;) 주석도 달았으니 디버거로 돌려보면서 충분히 돌아가는 원리를 고민해보세요.
|