diff --git a/d01/ex03/Weapon.cpp b/d01/ex03/Weapon.cpp index c090ef6..d92b812 100644 --- a/d01/ex03/Weapon.cpp +++ b/d01/ex03/Weapon.cpp @@ -8,7 +8,7 @@ Weapon::Weapon( std::string type ) { } Weapon::~Weapon() {} -std::string Weapon::getType( void ) const { +std::string const & Weapon::getType( void ) const { return this->_type; diff --git a/d01/ex03/Weapon.hpp b/d01/ex03/Weapon.hpp index 859b55e..f6824e9 100644 --- a/d01/ex03/Weapon.hpp +++ b/d01/ex03/Weapon.hpp @@ -11,8 +11,8 @@ public: Weapon( std::string type ); ~Weapon(); - std::string getType() const; - void setType( std::string type ); + std::string const & getType() const; + void setType( std::string type ); private: diff --git a/d01/ex03/war b/d01/ex03/war index ef9fa15..ffae4fd 100755 Binary files a/d01/ex03/war and b/d01/ex03/war differ diff --git a/d02/ex02/Fixed.cpp b/d02/ex02/Fixed.cpp index 8de7902..21a4e1c 100644 --- a/d02/ex02/Fixed.cpp +++ b/d02/ex02/Fixed.cpp @@ -1,5 +1,6 @@ #include "Fixed.hpp" + /* * functions to print numbers in binary * for the float, found help from stackoverflow : @@ -35,6 +36,7 @@ std::string printBitsFloat(float num) return ""; } + /* * statics variables initialisation * @@ -48,6 +50,7 @@ std::string printBitsFloat(float num) int const Fixed::_frac = 8; int const Fixed::_max = -1U >> (_frac +1); + /* * default constructor / copy constructor / destructor */ @@ -65,6 +68,7 @@ Fixed::~Fixed( void ) { return; } + /* * int and float constructors */ @@ -80,9 +84,10 @@ Fixed::Fixed(float const floater) { if (floater < ~this->_max || floater > this->_max) std::cout << "error: float out of range" << '\n'; else - this->_value = floater * (1 << this->_frac); + this->_value = roundf(floater * (1 << this->_frac)); } + /* * assignement operator */ @@ -93,8 +98,12 @@ Fixed & Fixed::operator=( Fixed const & rhs ) { return *this; } + /* * operators < ; > ; <= ; == ; != ; + ; - ; * ; / ; ++ ; -- + * ref : https://en.cppreference.com/w/cpp/language/operators + * for division, if you want to avoid floats (legitimate) : + * https://stackoverflow.com/questions/8506317/fixed-point-unsigned-division-in-c */ bool Fixed::operator< (Fixed const & rhs) const { @@ -127,12 +136,50 @@ Fixed Fixed::operator* ( Fixed const & rhs ) const { Fixed Fixed::operator/ ( Fixed const & rhs ) const { return Fixed( this->toFloat() / rhs.toFloat() ); } -//void Fixed::operator++( void ){ -// this->_value += 1; -//} -//void Fixed::operator--( void ){ -// this->_value -= 1; -//} +Fixed Fixed::operator++() { + this->_value++; + return *this; +} +Fixed Fixed::operator--() { + this->_value--; + return *this; +} +Fixed Fixed::operator++( int ) { + Fixed old = *this; + Fixed::operator++(); + return old; +} +Fixed Fixed::operator--( int ) { + Fixed old = *this; + Fixed::operator--(); + return old; +} + + +/* + * returns min and max + */ + +Fixed const & Fixed::min(Fixed const & lhs, Fixed const & rhs) { + if (lhs < rhs) + return lhs; + return rhs; +} +Fixed const & Fixed::max(Fixed const & lhs, Fixed const & rhs) { + if (lhs > rhs) + return lhs; + return rhs; +} +Fixed & Fixed::min(Fixed & lhs, Fixed & rhs) { + if (lhs < rhs) + return lhs; + return rhs; +} +Fixed & Fixed::max(Fixed & lhs, Fixed & rhs) { + if (lhs > rhs) + return lhs; + return rhs; +} /* @@ -154,9 +201,10 @@ float Fixed::toFloat( void ) const { return ((float)this->_value / (float)(1 << this->_frac)); } + /* * overload "<<" -> output fixed point in float representation - * took here : https://github.com/pgomez-a/42_CPP_Piscine/blob/master/cpp02/ex01/Fixed.cpp + * found here : https://github.com/pgomez-a/42_CPP_Piscine/blob/master/cpp02/ex01/Fixed.cpp */ std::ostream & operator<<(std::ostream & o, Fixed const & rhs) diff --git a/d02/ex02/Fixed.hpp b/d02/ex02/Fixed.hpp index 62e199c..c30657f 100644 --- a/d02/ex02/Fixed.hpp +++ b/d02/ex02/Fixed.hpp @@ -26,8 +26,15 @@ public: Fixed operator- (Fixed const & rhs) const; Fixed operator* (Fixed const & rhs) const; Fixed operator/ (Fixed const & rhs) const; -// void operator++(void); -// void operator--(void); + Fixed operator++(void); // prefix ++o + Fixed operator--(void); // prefix --o + Fixed operator++(int); // postfix o++ + Fixed operator--(int); // postfix o-- + + static const Fixed & min(Fixed const & lhs, Fixed const & rhs); + static const Fixed & max(Fixed const & lhs, Fixed const & rhs); + static Fixed & min(Fixed & lhs, Fixed & rhs); + static Fixed & max(Fixed & lhs, Fixed & rhs); int getRawBits(void) const; void setRawBits(int const raw); diff --git a/d02/ex02/main.cpp b/d02/ex02/main.cpp index 2ef4f05..1c84836 100644 --- a/d02/ex02/main.cpp +++ b/d02/ex02/main.cpp @@ -4,90 +4,96 @@ int main( void ) { -// Fixed a; -// Fixed const b( Fixed( 5.05f ) * Fixed( 2 ) ); -// -// std::cout << a << std::endl; -// std::cout << ++a << std::endl; -// std::cout << a << std::endl; -// std::cout << a++ << std::endl; -// std::cout << a << std::endl; -// -// std::cout << b << std::endl; -// -// std::cout << Fixed::max( a, b ) << std::endl + Fixed a; + Fixed const b( Fixed( 5.05f ) * Fixed( 2 ) ); - Fixed c(10); - Fixed d(5); - Fixed e; + std::cout << a << std::endl; + std::cout << ++a << std::endl; + std::cout << a << std::endl; + std::cout << a++ << std::endl; + std::cout << a << std::endl; - std::cout << "c: " << c << '\n'; - std::cout << "d: " << d << "\n\n"; + std::cout << b << std::endl; - // ">" - std::cout << "e = greater of (c, d) : e == " << (e = (c > d) ? c : d) << '\n'; - std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; - std::cout << "e > c ? : " << (e > c) << '\n'; - std::cout << "e > d ? : " << (e > d) << "\n\n"; - // "<" - std::cout << "e = smaller of (c, d) : e == " << (e = (c < d) ? c : d) << '\n'; - std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; - std::cout << "e < c ? : " << (e < c) << '\n'; - std::cout << "e < d ? : " << (e < d) << "\n\n"; - // "<=" - std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; - std::cout << "e <= c ? : " << (e <= c) << '\n'; - std::cout << "e <= d ? : " << (e <= d) << "\n\n"; - // ">=" - std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; - std::cout << "e >= c ? : " << (e >= c) << '\n'; - std::cout << "e >= d ? : " << (e >= d) << "\n\n"; - // "==" - std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; - std::cout << "e == c ? : " << (e == c) << '\n'; - std::cout << "e == d ? : " << (e == d) << "\n\n"; - // "!=" - std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; - std::cout << "e != c ? : " << (e != c) << '\n'; - std::cout << "e != d ? : " << (e != d) << "\n\n"; - // "+" - std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; - std::cout << "e = c + d : " << (e = c + d) << "\n"; - std::cout << "e = e + c + d : " << (e = e + c + d) << "\n\n"; - // "-" - std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; - std::cout << "e = d - e ? : " << (e = d - e) << "\n"; - std::cout << "e = c - d - e ? : " << (e = c - d - e) << "\n\n"; - // "*" - std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; - std::cout << "e = d * c ? : " << (e = d * c) << "\n"; - std::cout << "e = d * c * c ? : " << (e = d * c * c) << "\n\n"; - // "/" - std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; - std::cout << "e = d / c ? : " << (e = d / c) << "\n"; - std::cout << "e = d / c / e ? : " << (e = d / c / e) << "\n\n"; - // "+ - * /" - Fixed f; - Fixed g; - std::cout << "f:" << f << " e:" << e << " c:" << c << " d:" << d << '\n'; - std::cout << "f = e + d / c - d / e * c ? : " << (f = e + d / c - d / e * c) << '\n'; - std::cout << "g = d / c ? : " << std::setw(5) << std::left << (g = d / c) << "[f:" << std::setw(5) << std::left << f << " g:" << std::setw(5) << std::left << g << " e:" << e << " c:" << c << " d:" << d << "]\n"; - std::cout << "g = e + g ? : " << std::setw(5) << std::left << (g = e + g) << "[f:" << std::setw(5) << std::left << f << " g:" << std::setw(5) << std::left << g << " e:" << e << " c:" << c << " d:" << d << "]\n"; - std::cout << "f = d / e ? : " << std::setw(5) << std::left << (f = d / e) << "[f:" << std::setw(5) << std::left << f << " g:" << std::setw(5) << std::left << g << " e:" << e << " c:" << c << " d:" << d << "]\n"; - std::cout << "f = f * c ? : " << std::setw(5) << std::left << (f = f * c) << "[f:" << std::setw(5) << std::left << f << " g:" << std::setw(5) << std::left << g << " e:" << e << " c:" << c << " d:" << d << "]\n"; - std::cout << "f = g - f ? : " << std::setw(5) << std::left << (f = g - f) << "[f:" << std::setw(5) << std::left << f << " g:" << std::setw(5) << std::left << g << " e:" << e << " c:" << c << " d:" << d << "]\n"; - // "++x" + std::cout << Fixed::max( a, b ) << std::endl; + +// Fixed c(10); +// Fixed d(5); +// Fixed e; +// +// std::cout << "c: " << c << '\n'; +// std::cout << "d: " << d << "\n\n"; +// +// // ">" +// std::cout << "e = greater of (c, d) : e == " << (e = (c > d) ? c : d) << '\n'; +// std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; +// std::cout << "e > c ? : " << (e > c) << '\n'; +// std::cout << "e > d ? : " << (e > d) << "\n\n"; +// // "<" +// std::cout << "e = smaller of (c, d) : e == " << (e = (c < d) ? c : d) << '\n'; +// std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; +// std::cout << "e < c ? : " << (e < c) << '\n'; +// std::cout << "e < d ? : " << (e < d) << "\n\n"; +// // "<=" +// std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; +// std::cout << "e <= c ? : " << (e <= c) << '\n'; +// std::cout << "e <= d ? : " << (e <= d) << "\n\n"; +// // ">=" +// std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; +// std::cout << "e >= c ? : " << (e >= c) << '\n'; +// std::cout << "e >= d ? : " << (e >= d) << "\n\n"; +// // "==" +// std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; +// std::cout << "e == c ? : " << (e == c) << '\n'; +// std::cout << "e == d ? : " << (e == d) << "\n\n"; +// // "!=" +// std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; +// std::cout << "e != c ? : " << (e != c) << '\n'; +// std::cout << "e != d ? : " << (e != d) << "\n\n"; +// // "+" +// std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; +// std::cout << "e = c + d : " << (e = c + d) << "\n"; +// std::cout << "e = e + c + d : " << (e = e + c + d) << "\n\n"; +// // "-" +// std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; +// std::cout << "e = d - e ? : " << (e = d - e) << "\n"; +// std::cout << "e = c - d - e ? : " << (e = c - d - e) << "\n\n"; +// // "*" +// std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; +// std::cout << "e = d * c ? : " << (e = d * c) << "\n"; +// std::cout << "e = d * c * c ? : " << (e = d * c * c) << "\n\n"; +// // "/" +// std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; +// std::cout << "e = d / c ? : " << (e = d / c) << "\n"; +// std::cout << "e = d / c / e ? : " << (e = d / c / e) << "\n\n"; +// // "+ - * /" +// Fixed f; +// Fixed g; +// std::cout << "f:" << f << " e:" << e << " c:" << c << " d:" << d << '\n'; +// std::cout << "f = e + d / c - d / e * c ? : " << (f = e + d / c - d / e * c) << '\n'; +// std::cout << "g = d / c ? : " << std::setw(5) << std::left << (g = d / c) << "[f:" << std::setw(5) << std::left << f << " g:" << std::setw(5) << std::left << g << " e:" << e << " c:" << c << " d:" << d << "]\n"; +// std::cout << "g = e + g ? : " << std::setw(5) << std::left << (g = e + g) << "[f:" << std::setw(5) << std::left << f << " g:" << std::setw(5) << std::left << g << " e:" << e << " c:" << c << " d:" << d << "]\n"; +// std::cout << "f = d / e ? : " << std::setw(5) << std::left << (f = d / e) << "[f:" << std::setw(5) << std::left << f << " g:" << std::setw(5) << std::left << g << " e:" << e << " c:" << c << " d:" << d << "]\n"; +// std::cout << "f = f * c ? : " << std::setw(5) << std::left << (f = f * c) << "[f:" << std::setw(5) << std::left << f << " g:" << std::setw(5) << std::left << g << " e:" << e << " c:" << c << " d:" << d << "]\n"; +// std::cout << "f = g - f ? : " << std::setw(5) << std::left << (f = g - f) << "[f:" << std::setw(5) << std::left << f << " g:" << std::setw(5) << std::left << g << " e:" << e << " c:" << c << " d:" << d << "]\n\n"; +// // "/" +// c = Fixed(6); +// d = Fixed(10); +// std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; +// std::cout << "e = c / d ? : " << (e = c / d) << "\n\n"; +// // "++x" +// e = Fixed(2); // std::cout << "e : " << e << '\n'; -// std::cout << "e++ : " << ++e << "\n\n"; +// std::cout << "++e : " << ++e << " ; e : " << e << "\n\n"; // // "--x" // std::cout << "e : " << e << '\n'; -// std::cout << "e-- : " << --e << "\n\n"; - // "x++" +// std::cout << "--e : " << --e << " ; e : " << e << "\n\n"; +// // "x++" // std::cout << "e : " << e << '\n'; -// std::cout << "e++ : " << e++ << "\n\n"; +// std::cout << "e++ : " << e++ << " ; e : " << e << "\n\n"; // // "x--" // std::cout << "e : " << e << '\n'; -// std::cout << "e-- : " << e-- << "\n\n"; +// std::cout << "e-- : " << e-- << " ; e : " << e << "\n\n"; return 0; } diff --git a/d02/ex02/operators b/d02/ex02/operators index 1311aab..6117e75 100755 Binary files a/d02/ex02/operators and b/d02/ex02/operators differ