/*
2000/02 起,我在元智大学,每学年第二学期开一门课程。
目前是「泛型程式设计(Generic Programming)」,以下是相关资料。

许多人来信询问是否可以旁听。是的,我的学校课程永远欢迎旁听。
但如关系到学生权益(例如座位),当以修课者优先。如果修课者
上课状态不佳(例如时常迟到),会被我剔除原本应享的权益。


科目名称(中文):泛型程式设计
科目名称(英文):Generic Programming (and C++ STL)
授课时间:3 小时/每周(选修)
时间:每周四(或周三,视排课情况而定)18:30pm ~ 21:20pm
地点:工程一馆(资讯系馆),教室视排课情况而定。
※确实之时间地点,请询问元智大学资讯工程系办公室 03-4638800-369

1. 课程目标
   给予学生泛型程式设计(generic programming)的坚实训练,
   尝试建立可复用(reusable)之软体元件,并学习使用 C++ STL。

2. 先备基础:
   C++ programming language

3. 课程大纲
   o. Generic Programming Overview(泛型程式设计概观)
   o. Basic1: C++ Function Template
   o. Basic2: C++ Class Template
   o. Basic3: C++ Operator Overloading
   o. STL Overview(STL 概观)
   o. STL Iterators(泛型指标)
   o. STL Containers(泛型容器)
   o. STL Generic Algorithms(泛型演算法)
   o. STL Function Objects(函式物件)
   o. STL Adaptors(泛型配接器)

4. 上课用书
   《泛型技术》侯捷着/  峰(预计 2001 年初出版)

    如果以上书籍来不及完成,则 2001/02 开学时将采用:
      《C++ Primer 中文版》侯捷译/  峰(此为 2000/02 采用之书籍)
        chap06: Abstract Container Types
        chap10: Function Templates
        chap12: The Generic Algorithms
        chap15: Overloaded Operators
        chap16: Class Tempaltes
        Appendix: The Generic Algorithm Alphabetically
      并辅以五篇文章做为上课讲义。可由本站下载,见左视窗「STL系列文章 (PDF)」

5. 叁考书
   o. Generic Programming and the STL (by Austern, A.W. 1998)
      《泛型程式设计与 STL》侯捷,黄俊尧合译/  峰/2000
   o. The C++ Standard Library (by Josuttis, A.W. 1999)
      《C++ 标准程式库》侯捷译/  峰/2001

6. 教学方式
   以教本、讲义、投影片、程式实例,进行教学

7. 评分方式
   o. 无期中考
   o. 平时成绩占 20%
   o. 期末作业占 80%
   o. 期末作业 4~6 人一组。

● 2001 期末作业题目:
   求 n * n 方阵中,(1)横、(2)纵、(3)正对角、(4)反对角 皆无相同元素之排列。

   例 5 * 5 方阵,以下为一组解:

                  0 1 2 3 4
                  2 3 4 0 1
                  4 0 1 2 3
                  1 2 3 4 0
                  3 4 0 1 2

   提示:程式应具弹性,可接受 user 输入方阵边长 n。
   提示:程式面对 n= 4, 5, 6 之方阵,求解速度应「至少令人可接受」。
   提示:n= 7 方阵,其解答个数已达天文数字。
   提示:试评估解答个数与 n 之间有无任何规律关系。
   提示:尽量运用 STL,你的 programming 工作会减轻非常非常多。
         o. 资料结构可用 vectors
         o. 演算法可用 next_permutation(), for_each,
         o. 辅助工具可用 function objects, iterator adaptors.
         o. 萤幕输入/输出可用 iostream
         o. 档案输出可用 ofstream
         o. 资料格式化可用 ostringstream
         o. 时间计算可用 struct tm, time_t, time(), localtime()

   提交:(1) 作业报告 (2) 程式源码。
   评比:比执行速度,比你的推论,比 STL 之运用程度,比监控设施,
         比运转记录(loging),比文件内容。

● 2002 期末作业题目:
   not yet
*/