diff --git a/makefile b/makefile new file mode 100644 index 0000000..33e0562 --- /dev/null +++ b/makefile @@ -0,0 +1,69 @@ +# this is the build file for project +# it is autogenerated by the xmake build system. +# do not edit by hand. + +ifneq ($(VERBOSE),1) +VV=@ +endif + +AS=/Library/Developer/CommandLineTools/usr/bin/clang +MXX=/Library/Developer/CommandLineTools/usr/bin/clang +FC=/usr/local/bin/gfortran +CXX=/Library/Developer/CommandLineTools/usr/bin/clang +CU=/usr/bin/clang +MM=/Library/Developer/CommandLineTools/usr/bin/clang +SC=/Library/Developer/CommandLineTools/usr/bin/swiftc +CC=/Library/Developer/CommandLineTools/usr/bin/clang + +AR=/Library/Developer/CommandLineTools/usr/bin/ar +FCSH=/usr/local/bin/gfortran +SH=/Library/Developer/CommandLineTools/usr/bin/clang++ +SCSH=/Library/Developer/CommandLineTools/usr/bin/swiftc +FCLD=/usr/local/bin/gfortran +LD=/Library/Developer/CommandLineTools/usr/bin/clang++ +SCLD=/Library/Developer/CommandLineTools/usr/bin/swiftc + +Pivot_LD=/Library/Developer/CommandLineTools/usr/bin/clang++ +Pivot_CXX=/Library/Developer/CommandLineTools/usr/bin/clang +Pivot_CXX=/Library/Developer/CommandLineTools/usr/bin/clang + +Pivot_CXXFLAGS=-Qunused-arguments -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk -fvisibility=hidden -fvisibility-inlines-hidden -O3 -std=c++17 -DNDEBUG +Pivot_CXXFLAGS=-Qunused-arguments -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk -fvisibility=hidden -fvisibility-inlines-hidden -O3 -std=c++17 -DNDEBUG +Pivot_LDFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk -stdlib=libc++ -lz -Wl,-x -Wl,-dead_strip + +default: Pivot + +all: Pivot + +.PHONY: default all Pivot + +Pivot: build/macosx/x86_64/release/Pivot +build/macosx/x86_64/release/Pivot: build/.objs/Pivot/macosx/x86_64/release/src/NR.cpp.o build/.objs/Pivot/macosx/x86_64/release/src/Matrix.cpp.o build/.objs/Pivot/macosx/x86_64/release/src/main.cpp.o + @echo linking.release Pivot + @mkdir -p build/macosx/x86_64/release + $(VV)$(Pivot_LD) -o build/macosx/x86_64/release/Pivot build/.objs/Pivot/macosx/x86_64/release/src/NR.cpp.o build/.objs/Pivot/macosx/x86_64/release/src/Matrix.cpp.o build/.objs/Pivot/macosx/x86_64/release/src/main.cpp.o $(Pivot_LDFLAGS) + +build/.objs/Pivot/macosx/x86_64/release/src/NR.cpp.o: src/NR.cpp + @echo compiling.release src/NR.cpp + @mkdir -p build/.objs/Pivot/macosx/x86_64/release/src + $(VV)$(Pivot_CXX) -c $(Pivot_CXXFLAGS) -o build/.objs/Pivot/macosx/x86_64/release/src/NR.cpp.o src/NR.cpp + +build/.objs/Pivot/macosx/x86_64/release/src/Matrix.cpp.o: src/Matrix.cpp + @echo compiling.release src/Matrix.cpp + @mkdir -p build/.objs/Pivot/macosx/x86_64/release/src + $(VV)$(Pivot_CXX) -c $(Pivot_CXXFLAGS) -o build/.objs/Pivot/macosx/x86_64/release/src/Matrix.cpp.o src/Matrix.cpp + +build/.objs/Pivot/macosx/x86_64/release/src/main.cpp.o: src/main.cpp + @echo compiling.release src/main.cpp + @mkdir -p build/.objs/Pivot/macosx/x86_64/release/src + $(VV)$(Pivot_CXX) -c $(Pivot_CXXFLAGS) -o build/.objs/Pivot/macosx/x86_64/release/src/main.cpp.o src/main.cpp + +clean: clean_Pivot + +clean_Pivot: + @rm -rf build/macosx/x86_64/release/Pivot + @rm -rf build/macosx/x86_64/release/Pivot.dSYM + @rm -rf build/.objs/Pivot/macosx/x86_64/release/src/NR.cpp.o + @rm -rf build/.objs/Pivot/macosx/x86_64/release/src/Matrix.cpp.o + @rm -rf build/.objs/Pivot/macosx/x86_64/release/src/main.cpp.o + diff --git a/src/NR.cpp b/src/NR.cpp new file mode 100644 index 0000000..d86584b --- /dev/null +++ b/src/NR.cpp @@ -0,0 +1,159 @@ +#include "NR.h" +#include + +int PGCD(int x, int y) { + if(x==0 || y==0) + return 1; + else if(x%y == 0) + return abs(y); + else + return PGCD(y, x%y); +} + +NR::NR(int numerator, int denominator) { + NRset(numerator, denominator); +} + +void NR::NRset(int numerator, int denominator) { + if(denominator > 0) + m_Numerator = numerator; + else + m_Numerator = (-1)*numerator; + if(denominator == 0) { + std::cout<<"Essaie de créer une fraction avec un dénominateur = 0, impossible"<(const NR& opNR) const { + return (m_Numerator * opNR.NRgetDen() > m_Denominator * opNR.NRgetNum()); +} + +bool NR::operator !=(const NR& opNR) const { + return (not (*this == opNR)); +} + +bool NR::operator <=(const NR& opNR) const { + return (not (*this > opNR)); +} + +bool NR::operator >=(const NR& opNR) const { + return (not (*this < opNR)); +} + +std::ostream& operator <<(std::ostream& os, const NR& opNR) { + os<>(std::istream& is, NR& opNR) { + int num, den; + std::cout<<"Numerator: "; + is>>num; + std::cout<<"Denominator: "; + is>>den; + opNR.NRset(num, den); + return is; +} + +NR NR::operator +(const NR& opNR) const { + int num, den; + num = m_Numerator * opNR.NRgetDen(); + den = m_Denominator * opNR.NRgetDen(); + num += (opNR.NRgetNum() * m_Denominator); + NR result(num, den); + return result; +} + +NR NR::operator -(const NR& opNR) const { + int num, den; + num = m_Numerator * opNR.NRgetDen(); + den = m_Denominator * opNR.NRgetDen(); + num -= (opNR.NRgetNum() * m_Denominator); + NR result(num, den); + return result; +} + +NR NR::operator *(const NR& opNR) const { + int num, den; + num = m_Numerator * opNR.NRgetNum(); + den = m_Denominator * opNR.NRgetDen(); + NR result(num, den); + return result; +} + +NR NR::operator /(const NR& opNR) const { + int num, den; + num = m_Numerator * opNR.NRgetDen(); + den = m_Denominator * opNR.NRgetNum(); + NR result(num, den); + return result; +} + +void NR::test() { + NR* frac = new NR; + NR frac2(3); + NR frac3(2,5); + int a, b; + std::cout<<"PGCD : entrez deux entiers"<>a>>b; + std::cout<>a>>b; + NR fractest(a, b); + std::cout<> "<<(fractest + frac3)<> "<<(fractest + frac3).NRgetNum()<<"/"<<(fractest + frac3).NRgetDen()<> "<NRset(2, 4); + NR anotherfrac; + std::cin>>anotherfrac; + std::cout<<"Compare "<=? "<<(fractest >= anotherfrac)<< std::endl; + std::cout<> "<> "<> "<> "<<(numNR - otherNR)<> "< + class NR { private: int m_Numerator; - int m_Denominator; + int m_Denominator; //has to be > 0, sign is carried by the numerator public: NR() : m_Numerator(0), m_Denominator(1) {} NR(int entier) : m_Numerator(entier), m_Denominator(1) {} - NR(int numerator, int denominator) : m_Numerator(numerator), m_Denominator(denominator) {} -}; \ No newline at end of file + NR(int numerator, int denominator); //check if denominator != 0 + void NRset(int numerator, int denominator); //same + + void reduceNR(); //divide by PGCD, not automatically called yet + void invertNR(); + + int NRgetNum() const; + int NRgetDen() const; + NR& operator =(const NR& opNR); + + bool operator ==(const NR& opNR) const; + bool operator <(const NR& opNR) const; + bool operator >(const NR& opNR) const; + + bool operator !=(const NR& opNR) const; + bool operator <=(const NR& opNR) const; + bool operator >=(const NR& opNR) const; + + friend std::ostream& operator <<(std::ostream& os, const NR& opNR); + friend std::istream& operator >>(std::istream& os, NR& opNR); + + NR operator +(const NR& opNR) const; + NR operator -(const NR& opNR) const; + NR operator *(const NR& opNR) const; + NR operator /(const NR& opNR) const; + + static void test(); +}; + +int PGCD(int x, int y); \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 1e71236..4b92d2c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,4 +1,5 @@ #include "Matrix.h" +#include "NR.h" #include void test() { @@ -38,7 +39,8 @@ void prompt() { } int main(int argc, char** argv) { - test(); - prompt(); + //test(); + //prompt(); + NR::test(); return 0; }