亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Scratch做個(gè)計(jì)算器

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

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

        1. 素材準(zhǔn)備

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

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

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

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

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

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

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

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

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

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

        在程序開(kāi)始時(shí)需要對(duì)這些變量賦值。

        無(wú)論前數(shù)X、后數(shù)Y還是答案初始值都不能是0,因?yàn)檩斎氲臄?shù)字和結(jié)果可能就是0。為了給程序判定這些值處于初始狀態(tài),我們給它們一個(gè)英文作為初始值,就用電腦報(bào)的簡(jiǎn)稱(chēng)“cpcw”吧,其實(shí)任意英文都可以。

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

        這些初始值在清除鍵C上編程設(shè)置,因?yàn)槌绦蜷_(kāi)始和計(jì)算完按C鍵重置時(shí)都需要這樣初始化,所以同樣的語(yǔ)句在點(diǎn)擊綠旗和點(diǎn)擊角色時(shí)都需要執(zhí)行一次(如圖5)。

        這里我們?yōu)樽兞抠x值為空是一個(gè)重要的知識(shí)點(diǎn),請(qǐng)注意體會(huì)。

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

        以數(shù)字鍵1為例,為0到9的數(shù)字鍵編程。完全編寫(xiě)好1之后,直接拖動(dòng)代碼塊到另外的角色上(這個(gè)角色會(huì)抖動(dòng))放開(kāi)就可以復(fù)制代碼到同類(lèi)角色上了。

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

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

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

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

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

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

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

        8. 運(yùn)算符角色編程

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

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

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

        9. 等號(hào)編程

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

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

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

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

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

        其他運(yùn)算方式以此類(lèi)推。

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

        回顧我編寫(xiě)這個(gè)計(jì)算器的過(guò)程,更多的精力花在了處理各種不按套路輸入引發(fā)的各種錯(cuò)誤,俗稱(chēng)的找Bug上面了。

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

        然后開(kāi)始各種胡亂點(diǎn)擊測(cè)試異常,并解決測(cè)試過(guò)程中遇到的Bug?;靖暮弥蟛艔?fù)制代碼給其他數(shù)字和符號(hào),開(kāi)始下一輪測(cè)試。

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

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

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

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

        1AoWxsbkb22eP5STc91SYRg

        提取碼:p30l

        猜你喜歡
        運(yùn)算符賦值運(yùn)算
        關(guān)于1 1/2 … 1/n的一類(lèi)初等對(duì)稱(chēng)函數(shù)的2-adic賦值
        L-代數(shù)上的賦值
        重視運(yùn)算與推理,解決數(shù)列求和題
        老祖?zhèn)魇诨具\(yùn)算符
        有趣的運(yùn)算
        強(qiáng)賦值幺半群上的加權(quán)Mealy機(jī)與加權(quán)Moore機(jī)的關(guān)系*
        “整式的乘法與因式分解”知識(shí)歸納
        撥云去“誤”學(xué)乘除運(yùn)算
        利用賦值法解決抽象函數(shù)相關(guān)問(wèn)題オ
        C++運(yùn)算符重載剖析
        亚洲av手机在线一区| 中文字幕人妻熟女人妻洋洋| 中国一 片免费观看| 2021国内精品久久久久精免费| 亚洲一区二区三区av色婷婷| 成人自拍小视频在线看| 乱中年女人伦av三区| 久久99精品久久久久久hb无码| 亚洲欧美日韩高清一区二区三区| 中文字幕亚洲视频三区| 久久国产精品一区二区三区| 末发育娇小性色xxxx| 欧美成人激情在线| 亚洲av色香蕉一区二区三区蜜桃| 久久精品亚洲熟女av麻豆| 内射人妻视频国内| 这里有精品可以观看| 无码 免费 国产在线观看91| 一区二区视频在线国产| 天天碰免费上传视频| 天堂网www在线资源| 国产网友自拍亚洲av| 亚洲国产中文字幕精品| 无码中文字幕免费一区二区三区| 欧美激情αv一区二区三区| 免费观看在线视频一区| 97精品一区二区三区| 人妻少妇边接电话边娇喘| 久久综合另类激情人妖| 成人午夜福利视频后入| 国内精品久久久久久久久齐齐| 国产精品亚洲精品日产久久久| 亚洲伊人av天堂有码在线| 曰韩亚洲av人人夜夜澡人人爽| 国产精品一区二区在线观看99| 国产大学生自拍三级视频| 91超精品碰国产在线观看| 国产情侣久久久久aⅴ免费| 日韩精品久久久中文字幕人妻| 蜜臀av一区二区三区| 日韩精品久久无码中文字幕 |