Flash 板


LINE

最近教學教到比與比值 但是學生對於比化成最簡單整數比很不熟練 想說要設計程式讓電腦出題並且幫我改答案 可是出現一個問題.... 首先我先自定一個函數是找出兩個整數的最大公因數如下 function gcd(int1,int2) { a=Math.max(int1,int2); b=Math.min(int1,int2); while(a%b!=0){ c=a-Math.floor(a/b)*b; a=b; b=c; } return b; } 這裡我並沒有特別限制int1和int2要整數(要整數才可以找最大公因數) 但是因為是自己要用的 所以自己注意一下就好了 接著我想要電腦亂數幫我取兩個數 然後產生出類似0.3:0.21這樣的題目 所以我先取 t1=random(31)+1; t2=random(31)+1; s1=t1/gcd(t1,t2); s2=t2/gcd(t1,t2); 這裡產生出的s1和s2就是最原始的最簡單整數比,也就是答案 然後取一個倍數 multi=random(31)+1; q1=s1*multi; q2=s2*multi; 產生出題目q1和q2的原始整數值,也就是說最後學生要用multi這個數字約分 接著因為要變成小數,題目預計是"一位小數:兩位小數" 所以要先將q1除以10,q2除以100,然而此時答案的最簡單整數比應該會改變 所以再將s1和s2重新設定為q1*100和q2*100, 並產生新的答案ss1和ss2 q1=q1/10; q2=q2/100; s1=q1*100; s2=q2*100; ss1=s1/gcd(s1,s2); ss2=s2/gcd(s1,s2); 基本上在大多數的狀況下這樣的設計是沒問題的 可是我在進行測試的時候 會發生一些問題 我透過下列程式進行測試 ****開新檔案後 在影格一之中放入下列程式碼******************* ****並測試影片 數秒後關掉測試影片看看trace出來的東西************* stop(); //兩數的最大公因數函數 function gcd(int1,int2) { a=Math.max(int1,int2); b=Math.min(int1,int2); while(a%b!=0){ c=a-Math.floor(a/b)*b; a=b; b=c; } return b; } _root.onEnterFrame=function () { t1=random(31)+1; t2=random(31)+1; s1=t1/gcd(t1,t2); s2=t2/gcd(t1,t2); trace("1.原始最簡單整數比前項="+s1); trace("2.原始最簡單整數比後項="+s2); multi=random(31)+1; q1=s1*multi; q2=s2*multi; q1=q1/10; trace("3.原始小數題目前項="+q1); q2=q2/100; trace("4.原始小數題目後項="+q2); s1=q1*100; trace("5.新的最簡單整數比前項"+s1); s2=q2*100; trace("6.新的最簡單整數比後項"+s2); trace("7.用新的最簡單整數比求出最大公因數="+gcd(s1,s2)); ss1=s1/gcd(s1,s2); trace("8.本題最後的答案前項="+ss1); ss2=s2/gcd(s1,s2); trace("9.本題最後的答案後項="+ss2); trace(""); } **************************************** 結果會出現下列這樣子的狀況(當然也會有正常的狀況) 1.原始最簡單整數比前項=26 2.原始最簡單整數比後項=1 3.原始小數題目前項=67.6 4.原始小數題目後項=0.26 5.新的最簡單整數比前項6760 6.新的最簡單整數比後項26 7.用新的最簡單整數比求出最大公因數=9.09494701772928e-13 8.本題最後的答案前項=7.43269860376576e+15 9.本題最後的答案後項=28587302322176 天啊 最大公因數怎麼會出現這種東西呢?? 第七條的最大公因數是從6760和26求出來的 但是實際去做 6760和26的最大公因數是26才對啊 我覺得應該是輸入進gcd自定函數中的兩個變數有問題 因此我把gcd函數變成下列這樣子 function gcd(int1,int2) { //加了下列兩行程式碼 int1=Math.round(int1); int2=Math.round(int2); a=Math.max(int1,int2); b=Math.min(int1,int2); while(a%b!=0){ c=a-Math.floor(a/b)*b; a=b; b=c; } return b; } 結果就沒出現這樣的問題了 可是 即使我沒強制讓int1和int2是整數 原本輸入進去的數字也是整數啊 基本上若要沒有問題 好像只要將gcd的函數變成後面這個就可以了 可是 我還是很好奇,到底是哪個環節出錯了, 讓gcd最後判斷出來的最大公因數有問題... 不曉得有沒有人了解我的問題所在呢? 有人可以幫忙看看到底是哪裡出問題了嗎? 謝謝 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.141.15.61 ※ 編輯: jonathanmeow 來自: 220.141.15.61 (11/19 12:08)







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP