From 504f6c3524dfdc325aca23d4cac52cb3ffed2256 Mon Sep 17 00:00:00 2001 From: Hugo LAMY Date: Thu, 10 Feb 2022 17:21:01 +0100 Subject: [PATCH] karen pointer sur fonctions en static, sed resolution eof --- d01/ex04/Makefile.replace | 62 +++++++++++++++++++++ d01/ex04/Sed.cpp | 4 +- d01/ex04/sed | Bin 0 -> 44584 bytes d01/ex04/test.txt.replace | 0 d01/ex04/unitests/test_log/test1 | 1 + d01/ex04/unitests/test_log/test1.replace | 1 + d01/ex04/unitests/test_log/test2 | 5 ++ d01/ex04/unitests/test_log/test2.replace | 5 ++ d01/ex04/unitests/test_log/test3 | 1 + d01/ex04/unitests/test_log/test3.replace | 1 + d01/ex04/unitests/test_log/test4 | 2 + d01/ex04/unitests/test_log/test4.replace | 2 + d01/ex04/unitests/test_log/test5 | 1 + d01/ex04/unitests/test_log/test5.replace | 1 + d01/ex04/unitests/test_log/test6 | 2 + d01/ex04/unitests/test_log/test6.replace | 2 + d01/ex04/unitests/test_log/test7 | 27 ++++++++++ d01/ex04/unitests/test_log/test7.replace | 27 ++++++++++ d01/ex04/unitests/test_log/test8 | 4 ++ d01/ex04/unitests/test_log/test8.replace | 4 ++ d01/ex05/Karen.cpp | 6 +-- d01/ex05/Karen.hpp | 2 +- d01/ex05/karen | Bin 36408 -> 36600 bytes d02/ex00/Fixed.hpp | 24 +++++++++ d02/ex01/Fixed.cpp | 66 +++++++++++++++++++++++ d02/ex01/Fixed.hpp | 29 ++++++++++ d02/ex01/Makefile | 62 +++++++++++++++++++++ d02/ex01/fixed | Bin 0 -> 18768 bytes d02/ex01/main.cpp | 36 +++++++++++++ 29 files changed, 369 insertions(+), 8 deletions(-) create mode 100644 d01/ex04/Makefile.replace create mode 100755 d01/ex04/sed create mode 100644 d01/ex04/test.txt.replace create mode 100644 d01/ex04/unitests/test_log/test1 create mode 100644 d01/ex04/unitests/test_log/test1.replace create mode 100644 d01/ex04/unitests/test_log/test2 create mode 100644 d01/ex04/unitests/test_log/test2.replace create mode 100644 d01/ex04/unitests/test_log/test3 create mode 100644 d01/ex04/unitests/test_log/test3.replace create mode 100644 d01/ex04/unitests/test_log/test4 create mode 100644 d01/ex04/unitests/test_log/test4.replace create mode 100644 d01/ex04/unitests/test_log/test5 create mode 100644 d01/ex04/unitests/test_log/test5.replace create mode 100644 d01/ex04/unitests/test_log/test6 create mode 100644 d01/ex04/unitests/test_log/test6.replace create mode 100644 d01/ex04/unitests/test_log/test7 create mode 100644 d01/ex04/unitests/test_log/test7.replace create mode 100644 d01/ex04/unitests/test_log/test8 create mode 100644 d01/ex04/unitests/test_log/test8.replace create mode 100644 d02/ex01/Fixed.cpp create mode 100644 d02/ex01/Fixed.hpp create mode 100644 d02/ex01/Makefile create mode 100755 d02/ex01/fixed create mode 100644 d02/ex01/main.cpp diff --git a/d01/ex04/Makefile.replace b/d01/ex04/Makefile.replace new file mode 100644 index 0000000..495c03c --- /dev/null +++ b/d01/ex04/Makefile.replace @@ -0,0 +1,62 @@ +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # +# . name = value . name is case sensitive # +# VARIABLES . or name = value \ . use VPATH only for .c # +# . value . or .cpp # +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # + +NAME = sed + +CC = clang++ +CFLAGS = -Wall -Wextra -Werror $(INCLUDES) -std=c++98 -g3 + +VPATH = $(D_SRCS) + +LIBS = + +INCLUDES = -I$(D_HEADERS) + +D_SRCS = . +SRCS = main.cpp \ + Sed.cpp + +D_HEADERS = . +HEADERS = Sed.hpp + +D_OBJS = builds +OBJS = $(SRCS:%.cpp=$(D_OBJS)/%.o) + +RM_D_OBJS = rm -rf $(D_OBJS) +ifeq "$(D_OBJS)" "." +RM_D_OBJS = +endif + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # +# . target: prerequisites . $@ : target # +# RULES . recipe . $< : 1st prerequisite # +# . recipe . $^ : all prerequisites # +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # + +all: $(NAME) + +$(D_OBJS)/%.o: %.cpp | $(D_OBJS) + $(CC) $(CFLAGS) -c $< -o $@ + +$(D_OBJS): + mkdir $@ + +$(OBJS): $(HEADERS:%=$(D_HEADERS)/%) + +$(NAME): $(OBJS) + $(CC) $(OBJS) -o $@ $(LIBS) + +clean: + rm -f $(OBJS) + +fclean: clean + rm -f $(NAME) + $(RM_D_OBJS) + +re: fclean all + +.PHONY : all clean fclean re bonus run valgrind diff --git a/d01/ex04/Sed.cpp b/d01/ex04/Sed.cpp index 74cc9f4..b5556e6 100644 --- a/d01/ex04/Sed.cpp +++ b/d01/ex04/Sed.cpp @@ -37,8 +37,8 @@ void Sed::replace() { str.erase(str.begin()); str.push_back(file.get()); } - for (int i = 0; str[i + 1]; i++) - new_file << str[i]; + str.erase(str.end() - 1); + new_file << str; } diff --git a/d01/ex04/sed b/d01/ex04/sed new file mode 100755 index 0000000000000000000000000000000000000000..973c59b9985780a54eefc8608b7d11befb201200 GIT binary patch literal 44584 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 5 0101 5 0000 0000 0000 0000 0000 0000 0000 0101 +// 6 0110 6 0000 0000 0000 0000 0000 0000 0000 0110 +// 7 0111 7 0000 0000 0000 0000 0000 0000 0000 0111 +// ... +// 0111 1111 1111 1111 1111 1111 1111 1111 MAXINT +// 1000 0000 0000 0000 0000 0000 0000 0000 MININT +// ... +// 8 1000 -8 1111 1111 1111 1111 1111 1111 1111 1000 +// 9 1001 -7 1111 1111 1111 1111 1111 1111 1111 1001 +// 10 1010 -6 1111 1111 1111 1111 1111 1111 1111 1010 +// -> 11 1011 -5 1111 1111 1111 1111 1111 1111 1111 1011 +// 12 1100 -4 1111 1111 1111 1111 1111 1111 1111 1100 +// 13 1101 -3 1111 1111 1111 1111 1111 1111 1111 1101 +// 14 1110 -2 1111 1111 1111 1111 1111 1111 1111 1110 +// 15 1111 -1 1111 1111 1111 1111 1111 1111 1111 1111 +// +// // /// FLOATS VS FIXED ///////////////////////////////////////// // // 1.....................23 diff --git a/d02/ex01/Fixed.cpp b/d02/ex01/Fixed.cpp new file mode 100644 index 0000000..82b8f4b --- /dev/null +++ b/d02/ex01/Fixed.cpp @@ -0,0 +1,66 @@ +#include "Fixed.hpp" + +void printBits(std::string before, unsigned int num) +{ + int i = 0; + + std::cout << before; + for (unsigned int mask = 1U << 31; mask; mask = mask >> 1) + { + std::cout << ((num & mask) != 0); + i++; + if (i % 8 == 0) + std::cout << ' '; + } + std::cout << "(" << num << ")" << '\n'; +} + +// default/parametric constructor +Fixed::Fixed( void ) : _value( 0 ) { + std::cout << "Default constructor called" << '\n'; + return; +} + +// copy constructor +Fixed::Fixed( Fixed const & src ) { + std::cout << "Copy constructor called" << '\n'; + *this = src; + return; +} + +// destructor +Fixed::~Fixed( void ) { + std::cout << "Destructor called" << '\n'; + return; +} + +Fixed::Fixed( int integer ) { + + std::cout << integer << '\n'; + printBits("integer : ", integer); + this->_value = integer << this->_frac; + printBits("this->_value : ", this->_value); + +} + +// assignement operator +Fixed & Fixed::operator=( Fixed const & rhs ) { + + std::cout << "Copy assignment operator called" << '\n'; + if ( this != &rhs ) + this->_value = rhs.getRawBits(); + + return *this; + +} + +int Fixed::getRawBits( void ) const { + std::cout << "getRawBits member function called" << '\n'; + + return this->_value; +} + +void Fixed::setRawBits( int const raw ) { + this->_value = raw; +} + diff --git a/d02/ex01/Fixed.hpp b/d02/ex01/Fixed.hpp new file mode 100644 index 0000000..5224527 --- /dev/null +++ b/d02/ex01/Fixed.hpp @@ -0,0 +1,29 @@ +#ifndef FIXED_HPP +# define FIXED_HPP + +#include +#include + +class Fixed { + +public: + + Fixed( void ); // default/parametric constructor + Fixed( Fixed const & src ); // copy constructor + ~Fixed( void ); // destructor + Fixed( int integer); + Fixed( float const floater ); + + Fixed & operator=( Fixed const & rhs ); // assignement operator + + int getRawBits( void ) const; + void setRawBits( int const raw ); + +private: + + int _value; + static int const _frac = 8; + +}; + +#endif diff --git a/d02/ex01/Makefile b/d02/ex01/Makefile new file mode 100644 index 0000000..0712445 --- /dev/null +++ b/d02/ex01/Makefile @@ -0,0 +1,62 @@ +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # +# . name = value . name is case sensitive # +# VARIABLES . or name = value \ . use VPATH only for .c # +# . value . or .cpp # +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # + +NAME = fixed + +CC = clang++ +CFLAGS = -Wall -Wextra -Werror $(INCLUDES) -std=c++98 + +VPATH = $(D_SRCS) + +LIBS = + +INCLUDES = -I$(D_HEADERS) + +D_SRCS = . +SRCS = main.cpp \ + Fixed.cpp + +D_HEADERS = . +HEADERS = Fixed.hpp + +D_OBJS = builds +OBJS = $(SRCS:%.cpp=$(D_OBJS)/%.o) + +RM_D_OBJS = rm -rf $(D_OBJS) +ifeq "$(D_OBJS)" "." +RM_D_OBJS = +endif + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # +# . target: prerequisites . $@ : target # +# RULES . recipe . $< : 1st prerequisite # +# . recipe . $^ : all prerequisites # +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # + +all: $(NAME) + +$(D_OBJS)/%.o: %.cpp | $(D_OBJS) + $(CC) $(CFLAGS) -c $< -o $@ + +$(D_OBJS): + mkdir $@ + +$(OBJS): $(HEADERS:%=$(D_HEADERS)/%) + +$(NAME): $(OBJS) + $(CC) $(OBJS) -o $@ $(LIBS) + +clean: + rm -f $(OBJS) + +fclean: clean + rm -f $(NAME) + $(RM_D_OBJS) + +re: fclean all + +.PHONY : all clean fclean re bonus run valgrind diff --git a/d02/ex01/fixed b/d02/ex01/fixed new file mode 100755 index 0000000000000000000000000000000000000000..7caafdb07cfdc54ae9d2ce9baf621f575e3bc6bf GIT binary patch literal 18768 zcmeHPeQ;dWb-%kS+fuM4*~VbL;srx$V7y5Fiop=x%3ARRk`b0oT@v%WTCJsp)vls_ zYh*G85gFHuFx4b{xZox(ok^WGEh^IzU>qUWE_O5NjLb*I6NaK8K%T&*N)U+v!}fRX zyXWoO)h<(Lr_(=lJ=$~6=RNnl`|iE(zIS|YsHws0@dz$n@eM)P*nCZr>|Y^9gA!G= zwc;$HiLZ)_#B5N?@TW-*LA%DV(`z#rmMb|QAn6@a{6k(17~vWLaiRRpLH3X!>E(*1 zsy5vA6&qzJs%@O~W>Hn)qFN&ixF*4?6%q)BEa$Z6xB0@a*%bwQl`{<8dK8<{<+k|f zb+#VEG1c#K?u_z_$fP%+^d^)ZL!tB-ay-cl{T);MV_ppy;Ti!^FMo58WT~{gZMIW= z$WItSEe{@$m=FwE?-uBhpa0#$Vc)3QD;1X-nc2k0sK*%X`fjz5f@zHBXb@5b_z=~3>TxHEJ1I8W5wj7 zFkFm&UkN+EDIve41pW0A^vM$R=SsBuatZn6CHiHSu=B4a?6j7!L)X}kzru1B!-dC5^o`!Z13zk_jVahI>rI5XNn- zW<1r{YSz|9I>SAN*%OYLsm4esv=OwGZQ)cbVkA>$Pc+=s7};cmT2~tpsdcp(?dggo z!e(>_TZv3J(;6;eYm>352G+iAY`kehtNC@qi1hZ>*4D1DTSSAgL`P%mDg*6psx?9( zw6UQz8Bc}UoLbDO-63n#RDErT+$n9cq>t-sLoGK&Hr~{_lA;0wYh%fj0e7OS8WSvIJB=MRjx#Xn#AbSEJ}1I(q?ixN-k0c{ z3QMcGDw0f_G$y+2;ec94Bx0lps};uP#9gsOyRk8vN_Ry`EW)FPI*x1I8#B>oVyGe1 z6^C0Snn)|ubxahpr5pS)FPHl71Ty*z(sJrOo6PFejo!4&S zZE?}nRz#|7bJ5k-M$$W7bX+i}bi3#a9jXw$F8W*-z0XCT=c4a*(JNi_K^MKsMc?nD z(^@=JW+E^Xftd)*MBx8-1U{(x>c@Kj>2iHw*7#LI==YD9-t4H}f2{ndbUeHIO^~yf zy@lVZB^qjkcM@-WEQ@m4uL!3lcYIXhFA?q~d_>|uC!Chp@ga%-GvTzfjvtix^Muoq zIzA}zrwON}bi7aEe?vGeq2t{Wf0A%oI>)z3{Bgo*$sBKy`1c5>rE*-8_ydH~5;2gv;6pr>)BP81T({=576jlR*sx zA*@}H&|lz(27Q0%^Sqt*u9^mh6@qq;LHcT12WB!nXGk+gn~>j~Om|kAJQ` zy1upl(U>`TyPkPd?|*BeWmDtvk&*K>p&vieBEj*|1-Pz@-o%N+^* z-}-g*Yc712T&5vX@d6RDW7`LhZqEtR_!yS*_q{JcWaIp47` zM_DM;r}q1mHZIQ`Q7Lrd}UV77y4K$DwEUdXOy++7|C+i@9i? zvflN=%MFMCbTXre)kG$Adi>EsLQf&#T1hymXI|7Z>4{A9X?@?WQ`P~pMt2*qG3z11 zrqfFOLv4IV+*a$Ck^bHu)MO{ z$1S?Px$)CtUGWJ5w+KJE`?3FYHHLELvrOpB@z9hsDnmy#DStdf=OcanyCy}|?ro^T zp{1e8{wY!Q$Vk;Q6aDXa>{$OD><)yc`bRvO&=e}q(M0y=fB2~XV^MWK?VEMS@US1K zbp|8DzFeWnBNntK#~;O&&57y5Wqu8kkR5`oo;f~{K4ZOVSM}l9%>2Ghu`le829Fn7 z06sF(O<1pCX22~E zMh1%@*mkQt0p`WWxi)=}8rlzJc_lJtksq3v&tC zx9bFi_gYCp1~%^{sARxRZBTc7Y8AhC-a3D~l32BzP4j5>!~PfZ6S znb6^JzwEEN*+(+Xho!S`{6V>A&ok(zHJ1!tBc<)xq@?tLb!p!IJc(JXDPB3ClU zt!v?KZbWV$%)5T}Se$T=#eIAoQ)DS~+#ZX2q}kBK01ZOiB{_@IUhYB;G*4#A-F#Y) zf`8n!@4D2bLIiJZ%=|LAxiRx$a8odIX0yI;xe0P>)8(Jip3A!T_h|FTr#^E@?Q2y_ z`Va-tl=)p#=KcE2Z-Uvg-_ZMydi1MbPrnN<%D=fa_^sg9;O#-fy=Kbw8hQlfKF-;> zk+qpJ6M>ls%tT-&0y7aP9sv)|;+KibMSXO8I2||rkz@idi_#G@+2fCd+#>MNin(Qb*L> z7{03xZ_NB%(XKXF+MZ5C%vdtPz6j3+zIF62nzsMl|C!B>0S-=Nv*p;vjRGzM90ME# z^#2ynD?|+-J$P;d`~{%@ciAkRSaeTjvqOL_A7-Ec5Pt{3m+uFd-;m>jEj)L(G)YhA_~;d=kNqV-=x+$VtwA5ltfiXM zhVNq!tOV!Iu9of4vyc8cew>YdJd2o*LC&$^eN8$-ey#$)_k(P<&duMI^K%pUhrqwZ z&G$Ar`t2}V-{$Zi27fKCb*VW0BlxFq?Hls+gO2_y;Fn_zoa5%-lJjp8e7au6 z;!H7&gFglTOu({hFU`f#`!JIcyw`@ z5SKN+=M|~uGhXp8p5}c%@tF6TANa)U-U`(J)>rZOWuE7J72y8DR{_CaNy@K%xJ+5! zgkCwU}S+NjrFPT7Dp8vRCL~c6~aZ>Gg4tX zeG}%!X>Uqpt_|=&qsbb7Gj!rS8$VC+`8#Lq7G+ti;Q0z#>bqvz|5Kr77AhZpmQ4~Y z_h|(1rI}r7W@)lQuimJvReb&?>W9id{uYYcqZbM8q8`(P&@@R_YGS|YI6uG5QA+13 zc%s~vXL_H)*>7FRRVc{qt)2ta80$~=|8s={XSaQedW zkXOs25kg;49`kBc%_}}|EU%VFBZR)o=ma4~#%dgc5B7a4Jz zFIq0v+$34|i3Ng=B?^mAEEGKdxOqOD&hWgGPhTX8-3LB#j^OW8^W`xssQDwGzE~VA zO3!_Fo-fa{VUBtUs%7H0*&M~L+0)bX{w@UDE9MEF?|J^a5_Au~cjpgK)bu9kRU66k z^^#{IpnV&E#oBEFole{6*uq`ffRG(tUkcmh4^;}=9aQ6l+x-sg6l-^nvhP>x7Pq}u z(OU}WPbfOCb1eT4s8Ae6gPJ6Eq!o(5YX%j!Gr`Oi20ZB$?2A=g z#bQC<@wm%?ly_6?`VY!*OGCbJ{2zk+e384~AtuXDrJd>Ro+x4e9VIW6pLNO(oxPF& zqiQ_RStXT^K%ehjEcml4n~E>n!6*44Wk;SFf_bi_vs4bgjt$5H@AP>rtnB#D)ub?w z=Ood+^F+1shxadkTEhNcmY_e0K#`wg>VCOOxwHryhXpzJoZ4-Yj@?*6eCW%&V)EZr z@?(oNX`?||x)E@Jcl!MQ1mr26h2!C`m7Q%W4s^yz<)2ElJ5@q{Hu_sEKj$JD2ivCm zcU1}c{h(h$@n57#ah{hBfKKDNaD0Z~Z#CwJQ$bsv+xW4xKTr6ToiW9DkLd;1{Ub%M zInTBu&x)Zl9|M5w7sl-(8du7u8_-u@@_tlyqKdgu$&VGRzo`;-9wje15}n@myq{jgYH){ZZIEo>Mws9>F_AmCE6Q_cAJJ7Zi`2eHFHDL&2_;h!$_su zj7EbpVgixwZe;MZnoVmBBbJOIfe2|cNO3Yc;>osf9Iu#q3`s3ChYYQJa}BZHXuGr* z=`mAg8s9HQM0>OcNk}QAU>RnY5s4=g(G(hJPqO`XyroJR;dHNvB)hufQ4=3p8b-s$U~|X_ZK$VgG6SiKMo3pg zy?&!G>i=Xzu(@$Pc+_7V36vvX+2~psD#5`+qjNq2XLn3kz<8i~u!$bh+ zzOWPX(C4eWkwj_I+vzWnF&L6Lm3Evtsgk3fa$b9f5DKF$m2%pgmN!WkGtYl0$n?QT zDs9hz#Zo8>Z$=r_Sb?3qWJT~)5+WsU(#R>&GB`4Yw7^i#A({%=K|4j3?tLZBH&|f? z?X*5myRU@^q;_^;xd1eKY}m;)`Us(?TLcnGGaBefqyuf~7}CaL?TUo7$>nCaLr7j{ zIMpcv?K=~&XG62c=BNXMJj4JGvqzW|RINL1ihx{s0?6h>U3NLplay0xAlj+s`_6Xg zG6tha5_PY7whenWw{378O@+H+5vU|#9X|otq-`EUMFg-S(bp8tiuymQTmWs_!eLt~ z3!i%&QUpG)Q*0^Ab%IOrM`vWLf6S`^%l*Fumr5-6gKbk@Sp&?i&*vzXGU(5frf0|e zQV$fb>S-G;3!k@?W8X=o#s<#0B2G;53Vqm4dq&phbD6bDe@g9dv7M29XMH~JyA^a2 zWqm%ssZkpzKBt6;EXo|C;&#;NjF9#DoM%)WJYJzBc^}4d4DSS=&Kwzc&V!VreM+DF zCqLPLMHY9XLNR51J~!%9g1Qpq_F13%zgy|oDLFo0I-vyloR#$PH0rd^`VWCdF(LnC z;r(v4jnepZm%{6x0n@GTSNeXX?=J|rB4dwkmxl}V`J6b{nK%dXQ zPN;)%J}+naLjMmceU88IYqqH022a_*`7P8x1P*nP_4zz)$ZxA0uz~YisQ(N&Zhby? zYq{7~+0TZRg@SO1kpg`_pR<UML^@%aA>;c>$H+&;s92Lq=K zjy|9FS;%gp!g4m2! zGn@j=tuHi<#GHxiphR*%tjEv;Ww$;*?;fnNbxO6*7Uw{jY_b0%s{J9QznF}>isq_Q zb*^e(i91}@-{Mg03Y&Aof*~da%WG} + +int main( void ) { + + Fixed a( 1 ); + std::cout << a.getRawBits() << '\n'; + + Fixed b( 6 ); + std::cout << b.getRawBits() << '\n'; + + Fixed c( -6 ); + std::cout << c.getRawBits() << '\n'; + + Fixed d( -1 ); + std::cout << d.getRawBits() << '\n'; + +// Fixed a; +// Fixed const b( 10 ); +// Fixed const c( 42.42f ); +// Fixed const d( b ); +// +// a = Fixed( 1234.4321f ); +// +// std::cout << "a is " << a << std::endl; +// std::cout << "b is " << b << std::endl; +// std::cout << "c is " << c << std::endl; +// std::cout << "d is " << d << std::endl; +// +// std::cout << "a is " << a.toInt() << " as integer" << std::endl; +// std::cout << "b is " << b.toInt() << " as integer" << std::endl; +// std::cout << "c is " << c.toInt() << " as integer" << std::endl; +// std::cout << "d is " << d.toInt() << " as integer" << std::endl; + + return 0; +}