diff options
Diffstat (limited to 'general/Frac.cpp')
-rw-r--r-- | general/Frac.cpp | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/general/Frac.cpp b/general/Frac.cpp new file mode 100644 index 00000000..44871b47 --- /dev/null +++ b/general/Frac.cpp @@ -0,0 +1,107 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: general/Frac.cpp +// Purpose: A class to make handling fractions easier +// Author: Ben Boeckel +// Modified by: Ben Boeckel +// Created: Sun Mar 18 15:25:16 2007 +// Copyright: ©2007 Nerdy Productions +// Licence: +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program. If not, see <http://www.gnu.org/licenses/>. +///////////////////////////////////////////////////////////////////////////// + +#include "Frac.h" + +void PokeGen::Frac::ImportIni(Ini& ini) +{ + ini.GetValue("type", type, Proper); + ini.GetValue("num", num, 1); + ini.GetValue("denom", denom, 1); +} + +void PokeGen::Frac::ExportIni(QFile& fout, const QString& val) +{ + Reduce(); + Ini exFrac(val); + exFrac.AddField("num", num); + exFrac.AddField("denom", denom); + exFrac.AddField("type", type); + exFrac.Export(fout); +} + +bool PokeGen::Frac::Set(const unsigned n, const unsigned d) +{ + if ((type == Improper) || ((n <= d) && (type == Proper)) || ((d <= n) && (type == Over1))) + { + num = n; + denom = d; + } + return ((num == n) && (denom == d)); +} + +bool PokeGen::Frac::Set(const unsigned n, const unsigned d, const unsigned t) +{ + unsigned save_t = type; + if (SetType(t)) + { + if (Set(n, d)) + return true; + } + type = save_t; + return false; +} + +bool PokeGen::Frac::SetNum(const unsigned n) +{ + if ((type == Improper) || ((n <= denom) && (type == Proper)) || ((denom <= n) && (type == Over1))) + { + num = n; + return true; + } + return false; +} + +bool PokeGen::Frac::SetDenom(const unsigned d) +{ + if (d && ((type == Improper) || ((num <= d) && (type == Proper)) || ((d <= num) && (type == Over1)))) + { + denom = d; + return true; + } + return false; +} + +bool PokeGen::Frac::SetType(const unsigned t) +{ + if (t < End) + { + type = t; + Set(num, denom); + } + return (type == t); +} + +void PokeGen::Frac::Reduce() +{ + int i = num; + int j = denom; + int k; + while (j) + { + k = j; + j = i % j; + i = k; + } + num /= i; + denom /= i; +} |