More actions
Info
{{|작성일 : 2005 08 03 수정회수 : 0회 구현특이사항
미구현부분
|}}
Input Text
김철수 59 98 75 91 마동탁 66 78 77 84 박민철 52 50 63 72 신순이 97 55 52 97 송영이 78 82 63 73 양민수 72 66 73 52 장준구 95 62 94 53 최호민 78 53 74 75 태석호 66 82 82 94 한노라 86 65 62 68
Code
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm> //sort
#include <numeric> //accumulate
using namespace std;
typedef struct student_table_struct {
string name;
vector<int> score;
unsigned int total;
double avg;
} student_type;
void readdata(vector<student_type>& ztable); //파일로부터 데이터를 읽어온다
bool zcompare(const student_type ele1, const student_type ele2); //sort시 비교 조건
void printdata(vector<student_type>& ztable); //출력
void operation(vector<student_type>& ztable); //총합과 평균
int main()
{
vector<student_type> ztable;
//자료를 읽는다.
readdata(ztable);
//총점과 평균
operation(ztable);
//평균으로 정렬
sort(ztable.begin(),ztable.end(),zcompare);
//출력
printdata(ztable);
return 0;
}
//파일로부터 데이터를 읽어온다
void readdata(vector<student_type>& ztable){
ifstream fin("data.txt");
student_type tmp;
int tmp2,i;
while(1)
{
fin >> tmp.name;
for(i=1;i<=4;i++)
{
fin >> tmp2;
tmp.score.push_back(tmp2);
}
if(fin.eof()) break;
ztable.push_back(tmp);
}
}
//sort시 비교 조건
bool zcompare(const student_type ele1, const student_type ele2)
{
return ele1.avg > ele2.avg;
}
//출력하기
void printdata(vector<student_type>& ztable)
{
int cnt=0;
cout << "이름\t국어\t영어\t수학\t과학\t총점\t평균" << endl;
for(vector<student_type>::iterator i=ztable.begin();i<ztable.end();++i)
{
cout << i->name << "\t" <<
i->score[cnt*4+0] << "\t" <<
i->score[cnt*4+1] << "\t" <<
i->score[cnt*4+2] << "\t" <<
i->score[cnt*4+3] << "\t" <<
i->total << "\t" <<
i->avg <<endl;
cnt++;
}
}
void operation(vector<student_type>& ztable)
{
for(vector<student_type>::iterator i=ztable.begin() ;i<ztable.end();++i)
{
i->total = accumulate(i->score.begin()+i->score.size()-4,i->score.end(),0);
i->avg = i->total/4.0;
}
}
Result
이름 국어 영어 수학 과학 총점 평균 태석호 59 98 75 91 324 81 김철수 66 78 77 84 323 80.75 마동탁 52 50 63 72 305 76.25 장준구 97 55 52 97 304 76 신순이 78 82 63 73 301 75.25 송영이 78 53 74 75 296 74 한노라 66 82 82 94 281 70.25 최호민 72 66 73 52 280 70 양민수 95 62 94 53 263 65.75 박민철 86 65 62 68 237 59.25 Press any key to continue
Idle Talk
흡 어려워따 ㅠㅠ