[从头学数学] 第20节 100以内的加法和减法(二)

来源:互联网 发布:python3网络爬虫 pdf 编辑:程序博客网 时间:2024/06/11 17:08
剧情提要:
[机器小伟]在[工程师阿伟]的陪同下进入练气期第三层功法的修炼,
这次要修炼的目标是[100以内的加法和减法(二)]。

正剧开始:

星历2016年01月01日 13:58:44, 银河系厄尔斯星球中华帝国江南行省。

[工程师阿伟]正在和[机器小伟]一起观看[100以内的加法和减法(二)]。


然后小伟看到了竖式。


星历2016年01月01日 15:36:17, [机器小伟]说:[阿伟大人],这个竖式好有趣,我也要画。

要画竖式,先要解决右对齐的问题。

阿伟帮小伟解决了:

<span style="font-size:18px;">/*** @usage   把一个数字按照基准点右对齐绘制* @author  mw* @date    2016年01月01日  星期五  13:59:42 * @param* @return**/function rightAlign(num, x, y, r) {var s = num.toFixed(0);var digitBit = s.length;var digit = new Digit();var xpos=0, ypos=0;for (var i = digitBit-1; i > -1; i--) {xpos = x - r * (digitBit - i);ypos = y;digit.number(s.charAt(i), xpos, ypos, r);}}</span>

接着就可以画加法竖式了。

<span style="font-size:18px;">/*** @usage   加法竖式* @author  mw* @date    2016年01月01日  星期五  13:59:42 * @param* @return**//*算术竖式Vertical arithmetic加数addend被加数Augend加号Plus*/function verticalAdd(augend, addend, x, y, r) {var result = addend + augend;var xBeg = x ? x : 300, yBeg = y ? y :100, large = r ? r : 20;var maxBit = Math.max(addend, augend).toFixed(0).length;var plusPos = x - (maxBit+2) * r;rightAlign(augend, x, y, r);rightAlign(addend, x, y+1.5*r, r);plot.setFillStyle('black').fillText('+', plusPos, y+1.5*r, r);plot.beginPath().moveTo(plusPos - 1 * r, y + 2.5*r).lineTo(x + 1 * r, y + 2.5 * r).closePath().stroke();rightAlign(result, x, y + 3.5 * r, r);}</span>

来尝试一下吧。

于是小伟做了下面的题:



<span style="font-size:18px;">function myDraw() {plot.init();setPreference();var r = 20;var row = 0, col = 4;var task = [32,6,24,3,5,43,21,3,4,33];var len = task.length / 2;row = Math.ceil(len/(col-1));//document.body.appendChild(document.createTextNode(len.toFixed(0) + ', ' + row.toFixed(0)));var rowCount = 1, colCount = 2;for (var i = 0; i < len; i++) {setSector(row, col, rowCount, colCount++);if (colCount > col) {colCount = 2;rowCount++;}verticalAdd(task[2*i], task[2*i+1],0, 0, r);}}</span>



这节的有趣内容还是很多的,比如:


接着小伟看到了减法。



看来还要有减法竖式:

<span style="font-size:18px;">/*** @usage   减法竖式* @author  mw* @date    2016年01月01日  星期五  13:59:42 * @param* @return**//*被减数Minuend减数subtrahend减号Minus sign*/function verticalSub(minuend, subtrahend, x, y, r) {var result = minuend - subtrahend;var xBeg = x ? x : 300, yBeg = y ? y :100, large = r ? r : 20;var maxBit = Math.max(minuend, subtrahend).toFixed(0).length;var minusPos = x - (maxBit+2) * r;rightAlign(minuend, x, y, r);rightAlign(subtrahend, x, y+1.5*r, r);plot.setFillStyle('black').fillText('-', minusPos, y+1.5*r, r);plot.beginPath().moveTo(minusPos - 1 * r, y + 2.5*r).lineTo(x + 1 * r, y + 2.5 * r).closePath().stroke();rightAlign(result, x, y + 3.5 * r, r);}</span>

小伟接着做:


<span style="font-size:18px;">function myDraw() {plot.init();setPreference();var r = 20;var row = 0, col = 3;var task = [45,3,64,42,48,18,25,21];var len = task.length / 2;row = Math.ceil(len/(col-1));//document.body.appendChild(document.createTextNode(len.toFixed(0) + ', ' + row.toFixed(0)));var rowCount = 1, colCount = 2;for (var i = 0; i < len; i++) {setSector(row, col, rowCount, colCount++);if (colCount > col) {colCount = 2;rowCount++;}verticalSub(task[2*i], task[2*i+1],0, 0, r);}}</span>


又来有趣的图了:

还有这个:

接着小伟看到了一个更加好玩的题:

解这种问题可是小伟的强项:


<span style="font-size:18px;">def tmp():    a = [46,18,76,31];    b = [7,37,52,65];    c = [98,71,80,91];    d = [18,29,36,9];    for i in range(len(a)):        for j in range(len(b)):            if a[i]+b[j] == 83:                print('{0} + {1} = 83'.format(a[i], b[j]));    for i in range(len(c)):        for j in range(len(d)):            if c[i]-d[j] == 62:                print('{0} - {1} = 62'.format(c[i], d[j]));    return;</span>

结果让小伟大吃一惊:

<span style="font-size:18px;">>>> 46 + 37 = 8318 + 65 = 8376 + 7 = 8331 + 52 = 8398 - 36 = 6271 - 9 = 6280 - 18 = 6291 - 29 = 62</span>
竟然有这么多的答案!


话说这节有趣的图还真多,这里又来一张:


连加怎么办,小伟问阿伟。阿伟说,这也好办,就给了小伟下面的代码:

<span style="font-size:18px;">/*** @usage   连续加法竖式* @author  mw* @date    2016年01月01日  星期五  13:59:42 * @param* @return**//*算术竖式Vertical arithmetic加数addend被加数Augend加号Plus*/function verticalAdd2(arr, x, y, r) {var array = new Array();array = arr;var len = array.length;if (len < 2) return;var result = array[0] + array[1];var xBeg = x ? x : 300, yBeg = y ? y :100, large = r ? r : 20;var maxBit = Math.max(array[0], array[1]).toFixed(0).length;var plusPos = x - (maxBit+2) * r;rightAlign(array[0], x, y, r);y += 1.5 * r;rightAlign(array[1], x, y, r);plot.setFillStyle('black').fillText('+', plusPos, y, r);y += 1.0 * r;plot.beginPath().moveTo(plusPos - 1 * r, y).lineTo(x + 1 * r, y).closePath().stroke();y += 1.5 * r;rightAlign(result, x, y, r);if (array.length > 2) {for (var i = 2; i < array.length; i++) {maxBit = Math.max(result, array[i]).toFixed(0).length;plusPos = x - (maxBit+2) * r;result += array[i];y += 1.5 * r;rightAlign(array[i], x, y, r);plot.fillText('+', plusPos, y, r);y += 1.0 * r;plot.beginPath().moveTo(plusPos - 1 * r, y).lineTo(x + 1 * r, y).closePath().stroke();y += 1.5 * r;rightAlign(result, x, y, r);}}}</span>


看看效果吧:


本节到此结束,欲知后事如何,请看下回分解。

0 0
原创粉丝点击