计算思维 - 课程中心

Download Report

Transcript 计算思维 - 课程中心

1
BP
程序设计基础
计算机与信息学院
数字媒体艺术系
夏天
[email protected]
计算
计算思维
方法
Python
计算思
维
程序
Python
程序排错
计算
2
什么是
计算思
维
什么是
计算
初识
Pytho
n
2
1
计算思维
程序排
错
3
第1章 计算
与计算思维
2
Python
4
程序排错
3
计算
计算思维
Python
• 教材
–陆朝俊
–程序设计思想与方法讲义
• 参考资料
–John M. Zelle
–Python Programming: An Introduction to
Computer Science
http://openbookproject.net/thinkCSpy/
–Python学习手册_第3版
程序排错
计算
4
• 成绩组成
–考试
–作业
–出勤
计算思维
Python
程序排错
计算
5
计算思维
Python
程序排错
• 课程主要内容
–解决可计算问题需要教会计算机如何解决问
题
–如何教计算机解决问题
• 了解计算机有哪些基本功能
• 因材施教,设计教学的过程
• 一门与计算机进行交流的语言
计算
6
计算思维
Python
程序排错
• 对本课程的定位
–学习计算机科学解决问题的思想方法, 应用于
其他专业领域
–不是程序设计语言课程!
• 本课程需要编程,以加深对计算思维的理解
• 坏消息:学习编程语言需要掌握非常繁琐的细节
• 好消息:Python语言非常简单,易学易用
–也不是算法和数据结构课程!
• 当然会学习这方面的一些基本技术
6
计算
7
计算思维
Python
程序排错
数学
计
算
思
维
计算机科学
可
计
算
性
理
论
程
序
设
计
语
言
Lu Chaojun, SJTU
算
法
设
计
与
分
析
数
据
结
构
理,化,生...
经,管,金融...
工程
艺术
7
计算
8
什么是
计算思
维
什么是
计算
计算思维
初识
Pytho
n
2
程序排
错
3
1
4
过渡页
Transition Page
8
Python
程序排错
9
计算
1.1 什么是计算
计算思维
Python
程序排错
• 1.1.1 计算机与计算
个人计
算
计算中
心
云计算
移动计
算
超级计
算
10
计算
1.1 什么是计算
• 1.1.1计算机与计算•
计算思维
Python
程序排错
2007年1月《Nature》:《Social Sciences:
Life's A Game》(社会科学:生活就是一场游
戏)。
• 越来越多的人“生活”在Cyber世界中,人跟
人之间的沟通越来越借助于机器
• 今天如果突然失去机器,世界将崩溃
11
计算
1.1 什么是计算
计算思维
Python
程序排错
• 1.1.1计算机与计算
CPU
输入设备
输出设备
主存储器
次级存储器
计算
12
计算思维
Python
程序排错
• 中央处理器(CPU):执行指令.
–每条指令只能完成简单的操作!
• 例如:加法, 比较, 将数据从一个内存单元移到另一
单元, etc.
• 存储器:存储信息(程序和数据).
–主存:CPU能直接访问,速度快但易失.
–次级存储器:速度慢但持久.
• 输入/输出设备:人机交互
Lu Chaojun, SJTU
12
13
1.1 什么是计算
• CPU、指令与程序
–CPU
–指令
–指令集
–程序
–程序设计
计算
计算思维
Python
程序排错
14
1.1 什么是计算
计算
计算思维
• 存储器
–主存储器
• 保存正在运行的程序代码和数据
• 关机后,内存的数据全部丢失
–次存储器
• 比如硬盘
Python
程序排错
计算
15
计算思维
Python
程序排错
• 输入与输出设备
–输入设备将人能理解的符号转换成计算机能
处理的符号。常用的输入设备有:键盘、鼠
标、光笔等
–输出设备将计算机的输出转换成人能理解的
输出。常用的输出设备有:显示器、打印机、
音响设备等
计算
16
计算思维
Python
程序排错
• 计算机:软件
–计算机是信息处理机器,信息处理过程由预定
的程序控制.
• 单条指令是做不了什么事情的,需要大量指令组成
一个逐步执行的指令序列-程序.
–各种程序统称为计算机软件.
–没有软件的计算机毫无用处.
Lu Chaojun, SJTU
16
17
1.1 什么是计算
计算
计算思维
Python
• 计算
–计算:利用计算机执行程序来解决问题.
• 不是狭义的数学计算!
–程序使得简单指令完成复杂任务.
• 高斯算法
程序排错
18
1.1 什么是计算
计算
计算思维
• 计算
–把大象放进冰箱里需要几步?
Python
程序排错
19
1.1 什么是计算
计算
计算思维
Python
程序排错
• 计算机的通用性
–计算机执行一个程序即可实现一个功能;换着
执行不同的程序即可实现不同的处功能.
–请列举你熟悉的应用程序
计算
20
计算思维
Python
程序排错
• 计算机科学
–并非研究计算机!
• 计算机之于计算机科学家正如望远镜之于天文学家.
(E. W. Dijkstra)
–CS研究计算的基础,实现与应用.
• 例如,CS的一个基本问题:什么是可计算的?
–本课程的学习目标:像计算机科学家一样思考.
计算
21
计算思维
Python
程序排错
• 程序设计
–计算的关键是程序设计(编程).
• 给定一个问题,利用计算机支持的简单操作,设计出
一个操作步骤的序列,计算机执行这个序列从而解
决问题.
–学习程序设计的好处:
• 做计算机的主人
• 提高问题求解能力
• 本身是很有乐趣的智力活动
Lu Chaojun, SJTU
21
计算
22
计算思维
Python
• 1.1.2 计算机语言
–人与计算机进行交流的一种语言
–为什么不用自然语言与计算机交互?
• 精确的语法和语义
• 无二义性
–有不同层次的程序设计语言
程序排错
23
计算
1.1 什么是计算
计算思维
Python
程序排错
• 1.1.2 计算机语言
–机器语言
–汇编语言
–高级语言
0010001000000011
1000001000010000
0010011000000010
0110000100000001
0001000000000000
1111000000000000
Load R0,3
Mul R0,16
Load R1,2
Add R0,R1
Write R0
Halt
>>>print 3*16+2
24
计算
1.1 什么是计算
计算思维
Python
程序排错
• 1.1.2 计算机语言
–编译
• 将程序全部翻译成机器语言的程序,然后再执行。
main()
{int i, s;
i=1;
s=0;
Source
program
C compiler
01100010
11101001
Object
program
25
计算
1.1 什么是计算
计算思维
Python
• 1.1.2 计算机语言
–解释
源程序
解释系统
(逐句解释、执行)
输入数据
输出结
果
程序排错
计算
26
计算思维
Python
程序排错
• 高级语言的特点
–具备了一定的机器独立性,使用户可以专注
于解决问题的方法。但某些方面还是受到机
器的限制
–为了解决移植性问题,ANSI制订了一系列的
标准
27
1.1 什么是计算
计算
计算思维
• 1.1.3算法
–回想一下把大象放进冰箱的问题。
Python
程序排错
计算
28
计算思维
Python
程序排错
• 程序设计
–先用非形式化的语言将问题求解步骤表达出
来——算法;
• 伪代码
–再用形式化的编程语言将上述算法实现——
程序.
• 代码
29
计算
1.1 什么是计算
计算思维
Python
程序排错
• 1.1.3算法
–欧几里德算法
• 输入:自然数a,b
• 输出:a,b的最大公约数
• 步骤:
– 第1步:令 r为a/b的余数
– 第2步:若r=0,则算法结束,b即为答案;否则置a<-b,b<-r,
转到第1步。
30
计算
计算思维
Python
程序排错
• 对算法的要求
–算法的每个步骤必须是明确的,可行的.
• 不明确:"在菜中放点盐"
• 不可行:"用青菜豆腐做出龙肝凤髓的美味"
• 每个步骤不必是最底层的琐细步骤,可以是组合的
高级步骤.如:"焯水"
–算法的步骤必须在有限时间内完成.
–我们说的计算,即是指"算法计算":用明确可行
的基本步骤组成的序列来解决问题.
计算
31
• 1.1.4 实现
–算法<>程序
计算思维
Python
程序排错
计算
32
1.2 神奇的“合并形状”功能
计算思维
Python
• 1.2什么是计算思维
–计算思维:现代科技创新的基础之一
程序排错
计算
33
计算思维
Python
程序排错
• 1.2 什么是计算思维
–计算思维是计算机科学家利用计算机解决问
题时的思想和方法
• 计算机科学是关于“计算”的科学
• 计算思维建立在由人或机器执行的计算过程的能力
和限制之上
–如何像计算机科学家一样思考?
计算
34
计算思维
Python
程序排错
• 真的有计算思维吗?
–人们在解决不同问题时有不同的思考方式
• 数学思维:解数学问题
• 工程思维:工程设计
• 形象思维:文学创作
• ......
–计算思维:建立在计算机的能力与局限之上.
–由于计算机的广泛应用,计算思维未来会成为
人们的基本能力.
• 与阅读,书写,算术能力一样!
Lu Chaojun, SJTU
Lu Chaojun, SJTU
34
34
计算
35
• 1.2 什么是计算思维
–计算思维的具体例子
• 问题表示
• 算法设计
• 编程技术
• 可计算性与算法复杂性
计算思维
Python
程序排错
计算
36
计算思维
Python
程序排错
• 计算思维例:问题的表示
–问题的表示(建模)
• 抽象:将现实中的各种数量关系,空间关系,处理过程
抽象为计算机的数据结构和控制结构
– 例如:温度数据抽象为数值还是文字?
• 不同抽象层次
–问题表示得合适与否直接影响问题的解法的
发现和效率
Lu Chaojun, SJTU
36
计算
37
计算思维
Python
程序排错
• 计算思维例:算法设计
–化难为易:分解,约简,嵌入,转换,模拟...
–分治法,递归法,贪心法,动态规划...
–递归地思考
–并行处理
Lu Chaojun, SJTU
37
计算
38
计算思维
Python
程序排错
• 计算思维例:编程实现
–类型系统与类型检查
–结构化与模块化的思考
–编程范型:过程式,面向对象,函数式,...
–程序美学,系统设计的简洁与优雅
Lu Chaojun, SJTU
38
计算
39
计算思维
Python
程序排错
• 计算思维例:计算理论
–算法复杂度分析
• 问题的解法是有效率差别的
• 有些问题是难解的
• 寻求近似解
–问题的可计算性
• 有些问题是不可计算的
Lu Chaojun, SJTU
39
计算
40
计算思维
Python
程序排错
• 计算思维的特点
–是概念化思考,而非编程
–是基本思考能力,而非机械的套用
–是人的思考,而非计算机
–与数学思维和工程思维相结合
–是思想,而非人造物
–人人皆有,处处皆是
Lu Chaojun, SJTU
40
计算
41
计算思维
Python
程序排错
• 生活中的计算思维
–算法:小学算术中的长除法
–查找方法:查黄页是顺序翻找还是借助索引
–排序:整理扑克牌
–排队:先来先处理
–预取与缓存:书包存放当天上课用的书
–并行处理:烧菜
• ……
Lu Chaojun, SJTU
41
计算
42
计算思维
Python
程序排错
• 计算 + X
–计算数学,计算几何,自动定理证明
–计算物理学
–计算化学
–计算生物学,生物信息学
–计算经济学
–计算机艺术:电影特效,计算机作曲绘画书法
–……
Lu Chaojun, SJTU
42
计算
43
计算思维
Python
程序排错
• 计算+X:十二五863计划
–征集重大应用软件课题
• 聚变与裂变能源数值模拟
• 真实飞机外型全流场和优化设计数值模拟
• 航天飞行器全飞行流域数值模拟
• 新药研发与蛋白质折叠数值模拟
• 真实感动漫渲染与创作
• 大型工程设备结构力学分析
• 复杂电磁环境数值模拟
• 新型材料设计与性能评估
Lu Chaojun, SJTU
43
44
计算
计算思维
Python
Python
程序排错
• 1.3 初识Python
• 本课程采用Python语言
–高级程序设计语言有很多种,据说2008年网
上被引用最多的10个语言是(按字母顺序): C,
C++,C#,Java,JavaScript,Perl, PHP,
Python,Ruby,SQL
–下载python 软件的地址
• http://www.python.org/getit/
• python 2.7 版
44
计算
45
计算思维
Python
Python
程序排错
• Python安装与运行
–版本:教材和上课都采用Python 2.7
• 与最新的Python 3.x有不兼容的地方.
–安装后,启动Python解释器
• 命令行
• GUI
Lu Chaojun, SJTU
45
计算
46
计算思维
Python
Python
程序排错
• 第一个程序:HelloWorld
–交互方式
>>> print "Hello, World!"
Hello, World!
–本课程的教学中常用交互方式演示新语句
–实际上很少用交互方式执行程序
• 多次执行同一程序需要多次输入程序
• 多行语句无法一次性执行
Lu Chaojun, SJTU
46
计算
47
计算思维
Python
Python
程序排错
• 第一个程序:HelloWorld
–程序文件
• 将语句保存在纯文本文件hello.py中
print "Hello, World!"
• 四种执行方式
– 在IDLE中用File->Run Module菜单执行
– 双击hello.py文件图标
– >>> import hello
– C:\Python27> python hello.py
Lu Chaojun, SJTU
47
程序构件:数据
计算
48
计算思维
Python
Python
程序排错
• 数程序构件:数据
–据是被处理的信息
–有不同类型的数据
• 字符串数据
>>> print "Hello, World!"
• 数值数据
>>> print 3.1415
Lu Chaojun, SJTU
48
计算
49
计算思维
Python
Python
程序排错
• 程序构件:变量
–和数学类似:用一个名字表示可变的数据
• 数学中多用单字母,程序中多用单词/词组
–标识符:Python命名
• 以字母或下划线开头,后跟0个或多个字母,数字,下
划线.区分大小写字母.
合法: x xYz x_123 _ __ _w3
非法: 3q x-123 first name
–良好的命名风格:有意义,风格一致
Lu Chaojun, SJTU
49
计算
50
计算思维
Python
Python
程序排错
• 程序构件:表达式
–表达式:能计算出一个值.
• 字面值: 3.14, “hello”
• 变量
• 数据+运算符(如    )
>>> 2+3*4-5
–运算符
• 不同类型的数据有不同运算
• 运算符有优先级
–良好编程风格:用空格,括号增加表达式的可读
性.
Lu Chaojun, SJTU
50
计算
51
计算思维
Python
Python
程序排错
• 程序构件:语句
–输出语句
• 我们用语句模板来给出正确用法
print <表达式>
print <表达式1>,<表达式2>,...
–赋值语句
>>> x = 3.14
>>> print x * 10
Lu Chaojun, SJTU
51
计算
52
计算思维
Python
Python
程序排错
• 程序构件:函数
–多条语句构成一个整体,并命名
>>> def greet():
print "Hello!"
print "Goodbye!"
>>> greet()
Hello!
Goodbye!
–习惯上为程序定义一个主函数main
Lu Chaojun, SJTU
52
计算
53
计算思维
Python
Python
程序排错
• 程序构件:注释
–程序中可以使用注释,用于解释变量用途,函数
功能等等信息.
# Author: John
# Version: 1.0
def main():
....
–注释是给人看的,对程序执行没有作用,被编译
器/解释器忽略.
–良好的编程风格:多用注释!
Lu Chaojun, SJTU
53
54
计算
计算思维
Python
程序排错