陳新龍
西漢的數(shù)學(xué)著作《周髀算經(jīng)》中記載,周公問商高:“天不可階而升,地不可將盡寸而度?!碧斓母叨群痛蟮氐拿娣e該怎樣測(cè)得?商高說:“故折矩以為勾廣三,股修四,經(jīng)隅五?!惫艜r(shí)候人們把手臂的上半部分稱為“勾”,下半部分稱為“股”。商高的意思是:當(dāng)直角三角形的兩條直角邊分別為3(短邊)和4(長(zhǎng)邊)時(shí),徑隅(就是弦)則為5。這就是我們常說的“勾三股四弦五”,也就是勾股定理。
勾股定理:直角三角形的兩條直角邊a和b的平方之和等于斜邊c的平方(a2+b2=c2),前提是滿足三角形的定義(任意兩邊之和大于第三邊),符合勾股定理的數(shù)字就是勾股數(shù),勾股數(shù)又叫做畢氏三元數(shù)。比如勾股數(shù)32+42=52或者62+82=102。
那么如何才能計(jì)算出邊長(zhǎng)在100以內(nèi)所有的勾股數(shù)呢?如果我們單純地用筆紙計(jì)算,顯然不太合理,而且計(jì)算量太大,我們不妨試試Scratch,用編程的方法輸出這些勾股數(shù)。
首先各條邊長(zhǎng)不能超過100,并且三條邊中的兩條邊長(zhǎng)的平方之和等于第三條邊長(zhǎng)的平方。其次任意兩條邊之和大于第三條邊,這樣才可以避免產(chǎn)生重復(fù)的數(shù)字,比如3 4 5符合而5 4 3這個(gè)重復(fù)項(xiàng)就可以排除。這里我們定義三個(gè)變量a、b、c,并對(duì)應(yīng)3個(gè)列表存儲(chǔ)答案。
看到勾股數(shù)程序的第一眼,聰明的同學(xué)可能馬上會(huì)想到是不是和百元買百雞的代碼有點(diǎn)相似,沒錯(cuò)兩個(gè)程序確實(shí)都運(yùn)用了循環(huán)嵌套的方式進(jìn)行。但是勾股數(shù)程序還是有自己的特點(diǎn)的,為了提高程序執(zhí)行的效率,起始數(shù)值設(shè)置a=3,然后一層一層嵌套,分別將b設(shè)置為a+1,c設(shè)置為b+1。為什么要這樣設(shè)置呢?首先這樣可以避免產(chǎn)生重復(fù)的解,并且在程序循環(huán)判斷的過程中,減少計(jì)算量。當(dāng)我們篩選符合兩條邊的平方之和等于第三條邊平方條件的解之后,存儲(chǔ)在對(duì)應(yīng)的三個(gè)列表中,列表中的元素是一行行對(duì)應(yīng)的。在每次循環(huán)結(jié)束后,不要忘記執(zhí)行的變量加1。
讓我們一起來看看效果吧:
100以內(nèi)一共有52條記錄,大家可以挑選出幾個(gè)數(shù)字進(jìn)行平方求和看看結(jié)果是否正確。計(jì)算勾股數(shù)的難度屬于中等,重點(diǎn)還是循環(huán)嵌套。大家可以自己動(dòng)手挑戰(zhàn)一下。
ASCII碼是基于電腦編碼系統(tǒng)的一種語言,是最通用的信息交換標(biāo)準(zhǔn)。在計(jì)算機(jī)中,所有的數(shù)據(jù)在存儲(chǔ)和運(yùn)算中都要使用二進(jìn)制表示(0和1)。約定具體用哪些二進(jìn)制數(shù)字表示像A、B、C這52個(gè)字母(包括大小寫),叫編碼規(guī)則。每個(gè)人雖然可以定一套自己的標(biāo)準(zhǔn),但如果要想互相通信而不造成混亂,那么大家就必須使用相同的編碼規(guī)則,于是美國(guó)有關(guān)的標(biāo)準(zhǔn)化組織就出臺(tái)了ASCII編碼,統(tǒng)一規(guī)定了常用符號(hào)用哪些二進(jìn)制數(shù)來表示。
ASCII碼使用7位或8位二進(jìn)制數(shù)組合來表示128或256種可能的字符。標(biāo)準(zhǔn)ASCII碼也叫基礎(chǔ)ASCII碼,使用7位二進(jìn)制數(shù)(剩下的1位二進(jìn)制為0)來表示所有的大寫和小寫字母、數(shù)字、標(biāo)點(diǎn)符號(hào)或者控制字符。
今天就和大家一起學(xué)習(xí)ASCII碼和字符之間相互轉(zhuǎn)換的知識(shí)。
很多編程語言都是自帶了ASCII碼和字符之間的轉(zhuǎn)換函數(shù),只需要調(diào)用就可以實(shí)現(xiàn),先來看看Python字符轉(zhuǎn)ASCII碼,我們輸入一個(gè)字符A,然后調(diào)用Python中的ord()函數(shù)就可以實(shí)現(xiàn)將字符轉(zhuǎn)化為ASCII碼65了。
反過來用ASCII碼轉(zhuǎn)換為字符可以用chr()函數(shù),把ASCII碼65轉(zhuǎn)換為A。
當(dāng)然不同的程序所對(duì)應(yīng)的轉(zhuǎn)換函數(shù)也是不一樣的。
對(duì)比Python和VB我們可以發(fā)現(xiàn)ASCII碼轉(zhuǎn)換為字符都是使用了chr( )函數(shù),但是將字符轉(zhuǎn)化為ASCII碼VB里則是ASC函數(shù),所以對(duì)于不同的編程語言我們需要查詢正確的語法后才能使用哦。
學(xué)會(huì)了ASCII碼與字符相互之間的轉(zhuǎn)換我們可以做些什么呢?最簡(jiǎn)單的就是將我們所需要的數(shù)據(jù)進(jìn)行“加密”了,就像愷撒密碼那樣,明文可以是65,密文可以變成B(先將數(shù)值65轉(zhuǎn)換為ASCII碼,再將ASCII碼往后面移動(dòng)一位)。大家可以嘗試著編寫看看,還是蠻有意思的。
今天我們要開啟學(xué)習(xí)VB的新篇章了,VB求解一元二次方程。
只含有一個(gè)未知數(shù)(一元),并且未知數(shù)項(xiàng)的最高次數(shù)是2(二次)的整式方程叫做一元二次方程。一元二次方程經(jīng)過整理都可化成一般形式ax2+bx+c=0(a≠0)。其中ax2稱作二次項(xiàng),a是二次項(xiàng)系數(shù);bx稱作一次項(xiàng),b是一次項(xiàng)系數(shù);c稱作常數(shù)項(xiàng)。
一元二次方程必須滿足三個(gè)條件:
1.方程必須是整式方程,即等號(hào)兩邊都是整式,方程中如果有分母;且未知數(shù)在分母上,那么這個(gè)方程就是分式方程,不是一元二次方程;方程中如果有根號(hào),且未知數(shù)在根號(hào)內(nèi),那么這個(gè)方程也不是一元二次方程(是無理方程)。
2.方程中必須只有一個(gè)未知數(shù)X。
3.未知數(shù)項(xiàng)的最高次數(shù)是2,否則就不是一元二次方程了。
如何求解一元二次方程呢?根據(jù)不同的題目,解法也有不同,比如說配方法(如圖1)、兩根式(如圖2)。
配方法
兩根式
不過配方法和兩根式都有一定的適應(yīng)性,只能求解部分特殊情況。我們還有一個(gè)萬能的公式法,用公式法可以求解任意一元二次方程的答案哦(如圖3)。
公式法
我們當(dāng)然選用公式法來編寫一個(gè)VB的一元二次解方程小程序,這樣解方程的時(shí)候就可以適應(yīng)各種情況了(如圖4)。
我們首先確定一元二次方程ax2
+bx+c的三個(gè)系數(shù),分別是a、b、c,將這三個(gè)變量定義成單精度,將方程的解X1和X2定義成雙精度,然后帶入公式法進(jìn)行計(jì)算。在方程中特意加了一個(gè)判別式T,也是非常重要,判別式可以判斷方程根的一些情況,告訴我們方程大致的結(jié)果,判別式分為三種情況
1. 當(dāng)時(shí),方程有兩個(gè)不相同的實(shí)數(shù)根
2. 當(dāng)時(shí),方程有兩個(gè)相同的實(shí)數(shù)根(也就是一個(gè)實(shí)數(shù)根)
3. 當(dāng)時(shí),方程沒有實(shí)數(shù)根
當(dāng)用戶正確輸入變量a、b、c后,點(diǎn)擊計(jì)算,會(huì)彈出對(duì)話框,顯示存在幾個(gè)實(shí)數(shù)根,點(diǎn)擊輸出將方程的解輸出在text4和text5當(dāng)中。比如圖4中要求1x2+4x+3=0的值,點(diǎn)擊計(jì)算可以得出答案為-1和-3(存在兩個(gè)不相同的實(shí)數(shù)根)。
下面請(qǐng)您思考一個(gè)問題,如果a為0時(shí),一元二次方程就會(huì)變成一元一次的方程了。你分析這個(gè)程序還能計(jì)算出正確的答案嗎?這是為什么呢?大家可以掃碼下載程序自己動(dòng)手試一試,相信聰明的你一定會(huì)有所收獲的。