• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      Scratch做個計算器

      2020-06-30 01:00:03
      電腦報 2020年21期
      關(guān)鍵詞:運算符賦值運算

      計算器大家都用過,今天我們用Scratch編寫一個計算器程序。它可以計算兩個數(shù)之間的加減乘除運算,還有清除鍵C。點擊所有按鈕有音效,當(dāng)輸入錯誤時還有錯誤音效提示(如圖1)。

      1. 素材準(zhǔn)備

      為了方便,數(shù)字按鈕0~9和清除鍵C我們使用Scratch內(nèi)置的數(shù)字和字母角色。運算符號是在Scratch里手工繪制的。這個程序只完成了計算器的最基本功能,沒有考慮美化工作,為了美觀可以導(dǎo)入更好看的按鈕角色。

      2. 算法分析及設(shè)置變量

      程序中需要的變量是根據(jù)算法需求來設(shè)置的。我們在編寫程序前需要分析算法,同時確定必要的變量,在程序編寫過程中如果發(fā)現(xiàn)需要添加臨時變量時再臨時添加。

      我們從1+2=3這個基礎(chǔ)算式開始分析,這個算式中除了等號外的每個塊實際計算時都可能發(fā)生變化,所以都需要一個單獨變量存儲,這就確定了主要變量有:“X、Y、運算符、答”。(如圖2)。

      3. 觀察程序運行圖(如圖1),運算過程和結(jié)果的顯示是通過大字顯示的變量實現(xiàn)的,需要一個“顯示信息”變量,作為計算器的顯示屏。這個變量需要勾選顯示,并在舞臺中右鍵設(shè)置為大字顯示(如圖3)。

      4. 分析正常運算時的操作步驟,先輸入前數(shù)X,再輸入運算符,接著輸入后數(shù)Y,點等號計算結(jié)果。

      那么怎樣判斷輸入的數(shù)字是需要存入前數(shù)X還是后數(shù)Y呢,這就需要一個記錄是否已經(jīng)輸入運算符的變量“判斷前后數(shù)字”,變量在程序開始時為0,當(dāng)點擊某個“運算符號”角色時,將這個變量設(shè)為1。之后輸入的任意數(shù)字就存入Y直到點擊“等于”角色(如圖4)。

      5. 在測試程序時我發(fā)現(xiàn)有個Bug。當(dāng)點擊“等于”計算出結(jié)果后,再點擊數(shù)字會在結(jié)果后繼續(xù)輸入數(shù)字。

      為了解決這個問題,我額外添加了一個變量,用來判斷是否已經(jīng)點過“等號”了。這個變量是“等待清除指示”,初始化時設(shè)為0,點擊“等號”后設(shè)為1。然后除了復(fù)位鍵C和等號外的所有角色再添加一層判斷,如果“等待清除指示=0”那么開始正常執(zhí)行,否則意味著已經(jīng)有計算結(jié)果無需執(zhí)行并播放報錯音。

      6. 程序初始化和復(fù)位鍵C

      在程序開始時需要對這些變量賦值。

      無論前數(shù)X、后數(shù)Y還是答案初始值都不能是0,因為輸入的數(shù)字和結(jié)果可能就是0。為了給程序判定這些值處于初始狀態(tài),我們給它們一個英文作為初始值,就用電腦報的簡稱“cpcw”吧,其實任意英文都可以。

      “顯示信息”初始時應(yīng)該什么都不顯示,所以刪除其中的數(shù)字設(shè)定為“空”。

      這些初始值在清除鍵C上編程設(shè)置,因為程序開始和計算完按C鍵重置時都需要這樣初始化,所以同樣的語句在點擊綠旗和點擊角色時都需要執(zhí)行一次(如圖5)。

      這里我們?yōu)樽兞抠x值為空是一個重要的知識點,請注意體會。

      7. 數(shù)字角色編程

      以數(shù)字鍵1為例,為0到9的數(shù)字鍵編程。完全編寫好1之后,直接拖動代碼塊到另外的角色上(這個角色會抖動)放開就可以復(fù)制代碼到同類角色上了。

      點擊數(shù)字1時,需要將數(shù)字1顯示出來并根據(jù)當(dāng)前情況將數(shù)值1賦值給前數(shù)X或后數(shù)Y。

      如果“判斷前后數(shù)字=0”成立,說明還沒有輸入過運算符,現(xiàn)在點擊的數(shù)字都需要賦值給前數(shù)X。在賦值給前數(shù)X時,判斷“X=cpcw”是否成立,成立說明X還是第一次賦值,需要先給X賦值為“空”。如果X里已經(jīng)有數(shù)值,需要將1添加到X的末位。并顯示X(如圖6)。

      否則賦值給后數(shù)Y(如圖7)。

      在完成基礎(chǔ)功能后,外層再添加條件判斷“等待清除指示=0”,等于0說明沒有點擊過等號可以執(zhí)行,否則停止執(zhí)行并播放錯誤提示音E Elec Bsaa。避免計算出結(jié)果后還可以輸入數(shù)字的Bug(如圖8)。

      提示音需要在聲音中找E Elec Bsaa并添加。拖放操作可以復(fù)制給其他需要用到這個錯誤提示音的角色。

      由于需要判斷的情況很多,在實際編寫過程中代碼是在完成基礎(chǔ)賦值和顯示功能后不斷完善的,所以后續(xù)的情況判斷就一層層包裹在核心功能之外了??雌饋斫Y(jié)構(gòu)比較復(fù)雜,可以拆開一部分一部分的理解。

      將1的代碼塊通過拖放操作復(fù)制給其他數(shù)字角色,修改圖7中標(biāo)紅圈的3個位置為相應(yīng)數(shù)字即可。這三處表示賦值給X、Y和顯示信息末位。

      8. 運算符角色編程

      當(dāng)點擊運算符號后,把“判斷前后數(shù)字”賦值為1,表示已經(jīng)輸入了運算符號,這樣以后再按數(shù)字會把數(shù)值賦給后數(shù)Y。

      根據(jù)點擊符號不同,為變量“運算符”賦值“+、-、×、÷”。

      以加號為例,運算符號總是在后數(shù)Y之前輸入,所以判斷當(dāng)“Y=cpcw”也就是后數(shù)Y還沒有輸入的情況下,修改顯示信息的值為“連接‘顯示信息和‘+”。否則后數(shù)已經(jīng)輸入播放錯誤提示音(如圖9)。

      9. 等號編程

      點擊等號后,將“等待清除指示”設(shè)為1,表示已經(jīng)執(zhí)行過運算了,不能再繼續(xù)輸入數(shù)字了。

      判斷如果“答=cpcw”表示,變量“答”處于初始狀態(tài)。可以進行后續(xù)計算,根據(jù)不同的運算符號判斷執(zhí)行相應(yīng)的運算過程。否則發(fā)出錯誤提示音。

      以加法為例,點擊等號后,根據(jù)“運算符=+”判定需要進行加法運算,將“答”設(shè)為“X+Y”的結(jié)果。

      將“顯示信息”設(shè)為“‘顯示信息和‘=”,把等號加入顯示屏。

      將“顯示信息”設(shè)為“‘顯示信息和‘答”,把加法計算結(jié)果加入顯示屏。

      其他運算方式以此類推。

      10. 測試和優(yōu)化

      回顧我編寫這個計算器的過程,更多的精力花在了處理各種不按套路輸入引發(fā)的各種錯誤,俗稱的找Bug上面了。

      我先編寫了數(shù)字1和加號和等號加法的部分,很快就實現(xiàn)了1+1=2的基本計算和正常顯示。

      然后開始各種胡亂點擊測試異常,并解決測試過程中遇到的Bug。基本改好之后才復(fù)制代碼給其他數(shù)字和符號,開始下一輪測試。

      比如沒有輸入前數(shù)X就可以輸入加號或已經(jīng)輸入后數(shù)Y之后還可以繼續(xù)點加號,導(dǎo)致計算結(jié)果錯誤。解決辦法就是添加“X=cpcw不成立”且“運算符=0”的判斷,表示已經(jīng)輸入了X且沒有輸入運算符。添加“Y=cpcw”的判斷,表示后數(shù)Y還沒有輸入。只有這些條件都成立時,才允許輸入運算符號。

      又比如在計算出結(jié)果后還可以輸入數(shù)字的Bug。解決辦法就是加入了一個新的變量“等待清除指示”記錄是否已經(jīng)點擊過等號。這個解決辦法引入了新的變量,是不是還可以在不引入新變量的基礎(chǔ)上更巧妙地解決還需要更多的思考。

      雖然表面上只是程序中的一條判斷或一個輔助變量,但那背后都是為了解決Bug掉的頭發(fā)啊,我禿了也變強了。

      鏈接:https://pan.baidu.com/s/

      1AoWxsbkb22eP5STc91SYRg

      提取碼:p30l

      猜你喜歡
      運算符賦值運算
      關(guān)于1 1/2 … 1/n的一類初等對稱函數(shù)的2-adic賦值
      L-代數(shù)上的賦值
      重視運算與推理,解決數(shù)列求和題
      老祖?zhèn)魇诨具\算符
      有趣的運算
      強賦值幺半群上的加權(quán)Mealy機與加權(quán)Moore機的關(guān)系*
      “整式的乘法與因式分解”知識歸納
      撥云去“誤”學(xué)乘除運算
      利用賦值法解決抽象函數(shù)相關(guān)問題オ
      C++運算符重載剖析
      價值工程(2014年17期)2014-04-16 03:29:20
      星子县| 霍城县| 拉萨市| 姜堰市| 长垣县| 临夏县| 西和县| 南昌市| 钟山县| 石台县| 石首市| 茂名市| 宣汉县| 湘阴县| 莱芜市| 望江县| 射阳县| 清流县| 安达市| 阳泉市| 资源县| 通河县| 梨树县| 平利县| 全州县| 太原市| 沙湾县| 安徽省| 南投县| 十堰市| 东辽县| 濮阳县| 康马县| 克山县| 昂仁县| 大田县| 英吉沙县| 莱西市| 宜宾县| 奎屯市| 通州区|