乘法和除法是在小學二年級的時候才學習的內容,但在愛凡,我們把它提公升到了啟蒙教育階段。對未知領域的探索和自我發現,是一件值得去關注和嘗試的事情。我們常感嘆鄰家的孩子優秀卓越,卻忽視他們付出的努力。探索絕不是拔苗助長,好高騖遠,而是腳踏實地,一點一滴地建立起屬於自己獨有的認知能力和學習體系。
在過去三周的課堂裡,我們多次提到演算法的概念。愛凡大講堂傳授數學知識,不僅僅為了能夠取得優異的成績,更希望孩子通過對數學的學習,熟練掌控計算機。而掌控計算機的一項核心要素,就是建立演算法。
那麼到底什麼是演算法?我們以3+5為例。
我們可以讓計算機來實現數數,3數三下,加5繼續數5下,最終得出結果8。我們把這個過程寫成計算機指令,並給這個指令起名叫做calc_for_add,然後給這個指令設定兩個引數分別為int_a和int_b。當我們碰到有加法需要的時候,呼叫這個指令:calc_for_add(int_a,int_b),計算機就會幫我們計算出結果,我們把這個指令稱為演算法。你在excel的單元格中輸入=3+5的時候,程式會自動計算出結果,而在word中則無法實現。因為在excel中程式預製了這個演算法,而在word中則沒有。
演算法不是一成不變的,它會不斷地根據碰到的情況不同被擴充套件或者改進。比如在上面的演算法中,當我們計算3+5的時候,程式需要執行8次計算。如果碰到32922+30292,那麼程式就需要執行6萬多次,碰到大量這樣的指令,計算機需要執行的工作量非常巨大,即費時間又耗電,因此演算法就需要被改進。就像在學習20以內加法的時候,我們會鼓勵孩子數手指進行探索,可是到了大數的加減法,再數手指就變得不切實際。
在不斷尋求解決辦法的過程中,程式設計師們發現乙個現象:所有的加法最終都可以被簡化成下面的算式求解。於是就事先在計算機中將下列的算式進行彙總成庫,待要用的時候直接從庫中獲取結果。
回到32922+30292,我們把兩個大數如下圖進行了拆分,分別放在對應的**裡,然後分別進行累加。當碰到2+2的時候,就直接到上面的表中去查詢,結果為4;當碰到2+9的時候,通過查表得到11;以此類推計算出結果為:6,2,11,11,4;由於每一格中只能有1個數字,我們就從右往左完成進製。這樣演算法就從上萬次的計算,精簡到了十幾次的運算,大大提公升了效率,我們把這個演算法命名為calc_for_add_new(int_a,int_b)。有了新的演算法,舊的演算法就可以廢棄不用了。就像我們學會了大數的加減法,就不會再用手指去進行數數。20以內的加法表已然清晰的存在於我們的潛意識中,隨來隨用。
可我們對數學的學習當然不會僅止於此,如果我們的題目變成2323+3233+434,計算機又該怎麼處理呢?沒錯,我們先使用演算法calc_for_add_new(2323,3233)得到結果5556。然後再呼叫演算法calc_for_add_new(5556,434)得到最終結果5990。
如果我們把演算法變成(4+5)+9*2 ,計算機又該如何處理呢?當然我們得為計算機編寫新的演算法,以更好地為人們工作。想想我們的孩子呢?他們不是也和計算機一樣,從懵懂,不斷遇到問題,不斷學習,調整,改進,最終慢慢變得強大起來。讓我們學著用計算機的思維去看看乘除法又是如何演變的。
古時候的人們發現每到冬天,食物的**成了問題,於是人們開始在春夏秋的時候定期進行儲備。假設總共6個小組,每組每月上交8頭獵物,等到冬天的時候統一分配。那麼每個月的上交數量就被記錄為8+8+8+8+8+8。但是你有沒有發現問題:如果小組越來越多,我們要記錄的算式就越來越長,於是聰明的人們想了乙個辦法用8×6簡潔地表示了6個小組上交8頭獵物。
雖然算式變得簡單了,但是計算的過程卻沒有變。如果我們把它交給計算機來完成8*6,依舊需要為它設計乙個演算法calc_for_multiplication(int_a,int_b)。下面是演算法的過程:
8+8=16;已統計組數2
16+8=24;已統計組數3
24+8=32;已統計組數4
32+8=40;已統計組數5
40+8=48;已統計組數6
統計完6組,最終結果為48
通過演算法,終於讓計算機和我們的孩子明白了乘法到底發生了什麼事情,也能夠通過加法的計算找到乘法的答案。然後冬天就來了,人們需要把食物拿出來分給族人。第一次拿出來的食物是48頭獵物,可是要分的族人卻有12組,那麼每組可以分到幾頭?這是乙個複雜的問題,但越是複雜,越需要讓我們的孩子去探索並嘗試找到答案。下面讓我們一起開啟excel,來尋找答案。
首先,我們把48頭獵物分別分給12個組每組一頭,於是剩下36頭
接著,我們把剩餘的36頭獵物繼續分給12個組每組一頭,剩下24頭
然後,我們把剩餘的24頭獵物繼續分給12個組每組一頭,剩下12頭
最後,我們把剩下的12頭平分給12個組,每組又得到一頭,全部分完
清點下每組手裡的獵物數量,就是每組分得的獵物,我們把這個過程叫做除法,表示為48÷12=4
把這個演算法交給計算機去完成,你會發現除法其實是減法的疊加。假設演算法為:calc_for_ division(int_a,int_b),那麼求解的過程為:
48-12=36;每組分到1個;剩餘36
36-12=24;每組分到2個,剩餘24
24-12=12;每組分到3個,剩餘12
12-12=0;每組分到4個,剩餘0
獵物分完,每組分到的結果是4
好了,教過了孩子簡單的乘法,嘗試讓他們算下:12×13吧。是的,你沒有看錯。
看到上面的圖了麼?我們做了神奇的拆分,把12×13的數量統計變成了4個小區域的累加,分別是10×10;2×10;3×10和2×3的和。請允許我換種方式來寫:
如果你可以簡單教下孩子50×40=5×4×10×10=2000,那麼你的孩子甚至可以挑戰54*48。這些原本看起來似乎沒法完成的挑戰,通過把它簡化,找到了讓啟蒙階段的孩子也能夠完成的可能。這就是我們在上一堂課中講到的把複雜的事情進行拆分簡化。
我們回到演算法:
在學習加減法的過程中,我們首先學習了圖形的方式計算20以內的加減法,有了這個基礎,所有的大數都可以拆解成20以內的加減法來進行,因此只要我們掌握20以內的加減法,大數的加減法就迎刃而解。
乘法也是一樣。有了大數加法的基礎,我們就可以算出10以內數字的乘法,而所有的大數乘法都可以被拆解成10以內數字的乘法,因此只要能夠掌握10以內數字的乘法,大數的乘法也就迎刃而解。
所以,讓你的孩子自己做一張乘法口訣表,然後背熟它。至於為什麼要背熟它就不用我解釋了。如果把它看作是計算機的演算法,將這張表儲存起來,等到要用的時候查表,那麼一切就變得簡潔高效。
很多聽過愛凡課堂的人都覺得愛凡的課程有些難度。的確,愛凡的課程不同於傳統教育,如果不花時間進行演算和推理,很難被很好地掌握。但是教育從來不是簡單的。
在那裡有座山,山上有我們未知的寶藏。愛凡傾向於把孩子叫到身邊,給他一定的裝備,告訴他一些經驗和技能,然後讓他去攀登。他總有收穫帶回來分享,做為下次啟程的經驗;
在那裡有片天,任你展翅翱翔。我們把孩子叫到身邊,告訴他飛行的技巧和可能遇見的阻礙,然後讓他去飛翔。也許無數次跌倒,但是總會一次比一次飛得高。每一次的折翅和受傷都是下一次更高的開始。
在那裡有一群人,他們攜手探索往前,去吧,和他們一起,相信你總能發現一些別人不曾看到的東西,和別人分享,吸收別人的長處,找到屬於自己的舞台。
愛凡不一定適合所有的孩子,但一定適合那些敢於挑戰自己的人。
乘除法指令
一 乘法指令 1 無符號乘法指令 mul 格式 mul src 功能 位元組乘法 隱含運算元為al ax al src 字乘法 隱含運算元為ax dx ax ax src 雙字乘法 以後再說 對標誌位的影響 如果高位為0,則of 0 cf 0 如果高位不為0,則of 1 cf 1 注 src 不能為...
移位乘除法
移位實現的乘除法比直接乘除的效率高很多。用移位實現乘除法運算 a a 4 b b 4 可以改為 a a 2 b b 2 說明 除2 右移1位 乘2 左移1位 除4 右移2位 乘4 左移2位 除8 右移3位 乘8 左移3位 通常如果需要乘以或除以2的n次方,都可以用移位的方法代替。大部分的c編譯器,用...
位運算乘除法
1 無符號除法 i.定點除法 對於n位dividend和divisor 1 擴充為2n 1位,但是擴充方向不一致,被除數是 000.nd 而除數是 divisor 000.2 如果dividend divisor,則dividend divisor quotient置 1 然後divisor向右移動...