MOOC清华《面向对象程序设计》第7章:统计考试及格率v5.2(用文件输入及格线)

也是只有main函数修改,其余不动。

//main.cpp

#include <iostream>
#include <cstdlib>
#include <fstream>
#include "ArrayCollection.h"
#include "LinkedListIterator.h"
#include "LinkedListCollection.h"
#include "Score.h"
using namespace std;

template <class _Iterator>
bool isPass(const _Iterator& p){
	float pass1, pass2, pass3;
	ifstream is("passScore.txt");
	is >> pass1 >> pass2 >> pass3;
	return (p->value[0] >= pass1 && 
			p->value[1] >= pass2 && 
			p->value[2] >= pass3);
}//注意:这个isPass的实现是有缺陷的,只适合于Score类型 

template <class _iterator>
void analyze(_iterator begin, _iterator end, bool (*isPass)(const _iterator&)){
	int passed = 0, count = 0;
	for(_iterator p = begin; p != end; p++){
		if(isPass(p))
			passed++;
		count++;
	}
	cout << "passing rate = " << (float)passed / count << endl;
}

int main(int argc, char** argv) {
	Score sarray[3];
	sarray[0] = Score(60, 60, 60);
	sarray[1] = Score(70, 70, 70);
	sarray[2] = Score(50, 80, 80);
	
	ArrayCollection<Score> collection3(3, sarray);
	LinkedListCollection<Score> collection4;
	for(int i = 0; i < 3; i++)
		collection4.addFirst(sarray[i]);
	
	analyze(sarray, sarray + 3, isPass<Score*>);
	analyze(collection3.begin(), collection3.end(), isPass<Score*>);
	analyze(collection4.begin(), collection4.end(), isPass<LinkedListIterator<Score>>);
	
	system("PAUSE");
	return EXIT_SUCCESS;
}


passScore.txt文件的内容:

70 60 60


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值