Dzień dobry.
Poszukuję pomysłu na elementarne wyrażenie (Symbol), które będę mógł łączyć operatorami +,-,*,/,^
Pomysł mam na razie taki, aczkolwiek jest niedoskonały
var Symbol = function (mLicznik, mMianownik, zmienna, pLicznik, pMianownik) {
this.mnoznik = new Ulamek(mLicznik, mMianownik);
this.zmienna = new Zmienna(zmienna);
this.potega = new Ulamek(pLicznik, pMianownik);
this.zapis = function () {
var zap = "";
//zap += this.znak;
zap += (this.mnoznik.zapis() === Blad) ? "" : this.mnoznik.zapis();
zap += this.zmienna.zapis();
zap += (this.potega.zapis() === Blad) ? "" : "^" + this.potega.zapis();
return zap;
};
};
jednak to rozwiązanie ma wiele wad. np, brak wielokrotnych ułamków 1/2/2
, albo fakt, że ułamki mogą być tylko liczbami i nie przejdzie takie coś: 2/x/y
etc.
Jaką proponujecie symbolikę Symbolu?
Dzięki
M.
Zmodyfikowałem konstruktor Ułamka, tak, że teraz może zawierać inne ułamki, włącznie ze stałymi tekstowymi:
var Ulamek = function (num1, num2) {
this.typ = "";
if (num1 instanceof Ulamek || num2 instanceof Ulamek)
this.typ = UlamekWUlamku;
else if (czyLiczbaLubStr(num1) && czyLiczbaLubStr(num2))
this.typ = UlamekZwykly;
else if (czyLiczbaLubStr(num1) && !czyLiczbaLubStr(num2))
this.typ = UlamekDziesietny;
else
this.typ = Blad;
this.licznik = (this.typ !== Blad ? num1 : 0);
this.mianownik = (this.typ === UlamekDziesietny ? 1 : num2);
if (this.typ === UlamekZwykly) {
this.licznik = Math.abs(this.licznik) * Math.sign(this.licznik * this.mianownik);
this.mianownik = Math.abs(this.mianownik);
}
this.dziesietnie = (typeof num1 === 'number' && typeof num2 === 'number') ? this.licznik / this.mianownik : num1;
this.toString = function () {
return this.licznik.toString() + "/" + this.mianownik.toString();
};
this.zapis = function () {
return (this.typ !== Blad) ? (this.typ === UlamekDziesietny ? String(this.dziesietnie) : this.toString()) : Blad;
};
};
Teraz muszę jeszcze resztę ogarnąć :)