From 2c5f698589f1effe29a83b19d484806842ffa770 Mon Sep 17 00:00:00 2001 From: Peter Gerwinski <peter.gerwinski@hs-bochum.de> Date: Mon, 14 Jan 2019 17:42:09 +0100 Subject: [PATCH] Beispielprogramme 14.1.2019 --- {20190113 => 20190114}/aufgabe-1.c | 0 {20190113 => 20190114}/aufgabe-2a.c | 0 {20190113 => 20190114}/aufgabe-2b.c | 0 {20190113 => 20190114}/gtk-1.c | 0 {20190113 => 20190114}/gtk-2.c | 0 {20190113 => 20190114}/gtk-3.c | 0 {20190113 => 20190114}/gtk-4.c | 0 {20190113 => 20190114}/gtk-5.c | 0 {20190113 => 20190114}/gtk-6.c | 0 {20190113 => 20190114}/gtk-7.c | 0 {20190113 => 20190114}/hello-gtk.png | 0 .../hp-20190114.pdf | Bin 315470 -> 315470 bytes .../hp-20190114.tex | 4 +- .../hp-uebung-20190114.pdf | Bin 58360 -> 58203 bytes .../hp-uebung-20190114.tex | 10 +-- {20190113 => 20190114}/landau-symbols-2.pdf | 0 {20190113 => 20190114}/landau-symbols.pdf | 0 .../logo-hochschule-bochum-cvh-text-v2.pdf | 0 .../logo-hochschule-bochum.pdf | 0 20190114/nodynmem-1.c | 13 +++ 20190114/nodynmem-2.c | 17 ++++ {20190113 => 20190114}/objects-1.c | 0 20190114/objects-10.c | 73 +++++++++++++++++ 20190114/objects-11.c | 75 ++++++++++++++++++ 20190114/objects-12.c | 66 +++++++++++++++ 20190114/objects-13.c | 75 ++++++++++++++++++ 20190114/objects-14.cpp | 57 +++++++++++++ {20190113 => 20190114}/objects-2.c | 0 {20190113 => 20190114}/objects-3.c | 0 {20190113 => 20190114}/objects-4.c | 0 {20190113 => 20190114}/objects-5.c | 0 {20190113 => 20190114}/objects-6.c | 0 20190114/objects-7.c | 43 ++++++++++ 20190114/objects-8.c | 59 ++++++++++++++ 20190114/objects-9.c | 66 +++++++++++++++ {20190113 => 20190114}/pgscript.sty | 0 {20190113 => 20190114}/pgslides.sty | 0 20190114/unions-1.c | 16 ++++ 20190114/unions-2.c | 15 ++++ 39 files changed, 582 insertions(+), 7 deletions(-) rename {20190113 => 20190114}/aufgabe-1.c (100%) rename {20190113 => 20190114}/aufgabe-2a.c (100%) rename {20190113 => 20190114}/aufgabe-2b.c (100%) rename {20190113 => 20190114}/gtk-1.c (100%) rename {20190113 => 20190114}/gtk-2.c (100%) rename {20190113 => 20190114}/gtk-3.c (100%) rename {20190113 => 20190114}/gtk-4.c (100%) rename {20190113 => 20190114}/gtk-5.c (100%) rename {20190113 => 20190114}/gtk-6.c (100%) rename {20190113 => 20190114}/gtk-7.c (100%) rename {20190113 => 20190114}/hello-gtk.png (100%) rename 20190113/hp-20190113.pdf => 20190114/hp-20190114.pdf (99%) rename 20190113/hp-20190113.tex => 20190114/hp-20190114.tex (99%) rename 20190113/hp-uebung-20190113.pdf => 20190114/hp-uebung-20190114.pdf (72%) rename 20190113/hp-uebung-20190113.tex => 20190114/hp-uebung-20190114.tex (96%) rename {20190113 => 20190114}/landau-symbols-2.pdf (100%) rename {20190113 => 20190114}/landau-symbols.pdf (100%) rename {20190113 => 20190114}/logo-hochschule-bochum-cvh-text-v2.pdf (100%) rename {20190113 => 20190114}/logo-hochschule-bochum.pdf (100%) create mode 100644 20190114/nodynmem-1.c create mode 100644 20190114/nodynmem-2.c rename {20190113 => 20190114}/objects-1.c (100%) create mode 100644 20190114/objects-10.c create mode 100644 20190114/objects-11.c create mode 100644 20190114/objects-12.c create mode 100644 20190114/objects-13.c create mode 100644 20190114/objects-14.cpp rename {20190113 => 20190114}/objects-2.c (100%) rename {20190113 => 20190114}/objects-3.c (100%) rename {20190113 => 20190114}/objects-4.c (100%) rename {20190113 => 20190114}/objects-5.c (100%) rename {20190113 => 20190114}/objects-6.c (100%) create mode 100644 20190114/objects-7.c create mode 100644 20190114/objects-8.c create mode 100644 20190114/objects-9.c rename {20190113 => 20190114}/pgscript.sty (100%) rename {20190113 => 20190114}/pgslides.sty (100%) create mode 100644 20190114/unions-1.c create mode 100644 20190114/unions-2.c diff --git a/20190113/aufgabe-1.c b/20190114/aufgabe-1.c similarity index 100% rename from 20190113/aufgabe-1.c rename to 20190114/aufgabe-1.c diff --git a/20190113/aufgabe-2a.c b/20190114/aufgabe-2a.c similarity index 100% rename from 20190113/aufgabe-2a.c rename to 20190114/aufgabe-2a.c diff --git a/20190113/aufgabe-2b.c b/20190114/aufgabe-2b.c similarity index 100% rename from 20190113/aufgabe-2b.c rename to 20190114/aufgabe-2b.c diff --git a/20190113/gtk-1.c b/20190114/gtk-1.c similarity index 100% rename from 20190113/gtk-1.c rename to 20190114/gtk-1.c diff --git a/20190113/gtk-2.c b/20190114/gtk-2.c similarity index 100% rename from 20190113/gtk-2.c rename to 20190114/gtk-2.c diff --git a/20190113/gtk-3.c b/20190114/gtk-3.c similarity index 100% rename from 20190113/gtk-3.c rename to 20190114/gtk-3.c diff --git a/20190113/gtk-4.c b/20190114/gtk-4.c similarity index 100% rename from 20190113/gtk-4.c rename to 20190114/gtk-4.c diff --git a/20190113/gtk-5.c b/20190114/gtk-5.c similarity index 100% rename from 20190113/gtk-5.c rename to 20190114/gtk-5.c diff --git a/20190113/gtk-6.c b/20190114/gtk-6.c similarity index 100% rename from 20190113/gtk-6.c rename to 20190114/gtk-6.c diff --git a/20190113/gtk-7.c b/20190114/gtk-7.c similarity index 100% rename from 20190113/gtk-7.c rename to 20190114/gtk-7.c diff --git a/20190113/hello-gtk.png b/20190114/hello-gtk.png similarity index 100% rename from 20190113/hello-gtk.png rename to 20190114/hello-gtk.png diff --git a/20190113/hp-20190113.pdf b/20190114/hp-20190114.pdf similarity index 99% rename from 20190113/hp-20190113.pdf rename to 20190114/hp-20190114.pdf index 61094c4e509d8476b726fd88e37282b6f554c4c8..53f9bc52c5687b45d79c284131d8edfd10d46db8 100644 GIT binary patch delta 191 zcmX@NK=|AO;SH6H8k66NKA#l4WEW?dM$++(iwY*b=DJw*Lj3)1^_>Y}_5b_6|9m06 zdCjUn%?laZ7czn{Q~N?j=Isj^Sp<%1m>8Oy7#dn=8yKn^7^rLN`{t*(B$lKqXt-Dz z85mj`7#c!UY`=Mo<q4~^p|PofiK&~Dk%h6FtFxP#k)^4HlYyJDg`uOVv!Q{3oq`P^ LCEL!j_%Q<jI%q%A delta 191 zcmX@NK=|AO;SH6H8o}4Jl=C>4GaaHKEU^`X*r(M4Y`=-(^%FFLs9-#^*+pD&tk z)>!qsc_Cx_LPii~YG266ynP`fi@;G0V?#@0a{~))14DHK19eS(-~1Gp#FA764HqjT z14By#Lqmv)?Kh9HJYjWqF|#mpvoJI>b}?}=H?_2IaWl7cF|lxQaWu3vb9HgGQ?MbV KWZPL5KV|^GVL!S6 diff --git a/20190113/hp-20190113.tex b/20190114/hp-20190114.tex similarity index 99% rename from 20190113/hp-20190113.tex rename to 20190114/hp-20190114.tex index c176e5f..96c446e 100644 --- a/20190113/hp-20190113.tex +++ b/20190114/hp-20190114.tex @@ -1,4 +1,4 @@ -% hp-20190113.pdf - Lecture Slides on Low-Level Programming +% hp-20190114.pdf - Lecture Slides on Low-Level Programming % Copyright (C) 2012, 2013, 2015, 2016, 2017, 2018, 2019 Peter Gerwinski % % This document is free software: you can redistribute it and/or @@ -40,7 +40,7 @@ \title{Hardwarenahe Programmierung} \author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski} -\date{13.\ Januar 2019} +\date{14.\ Januar 2019} \begin{document} diff --git a/20190113/hp-uebung-20190113.pdf b/20190114/hp-uebung-20190114.pdf similarity index 72% rename from 20190113/hp-uebung-20190113.pdf rename to 20190114/hp-uebung-20190114.pdf index 3bdbdd519681e19b5e3134efa85b0deb6f702f9e..15929343d34703283c19a9ed6a786e52409b5449 100644 GIT binary patch delta 15222 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 delta 15386 zcmcb8jQPiL<_Ri{#*@$Is!jCXT<<e+?^oX-ztjs%%+KsNH=1bM)VDwGbeSZ4&g8e^ zq)EMDsS>U(H$v~HtTMClKF%<07Gt&h)U%&v8BH_)V9nS3{??~$fu1)vt2O`jxtSiB zxn4^<G`0Qzsma^&R%eQ^o!Iwx{vo@ci%Y#HO*k8Jcg0dIM~|vJdGYHZ8+L`|ojU!s zUdrIR(aH30&+~(YShbIL@bvzPy0>v!r^`fzuzU5)^Ce2|lrU{cP5#mPu>bN5mQ}m1 z>#r~>&FWyDuxOtCXP?G4mw9KW&lTXFsy^#%Ueou;x?u6h%Pa2OJ8&m%?IWF=r4p^o z=aMI^id$i&IcJh)qxlA7hfvK3|EVV=!;^)TC0*+yav0U8H>kh)@FmO3(T`bqH(y=i z`uOGpo|D&}`sKEnmHEO^vo~KhCyOMTJ)CpcI4%AEgwV2WGqbeTZb;czVkPQ0>&mx> zXQ!M<n5yqE`;^_Uby2zuJEkqsc;mZPDBE^(+|~l_{|xgwPaOHjSzP}?cwU)|P@iDm zlJko`FXZldw!2=fJnz1*^TE9>2mYDdlG2yi_U&U*&t})^1mQ!AIG6K$yusSHKlN$M z?y7rDao<+TUFHz%5Rm(7|4Qv_SjNwzQX<vYjvkm_FlB$H&zemo|7Te^MR?8sbSxlD z%kYK#t(@z>ERs4B9{Eq6+N-?iVVIKM!3lTNckwyznxA}7VA-MNUiIg`Zx(M(`<VR2 z`H%$T{A9W6(wyl%4fi+w2sz2|tm9)vO82%mPDcdG6hf3XUgoi$#(KMO$5TPu7p`Xy z9bS9ppw1-2uGpTx#rq#Q^K>1btnp0aneCo0Ws$N6mO3croRWK(C^1POP_cGZvjNNY z#Vvi)tyrAdyj#yK-?e$-hvMy1>-X3&{Fj($xY_-{e5FI%^?tWTo7ZGsEc$*kU0Uo& zLW<5KPnI|p=bOnn%<;QRSf4z2F84EWp5tM~6g9c4bDzC^8dg!rw0mCniF#S#?@A4| zCvGS|n&-aKWa-Uyp+8Tr`jt9$+3{ocjB<kg%dDSNL<EUA@A=*#S7s&4*x&KgGj4f( z>k?UWb9ND-ro%_=dZ+z9*z_uRdi6WE5RbE0rNo8U&TL`JiwWa4uKl!f>&e@zH~(LI zQkn4)qiN170mJ7<Z~EJ}PZpV1%RF0m^2aCl_C&teu6Td(<eH+&Z+|n`mX-1c8%VvK z-K50%J8Op}>k<*C_J-h{2Bt^&TA8{epNP+k+f={n<|3woOc{GmRs&{b|KLV}4cs*; zq7C5&HbIOjw@#(CtaQ50u=UgA;_kKWr7jjNIcg8RVm__@6eW9PTikq3&W)cp3ZyPj zRGP;UXzS`SkLBXzofb@s=EZ$;{GzE<AW+-ICF5ehic7}DR#b-ZLSR8!jKVF^<ocal zN483T6BDXGzIW?sS&fvQCeHmy7F*s1bP2Zax~Z%+X^l<M`o$AnrWDWrx58IE$e88o z8vmUe7k+UPylY^YwtumT(b5l|nfk3PeeR2`4t?Y9nz`!L{JL$w3OujQU$;)}d7i?Z zhHvG&r0?e6<4rN|IR8B@T(I#{o4a(X^N#Qd9B(u~YSbSuJ6gZLW=mO@l-h^IN#~Cp zY?PDvHg(;*zjs~~?09!wI&JmTtXo<2!cDI_PP?Bh{ZXXtvuDYtz;)X%N)!mYPiXVn zbgpHR+$vj6F3<O&0^1%;cmJArN}=b<Wp0m;O*6ehZ?Aa9`Ic48$mM0n*2OXXj^8{E zyfkmQ#qGiN(vJVJ;nl_x`FbM(5zqNAwir!wZSXe>dZyT(w&5_xi5Qzj?Yy&P*}EE3 zBYhM;rv2OV{MxcyPEjWow|(=yPB@o*Ki5>kZ6I-H$(>2@X{s&Ja;*oAGT$t?b~eQJ z$ie>L%Y0v|CeQJ_Tz2(*@ZIJsChueX-*b38G_+>v>XXPn!jL=r_^UPipEq2s&wekf z_wnhiFGseX^_^dGdHJzCiCcPs{WorkeY;lsAa0-H&8IbyD|5_V875!f-E#2vlD*mQ zN_Go{-21NGe_d;GL9<bP=-%aaj&q$?DlOV<|MGnN`ZX50h4&iyK2MaI!Lpx!F7G85 z^Q~LIMJ~vyejEKLNBd330<pYbt?mbO4+Z$uw@f^L+`Z}cvVOz6&y)RZS8g+Us<b1g z`w;JBo9l-H<k-tsTV)&Fxac6hbl=hD|7xf2^d&#eo~0DpD!XTu)`yQSoB#dRlfSO$ z;U2l!E@xiWKAq6!1g2BEuN?k6uJX6hx~ylu`ru}hnJdrOnNCz;Uaax^#oYVb<sZ*+ zjCIJoqU=;Z-!Ju@K*GfJX`b)u8cG?ju6yBm=BEF<Uta_&^Gy67sHjG%Gv=(GFK0D9 zVZ-y}O^+j*b|iP^r|(~NJ1sPIRgO`v;Dcp_?_*v{fB5~#_tJ`@X;ZfU=GS?%Da0vE zYtF0tCFw$*ue+?<69uRI>dD@>X7;;1Z-caVThG~e{d(mkt4;MwqFyMkw#ol>c%N*# z)U4ZYj!yP7D|yhPsQ)eHrJtEc(U*&Ci;v`(-m{UeEL*-qA}jb#`xKk)MN&_1KYYO8 zE%BO1&Oq8g>BE|3);p#252%Xl*PB?scGDrD`mI{;Htm_u8xV1ILw#DRdG)P>6`vDc z&iy!d>BrQBg#kPJ!dAVx+F!3xkPw>ErnbE6kgcwZRATUK3BCXCl;#+`muSBE@IZt_ zk>R7sy3dMlOh0U}W5w(*pLb4qcfH*u`zp`=t>Ncad^?%-C#7E}`JU#L&`J4^p0>{Y z{Q6RyBIoScKXU7AFaN&0S^V~?NUocYex#f|<GyirQ0UcFMUT@xXNr3MJM%9p>wf*^ z=1ZO-8nNy>sy!D5xtGqL+WqV1wWoz!*75)Sdh~d-efZr^ue}mxZ`!?_ok`%x-_oC7 z-9noS3{Pm9+}rIjMf90O1;^LIJzf1>;r450oh^7eZ|~ZytA7&rBtO{l?n`RHi`CNa zSYCau2#~I6nb2nFthoH%mA$U%yKJniRwXX%Usk`^aJob(<LOsB_C}Vi?P)#5n7lXd zRquhvuZkugtuCur%Ip(eE<N3k`PJHw`?vKc9&R}Gj`N|reAe-e7N&nHQu;aUH_v^T zURLu%k>|;xCn@*ZQ(pXB9JY+fQ*l?yVUG#hKHm;hQTVn<RxY>Oyrtm8(-?vJ)ymzf zCt{Xt`FPZIcKy#+|5_FlYE(Gf6$r9Acz`qQ<GncN^)`(KI<=FwTeWsI-HvhZu5;h} z=E0rERi>?rL}l2Vx6NL#(0;|Mr0eUfJUIKc?^-Qni8Oz?Jv>j^iPzIE<<u05Sgs@? zmK&y*{#~Bzw<dPZZh>3dw_SR7&CHfZ>FM<B&X*g7+=IUVY^=4cH+cMK!x866$!9B^ zDw<wiu=4En+a$kaVhGQh>3M7SEZ*qiyy^NXxhwYq;;j->{?DCVa(f1k-HlBGr{rRJ zzRb^AdOke!`^C^n*ULU!J^Fp^*;9?r7Jjs!JK1r*+p9=ZGqLCQ^c2j^(th7~<ooUZ znwdu!KP$}EpPjSNoag<E&68)e)K75gE}SU4TdA7i%J!K*=jp|&Uth++c4B|gpRL8Q zzwbotO5L7rx!+jxvIv(&dXT$G{LAX^%2MI`Uam;@G;q<6=vpgXxV>s^XsDxZTK<*t zXTl}|Qf1H5wpgn*?8v#cU?N{hx0s%xk$hlTMB;J<-M&DVqq8DpOJ*w`-LU)dPVf4l z_bYGiy0B=s`n#_iA119<xIN?b><9eimEYX2)&DOuJ^JC?`|{kx*9(l!{=T8CAfo#_ z|GC1{$1(|97CLGRwe0h-ns_gLY3|{auiVxbS6CX0eEaw}<?qpnDtDrH>Hg+B@A-Dd z-1*{$Y5Vdd))j6zx#4ZHZS2V)51EYmBZf7f-(F?E`Ja);M|Sq+ciat}jHa9OMei{g zIKMso>ect|t2Zmo-~OEc@y%q3dlv<RQnJ@CowoM9R_{ftPt#*I?mQV@uCnIedi4zv zo9iSzm{@vr-tbIr%oW*uPwGYxlcmvQMrmOdOLG%*P*c0UA~huD;v~~|VhRxxj@@nE zZEf<-kGa>>q}RH|p@2i+4igKnpF&2#bQXT0J5A9|Ch{j|o9AEq{p|XgKRdGT28X6! zUw5nY+^*L~mzYW|Q{O0<DY$k>_e`GN?Jlx_vux|fPgk~<1wWtCy5k1pydI{Ao}QwB z38p+eg_F0pHM%gi)hk#x*qjhMaGd>tsG#7%B$gA7cm6I&V0V{jaE(7cVd~tukK?D= zD>6v$udkX{R@EeXhr!2R|DJ+)$8PNtyx&+p+TUBj&BU0{r_f+~gOz2%WhSZB8Cr}H zQ%t@xdMTI-T)D-{@MTjW<87uZ2e&Dh`wM6vkYi%q@h6#aL+g&4jsNSXJUjWdMfEY~ z2DXY_%{d4CZ#(SUrtsZfkFUX+;}zGpFEv%{4YrJY0omp^g835!7;c=scJ%Z+{zmoP zwomjG%Qc>89{PInI}2M&#UY#Ag$d;n4>Yv{;y%jTB=%j~V87G$pno32k$;+(_>x|K zUA|=hKJ^*u`e&rxJmYL=tVygds=wL5P?q3dE}p%A`5pg+cL5*brQ+r#n77v(K45Tg z<hvGNEk0rSbKx_>-{!yjv)b=K{mOf{?%qB6{(atw`z!uGVQ8ytig~khL&eW|MYj&k zE3$65yJ5$Fp02Lhwk!uuf9BskclvMp+ItEw?z3(DGgI=Ky3n;U0dsNt2H6vG-O<8K z_0?XS2|wqrJoB|){nP)(BmdQz{?9-0d%y7a`=-D2+kezo&-*VMb@B93*UPuQW-|OM zJjgIFPr|>!>cM&0&;O4`?QV+w^KbTxdVUj@zs(Qp*%vWwuFGofnSFS&h)s;me}g7l z(S!RGtQ92EUUO{NURL?)V*KuXvt>D6F_kgfX8zn>-^<_^$Jki^`K4u3?%ccoOkx9` ztml4`_Wk{t`A>eHo*nHMeAR>P#J~63U*6YvF!_~%t^IfPr2m2KY)9VNi`N^Zq$=)f zVDO7mtYc8O@4s+4@$p0Ujy)orzw$r*WqtJbdemVlHrC%vKJ&YtJ^UN}tKQ~+)Xe|V zJx#N9kGwlS=f$D=HFw|4b9-&iTYqO;T)>OTi|YM<2cP^O^Ix_|;DmTe_f`w`jiS|0 zr%as7xmxwCyu@Vlw=bW$%5{|dzpx-YM&y^^CDBQOf1Q_HdbLk&(&|Ddk$bPqs~`N^ zu=Lb6+bh104&9l`XQj7<XHoj!pf5SCD}6g^t>@f+#GLnRVPedIlRdxcrMfy5`VW5l zHDg<!>q}dyt1i;^B9EW6nNGR4TVu+Mhqq+)Z+wfbee}7k$&KaEt?%sZKKbAC*3JCg z#?Jn0_ql-mIeQb%dml*=*{sIvXT89;^=G7`zI2X!jfH*JvwgiX%eTIjbb9<N_He`9 zvkjYcKReAj_3?&{b5p(Uv2B%_6>jx;)05(-<~OZ6cSn2Xil3p!4cs3aBwSu|(>;9J zo}xuRp2p7PEwA1okbBK{RmkGzt*>9Z9TR8D@Tz_E(R@?>n>k_X6J?o{A1#dNkB>Kc zwv^5K>&Mhjm*3w_4z5bJdLdmKa!76ef0=}^ichCS*G(+fVlXtHGwIN?Bh$}sW!qZx zqpV)})|Hz#kBVNpZaeMkmi2;CH+y*l*(B%gZLM7-wf@!HYR(+}#Ude>WamtDPd+_^ zVZ&5)-WO-QuCGndN;%)6T2)=U^v|w!0Uxe1wuf)nB44CZk=@SqLXZ3JTJx1<44==c z%KbBG+Umd9vau!hckU#e%q#hU7grzG*>I)N#<JJra{XVH?WU&QY)!37<!*jH)#r}4 ztK?@Et$b5xGyR#C)<(yVMZ%fSj{f;rX*g-c-|Tmj&6T&UKfR5~OGhDppY&rM!2_?E zWnLyTSjFvbQ|e17wD9c-4eq^SkRiEs?Wrw?r@nTJ?Urb@+wWKOa%!UI-ri3gksr6m zzufvX=|Pc5@S4>6V{V<&Ewyh7YQ*LpXngJd?h(^+iR*`VoPV|Ta+CLqV?k5n+wAOv zBbQ8h8n$G@+1V5Rne;fFYJag|M*ZwrUv_Vr-q3b$$LFdCe=7G+j1>9L5%qJ${Fc%k zlcw)}yV&Rd-zvdpjhul~&R=p`HA8*o=jjPgthbzBz!F?{<*ds6)mM2;>n)aL9Ip9M zZ1c{eHF33gym!Uv6L;set4va4Q~K-{T(a=|*9o8R{m)x?<(<plsI95Nl5=-XoYXJv zw>N0|1VK}&ISRiP7r%UZV@gg>!TcPpmoC4*b>4b-cI&f?9wHT7Pgl!47o7V=-7b~u zIzLxo{M{)P`xMgeue!88QO(`)>IUVL^^4!~dQSMux-Mao)Sh#nCd<aN%-#C>Lq%D) zy~L6?YK45YGv2V-#IT3zXrJ`#Ts!GzqutU@>5Ai~ZsHRx|9w*0ZS~>>=c5zflb;vQ z$*Z~+lDw|xiG1X#j59}<UifrWbLP3IY5S({ef+R`VbH{xQMKZ4T{>Pzy=%Vt>1O5b z2T?Ka>lxm^HktpJ$(^kup`hf*$DYF7Ir90<_y0KXoVv4M_54lKPkm*5+M9aI<_?2J zpm2#n?7~Su1#9y@xT`rCo5`KZdLCW<ZPvZ0Dc8NUjhR=ykISpoSl{e<_({cg|Hl>$ z92|4nMMdYPo9x|Ju`PnfWKzqy3l+x?UpxECdDW(i*WOI8Kfkf-v#8^duQC%&9Rlwg zuN9o-A9`@X%}K5Qez&^?eTia})yd7??ECJb{??eK=ax?TtIxh+?RhEAp2OkKyhXY~ z=kQK3Jn0w}cc|oB((KzNB~u$RE>?UlIgsU<wXy2x3dZNIy8=R;IG)_ec>8BVP1#nN z^RGV?ELm`D$HJCBr~W(Fr!;e%js7eBbv={Fe#M|H`DAg^UAw2v@ji6oeK(Kc+qS^e z#))(Jiej9P>Al^2k!i{bzA7Qd!b|$H1|}<`Z7o{F6MszFa=7p+?}5Ef?-=cFTb<&Y zer`kZ_C90gmlw;=eiN)&G^u6%A-QzXM=N|Tx)sa%URv|r{ULWkhS=QpRjT!I0gHdA zJ^b8sb=9^n9e>N3&5Krx^c}0bGwFJast)hP@;7#O#rE56`FOYHY@U~~lHG#hwJXJ9 z#KPOQ%3W7Erjnnu==_Y1%@eo1)=Vi&J*gP=QR}}?lHSvK_t$;AZ0ES?VwcS2qQ|E` z&r$uR_WE%}oL=<R_yx={ZQp}+d|zb7H`IHi&GBMCZV_$wxFhIy*}2UD9A`~R%-Zc( zJSHr#*4*9x_sWKI`8Pb7RIN91T{ims?N|5aw|bK={*z;BT`#udLdL}?voFg!<Wjy> z`knrHG`lF@YI@1r|1KT(c=!5tN4>K7kjcfaJpHcB-nVZvLodDht#Ie8>0#r0NhJ#x zX6?z$uJ=>gXq~^R`>gE#6O9v}ba}77K5b#$nYgFcZ8LxA9-Z$TwR8Q)eJ@vBY&%m> zyl;M_>Ce;8pWi)Tk?6f{;??Vq-aoLCkW1_l;r^$@7`E@ASg$rm`1T`nbQI6<&HG{D z`sClsGm?kpTiYi-stI{qCC9kSPqzQ)8r|Tv&sP;|I)0MTukYH<d$C!&%ILVuI_7(2 zYEMrnAO6|%=fim^Ia$4S-OE<5L*Lt3yf!dbQfZzeYxZz*EZbj8rTuCA$NhtIzI_qg zdVI$=!|i2L9vXkV^3SX>=r;Fqv(Mk>mx@RwF*7Nf=*;9SS)*n-t<RrtdE_GbnfnYo zAL?*SUc<WIboUbRbfvs{=Tjo;yBBqzU&D1XYk88)zjJ&4>^pp>@b%vQ|0_RFTW~YK zA=&16bK~+)%*>CNi_%_7Txd~z*6Ql`Ijg1gxyscIKMEf_Uijr{)%A0W9oLo}on?}3 zHBtNI4;B7RmzF$yUF+3ky+p)w<EO2n?}9{{Hcq+jbzsR>wj0Y>{(ctfEr0W|K79SY z#QK$jvyx{8P7#0IcRe}BWWV?QHR9^C1q8pOTfDdxFxkDl@|a53-<$%+ALpVTl!yO` zFt`7^UaK{^GjP)`)6)@3Z@bI)x$v!8y1mioX{@xQD!crJ%b)GaYqa9e*1deW@9TsY zi&R79iw{=X&zF^6`13V;bVL$Q|NME=U!AW1#I$y<#LfneEn=>AOE;hWn)rl+?daNB z>CHk`=XpX4t#5tYv*D=VM4{Nr_c}9p4eDpERlU2&rD7+Kd6vn?gqe$lcfFnW*EMs> zdW$?kRnfP7d*&<31fBWtNTRvBVPAdG>{+@c%8QO=KiC#Ar9pg0(>Jxqw#w5}E)=$Z zTe$7+k)!nrJ#AODS9~ihowTuNht(AM+3H@g2hutBXyrUE2&n8y%Dygp>YiT0nTZZJ zdMc`omt}hRJQ6;pzvS=3!2OTE{A0~JoDt{8;QLBo|Bbs<%()3iGEOhln>nE)I@t9< zKMPMqvB>x9MvWZ7FXx|`-={LMw&2C-C2cdeZ8K`w<La){SwD~Yd)%T0ISE_Ju8U2I zeN_9{nRD+)1>wgJ_Zbxk9JIQxlIMS5&l`nQ(@!5Zuhrc7-)P0|r#l_*Ug|vk%J4(M zyog7aC$#9uJUTupS%0Tn`y<WMChV4b<4>LL>&^CJ>$_3EeW{tXcShosD_>WK{QR3> zV7y)Bl=?E$@P(zj7dGW-)Sr9!ensl3`7+kKa%wfUNPMhRH{F>3>le?|>ML6czRc*E zQ}Frwp9MG4$|pK6pH}_hh`)^4#QUzl^Uoda{d#fP-8p^z89e9yp1x}<{f&?5m8qxg zUbTtKD(c_pIzD*XyyVc1{q~=nb_KTg3AL=g&Us_A(^;3pvb!z_&H8jVhUKPrd;Q|2 zqTAm2l^*+gs#@~1?7N#=Z?#!m_#FK8$H%b7{H+p`4ln<_<YA-v<k~sQ<5*_hx!7W6 z%m1W9Q=d8V$G7HLag4hcNO%{P6~FqV`bbGiIX~rjz3`m7?N6>~Cg#RWuuML+Fg~Dg zZG6}D%lhFStO~m(Uga~Bs&g<Eoxebr@Ai@j^}dTHXHV2PzH+aV*{Q1>Ti3sMb$L-z z*^2|Up;vcqtGPJOB+6}Cg_Og;-#HGY_CnDHTR0vrIkRxvoV<VO2}jkx?N-@xX6{4= zc0UK5vvVYvq;tb|ub8^-j?|RmFKdqPU&?cmGb{4*)nImAZ@0s@wkW*c*<Hh@$$g*k z_%rJrd$)dhRPT7k;f=SVMq8WH>Zl*yX`!1G-aokN5iGlAYtw>N=j<-)$sE&`5AD%r zl8><A4ZGDXZJIAS`O~}aS0?c1JaTsaHs9%mPS(>&O3CtfD>oFzRmH!YrmA<VJ;-2> za*nUhmU>ftkG$25SLPn^d(?VivGhC3)e7(D?XhrO_@YRl`t{=a?Eb!~;_hbU%vIZ$ zR4D2kf1SBMB6e2eK@q80$Nza+x!ZR>d=oIaC*;|l!km`AAdzslR0b)(!bzq7-YnZ4 zwC78+*EcOGt8m_*u`fcJZ2I>e-SoHdq}rCMxtS0DoGZI1|5t0xy)PBlAAOW9l;d{d z6moo+``y!d-`%oxCvxN>66#ggPg;;Ty}r|0r|i`12Qw?g&ou9AesnL$ySJdfShBhy zb;dk-|JR567H%vGlWFCfcVNbbA7$~2&P}WeuvfLPeGuDzwYg8UY5(Kn+4XbNRer@z znQMP;hU4L$(7h`@-WDvY+rnd?w|uqmD)s*6;7_fa1r=2m9h3X~`?h0s_lvW3^$yLA z(T^ItZbucnzU5;(Y_>3V_viC(f4oe7_Jzq@_^)eP!w;j&J64O{s&M?gfv0=phuGbl z9-X&asJeq;ZlS7?m+Y>nk~<xTB-Z>=xy&;?z2d@Wt<UCNofXndW=wOoZMCqT)pm(x z3D1{UwW^4WtI3B%Ro~TmR<wMc_V?7s?6+U)ZL>1pJm2J8lp|VN>2+kSu6|V0$IX)Z zQ9pW?O*wGxvAgIY-3)E@(5XomU;UfZQN?w6)4CN^f@ud9uh(d<nYGfxNq=$CtWB2J zmVJxZpmtB;a(?AB8xyI=GbFFavbpX5w0r~4x5GiN7o0l1?4$7X;N!YVr!Pww@mnVp zOq2UoF+rx@u#cZ_vDLXd9FLYenuc*5w2b~zbM8K8dGueo*4z$8k@>tY^x|Jf8lUM} zZ1(fWqFRmLdk#HNzH;b^gw=sW$(|D|%<|t?9oJg)qV2NVHNo%YHhlM|*8bXS@IH8l z-135oX~BD(*BUlzw9S0>qKet&<;|3>=Y#^k7f-C}Kg*Z1JgxrUR%8F8M+z@?AGlbv zTH<U$x6CuakWTH|17H2j`i@MG`PBB9Wj?#|{!1<_rKSJQ9aH0vn#*=}<yQHJ>(!R4 zHLARCRj#wS`>RC7`CgLuF?Y4|XHG2*>Gz#`a`M%S?$PQyUU=M{d&PB)p6rf?+pcv* z=VeW?<e7dhbYa$#+cTc5bgGw03QNz()2Q8gDP@w?g_FCchG;C@$i4LB^gEjCIp^$r zVK;aC#Lp)8%vR?;2zJf3dRMD?Q_kNx`~AY??AjxWQ$kBb;#bXHre!Fw-Qe{h;X`Mq z)d%W`dd}b0{9=>PtT#7zr9S<`=Y28cYQZjkDVKXiOsl+Ny7w1#)r<ZN6MDA9p#JOP zat*7eTd#M^HyZ0dsq*>0^^Hcz(<jFJuM537=FeT%aqRQG#V47sN=wvwStK2wQ~K@* zTh6KD!s48knse4ay5J=kx0ZL`x8TG}Of34rUK@UeeGxK!y#AQX=HgzX>nWA{!<1K_ z{9jjhrzG^*^Tr9BO+`~H;`SHy3$9_k{wwWw{i#gXZ_<~{PCF>X25s($_d2#=ZT{Ue z{G1bYOZPQ&O=c7o5_z~Si*er85P8vn2lv-m*m3ujuXuYS>i&z?w`?W~+m=}V@_s0H zL{04<*QE1G(;Z*9SNtftr#)x0$of+fIg6s_x85!}A86paNbypEl85Aii*p|T<#jcl ze2KsApRYvyL!q=2R>dEDk6xefSV?2T)WoQ;*f?GBO*XE12d?~D5q$f(wdpB|Ik&k2 zOFm6I!yBBn(yBCRszPv2D$|6&T`M?3<(ch`x`kzSG<ybG#%yxlK2gIu*RN0Dd*75K zp$X2fSd_&0@>lj8JI?wx|MJ%)rYaLvHkRY-JKik5bBjI1wf@oS&7rcTf4N;|%NO`g zJnp8h#K!KO-!$#n>DiyPrA7Lck~n+rnB8uU?{i;y*eS#(_W7BW(*-Ir_Nndn@9W;2 zX{D+CxmcRZQ_@WCe@M=x|49!gCVA*QZZG>PUGk&jiSN2z&FhUnK6CD$%`R5AK<&p< z&SS5Ya(;W&REE8a3I1E3yfpNx&^A6U$N%3%j!SqMHc9MS*WMy(^!3bMlaqTmUT#;Z z+t+RJC7R{8pqpWsSxmc4;A}w?N!JIy>sNh~5S#Soc<G%|CC8UeTDkJsJ~cnCD2P0s zD#mE_J}BzY*IJi^Epw9B{dm{CR$$}0q*X7|S4m9wI#CpFpS*GP$u*AytLr^H{su@r zkqdli(|3$%;@3QPIR=Bct685P7^E`0S@1K6n&-t&+GXL=7j$M-P0RjBU)H1Un;uEA zmU<dU`))kMxmaua)BTB$r}UZBDC+25Kh!6|I5RA{mgAj1&!z`C*9{);N!4?m{K%wG z#D*dF?Tv*ttJSOa2ij}-)XbIQ3X-Z9pKpA6WzL+ny@|_qoB1shepfNM?Cg^%`yLc& zCa1kpJn5umc7B`c^+&qlt5&T0y7;o~XTJBpr@T@v+C1xuYulBSfM2f<U5r@y+R{n? zy!rjLtuI4g<j$S+a`8dojfbL5Yp0~B2wt_lDJ*}xOz7y{XFg?%3|HqJpR<-F{?_${ zQcIKTS5JDsPW*-39JSRBr*<!wI(Ej>-T(UKvk#VahP_YPq&;CrM9Nhg-|KvdotBK> zzA=Y7xg_1{JYVweQ?aH<%gHtI9Lx8a@7c(9OQ=TpPhZyjsgILB2zP9b+T?Wk(dM^y z(;lh5ORc$mXGzeS>#dbhwKtxH-mb7pvIuxH_4%p~ipOf|KOD&1CaiiZFidTsLDygI zALh5EP2$U^KAjkE;G+2OdjHLWggGn38x_}c|G5)%O6z@l|CBm0ck^XViRKe)Udeu} z(dkyZq<m0jW=Yh;+?gGJ&L{uf<jvE#bDntBJC`7y`FwLXURi9NqLcq&<N8A`zjIsq z%}?*{`6LnXxpeay^QL;fU6~U3HVjssue)q*jFj~)_G#bTaOeHQ^D9<viE&>L{WYD* zaO?Jf`=`3Tt0+eX-Vf&y_Hjv;ygw_m;LxM#?+SM>JT_gmCEwTkUDY!7)SW>|ck1W- zTCk~MzNvQ9!}8wc?;jjrRhs@|_7S@SIa5NT>woo>-A|a~C&Bf^cSewjNPX0C_gC9p zmrvE5bLFnvFRy$RyVC_(r-gQJV0T^NeZ?TRUZb&a4u@s0=B(pIh4Y0^#T;32!+v`2 zo72hxIS-YDcb)6Iym)mqU;P)qpk#$Jad)3<a%4R$+Oef~T4Tl`srIKv9fk9*)<sJ^ zsWHA0UFfIv)wtuuA0wB!BAUuo8Yg$ui{1@3_1{<>==<bm@<xZnjCr!N%R_n%7yHlM zyo<yBhKI^r7PEtSMTbH*3vbvQt@=89!Bs2Y%i9jjoO>>Q(UkOwVGF+aomrkZ=^N`& z-ic*``(<ZI%<H=FmSe|dqY`J6K=#~@lIumY!oD9_&9L3Rx`jWHW6!1dkIrG+yBP1^ z*E6o4-}p^;&z(4jCpVdme!tr`cT$K-?|de&@CCoijPB}PK3XLGdZ*hLySh|PD~UhW zufOh`cGmo&_fln*cDDQ3d)=IV2Ysx}WlOzZ;mkEPxZdWp__^D@2Pb#DUD2h)BvIn1 zB5!CQP`|y}KKj_9+}P)jg&p=SS)$GJyr{)P<Jav!UG;n39?P5bVw&6Yo$;;W)wOSg z9YvJIyxaXYWP80mtv!EQuFHP)<B$9#u6g%~>8i4=oyzWa{hGRIxZvuS_P&MvXRh46 zIOC4=z9)U1i{6)->5AEH`K`2WQ;wGU`V#(IjAaiEORB=z3_n)x2;0=X{>vAA{Y#O- z1^2%?g`D43epAP$-bF)tZria_pZWvle$W1WDfIiH7I#;^zvt4HG6elm@hJGCf5=^Z z`M%Vh!fV;S&zc@=XAq|O=<|%LF+0xhSYkh?c8hoPx#KUT{#N}KEZmytDwn@$7uUA0 ze%lsmX}{*)Eb;UEhnCAvt=XPTOxpaj^w#&#w11oRg)e5$%Ijjf`8d?1-jw_4!6^m0 zf9{?<aePyo?z;o$;(p7@7)hF^Jq@eB@7eUJWKPlF7{hBXzV@Fod{c1!x=-f5RWh?5 z7iAUJsvO{qb!)5rcre`ZN2U49B+C<hwdt|;nhRr+vkyrmS<ZG3PZDzzJ5y1$@6nrX zg%U^aeLrrw#ecgrQ(~XTS|2X2k2mTM^(M|=V{>}%_KZz#WobQUe&oHL*1GRKU&FD* z(H~fAL>-G2qAc_m|KWJJ#8x-Hw#V>%3j2l{pMtgj|9&niJRY|u@>_WHRN2dUMd#~6 zr>;2lpXHVHktItDoDF$y-hKA{(K-7bTfdmpyOUq!wzjGr3f9?TaC@2j(WY-ayA&6H zUskVvz2urx|JfgAS5va%l#LV8Kc7C>=(vda9cz|<;wzK2p)tWRYSY#hr%4_DQ0g`9 z+*D!fqP&X84X>v3am)VuSr&Zo+MMnR&6y^x@=D9aW-M}<wWc~G=!w_U7YY6{(P0c3 z%$I&2Vcqjkr%E{@KiuETn8#5d@K;Iyvq^Cp#<kV;OS38ke{6pFym04@n-_OkES2_U zI)2t+ea*zqER`zlrF(bGtZFH0l{!|}@Y4L~%*aXZ>gjqbQdt7~rdOPN+`09W{w1!9 zrYgTw#ceaLyFA~0v)tKj>gI~zXv0?T-3=4`D;;;fia+S%&U{cYw$JJXpMHcfTg<Jv zH$|Q0H5XKz4%ENgW%;LKPjyz&QlCY|4o+oLePZ8lxNQINSz=PE;i;9rjzMyg|F|yy zczkr(o6lM`t7bE<Gu&$WWzDDchaT<o+MhXR>YLl1b(7Mb2psU8IpNRU$eti}(@M=R zCVOw(G*_6Yos=J~8<rmQ^2?6Rm$VOWxqtJNfwk<%9}Vx;-sJmg&R(yT^B_g8tI|*R zVcYRfyE3Jc18y3<(el20V#QIDJ<X@T=bzqfQeJj#(!_bW`$Uy&vn-cR72KjK%6nv$ zaBpVMm*w}1<~`(ATK~U7f6{%ORi1*!zn&1{TNyQ_)aCml`%@YP>WANj{T2*u?%2FS zX3B%_pWljmAK0xmiAT>dM2r8<tomz9B3(8<`LW&TPIn~liLeqzkCj&@hE_`55?}S= z>(8mBNwU*xS~nhOxe@&FDlcobc1*;*W4WB~8mw-&dX`Qw{JngQYkI2L#OT#kzw%ew z&Yj)+e$#3vu}$&n%L0}ai%5&*tWLUK#P@W*Zo=|@H9z;|*B1&Em2rNJZi;;JT3jc# z-d3U@Ajs%M@6nX@(DT8%`}QRMj+vmL^~-Z_R*qfhy?bw+>X$zWcMCegvR&M2EyLt> z(mj*gOqbuB(K)sD_RguBKLzeduMfL_FXrgVYwoK}@^8IbrzmpC_Gs`Iwn(;(EcPFc z_MEu1Ze31;JcE&)*>NGKBdPZ{J$UnLtybsOo;3#b6|S$F4lGZe(ebJ#f3ka?fo|<% zX{OkNK6_%;{{H$|jHB+=i+38gKmS>;>3(bTJm=$guC}waWo<cb(E0uj`v-mL#imU? z-6i^O+!pB?GS9l~n=Gqz$FFmq@8n{Zi=WR#3ME-cT5l}ruQxj4S~=O}>>8owzot_% zr=DEhQQq<JU3Y!9`l%1)XS9E=bljC7H1+6_y$h>LejMwo%kp)6xU+m>)(sC?2~DXe z<(u-Y?A4zqR|j}{ey_c9EqSF!s9VnUKMIA9g(A0p>o{yw%w2G;d9~H8+y$lj4_l(E z`_H{~7k4+Po!V|GJ87!T+{)tcbBxy$Cj?*0=DGPLqh9^cWrInw^%JkfopTlaz5T%T z%#+5=S2eZgg?)Ih!tuc9-qV#+1kT)FHZ3dprM_18tyi;n>>OEV7S7pbBh9<7=fhsD z<9mO2{N8Ie|3D3+s!Yh%X$s9A4?lP>TiM69#K?L|-Y>0v&6&K;Vhh)A&~z`>h?xJ# z#ejL{z2<AHj_!-g{j*_ulg-4Z^%g6>-kIIyFuUx3G~3=vTU(B=o6k8P*mPRlZ^s#t z$_lYRTQ3|-+-3apfx#)?4{0X6U;AfoyQ9ab`o2{BZRE`LK|6i;<A1hFM7&?N(#y|p zYs)0>fX$B?#f2+Mf}?J~JF&$z#JT+GT=uuM5jrtX&mG;9BBp(F_NC26o7cS2&A1j) zZzDV9z_I{q`>z{4xfiY4!+q9)VQTP<zity7$~S*)UHpu*?*DRYC1+oux4I73RTfS7 zFOXhuf7hj!?<eP~slTL;8GP95b5LOM<=uUW_o{Xt>F<lMNS)4hrzV8sX}Q^+J?4K; zy|K-8FuVA8Dxc{luaG*i3n9m^q-$47>b#n)+oM!pwd2{g>O+!qfBbkY+kMk4ME7m{ zdKWf1riDunoAD@3yixv3dyCdfUCUodo=a|gnX4ut&+4`~NBK&{54$LZWjVYt3KP3_ z%e?Kau94Y$yY_dso`+WX>G(_~^V15vXFoDb?^>L=<$Uyw$%o#}Te(5#=8WIEUs6@_ z?c<GV;^fb(zplTM^+@9V2lg7huWi-4<aCPT#a^k@+jN{tJH#0>FE#GwH;tFNo3z^= z3w@n1yJQ1HcGHXf?=H5L{^GiHtZ%~AZD%%H>=mtxxjW--!_P^-cr1eVSg)KqXU2+` zb0d2*#NMs<w)1)4ks*@5mg9J)#I=cE?!AtgTp=r&knC)_l`B>0MLqw)G?&>eR#AHA zpLS(jky|pkTD+v){&ve=&-|yKdL?I`P?EdJ=6<+$;i8b2hU+*b=ge)-6Pv_R$ELaR zd9B67Smq<=9!%=-;;udYx>ITW;j~i!PiK?Paeg&>#o|3>!_H_a&M7B&!exqC*B6|- z`dD#otmo-%$FHcCU1|N4n;mRlZ_2(r?8*ttF!t7R*)uoF4Zd&4oYlhkKlkW@nVz3J zJTfQ$mH%zj({tbcQOJww&(9T>X)44C&z9NhQ@^`!eG*TR(3OPC(m&TUPdB)%G>5B3 zpJUPc1?#u=HL3mGv-Y2!PMw$2W|#X`M*jOB_`5#U+PdiCtA*crO7||Wt2V7}6h2)4 zB0O|TOWe)74@Ih^ra7^MKh{1S_<3Pt=a(s4ty_0bOb-!${)S()=*;By?{+UvZ>bg6 zXy^K!e!|f3a`WD`&s_~gw==6;v}yYwdX(2K)co|flGDedcYnLm^J4z2EAv>td2Mpn z?emE-G4*L~jM#GSW!%oE_9ybE26N85Kj%ja*M)kA<Hl+A@z%;~zD^U!{B?yzT4S4- zSVwL6r3c>grcAhQljB~S|AjRvY*%jBO2Hpy8F>+R_7)tOQ8dTweaXM1t~%F~2UggI zygkmoZC0#g<MmIAtb)!o^jTFc2~)fhcgdgq+}!rd+b%~}I2<|lhcEB*+*Kc0Z}T$l z+cjhP`9mF(1L|`ERoH9(Z0&n){kc>AYScc<=TqDtEPgyAVNrc?{!87%FI<){-=Nf3 zbIA6=Z>jBkg6j`3wtrY(m2jWOGtReaOK$5?QK3Cw--#aBr*?Q6kEY&=Y@f;l-MwvJ zx|?R7G|X(@uKQMdj=CgwfXrM=_q{<XyH7C2dB5T4S~t;E^NT=m{b{wL4_B(U6`UzO zvgx};pY}foaq}%7vORu;oO2GkCS&v5WYx@{GxoH++xhR|6Ip*Q>)nUA|Igmk&cDRa z<jqut_S>g4m-X4*b4?LG^YXRbmwP9d-3ffU;*_*&{W__zC4ZvDQx!joeVk`e_dfi& z&6eNStbS}_oNHu}^hJ2T_sTs@^&8gMRb{XrFUsBFT6{-ZYXQsmk_VC{$AoLoF5Pgj z`_*i%Q-5ZjR1};kFyYF{-wLLyu9bZ@t`FMmRQoe@_UivarrNE{lO+`6tg}<xu0Q)~ zd69WyLBpv}eiL?wE;#ZtwJgq$;m$4{p9fdH?RQSObt`)ByR&~^yv#QGaZ)vO^9zHh zdJR?8M*X@I`i><lmgE#CTFp$-d&{Ah$}<1abN9dm1EJqtJ#klF%sFT}P3q6YEVr^V z9@*~{DjA-v^1s5;J$How|Fl&J1;*1q{r7BJ|3FZ&Dd~rCtK2=MqPX5u*9`qXp5MRU z{Ar7(4X?b!gX6YmZ0=l_+sbv^;l+ubDeW!F&NJ&vkNy6$@P(vn>Rw}EnKbojF?JEZ z(!wpvRM!fY-d#U|>EWY>_~IE^s?&em`xUn)^<*+fWLM|?ZpC!|yP^r_w)Zc+|9t!U zys-J1JJt5a%)Fo65jXS7s`dHJovAhAdw&#c^0mt2IdbROj14SIu9oljalV^A$=_Rc z%FC8n#;*g;D8}TZ<*DnxdUktFtJ<xID{6Dp9{i7)w4QzD@@38irt)`ZI6Tw%^k-gd zb=cLL?LSoA`1gwnJiX>~WZ${9zw>VVeYQ?zrpS?#GjnckxX0Q5Soh~yjsI=$k9_>k zI9WC;9lYwSYO=QryRnghfvKVC<TKZ$;p}(UXE7R2&KFgkyzU0SKpu<3xe}wt-gm4v z${zQ-ykzp38&dTbSjrgRyxV@CX+jc@u+OQEqnvwqg3leeZ6vB)VVxGj@_xolj`mhV z!^vJonaLM4&ZhJPi~5M_-I{pHaA~tj<I#cz(|lfYEYDij+Z@T+ox&oe8L`CYh|-Vc zy5|xnPPAxsy|#dPlB-^484rih7l*?gEWFugd%6RK46`p9=FYfWFE!`#w4ELi85S8D zn?GOn|Fh$Sc8%v1=OfeqL}+dipB1&hf2&D_=&WAm3w1vy#p`sRoVtG9&!ZO&>)*?- zo;_W^eBIRUnLpg^uI-YSOXhjPYjbFOg4arg-1}QY9Q3}NJ-1cF>A>l(v`j+-m22mB zY?r$`y|?ss)NI=*qiwt2-c-9=ZzQBtc5d&A$!SjU(!y0I9!VuIXxJDq&1h>#;=ixE z!@qLZ#|>`ZTSOL!*2t)^&A-6D$Wo&B@2n7wqaO`#@F_b=rI{|?73pi;sKgc6v}SAU z`jF_iHNr^`lCQg+{;)vqe#Ulr|6cD4+cqzFJ4^B{bL+WV`(OL_KKtg+|FLb!fBAa( z>r?u8Z#PIxnfN15ldmcwdvEB!ckSEmeG1OmP+(C!r`>GdH(jfLU!QL~BP<;eaBtzh z|8BEyy!*WAY21pPZsF^@)!pmGw#D`z{jZYs-#P5=gPC9c-EQV*zdTW2{q&oKTGJL* z&(pK{|MSV^-J35zZ%+@OzvRL3&n01-G*<BQbsevNZEF$xU8p;KlS|7P-uwFMcI#&t zH_0#K-~S`0EZ$H$yYKYkG=DWg`<0g}&2FAgFXnIRh!3s%*y!3+pOfYi_37~M63+I! z#`C64jZb^}+%@X%XV+=#Pu+cRxRCAgQlYO8f80&D_eQ?9ruf63FHio6O7@sEwb}=* z_~kF&w`H9;Uww{YtVNPQ_l+KxFOLH99_*-E^!U9W-@W<sZ0ygAZD0Lq%?bbSdVh0V zT^HP#*YvxsRUt{!`ukd=+V8!uQ<aNKSc>Lyr(QRF^Ev!a%l@bPKTf&-iF3ZlXQk)C zcDm0#mz=cyUccs&<^IRUb?4vjx4rXwPWm6?`JY+OSI&DnPkc|q{(Alimy%BXj}V;^ zv*GacJx`YYXA(YD8FlY-SNM1D_my9_KG6PG$`Jd-<ptmQ`1(8hGZyUjV%*i7WVdud z@vOI*4;9`!9X6b{X62d?ew#O?4>UcS)vI4fuKo2w_G3K5{_717SnJQ%&rPd)d3ue^ zLQaEc!ABnS-A{Ga_;1T%9Iu=Aw|>)^w94-6Zk<DxEg!i5pW6S?{_iG<gv|LJPk;V< z+WvR4-L%^o9NS;pib@{|+H~ZF>9nGTr7{UCJ#~^dw*|elo5KD_;6csN{-5U=ubBUt zGXLXehPT#rC)W!+kUJvZuw_5<g_lxaSQA2*{S-N{-&cKp_Px7$mpkYG-n}aC>XReS z((B_(lQOP%nPpB++UW863Tx%$1KVWYZPK52Uv#x<O7XMl+y+(F`ag4C20!?p*7SUz z4!i1Q%eyL;vA=98grm0V3-C7GG<uM@Pix_Un#j}#2`fwtZkgs?zEnPUL&)uy*B>jb zew?jkT&=RY`0CE>r<OOoToUo?z;^ePJ8I7#sTaMwTz~TE(Ti-)C#b8uPkJI-7b^1c z{!`hUMY^ApW>v0l@SO1U_(_}CmR`N)8qu1Y`~m&^OT&M%1kE`ABe1NTJ>aQue4O?I z))=E(TX*q%?b>xS{Pvl3lDBVLXzCr{jC#KRS?b|+Z4#wyhMJAOGY(nJY+TT|O7WuN zQ`5Q3ywPe~=5VOgua&$fv~#KS97mVVefNTv1kBPA44B(&Bps3xT`=Lg-0_G<v(^f0 zueU4xRh@EB{zG|dnsLlmjhmsC|FSNuF8NbtuOZmx{^XlcVnK37m+Zcc9bfC1ZSQKA zzBu-JZTrd->#}EQF21H(V!VpGZtJeK8=8eq@*h~PAQyX%O;n^#hO>UZe9GxfPOlEN zRn0Q<JzIZz+0|Ofy6BraM{?QR#aC=}v^83B=a$kI>&egbXWS|KDtX&X`Sz`Kx!yC^ z^tK;fxBA$J><gFo-YlCfQT_Os$Cn0%u99;q_K(hNdtC9x$EZ#1RVDMD*LynakIeqR zEwJC_QgYfMz8l_QTfS-hn&&S5@=X2o9(ghC8>d9;C;Og$ZP3>GK5DwJ=EK0CID2a? zwd(NDU2DoB|Gt*0E@QI(%f0h-$)(q;V|N_5{<kvntnrNtpKf;BN`w`cYqVXA%Iz}M zaq3VOI6gaR^J$+=n%j04^uIsybt6OHg5#!>j~8t`EwZvf(p2|2S3&&IDNIZOoJ$)7 z>bEQq5olSqhgEpeCSEa>R4E>fQw(d?ulUNSx|Cxl^G>xVh9{Jr<~7{OIT8AxUG2$? zpB)pNV`fFMH*Ri`DJ*W0d30&^kBl$sms(^hrQh89a5-mUsPn1*<9yl43tZks9b%YN ze)*z?#T0>}f)gB0e6OWFPbAiEp6Sv2I@<AM<2$qZg(3!rCmJ76Ro7(w@x<fygDID% zFkO14<i%K7+!n;3ICrVY0gvYztO1vfwlE#q5F)`PP$;6rCD5tqqLAl(ls7S2E2raD zP@waLX<SlC+d|F=Y+CBn*6}v&h?u2-wilnE`lO%(JuPz>AE?d>Vi5B*(OFO!n{(zy zl$%+Ay5SVXdIrOdQ<wsLWR@~W2n&fFF!a=LZCXA@!9<|Wr?vmi#HJ>plgg~EOAqah zov`}hJ3S>Y;e~C7TqUmr9MI^N;*xwC;Ow|K=}N$jhHS&9k``jYb&b)6PetX<Pw{^c z<WtGQcXW#VgjGvUUSYnIG2yl6`tI8qn`2(8|9JZ<{vn%!yHU&;SCdH(!}PWX?Ru6` zU*i0{VDhB1d)>^I&%bi<+vU_^-W{JqQ-8=`e7N+jL2GoPVYXiWvVXS(Ua9|CuNlR) zYje`8pX-;_?{4A_eCPe|+rj6*4{~Myb1r#q@5p3vW^!Y$@MQ0Y!2y=0E|!J{#s;pg zhE8s77RJUV#s+2<7S672j^^eT=H_+^HUyQ#>ieYTrI%zV7+D%ke)mwb-jCT)p!MN8 z#yJNY4BHf+&pG(S(DM15$5Jc(4yZm*l4%xhV3Ah&wkG0me0To670a*M-aT*m{ki3N zPpbznIX_M4XZq6ReXD{a(Zy!Ds>V~>E{R7T3nqM2x}*}w^Q_9uywzw)U>}cG0H=KD z3OC-Y!1gMW1%kdAZrs&3cCF2Dwyw9j(5Y9lxZQHwboX2Pzk53A{5EWG<VloJK9MAn zEODGg&9F6-<wPRe<{5`=#5Q!O>LjzSjyP;(wxLruCz*Zsjl*_)1s%#Vk6D&m9JbUe z=+usR%(i{UVcYb_eWt4K_s{Wt`|hRR+cRI5gP`I^`?u8*o9w3va?0s0{`4V5(sT0j zp46DQc%7GlFFjzew(@tur>}4SF<PwEXX8rEODQfXN=?iKvGS9$xQa^>i%KerQq#Ch P%`J>9xKveL{oS|#|1U*C diff --git a/20190113/hp-uebung-20190113.tex b/20190114/hp-uebung-20190114.tex similarity index 96% rename from 20190113/hp-uebung-20190113.tex rename to 20190114/hp-uebung-20190114.tex index aa4f3f9..6153f35 100644 --- a/20190113/hp-uebung-20190113.tex +++ b/20190114/hp-uebung-20190114.tex @@ -1,4 +1,4 @@ -% hp-uebung-20190113.pdf - Exercises on Low-Level Programming / Applied Computer Sciences +% hp-uebung-20190114.pdf - Exercises on Low-Level Programming / Applied Computer Sciences % Copyright (C) 2013, 2015, 2016, 2017, 2018, 2019 Peter Gerwinski % % This document is free software: you can redistribute it and/or @@ -31,7 +31,7 @@ % \thispagestyle{empty} \section*{Hardwarenahe Programmierung\\ - Übungsaufgaben -- 13.\ Januar 2019} + Übungsaufgaben -- 14.\ Januar 2019} Diese Übung enthält Punkteangaben wie in einer Klausur. Um zu "`bestehen"', müssen Sie innerhalb von 90 Minuten @@ -40,7 +40,7 @@ \exercise{Iterationsfunktionen} - Wir betrachten das folgende Programm (\gitfile{hp}{20190113}{aufgabe-1.c}): + Wir betrachten das folgende Programm (\gitfile{hp}{20190114}{aufgabe-1.c}): \begin{minipage}[t]{0.4\textwidth} \begin{lstlisting}[gobble=6] @@ -86,7 +86,7 @@ \exercise{Objektorientierte Tier-Datenbank} - Das auf der nächsten Seite in Blau dargestellte Programm (Datei: \gitfile{hp}{20190113}{aufgabe-2a.c})\\ + Das auf der nächsten Seite in Blau dargestellte Programm (Datei: \gitfile{hp}{20190114}{aufgabe-2a.c})\\ soll Daten von Tieren verwalten. Beim Compilieren erscheinen die folgende Fehlermeldungen: @@ -98,7 +98,7 @@ \end{lstlisting} Der Programmierer nimmt die auf der nächsten Seite in Rot dargestellten Ersetzungen vor\\ - (Datei: \gitfile{hp}{20190113}{aufgabe-2b.c}). + (Datei: \gitfile{hp}{20190114}{aufgabe-2b.c}). Daraufhin gelingt das Compilieren, und die Ausgabe des Programms lautet: \begin{lstlisting}[style=terminal] $ ¡gcc -std=c99 -Wall -O aufgabe-2b.c -o aufgabe-2b¿ diff --git a/20190113/landau-symbols-2.pdf b/20190114/landau-symbols-2.pdf similarity index 100% rename from 20190113/landau-symbols-2.pdf rename to 20190114/landau-symbols-2.pdf diff --git a/20190113/landau-symbols.pdf b/20190114/landau-symbols.pdf similarity index 100% rename from 20190113/landau-symbols.pdf rename to 20190114/landau-symbols.pdf diff --git a/20190113/logo-hochschule-bochum-cvh-text-v2.pdf b/20190114/logo-hochschule-bochum-cvh-text-v2.pdf similarity index 100% rename from 20190113/logo-hochschule-bochum-cvh-text-v2.pdf rename to 20190114/logo-hochschule-bochum-cvh-text-v2.pdf diff --git a/20190113/logo-hochschule-bochum.pdf b/20190114/logo-hochschule-bochum.pdf similarity index 100% rename from 20190113/logo-hochschule-bochum.pdf rename to 20190114/logo-hochschule-bochum.pdf diff --git a/20190114/nodynmem-1.c b/20190114/nodynmem-1.c new file mode 100644 index 0000000..5ab686f --- /dev/null +++ b/20190114/nodynmem-1.c @@ -0,0 +1,13 @@ +#include <stdio.h> + +int main (void) +{ + char *name[] = { "Anton", "Bertha", "Cäsar" }; + + char *new_name[4]; + for (int i = 0; i < 3; i++) + new_name[i] = name[i]; + new_name[3] = "Dieter"; + + return 0; +} diff --git a/20190114/nodynmem-2.c b/20190114/nodynmem-2.c new file mode 100644 index 0000000..0edbf93 --- /dev/null +++ b/20190114/nodynmem-2.c @@ -0,0 +1,17 @@ +#include <stdio.h> + +char *name[] = { "Anton", "Bertha", "Cäsar" }; + +void store_new_name (char *s) +{ + char *new_name[4]; + for (int i = 0; i < 3; i++) + new_name[i] = name[i]; + new_name[3] = s; +} + +int main (void) +{ + store_new_name ("Dieter"); + return 0; +} diff --git a/20190113/objects-1.c b/20190114/objects-1.c similarity index 100% rename from 20190113/objects-1.c rename to 20190114/objects-1.c diff --git a/20190114/objects-10.c b/20190114/objects-10.c new file mode 100644 index 0000000..ac47c0e --- /dev/null +++ b/20190114/objects-10.c @@ -0,0 +1,73 @@ +#include <stdio.h> +#include <stdlib.h> + +#define T_BASE 0 +#define T_INTEGER 1 +#define T_STRING 2 + +typedef struct +{ + int type; + void (* print) (t_object *this); +} t_base; + +typedef struct +{ + int type; + void (* print) (t_object *this); + int content; +} t_integer; + +typedef struct +{ + int type; + void (* print) (t_object *this); + char *content; +} t_string; + +typedef union +{ + t_base base; + t_integer integer; + t_string string; +} t_object; + +void print_integer (t_object *this) +{ + printf ("Integer: %d\n", this->integer.content); +} + +void print_string (t_object *this) +{ + printf ("String: \"%s\"\n", this->string.content); +} + +t_object *new_integer (int i) +{ + t_object *p = malloc (sizeof (t_integer)); + p->integer.type = T_INTEGER; + p->integer.print = print_integer; + p->integer.content = i; + return p; +} + +t_object *new_string (char *s) +{ + t_object *p = malloc (sizeof (t_string)); + p->string.type = T_STRING; + p->string.print = print_string; + p->string.content = s; + return p; +} + +int main (void) +{ + t_object *object[] = { new_integer (42), + new_string ("Hello, world!"), + NULL }; + + for (int i = 0; object[i]; i++) + object[i]->base.print (object[i]); + + return 0; +} diff --git a/20190114/objects-11.c b/20190114/objects-11.c new file mode 100644 index 0000000..a15c8eb --- /dev/null +++ b/20190114/objects-11.c @@ -0,0 +1,75 @@ +#include <stdio.h> +#include <stdlib.h> + +#define T_BASE 0 +#define T_INTEGER 1 +#define T_STRING 2 + +union t_object; + +typedef struct +{ + int type; + void (* print) (union t_object *this); +} t_base; + +typedef struct +{ + int type; + void (* print) (union t_object *this); + int content; +} t_integer; + +typedef struct +{ + int type; + void (* print) (union t_object *this); + char *content; +} t_string; + +typedef union t_object +{ + t_base base; + t_integer integer; + t_string string; +} t_object; + +void print_integer (t_object *this) +{ + printf ("Integer: %d\n", this->integer.content); +} + +void print_string (t_object *this) +{ + printf ("String: \"%s\"\n", this->string.content); +} + +t_object *new_integer (int i) +{ + t_object *p = malloc (sizeof (t_integer)); + p->integer.type = T_INTEGER; + p->integer.print = print_integer; + p->integer.content = i; + return p; +} + +t_object *new_string (char *s) +{ + t_object *p = malloc (sizeof (t_string)); + p->string.type = T_STRING; + p->string.print = print_string; + p->string.content = s; + return p; +} + +int main (void) +{ + t_object *object[] = { new_integer (42), + new_string ("Hello, world!"), + NULL }; + + for (int i = 0; object[i]; i++) + object[i]->base.print (object[i]); + + return 0; +} diff --git a/20190114/objects-12.c b/20190114/objects-12.c new file mode 100644 index 0000000..5d605e1 --- /dev/null +++ b/20190114/objects-12.c @@ -0,0 +1,66 @@ +#include <stdio.h> +#include <stdlib.h> + +union t_object; + +typedef struct +{ + void (* print) (union t_object *this); +} t_base; + +typedef struct +{ + void (* print) (union t_object *this); + int content; +} t_integer; + +typedef struct +{ + void (* print) (union t_object *this); + char *content; +} t_string; + +typedef union t_object +{ + t_base base; + t_integer integer; + t_string string; +} t_object; + +void print_integer (t_object *this) +{ + printf ("Integer: %d\n", this->integer.content); +} + +void print_string (t_object *this) +{ + printf ("String: \"%s\"\n", this->string.content); +} + +t_object *new_integer (int i) +{ + t_object *p = malloc (sizeof (t_integer)); + p->integer.print = print_integer; + p->integer.content = i; + return p; +} + +t_object *new_string (char *s) +{ + t_object *p = malloc (sizeof (t_string)); + p->string.print = print_string; + p->string.content = s; + return p; +} + +int main (void) +{ + t_object *object[] = { new_integer (42), + new_string ("Hello, world!"), + NULL }; + + for (int i = 0; object[i]; i++) + object[i]->base.print (object[i]); + + return 0; +} diff --git a/20190114/objects-13.c b/20190114/objects-13.c new file mode 100644 index 0000000..81ef279 --- /dev/null +++ b/20190114/objects-13.c @@ -0,0 +1,75 @@ +#include <stdio.h> +#include <stdlib.h> + +union t_object; +struct t_vmt; + +typedef struct +{ + struct t_vmt *vmt; +} t_base; + +typedef struct +{ + struct t_vmt *vmt; + int content; +} t_integer; + +typedef struct +{ + struct t_vmt *vmt; + char *content; +} t_string; + +typedef union t_object +{ + t_base base; + t_integer integer; + t_string string; +} t_object; + +typedef struct t_vmt +{ + void (* print) (union t_object *this); +} t_vmt; + +void print_integer (t_object *this) +{ + printf ("Integer: %d\n", this->integer.content); +} + +void print_string (t_object *this) +{ + printf ("String: \"%s\"\n", this->string.content); +} + +t_vmt vmt_integer = { print_integer }; +t_vmt vmt_string = { print_string }; + +t_object *new_integer (int i) +{ + t_object *p = malloc (sizeof (t_integer)); + p->integer.vmt = &vmt_integer; + p->integer.content = i; + return p; +} + +t_object *new_string (char *s) +{ + t_object *p = malloc (sizeof (t_string)); + p->integer.vmt = &vmt_string; + p->string.content = s; + return p; +} + +int main (void) +{ + t_object *object[] = { new_integer (42), + new_string ("Hello, world!"), + NULL }; + + for (int i = 0; object[i]; i++) + object[i]->base.vmt->print (object[i]); + + return 0; +} diff --git a/20190114/objects-14.cpp b/20190114/objects-14.cpp new file mode 100644 index 0000000..1c8c4aa --- /dev/null +++ b/20190114/objects-14.cpp @@ -0,0 +1,57 @@ +#include <stdio.h> + +struct TBase +{ + virtual void print (); +}; + +struct TInteger: TBase +{ + int content; + virtual void print (); + TInteger (int i); +}; + +struct TString: TBase +{ + const char *content; + virtual void print (); + TString (const char *s); +}; + +void TBase::print () +{ + printf ("Base\n"); +} + +void TInteger::print () +{ + printf ("Integer: %d\n", content); +} + +void TString::print () +{ + printf ("String: \"%s\"\n", content); +} + +TInteger::TInteger (int i) +{ + content = i; +} + +TString::TString (const char *s) +{ + content = s; +} + +int main (void) +{ + TBase *object[] = { new TInteger (42), + new TString ("Hello, world!"), + NULL }; + + for (int i = 0; object[i]; i++) + object[i]->print (); + + return 0; +} diff --git a/20190113/objects-2.c b/20190114/objects-2.c similarity index 100% rename from 20190113/objects-2.c rename to 20190114/objects-2.c diff --git a/20190113/objects-3.c b/20190114/objects-3.c similarity index 100% rename from 20190113/objects-3.c rename to 20190114/objects-3.c diff --git a/20190113/objects-4.c b/20190114/objects-4.c similarity index 100% rename from 20190113/objects-4.c rename to 20190114/objects-4.c diff --git a/20190113/objects-5.c b/20190114/objects-5.c similarity index 100% rename from 20190113/objects-5.c rename to 20190114/objects-5.c diff --git a/20190113/objects-6.c b/20190114/objects-6.c similarity index 100% rename from 20190113/objects-6.c rename to 20190114/objects-6.c diff --git a/20190114/objects-7.c b/20190114/objects-7.c new file mode 100644 index 0000000..b9b24ad --- /dev/null +++ b/20190114/objects-7.c @@ -0,0 +1,43 @@ +#include <stdio.h> + +#define T_BASE 0 +#define T_INTEGER 1 +#define T_STRING 2 + +typedef struct +{ + int type; +} t_base; + +typedef struct +{ + int type; + int content; +} t_integer; + +typedef struct +{ + int type; + char *content; +} t_string; + +void print_object (t_base *this) +{ + if (this->type == T_INTEGER) + printf ("Integer: %d\n", ((t_integer *) this)->content); + else if (this->type == T_STRING) + printf ("String: \"%s\"\n", ((t_string *) this)->content); +} + +int main (void) +{ + t_integer i = { T_INTEGER, 42 }; + t_string s = { T_STRING, "Hello, world!" }; + + t_base *object[] = { (t_base *) &i, (t_base *) &s, NULL }; + + for (int i = 0; object[i]; i++) + print_object (object[i]); + + return 0; +} diff --git a/20190114/objects-8.c b/20190114/objects-8.c new file mode 100644 index 0000000..0c93e8f --- /dev/null +++ b/20190114/objects-8.c @@ -0,0 +1,59 @@ +#include <stdio.h> +#include <stdlib.h> + +#define T_BASE 0 +#define T_INTEGER 1 +#define T_STRING 2 + +typedef struct +{ + int type; +} t_base; + +typedef struct +{ + int type; + int content; +} t_integer; + +typedef struct +{ + int type; + char *content; +} t_string; + +void print_object (t_base *this) +{ + if (this->type == T_INTEGER) + printf ("Integer: %d\n", ((t_integer *) this)->content); + else if (this->type == T_STRING) + printf ("String: \"%s\"\n", ((t_string *) this)->content); +} + +t_integer *new_integer (int i) +{ + t_integer *p = malloc (sizeof (t_integer)); + p->type = T_INTEGER; + p->content = i; + return p; +} + +t_string *new_string (char *s) +{ + t_string *p = malloc (sizeof (t_string)); + p->type = T_STRING; + p->content = s; + return p; +} + +int main (void) +{ + t_base *object[] = { (t_base *) new_integer (42), + (t_base *) new_string ("Hello, world!"), + NULL }; + + for (int i = 0; object[i]; i++) + print_object (object[i]); + + return 0; +} diff --git a/20190114/objects-9.c b/20190114/objects-9.c new file mode 100644 index 0000000..41468b0 --- /dev/null +++ b/20190114/objects-9.c @@ -0,0 +1,66 @@ +#include <stdio.h> +#include <stdlib.h> + +#define T_BASE 0 +#define T_INTEGER 1 +#define T_STRING 2 + +typedef struct +{ + int type; +} t_base; + +typedef struct +{ + int type; + int content; +} t_integer; + +typedef struct +{ + int type; + char *content; +} t_string; + +typedef union +{ + t_base base; + t_integer integer; + t_string string; +} t_object; + +void print_object (t_object *this) +{ + if (this->base.type == T_INTEGER) + printf ("Integer: %d\n", this->integer.content); + else if (this->base.type == T_STRING) + printf ("String: \"%s\"\n", this->string.content); +} + +t_object *new_integer (int i) +{ + t_object *p = malloc (sizeof (t_integer)); + p->integer.type = T_INTEGER; + p->integer.content = i; + return p; +} + +t_object *new_string (char *s) +{ + t_object *p = malloc (sizeof (t_string)); + p->string.type = T_STRING; + p->string.content = s; + return p; +} + +int main (void) +{ + t_object *object[] = { new_integer (42), + new_string ("Hello, world!"), + NULL }; + + for (int i = 0; object[i]; i++) + print_object (object[i]); + + return 0; +} diff --git a/20190113/pgscript.sty b/20190114/pgscript.sty similarity index 100% rename from 20190113/pgscript.sty rename to 20190114/pgscript.sty diff --git a/20190113/pgslides.sty b/20190114/pgslides.sty similarity index 100% rename from 20190113/pgslides.sty rename to 20190114/pgslides.sty diff --git a/20190114/unions-1.c b/20190114/unions-1.c new file mode 100644 index 0000000..b75a606 --- /dev/null +++ b/20190114/unions-1.c @@ -0,0 +1,16 @@ +#include <stdio.h> +#include <stdint.h> + +typedef union +{ + int8_t i; + uint8_t u; +} num8_t; + +int main (void) +{ + num8_t test; + test.i = -1; + printf ("%d\n", test.u); + return 0; +} diff --git a/20190114/unions-2.c b/20190114/unions-2.c new file mode 100644 index 0000000..be8562a --- /dev/null +++ b/20190114/unions-2.c @@ -0,0 +1,15 @@ +#include <stdio.h> +#include <stdint.h> + +typedef union +{ + char s[8]; + uint64_t x; +} num_char_t; + +int main (void) +{ + num_char_t test = { "Hello!" }; + printf ("%lx\n", test.x); + return 0; +} -- GitLab