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