본문 바로가기

PROGRAM/C++

CH03. 데이터 일괄처리

 

1.학생의 최종점수 계산하기

 1) 이름을 입력합니다. 

 2) 중간, 기말 시험 점수를 공백으로 분리하여 입력합니다.(실수형으로 입력가능합니다.)

 3) 과제 점수를 입력하고 마지막에 EOF를 입력합니다.(과제의 개수는 몇 개든 상관 없습니다.)

 4) 과제 점수의 평균을 구합니다.

 5) 중간시험(20%), 기말시험(40%), 과제(40%)의 가중치를 가집니다.

 6) 데이터는 소수점 3자리까지의 정확성을 가집니다.

 

#include <iomanip>
// 입출력 라이브러리에서 전송된 문자수나 버퍼크기를 나타내기 위해 사용
#include <ios> 
#include <iostream>
#include <string>


using namespace std;

int main()
{
	// 학생의 이름을 묻고 입력받음
	cout << "이름을 입력하세요: ";
	string name;
	cin >> name;
	cout << "Hello, " << name << "!" << endl;

	// 중간시험과 기말시험의 점수를 묻고 입력받음
	cout << "중간, 기말 시험 점수 입력(예 69.0 79.0): ";
	double midterm, final;
	cin >> midterm >> final;

	// 과제 점수를 물음
	cout << "과제 점수 입력, ""마지막에 EOF(end-of-file)입력 : ";
	
	// 지금까지 입력된 과제 점수의 개수와 합
	int count = 0;
	double sum = 0;

	// 입력을 위한 변수
	double x;

	// 불변성: 지금까지 count개 점수를 입력 받았으며 입력받은 점수의 합은  sum
	while (cin >> x) {
		++count;
		sum += x;
	}
	// 결과 출력
	double result = 0.2 * midterm + 0.4 * final + 0.4 * sum / count;
	streamsize prec = cout.precision();
	cout << "당신의 최종 점수는 \n" 
		 << setprecision(3) << result << endl 	// 총 세자리 정밀도
		 << fixed << setprecision(3) << result << endl		//소수점 아래 3자리
		 << fixed << setprecision(prec) << result << endl	//C++ 기본 6자리
		 << setprecision(prec) << endl; // 후속 출력 정밀도를 초기화
	return 0;
}

 

2 . endl 과 '\n' 그리고 문장에 포함된 '\n'의 실행속도 측정

#include <chrono>
#include <iostream>
#include <string>

using namespace std;

int main(int argc, const char* argv[]) {
	chrono::system_clock::time_point start = chrono::system_clock::now();
	//cout << "hello" << endl; // 316us
	//cout << "hello" << '\n'; // 373us
	cout << "hello\n"; // 140us

	chrono::duration<double> sec = chrono::system_clock::now() - start;
	chrono::microseconds mic = chrono::duration_cast<chrono::microseconds>(sec);
	//cout << sec.count() << endl;
	cout << mic.count() << "us" << endl;
	return 0;

}

 

- 프로그램 실행 속도 측정

#include <chrono>
#include <iostream>
#include <string>

using namespace std;

int main(int argc, const char* argv[]) {
    int n;
    chrono::system_clock::time_point start = chrono::system_clock::now();
    for(int i = 0; i < 100000000; i++){
    	n++;
    }

    chrono::duration<double> sec = chrono::system_clock::now() - start;
    chrono::microseconds mic = chrono::duration_cast<chrono::microseconds>(sec);
    cout << sec.count() << "s" <<endl;
    cout << mic.count() << "us" << endl;
    return 0;
}

출처 : https://yhc509.tistory.com/m/entry/C-11-chrono-%EC%8B%9C%EA%B0%84-%EC%B8%A1%EC%A0%95?category=938448

 

C++ 11 - chrono 시간 측정

#include int main(int argc, const char * argv[]) { int n;   chrono::system_clock::time_point start = chrono::system_clock::now();   for(int i = 0; i < 100000000; i++){ n++; }   chrono::duration s..

yhc509.tistory.com

 

3.0 간단하게 vector 알아보기

https://jhnyang.tistory.com/230

 

[자료구조STL vector 1탄]벡터란? 배열 vs 벡터 비교/장단점/ 특징, 다양한 백터 선언 및 초기화 방법,

안녕하세요 오늘은 C++ 자료구조 컨테이너 중 하나인 vector 라이브러리에 대해 살펴봅시다. [1탄 목차] 1. 벡터란 무엇인가? 2. 벡터의 구조와 특징 (장단점) 3. 언제 벡터를 사용하는가 4. 벡터를 사�

jhnyang.tistory.com

 

 

3. 학생의 최종점수 계산하기

 1) 이름을 입력합니다. 

 2) 중간, 기말 시험 점수를 공백으로 분리하여 입력합니다.(실수형으로 입력가능합니다.)

 3) 과제 점수를 입력하고 마지막에 EOF를 입력합니다.(과제의 개수는 몇 개든 상관 없습니다.)

 4) 과제 점수의 가운데값(median)값을 구합니다.

 5) 중간시험(20%), 기말시험(40%), 과제(40%)의 가중치를 가집니다.

 6) 데이터는 소수점 3자리까지의 정확성을 가집니다.

 

#include <algorithm>
#include <iomanip>
#include <ios>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
	// 학생의 이름을 묻고 입력받음
	cout << "이름을 입력하세요: ";
	string name;
	cin >> name;
	cout << "Hello, " << name << "!" << endl;
	// 중간시험과 기말시험의 점수를 묻고 입력받음
	cout << "중간, 기말 시험 점수 입력(예 69.0 79.0): ";
	double midterm, final;
	cin >> midterm >> final;
	// 과제 점수를 물음
	cout << "과제 점수 입력, ""마지막에 EOF(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 << "입력한 과제 점수가 없습니다. 종료합니다." << endl;
		return 1;
	}
	// 점수를 정렬
	sort(homework.begin(), homework.end());
	// 과제 점수의 가운데값(median) 구함
	vec_sz mid = size / 2;
	double median;
	median = size % 2 == 0 ? (homework[mid] + homework[mid - 1]) / 2 : homework[mid];
	// 결과 출력
	double result = 0.2 * midterm + 0.4 * final + 0.4 * median;
	streamsize prec = cout.precision();
	cout << "당신의 최종 점수는 \n"
		<< setprecision(3) << result << '\n' 	// 총 세자리 정밀도
		<< fixed << setprecision(3) << result << '\n'		//소수점 아래 3자리
		<< fixed << setprecision(prec) << result << '\n'	//C++ 기본 6자리
		<< setprecision(prec) << '\n'; // 후속 출력 정밀도를 초기화
	return 0;
}