//객체지향 금 123 200911636 박정욱
//2012.5.18 1번 : Exercise 16-1 상위권 점수만 출력
#include<iostream>
using namespace std;
#define NUM_OF_SCORES 10
float return_ave(float scores[]); //scores[]의 평균을 리턴하는 함수.
float return_above(float score, float ABOVE); //ABOVE 초과의 점수인 경우 return score , 이하인 경우 return -1
void cout_above(float scores[], float ABOVE); //scores[]중, ABOVE 초과의 점수만 출력하는 함수.
void main()
{
float scores[NUM_OF_SCORES]={10,20,30,40,50,60,70,80,90,100}; //점수의 초기화
float ave=0; //평균값을 저장할 변수
int i; //for문을 사용하기 위한 변수 i
for(i=0; i< NUM_OF_SCORES ; i++) //초기화 된 점수 scores[i] (0 ≤ i < 10)들을 출력한다.
{ cout << return_above(scores[i], 0)<<endl; } //return_above(scores[i], 0) : scores[i]가 0이상인 경우 출력한다.
ave= return_ave(scores); //평균값을 ave 변수에 저장한다.
cout <<"평균 : " << ave << endl; //ave에 대입한 평균값을 보여준다.
cout_above(scores, ave); //일정 점수 이상만 출력해주는 함수 호출
//cout_above(scores, ave) : scores중, 평균 ave 이상의 점수들만 출력한다.
}
//평균 리턴하는 함수
float return_ave(float scores[])
{
float average=0; //평균값을 저장할 변수 average
int i; //for문을 사용기위해 필요한 변수 i
for(i=0; i < NUM_OF_SCORES ; i++) //점수 총합을 average에 저장
{ average += scores[i]; }
average = average/NUM_OF_SCORES; //점수 총합을 점수들의 갯수로 나눈다.
return average; //평균 average를 리턴.
}
//ABOVE보다 큰 값의 점수인 경우 return score , 이하인 경우 return -1
float return_above(float score, float ABOVE)
{
float check;
check = score > ABOVE ? score: -1;
return check;
}
//scores[]중, ABOVE보다 큰 값의 점수만 출력하는 함수.
void cout_above(float scores[], float ABOVE)
{
int i,j; //for문을 사용하기 위한 변수 i j
int num_of_above_score=0; //ABOVE의 값보다 큰 값만 출력할 점수들의 갯수
float* cout_scores; //만큼 메모리 공간을 저장할 변수
for(i=0; i< NUM_OF_SCORES ; i++) //ABOVE보다 큰 점수들의 갯수를 구한다.
{ if(return_above(scores[i], ABOVE) !=-1)
{ num_of_above_score++; }
}
cout_scores = new float [num_of_above_score]; //출력할 갯수만큼 메모리를 할당한다.
i=0; //i의 초기화
for(j=0; j< NUM_OF_SCORES; j++) //ABOVE보다 큰 값들의 점수들을 메모리를 할당받은
{ if(return_above(scores[j], ABOVE) !=-1)
{ cout_scores[i]=return_above(scores[j], ABOVE); //cout_scores에 대입한다.
i++;
}
}
cout << ABOVE <<"이상의 점수"<< endl; //ABOVE 이상의 점수들을 출력한다.
for(i=0; i < num_of_above_score ;i++)
{ cout << cout_scores[i] << endl; }
delete cout_scores; //할당받았던 메모리를 해제한다.
cout_scores = NULL;
}