Skrypt rozwiązuje zadania matematyczne z jedną niewiadomą [ x ], bazując na wynikach pełnych liczb, z jedną liczbą po przecinku oraz w formie typu 6/7 jeśli odpowiedź ma więcej niż jedną liczbę po przecinku.
Wersja On-line:
Podany skrypt wymaga dwóch plików źródłowych, jednego głównego, oraz pliku Rownanie.as .
Aby kod zadziała należycie należy posiadać na scenie głównej 2 pola dynamiczne o nazwie: wynik_txt oraz rownanie_txt, jedno pole wejściowe o instancji odpowiedz.txt. Do tego trzeba jeszcze dodać 3 przyciski o nazwach pokolei: sprawdz_btn, pokaz_btn oraz nastepne_btn.
Listing
/*
skrypt pobrany ze strony: http://Funkcje.net
*/
// Połączenie naszego pliku
import Rownanie;
// do wpisania sa tylko liczby, ukośniki oraz -
odpowiedz_txt.restrict = "0123456789/\\-";
var a:int;
var b:int;
var c:int;
var odpowiedz:Rownanie = new Rownanie();
/*
Funkcja noweRownanie() wybiera losowe liczby dla a, b oraz c
oraz formuje z nich równanie "ax + b = c" do rozwiązania.
*/
function noweRownanie():void {
var s:String;
a = Math.round(10*Math.random());
while (a<2) {
a = Math.round(10*Math.random());
}
b = 2 + Math.round(10*Math.random());
c = 5 + Math.round(10*Math.random());
s = String(a) + "x" + " + " + String(b) + " = " + String(c);
odpowiedz.ustawRownanie(c-b,a);
/*
Wstaw s do pola rownanie_txt oraz wyczysc stare odpowiedzi.
*/
rownanie_txt.text = s;
odpowiedz_txt.text = "";
wynik_txt.text = ""
}
function sprawdzOdpowiedz():void {
var f:Rownanie = new Rownanie(odpowiedz_txt.text);
if (odpowiedz_txt.text == "") {
wynik_txt.text = "WYPEŁNIJ POLE!";
} else {
if (f.maBlad()) {
wynik_txt.text = "BŁĄD!";
return;
}
if (f.jestRowne(odpowiedz)) {
wynik_txt.text = "POPRAWNIE!";
}
else {
wynik_txt.text = "ŹLE!";
}
}
}
sprawdz_btn.addEventListener(MouseEvent.CLICK, pokazWynik);
function pokazWynik(mevt:MouseEvent):void {
sprawdzOdpowiedz();
}
nastepne_btn.addEventListener(MouseEvent.CLICK, pokazNastepne);
function pokazNastepne(mevt:MouseEvent):void {
noweRownanie();
}
pokaz_btn.addEventListener(MouseEvent.CLICK, pokazPoprawna);
function pokazPoprawna(mevt:MouseEvent):void {
odpowiedz_txt.text = odpowiedz.toString();
wynik_txt.text = "";
}
noweRownanie();
//KOD DLA PLIKU Rownanie.as
/*
skrypt pobrany ze strony: http://Funkcje.net
*/
package {
public class Rownanie {
protected var _blad:Boolean;
protected var _licznik:int;
protected var _mianownik:int;
public function Rownanie(... argumenty) {
_licznik = 0;
_mianownik = 1;
_blad = false;
if (argumenty.length == 2) {
_licznik = argumenty[0];
_mianownik = argumenty[1];
if (!(_licznik is int)) {
_blad = true;
}
if (!(_mianownik is int)) {
_blad = true;
}
}
if (argumenty.length == 1) {
this.konwertujString(argumenty[0]);
}
if (argumenty.length > 2) {
_blad = true;
}
}
public function klon():Rownanie {
var h:Rownanie = new Rownanie();
h.ustawRownanie(this._licznik, this._mianownik);
return h;
}
private function gcd(a:int,b:int):int {
if ((a < 0) || (b < 0)) {
return gcd(Math.abs(a),Math.abs(b));
}
if (a < b) {
return gcd(b,a);
}
if (b == 0) {
return a;
}
return gcd(b, a%b);
}
public function pobierzLicznik():int {
return _licznik;
}
public function pobierzMianownik():int {
return _mianownik;
}
public function ustawRownanie(a:int, b:int):void {
_licznik = a;
_mianownik = b;
_blad = false;
if (_mianownik == 0) {
_blad = true;
}
this.zredukuj();
}
public function zredukuj():void {
var n:int;
var d:int;
var c:int;
n = this.pobierzLicznik();
d = this.pobierzMianownik();
c = gcd(n,d);
n = n/c;
d = d/c;
if (d < 0) {
n = -n;
d = -d;
}
_licznik = n;
_mianownik = d;
}
public function jestRowne(a:*):Boolean {
var n1:int;
var n2:int;
var d1:int;
var d2:int;
var f:Rownanie = new Rownanie();
if (a is Rownanie) {
f = a.klon();
}
else if (a is int) {
f.ustawRownanie(a,1);
}
else if (a is String) {
f.konwertujString(a);
}
n1 = this.pobierzLicznik();
d1 = this.pobierzMianownik();
n2 = f.pobierzLicznik();
d2 = f.pobierzMianownik();
if (this.maBlad()) {
return false;
}
if (f.maBlad()) {
return false;
}
if (n1*d2 == n2*d1) {
return true;
}
return false;
}
public function toString():String {
var n:int;
var d:int;
n = this.pobierzLicznik();
d = this.pobierzMianownik();
if (n==0) {
return "0";
}
if (d==1) {
return String(n);
}
return (String(n) + "/" + String(d) );
//jeśli odkomentujemy linię podspodem wtedy wyniki będą obliczane automatycznie do normalnej liczby
//return String(n/d);
}
public function konwertujString(s:String):void {
var a:Array = s.split("/");
_blad = false;
if ((a.length == 0)||(a.length>2)) {
_blad = true;
return;
}
this._licznik = parseInt(a[0]);
if (a.length == 2) {
this._mianownik = parseInt(a[1]);
}
if ( isNaN(this._licznik) || isNaN(this._mianownik) ) {
_blad = true;
}
}
public function maBlad():Boolean {
return _blad;
}
}
}
Ranga: Administrator serwisu Punktów: 0