pascal语言程序设计四步辅导法(编辑修改稿)内容摘要:
从图中可以看出,从城市 A到城市 H要经过若干个城市。 求出一 条经过城市最少的一条路线。 12 图 8 看到图 8 很容易想到用邻接距阵来表示, 0 表示能走, 1 表示不能走。 如图 9: 图 9 用队来解题,我们可以 a 记录搜索过程, 记录经过的城市, 记录前趋元素,这样就可以倒推出最短线路。 具体过程如下 将城市 A入队,队首、队尾都为 1。 将队首所指的城市所有可直通的城 市入队(如果这个城市在队中出现过就不入队,可用一个集合来判断),将入队城市的 pre指向队首的位置。 然后将队首加 1,得到新的队首城市。 重复以上步骤,直到城市 H 入队为止。 当搜到城市 H 时,搜索结束。 利用 pre 可倒推出最少城市线路。 PASCAL 源程序: const ju:array[1..8,1..8] of 0..1=( (1,0,0,0,1,0,1,1),(0,1,1,1,1,0,1,1), (0,1,1,0,0,1,1,1), (0,1,0,1,1,1,0,1), (1,1,0,1,1,1,0,0), (0,0,1,1,1,1,1,0), (1,1,1,0,0,1,1,0), (1,1,1,1,0,0,0,1))。 type r=record {记录定义 } city:array[1..100] of char。 pre:array[1..100] of integer。 end。 var h,d,i:integer。 a:r。 s:set of 39。 A39。 ..39。 H39。 procedure out。 {输出过程 } begin write([d])。 repeat d:=[d]。 write(39。 39。 ,[d])。 until [d]=0。 13 writeln。 halt。 end。 procedure doit。 begin h:=0。 d:=1。 [1]:=39。 A39。 [1]:=0。 s:=[39。 A39。 ]。 repeat {步骤 2} inc(h)。 {队首加一,出队 } for i:=1 to 8 do {搜索可直通的城市 } if ( ju[ord([h])64,i]=0) and ( not( chr( i+64) in s)) then {判断城市是否走过 } begin inc(d)。 {队尾加一,入队 } [d]:=chr(64+i)。 [d]:=h。 s:=s+[[d]]。 if [d]=39。 H39。 then out。 end。 until h=d。 end。 begin {主程序 } doit。 end. 输出: HF—A 通过数学方式重新审题 有些问题有很多精妙的数学解法,选手可以从数据角度(多角度)审题,如能归纳出数学公式解题,效率和准确性会有很大的提高。 例如前文提到的一题: 计算从 1开始的前 100个自然数的和”的算法。 运用图 4 所列出的公式( S 的值来源于等差数列,用求等差级数前 N 项和的公式),可以轻松求解。 这种方法只需做一次加法和二次乘法,所以数学公式算法比其它算法运算量小,效率高。 再如:“栈”一题(问题略,可参见 2020 年普及组复赛试题三) 此题可以用动态规划求解,但在审题中,我们分析出:若设 入栈为 1,出栈为 0(不入栈为 10),对于任意一种方案,与 2n 位的 01 序列一一对应(在前任意位, 1的个数总是大于等于 0的个数)。 可以证明,在 2 的 0 任意排列中,不符合要求的个数为: ,则可产生出的序列数: ,即为 n 的 Catalan 数。 14 选手写阶乘的程序比较容易, PASCAL 程序如下: program stacks。 var n,m:longint。 function jc(n:integer):longint。 var i,s:longint。 begin s:=1。 for i:=1 to n do s:=s*i。 jc:=s。 end。 function jm(n,m:integer):real。 begin jm:=jc(n)/(jc(m)*jc(nm))。 end。 begin write(39。 input n:39。 )。 readln(n)。 writeln(jm(2*n,n)/(n+1))。 readln end. (二)建模 运用已经掌握的知识,快速与命题建立联系 穷举法是常用的算法, 穷举是穷举出所有可 能满足题意的情形,并从中找出符合要求的解,是最直观的循环算法。 在讲解 LOGO、 BASIC、 PASCAL 语言中都要讲到,这个基础算法可以被选手熟练掌握,当遇到类似问题时,就会很容易产生联系,便于建立模型。 如穷举法的经典例题,百鸡百钱问题:用 100钱买 100只鸡。 其中母鸡 5 钱一只,公鸡 3 钱一只,小鸡 1 钱三只,试编程求可买母鸡、公鸡、小鸡各多少只。 LOGO 语言源程序: TO B FOR X 0 20[FOR Y 0 33[FOR Z 0 100 [ IF AND :X+:Y+:Z=100 5*:X+3*:Y+:Z/3=100 THEN (PR :X :Y :Z)]] ] END 这个模型在此不再赘述,当选手在遇到类似的结构描述时,就会很快建立解题的模型,如: 找出 n个自然数 (1,2,3,„ ,n)中 r个数的组合。 例如,当 n=5 ,r=3时,所有组合为 : 5 4 3 5 4 2 5 4 1 5 3 2 5 3 1 5 2 1 4 3 2 4 3 1 15 4 2 1 3 2 1 total=10 {组合的总数 } 此题中, n 个数中 r 的组合,其中每 r 个数中,数不能相同。 另外,任何两组组合的数,所包含的数也不应相同。 例如,5、4、3与3、4、5。 为此,约定前一个数应大于后一个数。 将上述两 条不允许为条件,当 r=3时,因为有前面 百鸡百钱的知识,选手比较容易建立模型,即 三重循环进行穷举: PASCAL 程序: program qje。 const n=5。 var i,j,k,t:integer。 begin t:=0。 for i:=n downto 1 do for j:=n downto 1 do for k:=n downto 1 do if (ij)and(ik)and(ij)and(jk) then begin t:=t+1。 writeln(i:3,j:3,k:3)。 end。 writeln(39。 total=39。 ,t)。 end. 所以,对于经典例题的模型的辅导是比较重要的,是学生建模的知识积累。 根据运算量及数据范围,确定存储结构、数据结构 PASCAL 语言解题的过程之前一定要进行数据的存储,良好的存储结构和数据结构是建模的基础,好的数 据结构是成功求解的关键。 如回溯算法是所有搜索算法中最为基本的一种算法,其采用了一种“走不通就掉头”思想作为其控制结构, 其相当于采用了先根遍历的方法来构造解答树,可用于找解或所有解以及最优解。 具体的算法描述如下: 非递归算法: Type Node(节点类型 )= Record Situtation:TSituation(当前节点状态)。 WayNO:Integer(已使用过的扩展规则的数目)。 End Var List(回溯表 ):Array[1..Max(最大深 度 )] of Node。 pos(当前扩展节点编号 ):Integer。 Init List0。 pos1。 List[1].Situation初始状态。 Main Program While (pos0(有路可走 )) and ([未达到目标 ]) do Begin If pos=Max then (数据溢出 ,跳出主程序 )。 List[pos].WayNO:=List[pos].WayNo+1。 If (List[pos].WayNO=TotalExpendMethod) then (如果还有没用过的扩展规则 ) Begin 16 If (可以使用当前扩展规则 ) then Begin (用第 way 条规则扩展当前节点 ) List[pos+1].Situation:=ExpendNode(List[pos].Situation, List[pos].WayNO)。 List[pos+1].WayNO:=0。 pos:=pos+1。 EndIf。 EndIf Else Begin pos:=pos1。 EndElse EndWhile。 递归算法: Procedure BackTrack(Situation:TSituation。 deepth:Integer)。 Var I :Integer。 Begin If deepthMax then (空间达到极限 ,跳出本过程 )。 If Situation=Target then (找到目标 )。 For I:=1 to TotalExpendMethod do Begin BackTrack(ExpendNode(Situation,I),deepth+1)。 EndFor。 End。 回溯算法对空间的消耗较少,当其与分枝定界法一起使用时,对于所求解在解答树中层次较深的问题有较好的效果。 如八皇后问题: 问题描述: 求出在一个 nn的棋盘上,放置 n个不能互相捕捉的 “皇后 ”的所有布局。 算法分析 : 这是来源于国际象棋的一个问题。 皇后可以前、后、左、右和沿着对角线方向相互捕捉。 一个合适的解应是在每列、每行确实有一个皇后,且在一条对角线上最多只有一个皇后。 在写程序之前,设定表示棋盘的数据结构是一个 n n 数组。 每一个位置代表棋盘上的一个方格。 然而考虑到一个合理的解中每列、每行只能放置一个皇后,棋盘也可用一个一维数组来表示。 数组的每一个元素代表棋盘的一列,该元素的值是皇后在该列上的行位置。 为找到一个解,必须从空布局开始,每放置一个皇后要检查布局是否合理。 在合理的情况下,试探找下一个皇后的位置;如果布局不合理,就改变布局。 重复检查、试探或检查、改变位置,直到找到最后一个皇后的合理位置 ,这时就找到一个合理的布局。 重复以上过程直到无法再改变皇后位置为止,就可找到所有合理的布局。 PASCAL 的源程序为: program j。 const n=8。 var x:array [1..100] of integer。 cont:integer。 17 procedure print。 var i:integer。 begin cont:=cont+1。 for i:=1 to n do write(x[i])。 writeln(39。 S:39。 ,cont)。 end。 function try(i,k:integer):boolean。 var j:integer。 begin j:=1。 while jk do begin if(x[j]=i)or(abs(x[j]i)=abs(jk)) then begin try:=false。 exit end。 j:=j+1。 end。 try:=true。 end。 procedure place(k:integer)。 var i:integer。 begin if kn then print else for i:=1 to n do if try(i,k) then begin x[k]:=i。 place(k+1)。 end。pascal语言程序设计四步辅导法(编辑修改稿)
相关推荐
缘会出现不必要的杂边影响整体,这里我提供一个方法或者说一个工具,渐隐智能锐化,效果过强了可以用消褪来处理。 下面介绍几种磨皮的方法: 高斯模糊、表面模糊为主磨皮法 磨皮主要针对皮肤,皮肤相对于脸部其他细节来说属于明亮处 ,脸部细节及轮廓属于暗处,为此我们只是需要模糊明亮处而不触及暗处来达到磨皮的目的,并且保护脸部纹理。 [3]所以对于我们来说,通道的灰色模式正好属于我们的要求。
行用户程序,刷新系统的输出;存储器 用来储存程序和数据。 ⑵ I/O 模块 输入( Input)模块和输出( Output)模块简称 I/O 模块它们是联系系统外部设备CPU 模块 输入模块 输出模块 输出 电源 电源 开关 可编程控制器 PLC全自动洗衣机控制系统毕业论文 8 和 CPU 模块的桥梁。 ⑶ 编程器 编程器用来生成用户程序,并用它进行编辑、检查、修改和监控用户程序的执行情况。
楼下呼 SB7 X017 厅内指示灯1 E1 Y017 二楼上呼 SB8 X020 厅内指示灯2 E2 Y020 二楼下呼 SB9 X021 厅内指示灯3 E3 Y021 三楼上呼 SB10 X022 厅内指示灯4 E4 Y022 三楼下呼 SB11 X023 厅内指示灯5 E5 Y023 四楼上呼 SB12 X024 上呼灯 1 E6 Y024 四楼下呼 SB13 X025 上呼灯2 E7
, 含硫化合物的结构也越来越复杂 [ 5]。 沈阳化工大学学士学位论文 文献综述 4 常见油品脱硫工艺技术 长期以来 , 炼油工业一般采用碱洗的办法来脱除油品中的硫化物 , 这一方法较为简单 , 但尚存在诸多问题 , 如环境污染严重 , 脱硫效率低。 通过碱洗 , 可以除去油品中的绝大部分硫化物 , 但却产生大量的含硫废水 , 如不加以妥善处理 , 对环境的危害相当严重。 此外 ,
:输出允 许端,高电平有效。 该端为高电平时,打开三态输出缓冲器,输出转换结果。 UREF(+)和 UREF():参考电压正端和负端。 应用说明: ADC0809 可直接与微机系统相连接。 图 C 如图 C 所示的 ADC0809 的应用电路 , 它主要 用于外部模拟电压的采集。 ADC0809 为八位 8 路 A/D 转换芯片。 由 W78E51 的 、 控制 ADC0809 的选通。
站。 6.发射天线及发射塔高选择 发射天线及发射塔高选择,应以满足最大传 输距离为依据,不宜太高,否则会造成对邻近地区的干扰。 铁塔高,馈线也长,损耗也增大,有效发射功率降低。 另外,在满足第一菲涅尔半径之后继续增加天线高度,不仅不会提高接收场强,改善接收效果,反而增大近区的盲区。 MMDS 宽带发射系统 .6 . MMDS 单频道发射系统 7.提出同频干扰的解决措施 与邻区有否同频干扰问题