본문 바로가기

알고리즘-연습문제

3.2 평균 대신 중앙 값 사용하기

#include <algorithm>
#include <iomanip>
#include <ios>
#include <iostream>
#include <string>
#include <vector>


using std::cin; using std::sort;
using std::cout; using std::streamsize;
using std::endl; using std::string;
using std::setprecision; using std::vector;



int main()
{
 cout<<"Please enter your first name : ";
 string name;
 cin>>name;
 cout<<"Hello, "<<name<<"!"<<endl;

 

 cout<<"Please enter your midterm and final exam grades : ";
 double midterm, final;
 cin>>midterm>>final;

 

 cout<<"Enter all your homework grades, "
  "follow by endoffile: ";
 vector<double> homework;
 double x;

 

 while(cin>>x) {
   // 백터에 값넣기..ㅡㅡ

   homework.push_back(x);

 }

 

 // typedef 로 vec_sz로 사용

 typedef std::vector<double>::size_type vec_sz;
 vec_sz size = homework.size();


 // 백터에 들어있는 값이 없으면 size는 0 이 되겠죠?
 if(size == 0) {
  cout<<endl<<"You must enter your grades. "
   "Please try again."<<endl;

  return 1;
 }

 // 정렬..ㅡㅡ

 sort(homework.begin(), homework.end());
 vec_sz mid = size/2;
 double median;
 
 median = size % 2 == 0 ? (homework[mid] + homework[mid-1])/2
  : homework[mid];

 streamsize prec = cout.precision();
 cout<<"Your final grade is "<<setprecision(3)
  <<0.2 *midterm + 0.4 * final + 0.4 * median
  <<setprecision(prec)<<endl;

 return 0;
}


에휴 의외로 진행이 빨리 안돼네요.. 날씨가 요즘 너무 더워서 야간에 주로 하는데

컴퓨터가 찜질기능도 있어 더워서 쪄죽음..


다시 말씀드리지만 혹시 보시는 분들중에 c++완전 처음보시는 분들은 기본서라도 보시고

보는게 좋습니다.

저 또한 초보이고 기본적인 문법설명은 제외하고

제가 모르는것 위주로 하기 때문입니다. (ㅡㅡ)


소스코드는 저번에 했던 소스코드를 변경한것 입니다.

가장 큰 틀은 일단 저번소스에서는 평균값을 구하는 것이였는데

이번에는 과목값을 저장하여 그 가운데 값(middle)을 구하는것이 핵심입니다.


그래서 이번에 등장한 vector 맨...ㅡㅡ

저도 stl를 거의 몰라서 이해 부탁드리고

vector는 일반적인 배열이라고 쉽게 생각하시면 좋을듯 합니다.

물론 다른점도 있고 vector만의 장점도 있습니다.

stl을 조금이라도 보신분은 아시겠죠? 가장 처음에 나오는게 vector이니

homework.push_back(x) <-- 언뜻봐도 값을 넣는거죠 어디에? homework에...

homework 타입은 vector<double> 타입으로 vector생성시 타입을 지정해 줘야합니다.

지금은 double로 지정했구요

참고로 #include <vector> 이거 왜쓰는지 물어보시는 분은 없겠죠? 바로 위에 답이 ..

#include <algorithm> <-- 요건 알고리즘헤더인데

개인적으로 알고리즘공부도 꾸준히 하셔야 합니다. 이건 정답이 없을듯...

이 헤더파일을 쓴 이유는 밑에 sort함수를 쓰기 위해서 입니다.


sort는 이름 자체가 답이네요  바로 정렬을 하기 위해서고

정렬을 한다음 중간값을 끄집어 내고 있죠..


typedef vector<double>::size_type vec_sz  <-- 요것도 모르는사람은 지식검색..ㅡㅡ

typedef a b; b는 a의 별명입니다.

ex> typedef int my_int;   <-- my_int a; 하면 요게 컴파일시 int a 로 변경됩니다.

vector에서 함수가 호출되군요

homework.size() 이것도 우리가 읽을수 있죠 사이즈..~~~

뭔 사이즈 허리? homework의 size죠

정확히 말하면 homework의 요소 갯수입니다.



다시 보시면 크게 어려운 문법은 아닙니다.


다들 ㅅㄱ