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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 959|回复: 0
收起左侧

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

[复制链接]

281

主题

680

帖子

214748万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2147483647
QQ
发表于 2019-12-3 20:50:28 | 显示全部楼层 |阅读模式
第十一讲 体验计算机解决问题的过程
学习目标' q) W. q! E2 T. ^
体验计算机解决问题的过程。$ y5 H9 H8 g% d; a) V/ k8 W
学习内容2 e6 k; j7 d0 C+ }6 \# w
      在现实生活中,我们经常需要对数据进行统计,分析。当数据量不多时,我们可以采用人工方法来处理;然而,当数据量变多时,我们运用计算机来解决问题将是一种更高效,更便捷的方法。2 n$ c5 p0 d6 q
人工解决问题的过程
) N. _  k+ J  H! B      采用人工方法来解决问题,首先需要明确所要解决的问题和给出的条件,然后再根据已有的经验和知识确定解决问题的方法,从而解决问题。9 w8 G1 W2 |8 r# u6 O# l6 E
探究活动( ^- I% T" f/ g& b( H8 M5 h. R7 p
      如何设计从A市到B市耗时最少的旅行路线方案呢?我们从铁路公司、各航空公司和汽车客运公司网站得知,直达B市的交通工具只有火车和汽车两种,出发地有B1,B2,…,Bk市(没有A市),从A市出发到B1,B2,…,Bk市的交通工具有飞机、火车和汽车三种,这样从A市经B1,B2,…,Bk市到B市的交通情况如下图所示。
5 B( k; W5 `1 w& u9 P1 Y2 B* n
      由于从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市的交通班车(班机)数共有:  v1 R4 T# M; M, N$ T4 ]
S=M1×N1+M2×N2+…+Mk×Nk. l. Q- w9 w5 d4 h, w9 W1 S
      寻找从A市到B市耗时最少的旅行路线问题就转化为在S种联运班次中找到一种耗时最少的联运班次。这样就需要遍历每一个班次进行比较,人工方式找到能够中转且等待时间和行驶时间最少的班次,工作量极其浩大!
" D2 A$ W. P( l! L9 |9 l假设从A市到B市的中转城市只有B1,B2市,从A市经B1,B2市到B市的交通情况如表3-2和表3-3所示。
6 H/ `6 R: e9 L/ q. A5 J7 U% ]/ `
' e$ z, P3 f: T" v      于是,从A市经B1市到B市的联运班次有7×9=63班;从A市经B2市到B市的联运班次有12×9=108班,合计为S=63+108=171班。然后在171班次中找到能够中转且等待时间加上行驶时间最少的联运班次,如下图所示。" s; V, N) ?+ d4 ]  }
# V$ Q3 f( X; Y6 u0 s1 ^
      采用以下的思路求解耗时最少的联运班次问题:
5 R9 G8 |3 I7 Y" ?% i1 K      (1)找出能够中转的从A市经B1市到达B市的联运班次,并计算所用的时间。
3 l6 c; F0 C6 s5 L4 S6 P" K- s      (2)找到能够中转的从A市经B1市到达B市的联运班次中耗时最少的联运班次.
1 q8 \8 t( H3 |  J; T& |      (3)找出能够中转的从A市经B2市到达B市的联运班次,并计算所用的时间。
3 r/ I7 n! \8 Y3 t      (4)找到能够中转的从A市经B2市到达B市的联运班次中耗时最少的联运班次。
" y5 @# q4 Y* r7 H  e      (5)取两条线路中耗时最少的联运班次为最佳旅行路线。
6 t2 Q' J3 `5 s6 {/ n5 T4 y9 F) l      上述问题中,假如中转城市很多,交通班次也很多,找出耗时最少路线的工作量会非常大,若用人工穷举遍历,其效率就会很低。% n) ?0 {( o8 `: s. e
计算机解决问题的过程
$ U$ b% U# I' s- K% ?$ X$ ]7 ?      当数据量很大,人工处理效率很低时,我们可以借助计算机,通过编写计算机程序解决问题。编写计算机程序解决问题要经过分析问题,设计算法,编写程序,调试运行程序等若干个步骤。
  c7 Y! L6 ?3 X: _: w- p7 E      1.分析问题6 B# t1 e' F" I5 @' d
      在利用计算机解决问题之前,我们首先要分析问题的需求情况、已知条件和需要解决的问题。* B3 T+ S- n5 a, F, Q  h' f4 x
      在从A市到B市耗时最少的旅行路线问题中,在不知道有多少个中转城市和每个城市有多少班车(或飞机)的情况下,我们可以利用大数据挖掘技术中的爬虫程序(参见配套学习资源包“第三章\课本素材\程序3-1”)到铁路网站、各航空公司和汽车客运公司网站获取从A市经中转城市B1,B2,…,Bk市到达B市的交通班次信息,经过数据清洗,形成结构化的数据存储为Excel文件。7 i: z5 K6 t4 h3 J$ q( ?  F

9 S& K2 `( `& Z" |- S( `7 \: L0 N# U" h- T) Y% |
      2.设计算法  i# k# `& k" ~) k# S; \) s
      问题分析清楚后,需要给出解决问题的详细方法和步骤,这一过程称为设计算法。
5 l+ ]8 {$ E8 D* \      例如,对于从A市到B市耗时最少的旅行路线问题,根据获取的从A市到B市的中转城市B1,B2,…,Bk的班次,以及各城市各交通班次的发车时间和行驶时间等信息,采用以下的思想找出耗时最少的联运班次问题,即算法如下:
8 j$ H' O6 D# P( s; z      (1)分别找出能够中转且中转等待时间不小于1小时的从A市经B1,B2,…,Bk市到达B市的联运班次,并计算所用的时间。  ^$ ^: K* t# G
      (2)分别找到能够中转的从A市经B1,B2,…,Bk市到达B市的联运班次中耗时最少的联运班次,共k条线路。
3 ?2 w+ e/ j( M  B      (3)取k条线路中耗时最少的联运班次为最佳旅行路线。
! x* z) B, k! F. c4 k' Z! j      3.编写程序% O+ O7 B" L+ l8 n9 ?) N. j
      有了清晰可操作的算法描述,就可以选择一种计算机语言工具来编写程序,实现算法。一般来说,只要算法确定,对计算机程序设计语言的选择没有特别的限定,通常根据问题的特性和编程人员对语言的熟悉程度来选定编写程序。8 h1 x  [' H! U% V' O2 X
      Python语言编写从A市到B市耗时最少的旅行路线问题的算法的程序可参见配套学习资源包“第三章\课本素材\程序3-1”。其中,找出能够从A市经Bi(i=1,2,…,k)市到达B市的中转联运班次,并计算所用的时间以及找到耗时最少的联运路线的关键程序段如下。
0 C, S! K; Q& D! ^4 y/ M. `7 @; F( F3 }1 u2 T) P4 Y* L0 e" V
      4.调试运行程
# V3 u8 `2 e" P      程序编写完成以后,再通过键盘把程序输入计算机中运行,检查程序能否按预想的效果行,这一过程称为程序的调试运行。计算机只能识别程序设计语言中所规定的语法规,如果编写程序时与规则不一致,哪怕是一个标点符号出错,也会因程序出错而中断运行。此时,我们可以根据计算机提示的出错信息修改程序,重新调试运行。由于 Python是解标程序,因此它的调试是在运行过程中逐行进行的。3 m% I# x, t% m, j' W# P0 u3 }
      当程序能够顺利运行以后,我们还需要对程序运行的结果进行检查。因为如果程序语句符合语法规则,而程序中却有逻辑或计算方法等错误,计算机是检查不出来的。因此,如果结果不合理,还要对程序甚至算法进行修改,直到程序的功能符合设计要求为止。( I6 `& p( _6 ?' o; ]
      打开配套学习资源包“第三章课本素林程序3-1”,调试并运行程序3-1,找出从A市到B市耗时最少的旅行路线问题的结果,如图3-7所示
; W( k- V1 c- `2 t+ ~
, k! @5 T) B  V8 P耗时最少的旅行路线问题的python代码:
5 W; ?- U& O/ t1 j! l* c
  1. import xlrd7 t' S9 _9 m8 @/ ]( ~
  2. ms=[]
    ( M5 ^+ ]6 Z( h7 U1 F4 p
  3. ra=[]  ^/ x2 r0 j& ^, G  u
  4. rb=[]2 X- [/ M. c( A9 k
  5. for k in range(1,4):
    # q/ F4 ~( L- a! b5 P3 |  |
  6.     data = xlrd.open_workbook("./data/B"+str(k)+".xlsx")/ k# V8 b$ Y( X; U" n
  7.     table_1 = data.sheet_by_name("Sheet1"), b# z$ K" H$ _7 T# f" J: b
  8.     table_2 = data.sheet_by_name("Sheet2")9 {% [, O: w5 Y. l9 g3 V8 r
  9.     rs1 = table_1.nrows
    7 c! i4 l% ^* s$ Y# H3 `- T7 I
  10.     rs2 = table_2.nrows. E9 }: h0 Q: F$ z
  11.     m= 99& E9 r$ |: G$ x! p
  12.     for i in range(1,rs1):7 L% l: ~& ?2 K7 L) ^
  13.         t14 = table_1.cell(i,4).value
    1 K- p4 B& e0 W$ e: k# N
  14.         t12 = t14-table_1.cell(i,2).value
    7 J6 x  C$ I9 ]$ ]9 m
  15.         for j in range(1,rs2):/ h, o* i0 q( Z
  16.             t22 = table_2.cell(j,2).value1 y, s6 j. _+ w6 M* Y9 R# Q
  17.             if t22-t14>=1/24 :% C' |' T! E6 R  M8 X" d( s# K- d
  18.                 m1=t12+(t22-t14)+(table_2.cell(j,4).value-t22)4 {6 U# J$ P' k/ b) m6 F
  19.                 if m>m1:
    ' m; p1 t& a" h8 V* p. J
  20.                     m=m1
    # I. J  J5 S  _8 o# Q, E
  21.                     r1=i  v4 h5 `* y9 i- q+ N1 u
  22.                     r2=j% T. i2 Y( h( x( C% [/ O! j
  23.     ms.append(m): g2 J# ]- q/ V4 A' s) [
  24.     ra.append(r1)1 U% u) O) _% O
  25.     rb.append(r2)
    : e: L& L  s5 W1 G+ [0 E
  26. ms0=min(ms)
    $ B% N; Y  l  \. _* h
  27. ms1=ms.index(ms0). t: W" w( \6 D# I3 V5 {' U
  28. print("从A地出发经B",ms1+1,"到达B地,最少耗时为:",ms0*24,"小时。具体行程请查看文件ZHXC.XLS。")8 Z  _' d; P1 r  L- n, K, y* P  I4 q
  29. data = xlrd.open_workbook("./data/B"+str(ms1+1)+".xlsx")
      T1 s  g2 {7 |! M0 R$ V( {$ z
  30. table_1 = data.sheet_by_name("Sheet1")
    " Y# T# }& M) B6 P! U: T; A, S
  31. table_2 = data.sheet_by_name("Sheet2")
    ' M% L1 t9 T& f9 h* k
  32. import xlwt
    9 P  o& D5 G! j- y/ g
  33. wbk = xlwt.Workbook()5 b% M1 b4 z+ @' j
  34. sheet = wbk.add_sheet('sheet 1')
    + T5 f4 U1 ]# b$ J
  35. for l in range (5):
    2 D" F+ k/ U& J; [; k  V! ~
  36.     sheet.write(0,l, table_1.cell(0,l).value): Q$ ~/ o- `# D; l6 B) {3 _5 S
  37.     sheet.write(1,l, table_1.cell(ra[ms1],l).value)
    5 y$ C6 o/ i4 d# p0 v' ?
  38.     sheet.write(2,l, table_2.cell(rb[ms1],l).value)
    / |" m  \- a  l  U- y/ G/ g/ z
  39. wbk.save('./data/zjxc.xls')
复制代码
课内任务:将99乘法表代码输入,运行,观察是否达到预期效果。! d' w' n' X4 {& N. p! a3 s& c& N7 m
  1. for i in range(1,10):
    , i+ ~0 z: f0 J/ Q) ]0 T
  2.      for j in  range(1,i+1):6 j2 Y9 x9 |. f+ W! B* Q9 V, O
  3.         print("%d*%d=%2d"%(j,i,j*i),end=' ')
    * R& G& V- I0 r1 F$ j
  4.      print("")
复制代码
* }2 j: }! O6 g8 f

本帖子中包含更多资源

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

x
楼主热帖




上一篇:第十讲 从A市到B市耗时最少的旅行路线方案设计报告
下一篇:第十二讲 算法及其描述
+1
959°C
沙发哦 ^ ^ 马上

帖子地址: 

教书育人!
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2020-8-4 10:56 , Processed in 0.315912 second(s), 40 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表
潍坊行知学校信息技术QQ交流群:
潍坊行知学校信息技术
潍坊行知学校复读官方招生QQ群:
潍坊行知学校复读招生