山东省高中信息技术学业水平考试试题网 - 数据与计算|信息系统与社会|数据与数据结构|网络基础|数据管理与分析|移动应用设计|三维设计与创意|开源硬件项目设计|算法初步|智能系统初步

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 665|回复: 1
收起左侧

第十一讲 体验计算机解决问题的过程

[复制链接]

2095

主题

8908

帖子

214748万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2147483647
QQ
发表于 2020-11-8 19:04:28 | 显示全部楼层 |阅读模式
第十一讲 体验计算机解决问题的过程
学习目标
" E3 p* u$ o" O% Y/ r, a2 f体验计算机解决问题的过程。
, `" |$ w! b; V! e7 t) ]( b4 E) l学习内容4 H# u. i: f- W) q7 @8 M
      在现实生活中,我们经常需要对数据进行统计,分析。当数据量不多时,我们可以采用人工方法来处理;然而,当数据量变多时,我们运用计算机来解决问题将是一种更高效,更便捷的方法。
6 C# t7 X! F. ], ]; |& ^* A人工解决问题的过程
* B# y$ \7 j, {      采用人工方法来解决问题,首先需要明确所要解决的问题和给出的条件,然后再根据已有的经验和知识确定解决问题的方法,从而解决问题。, R0 l0 O3 q  l% D; M$ p( c
探究活动9 T+ ~7 q( i$ z/ u- C# V& v6 \7 f
      如何设计从A市到B市耗时最少的旅行路线方案呢?我们从铁路公司、各航空公司和汽车客运公司网站得知,直达B市的交通工具只有火车和汽车两种,出发地有B1,B2,…,Bk市(没有A市),从A市出发到B1,B2,…,Bk市的交通工具有飞机、火车和汽车三种,这样从A市经B1,B2,…,Bk市到B市的交通情况如下图所示。
9 ]. Z0 J- e8 x9 I' ?6 f, y# X- q

$ C1 z# L  o8 M1 k0 J4 N. x      由于从A市到B1,B2,…,Bk市有不同的交通工具,每一种交通工具又有不同的班次,因此从A市出发到中转城市B1,B2,…,Bk市就有M1、M2,…,Mk种班次。同样,从中转城市B1,B2,…,Bk市到B市也有不同的交通工具,每一种交通工具有不同的班次,因此从中转城市B1,B2,…,Bk市到B市就有N1,N2,…,Nk种班次。于是从A市经B1,B2,…,Bk市到B市的交通班车(班机)数共有:
' z% ~9 L9 R. J( h/ G1 [, PS=M1×N1+M2×N2+…+Mk×Nk: c& l9 S* w# t' y7 B
      寻找从A市到B市耗时最少的旅行路线问题就转化为在S种联运班次中找到一种耗时最少的联运班次。这样就需要遍历每一个班次进行比较,人工方式找到能够中转且等待时间和行驶时间最少的班次,工作量极其浩大!1 w! T! I# P# U& ?) K; _& d( \
假设从A市到B市的中转城市只有B1,B2市,从A市经B1,B2市到B市的交通情况如下表所示。5 {7 w5 c: Z5 H# b2 g7 f. u

+ m2 u. Y% ?. G; L0 @      于是,从A市经B1市到B市的联运班次有7×9=63班;从A市经B2市到B市的联运班次有12×9=108班,合计为S=63+108=171班。然后在171班次中找到能够中转且等待时间加上行驶时间最少的联运班次,如下图所示。
( d+ _6 Z$ s1 Q+ @
' P5 {/ b2 c) k& j1 C      采用以下的思路求解耗时最少的联运班次问题:
2 H1 w; |# g; A9 {4 b2 p8 X      (1)找出能够中转的从A市经B1市到达B市的联运班次,并计算所用的时间。9 a) S9 |; ^5 |8 s9 L! h
      (2)找到能够中转的从A市经B1市到达B市的联运班次中耗时最少的联运班次.
& z9 k: z2 X+ {  U      (3)找出能够中转的从A市经B2市到达B市的联运班次,并计算所用的时间。
, }  g' P% J' R+ z' X3 [      (4)找到能够中转的从A市经B2市到达B市的联运班次中耗时最少的联运班次。% {" T0 L8 ]. j$ K( U
      (5)取两条线路中耗时最少的联运班次为最佳旅行路线。' O( Z* H& s$ I% k
      上述问题中,假如中转城市很多,交通班次也很多,找出耗时最少路线的工作量会非常大,若用人工穷举遍历,其效率就会很低。
8 f" q. Q! O: |( H* R. ^计算机解决问题的过程+ s6 }; F7 [+ A2 q: c
      当数据量很大,人工处理效率很低时,我们可以借助计算机,通过编写计算机程序解决问题。编写计算机程序解决问题要经过分析问题,设计算法,编写程序,调试运行程序等若干个步骤。
  n  S9 B  x' G      1.分析问题, y1 a0 |) l$ \( S3 ]' ?$ N* p
      在利用计算机解决问题之前,我们首先要分析问题的需求情况、已知条件和需要解决的问题。% n2 @7 I; Y) n* n& {4 p
      在从A市到B市耗时最少的旅行路线问题中,在不知道有多少个中转城市和每个城市有多少班车(或飞机)的情况下,我们可以利用大数据挖掘技术中的爬虫程序(参见配套学习资源包“第三章\\课本素材\\程序3-1”)到铁路网站、各航空公司和汽车客运公司网站获取从A市经中转城市B1,B2,…,Bk市到达B市的交通班次信息,经过数据清洗,形成结构化的数据存储为Excel文件。
+ a$ f* }' j2 m# H
" U8 G- h- G% ~) d* v
- Y( }7 Y: O- \1 }, R3 k      2.设计算法2 @! D# o1 ^( w6 w( A
      问题分析清楚后,需要给出解决问题的详细方法和步骤,这一过程称为设计算法。8 b5 P; \* H7 ~, p( j; x8 n5 e
      例如,对于从A市到B市耗时最少的旅行路线问题,根据获取的从A市到B市的中转城市B1,B2,…,Bk的班次,以及各城市各交通班次的发车时间和行驶时间等信息,采用以下的思想找出耗时最少的联运班次问题,即算法如下:  ^  ?3 p; V/ G7 Y) J
      (1)分别找出能够中转且中转等待时间不小于1小时的从A市经B1,B2,…,Bk市到达B市的联运班次,并计算所用的时间。
3 v. k: {" P9 F1 `/ U5 t      (2)分别找到能够中转的从A市经B1,B2,…,Bk市到达B市的联运班次中耗时最少的联运班次,共k条线路。( }$ F4 z$ h: j  }
      (3)取k条线路中耗时最少的联运班次为最佳旅行路线。: D5 C- p$ F/ B. S
      3.编写程序4 o* w) S/ Y# i0 y
      有了清晰可操作的算法描述,就可以选择一种计算机语言工具来编写程序,实现算法。一般来说,只要算法确定,对计算机程序设计语言的选择没有特别的限定,通常根据问题的特性和编程人员对语言的熟悉程度来选定编写程序。
1 g! ?5 e7 n; m2 Q      Python语言编写从A市到B市耗时最少的旅行路线问题的算法的程序可参见配套学习资源包“第三章\\课本素材\\程序3-1”。其中,找出能够从A市经Bi(i=1,2,…,k)市到达B市的中转联运班次,并计算所用的时间以及找到耗时最少的联运路线的关键程序段如下。
. }; \: _2 L. R! ~, q1 O) y( y" R2 z, ^6 x( C
      4.调试运行程
- ~9 ^! v! W  P& X9 x- d7 Q      程序编写完成以后,再通过键盘把程序输入计算机中运行,检查程序能否按预想的效果行,这一过程称为程序的调试运行。计算机只能识别程序设计语言中所规定的语法规,如果编写程序时与规则不一致,哪怕是一个标点符号出错,也会因程序出错而中断运行。此时,我们可以根据计算机提示的出错信息修改程序,重新调试运行。由于 Python是解标程序,因此它的调试是在运行过程中逐行进行的。
. D" k' C) ^0 V/ }  f2 g      当程序能够顺利运行以后,我们还需要对程序运行的结果进行检查。因为如果程序语句符合语法规则,而程序中却有逻辑或计算方法等错误,计算机是检查不出来的。因此,如果结果不合理,还要对程序甚至算法进行修改,直到程序的功能符合设计要求为止。
3 @. P3 r  k7 n: Y' y      打开配套学习资源包“第三章课本素林程序3-1”,调试并运行程序3-1,找出从A市到B市耗时最少的旅行路线问题的结果,如图3-7所示
: l* x- g! J- t; m0 O: o
. O4 f, {0 I" @, G" [' ]+ H) H耗时最少的旅行路线问题的python代码:
3 y: T* ]0 |" g7 o/ q
  1. import xlrd/ ]/ `5 @0 {  L5 q. u
  2. ms=[]; U5 X) n5 |1 `1 M  X
  3. ra=[]0 L1 B6 n9 z8 t. z; Y* h$ I: ?
  4. rb=[]
    6 k2 s+ e5 p+ U# g8 R* Z# S, Z
  5. for k in range(1,4):
    + [' }# `7 }& l! X
  6.     data = xlrd.open_workbook("./data/B"+str(k)+".xlsx")3 |) J+ [& J1 G; X
  7.     table_1 = data.sheet_by_name("Sheet1")( Y6 _; K: s  B0 f
  8.     table_2 = data.sheet_by_name("Sheet2"), x7 o! [2 Z3 O! _
  9.     rs1 = table_1.nrows
    $ M6 Z( g4 T& W/ O8 P% P  k
  10.     rs2 = table_2.nrows
    8 A& U# g$ U: _. E6 k/ k8 U
  11.     m= 99
    ; X) Q+ P3 Z& k% U. {" i
  12.     for i in range(1,rs1):
    8 y3 S, N/ [; E) S
  13.         t14 = table_1.cell(i,4).value
    $ v2 D0 V; I3 J, D
  14.         t12 = t14-table_1.cell(i,2).value
    9 N% J* _2 `! v' ]! f) T, W
  15.         for j in range(1,rs2):
    ; Z4 K2 ~1 _/ e% R
  16.             t22 = table_2.cell(j,2).value
    8 d8 E& I: G$ g! v* I1 T( i
  17.             if t22-t14>=1/24 :% o5 x6 D) w0 a' `. m  h
  18.                 m1=t12+(t22-t14)+(table_2.cell(j,4).value-t22)
    / K! F9 t9 c  ?
  19.                 if m>m1:
    ) U: k- d$ p4 q/ |* f. A! ]4 v" V
  20.                     m=m1
    ' d  M8 \# `7 Z
  21.                     r1=i2 g. {  j5 }+ R1 U0 r7 ~
  22.                     r2=j
    ; x" W* S9 [1 W( E  Q% ]& e
  23.     ms.append(m)- a  n5 Q' Q% W& p& S% O
  24.     ra.append(r1)' m# E# S) R" {2 {, {' b) o
  25.     rb.append(r2)
    : Y  C  {; }" n& D6 b0 t4 j
  26. ms0=min(ms)
    2 O; I* v& h# d$ t
  27. ms1=ms.index(ms0): ~/ p- G  R  X7 z' I7 H% c
  28. print("从A地出发经B",ms1+1,"到达B地,最少耗时为:",ms0*24,"小时。具体行程请查看文件ZHXC.XLS。")
    3 v, T: a, _3 Q7 c5 H; h$ q
  29. data = xlrd.open_workbook("./data/B"+str(ms1+1)+".xlsx")  e/ v4 x8 k, X
  30. table_1 = data.sheet_by_name("Sheet1")
    ) \: O" i1 R* V
  31. table_2 = data.sheet_by_name("Sheet2")/ J% }9 g' i, C
  32. import xlwt
    2 v) T& g& {/ M: c9 [' p* ?1 t
  33. wbk = xlwt.Workbook()
    : U+ U9 u3 M$ P" j
  34. sheet = wbk.add_sheet(\'sheet 1\')
    0 B% F: m$ r: G
  35. for l in range (5):
    : c3 z! U6 N; h) S
  36.     sheet.write(0,l, table_1.cell(0,l).value)
    + w* f4 |0 I" G" p9 O! e
  37.     sheet.write(1,l, table_1.cell(ra[ms1],l).value)
    9 T# v, J) b: C4 m* f
  38.     sheet.write(2,l, table_2.cell(rb[ms1],l).value)
    # m9 N: R( m2 X
  39. wbk.save(\'./data/zjxc.xls\')
复制代码
课内任务:将99乘法表代码输入,运行,观察是否达到预期效果。
/ g: T2 Q8 g6 n( S! Y) \3 q
  1. for i in range(1,10):( W, ]) S+ R7 ]
  2.      for j in  range(1,i+1):
    7 Z3 o. E& U9 @0 v, S5 A
  3.         print("%d*%d=%2d"%(j,i,j*i),end='  ')
    : O2 F) q" f  l! f9 }$ T) w
  4.      print("")
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
+1
666°C
1
  • 刘嘉洧
过: 他们

帖子地址: 

教书育人!
回复

使用道具 举报

0

主题

6

帖子

6195

积分

本科生

Rank: 4

积分
6195
发表于 2020-11-19 16:49:33 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

百度一下 百度二下 百度三下 开门大吉

QQ|Archiver|手机版|小黑屋|山东省高中信息技术学业水平考试试题网 ( 鲁ICP备16049757号 )|网站地图

GMT+8, 2021-1-26 13:48 , Processed in 0.251735 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表