티스토리 뷰
사용된 소스코드는 다음과 같다.
참고하여야 할 내용은
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::vector; using std::setprecision; int main() { // 학생의 이름을 요청하고 읽어들임 cout << "Please enter your first name: "; string name; cin >> name; cout << "Hello, " << name << "!" << endl; // 중간고사 및 기말고사 성적을 요청하고 읽어들임 cout << "Please, enter your midterm and final exam grade : "; double midterm, final; cin >> midterm >> final; // 과제성적을 요청하고 읽어들임 cout << "Enter all your homework grade, " "followed by end-of-file: "; vector<double> homework; double x; // 불변식 : homework는 모든 과제성적을 담습니다 while( cin >> x ) homework.push_back(x); // 학생이 과제성적을 입력했는지 확인 typedef vector<double>::size_type vec_sz; vec_sz size = homework.size(); 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 << "Yout final grade is " << setprecision(3) // 자리수 표현 형식 설정 << 0.2 * midterm + 0.4 * final + 0.4 * median << setprecision(prec) << endl; // 복원 return 0; }
참고하여야 할 내용은
1. cout 에서 긴 문자열 출력
cout << "Enter all your homework grade, " "followed by end-of-file: ";28 라인. 두개의 문자열 리터럴을 출력하는 것처럼 보이지만, 사실은 하나의 << 만을 사용하는 구문이다. 프로그램에서 공백문자만으로 구분된 둘 또는 그 이상의 문자열 리터럴이 자동적으로 합쳐진다. 즉, 이 구문은
cout << "Enter all your homework grade, followed by end-of-file: "
과 동일한 효과를 가진다.
2. 불변식
// 불변식 : homework는 모든 과제성적을 담습니다 while( cin >> x ) homework.push_back(x);34 라인. 이 책에서는 while 문이 성립하는 조건은 불변식으로 표현한다.
각 라인에서 발생하는 상황은 아래 박스와 같다.
// 불변식 : homework는 모든 과제성적을 담습니다
// 여기의 homework에는 모든 과제 성적이 담겨져 있기 때문에 불변식이 참이다.
while( cin >> x ) // 여기의 homework에는 입력 받은 x 가 담겨져 있지 않기 때문에 불변식이 거짓이다.
// 거짓을 불변식을 해결하기 위한 코드를 작성한다.
// 여기의 homework에는 모든 과제 성적이 담겨져 있기 때문에 불변식이 참이다.
while( cin >> x ) // 여기의 homework에는 입력 받은 x 가 담겨져 있지 않기 때문에 불변식이 거짓이다.
// 거짓을 불변식을 해결하기 위한 코드를 작성한다.
homework.push_back(x); // x가 homework에 담기기때문에 모든 과제성적이 담기고 불변식이 참이 된다.
3. vector<double>::size_type
typedef vector<double>::size_type vec_sz;39 라인. vector template의 원소의 개수를 저장하는 변수이다. size_type의 정의되는 타입은 unsigned 타입이며, vector가 담을 수 있는 최대한 큰 사이즈 값을 저장할 수 있다. 즉, 그냥 int나 unsigned int를 사용하는 것보다 안정성이 높다.
4. 원소의 개수가 홀, 짝수일때
median = size % 2 == 0 ? ( homework[mid] + homework[mid-1] ) / 2 : homework[mid];55 라인. 짝수일때는 중간값과 한칸 전 값의 평균을 선택하고 홀수일때는 그냥 중간값. 짝수일때 중간값을 선택하기 애매하니까 두개 모두 선택해서 평균을 선택한다.
홀수 일때
짝수 일때

5. 자리수표현
streamsize prec = cout.precision(); // 이전 형식을 저장 cout << "Yout final grade is " << setprecision(3) // 자리수 표현 형식 설정 << 0.2 * midterm + 0.4 * final + 0.4 * median << setprecision(prec) << endl; // 복원59 라인. 59 라인에서 기존의 형식을 저장한다. 60 라인에서는 새로운 자리수 형식을 설정하고 62 라인에서 복원한다. setprecision() 함수에 대한 설명은 MSDN에 잘 나와있다. 간단하게 설명하면 setprecision(3) 같은 경우 표시되는 형식은 무조건 3자리이다. 즉, 1.23 또는 12.3 또는 123 이렇게 표시된다.
'Programing > C++, C' 카테고리의 다른 글
String to integer (C++에서 string을 int 로 바꾸기) (0) | 2010.05.28 |
---|---|
cin 버퍼 지워주기 (0) | 2010.05.28 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- opencv
- vim
- XP
- 구글폰
- Accelerated C++
- v550
- Tensor Flow
- v470
- Computer Vision
- C++
- SIFT
- docker
- 마우스
- JNI
- 안드로이드
- gcc
- 넥서스원
- image-processing
- zip
- MinGW
- image processing
- 리눅스Tip & Tech
- 파이어폭스
- vi
- Android
- 탐색기
- Camera
- QT
- kde4
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함