From 1ac9396867b9bb550cbf189b14803e11fa3f71b4 Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Thu, 28 Apr 2011 09:49:14 +0200 Subject: [PATCH] finished versuch07 --- versuch07/Debug/versuch07 | Bin 470673 -> 478333 bytes versuch07/src/Cramer.cpp | 10 ++++-- versuch07/src/Cramer.h | 1 + versuch07/src/Gauss.cpp | 64 ++++++++++++++++++++++++++++++++++++-- versuch07/src/Gauss.h | 21 ++++++++++++- versuch07/src/LR.cpp | 51 +++++++++++++++++++++++++----- versuch07/src/LR.h | 12 ++++--- versuch07/src/QMatrix.cpp | 17 +++++----- versuch07/src/Vektor.h | 6 ++-- versuch07/src/main.cpp | 27 +++++++++++++--- 10 files changed, 172 insertions(+), 37 deletions(-) diff --git a/versuch07/Debug/versuch07 b/versuch07/Debug/versuch07 index ad96f133b9b4a8cd408470e7793868e473c530c6..81454780c5d052ae9ce46b087319ab6d689d99a3 100755 GIT binary patch delta 72694 zcmeFa3s_av);_-G-W%AWvJpiPHn6!00tzT{69tvrBAO!J5D^u;p@OEJ@>E-o*$K^3 zSDjUMId(msI+bM?GgCARFJ+c#rlw|Em{w+H<|Tgbm~*bZ7ij-;&Ug8L&+~oq=$>ni zG3J>2~KP>qV7gTWi!v(5| zb#5oAXC?J)fttrkH{Et*ZmHL4d6jes^Uqv~Fkmz}X)IzTTtZ>~*uRoYw z11dP1toGtp;%Bu~O0)n2T~|u<_6EA6u!6^k9%P{B4f4=C80g1jzAhgSrQw|2C>cbT z6~O6d4RkZ7h@XoFy2U_OWC2JI{n!7j2D(*ITsmFxH!xbcsfrS8p!*u=4gc`I`YpnFxt8qijrrb2OH>41KrO+A8Mf64D`_kdZ2+`LG)x0sCqgX7*h=i z{0;P4r<&F}*5#F`D9%OOtnW6ZPw(YWnqp_**A|h7D~eC06sL|g;V*U~#i?~q?cwoK zic_nes^{@yic@QzTFc{w6sJ}^wVKEKQk=TfspUMLjks$n_0>}gI3bM$$o^BcJl=)k zXjbJ^1&>EjoLckLP#zDVIJM%bJRT3Acx#HM@VGC3NE?VapyKG*l$#DUCtUdw%(H=b|%K=TfgzEL+{zrt^^A4n>(a=e zOF&(TsB_`z0~FhG+3Z|&nmMx$+!8a{7SUfpYt=Jno!3kVHFbE83oZ2;Pf4;4%sKwP z*Pz~NVcXEKOsI6$otzu69`-5D#r1Qon;W5VN7Jz#@2b;n;UkLCcFv^*2b>Mco}PKi zW-4f70}A4-d)HZaVCjfY>-IbA8XAv>D#~ele%+@7>)vzL9c?^uwW+D7u5sX`Pl@{+ zPjHYcsvBxmU-s|p+K*mxjpjkuYM$Ie^VDXVyENB~UK%_$zbt>;j(10(VEHA(QHevH zb(fuW^VU1-Myz$#4PJv>*E(G=>j>tvx`M+zj%We~?>Sq$f@2K@jZ`0}{!W#$6p5A< z)H_8v-$ctc6r3UU>4c>t&LHg?!RZvHC`(5)E**S^#Orobx%(l5MFnTr(tP}aYG~Ymv3br`UT_Rb);pKxS&>}mx?+d=h`PN4>$VB$hQ@X1LPd4QoRjvF z;&fDk&Upl!MFow>q*2erw)iG=A+!&yhvs6dwBC-oBr5)SFWNQ~HKlI!iwql7p)^{r zG&QYP+TgM{-0%{s`4A=lIVE|Rs-d<0XaQS-4&M$J$01Rl*-+eNs@ zP}tn)Tsqq7TzqJ*KlRubL#S?!HvSpOB{SH~TrQc@JxqT$^C1ihN;#OA)B#23qplZ> zN<%itszGt*>M~}VAvL%2X!c|qBAMrZb=&00HbQ3m88JQC=8q7)K3?>CH1>!+==Iyh z(4_*n(5Zmg-`}ADJ@2;7^z2512p#Qbyb|% zD41J0(|>S1M(g&;w)ib1c~(jWV-^s#_y~$mob4Wt9M3M!8B=ifoXvmmcGo#u8CT%iS}TAlMe~!{q9oS#;v7Antfqul|&l)$a$*bp?%7<&C_`-_zT7X`ZYqntE%| zro0w0HS)H(a(Y;^GRXoLVkss$y}+0wuZY_2$~BBBKtcTnpGB*Dj1uobxRvX5m#$Hi z?kSIU=NWf>p25m*NMFv=OG#uUo8=r9hD9^^H2%w;EsYU(*V`5+Vs^sh=?MP^&7L=3 zXf}Hijr!u~3z$7a)EPFrD-PYCD{fGhyXVPAk*vjR_6C*=<7~G6XX9)(pC@q7W@0Rk zxK>MT3oUb8&D8X0rbZ5F+qG(*u{Jj*shO7V5p&k*#smvvc5q^|y+Jv&*o|fS`n<7B zYkpSGwzI37{DWNwE?%dS24Aa@_EScM)0-(ID?N5ugO3LLAl8d?ydQtP0s|t-x>rWq~ zkW9}i;grlM57V>048}&8QhIrq4)?N_BAJcnpjNCeESI(cseXY{3yVEQ zy(XFWdzc=h-a>bwl(Rid-KaK48y}P0l5=WY`~Des@m=HyS^*m6D)fNZvLf2hI03gB zVnIQbxfhfMfAz`s5hX}-jD%{TvaaB4L&15Pcu!r$&(ebPd{(-6>LA5NoL@TlB8iJx zcn8{wPxPE|-oseyqk46S$le9MuHnk*T0Zj{lGn=Qds^xp<)fB&2r~8dQUA~(##I6_ z_bhf+%wmfc69)%m8)?CCF>!Q-I>%f*=5`%HaAdY7J*dmYCF%XP0ZHrs?&+Ss5;L| zmd97Jx_SCa;|iv}(FWSEoXIW!sYiKlpk4nSu?o$_ZiBBk`m(LBVxrRIDmE0h@(zQ9 ze4~QGi1a;p`Y{FD4Xcn?#js1jCc|BlGcA@e$QPV-uTXZVaWCIu#j`CgX;wbtN{t@T z(3l3Jes875ZowrNzX#=(=)fqv7?5}EJ zaIER?r`6fPgV}59=HOz}XG|Rw9AokNa14yvvk3BVfYf&6%o|+C8(sjCAy*J=540!yqnm_O`7+lx;vt8p$SQ- z^$%>uNK+b*;s=>y1rU{a`&Y#F7x!ts5ZSby_97_6M~Kig1z9vmLt{6!)De<;f>STL zsTQcuDYz&rVS;GD#!VG%gp$|4QrpJHg}+8a)QY5rM-fCLz3slDM-i$iGSPJTxY{kU zkE!suS{qqwI`AceA!p><1q=Q!AD_7XZ}QFHP{9-)=M+~egtMjyB3~F!MH^;(8Ej`2+J1J14dC< zfBmtkNzmvaqoB1zw-z*d&?snEc`xG$Y51?jbIRt!bS^fE#CZZ7nZpKTt88-Nhu6w* zDRHMkf}Xd!M|zqRC^HC9;!UK7*Q*rhXAt0d=mKYHcPNTSwzP)a1{cpmm-q-0#9{^& zJP(qhJYJFljkKo}szf<-fo09}SOd8YJPTc5hSczq(BPtqb(b-ZkLbljBQvTY<1Std zcto5m67qDqQY(0y4$$owp&5;P4;wm!_ZL*^hp18I#_|^2ooxC-NV_2ZtWo>`A`mC_ zQv9^L!TmuL4L%WlN^}Bx7%XT-n7;*$9w-ai)?*%R%NAF7lzxO^L{_%XpGy4{`po$Njk&pPS2ChQb5sxyQw#x^Riv^>h@sF3A zTyly&-40gh^h$JRk8~~16x(YI1~H#=VVyh%WPR$_i`dW@2^B*4)D`qDC>MoqX!HR` zui#|`uH~|px6sos*-Xm{R!eH#4@50k;9NF%Io8tE&Sj5Ng*)qb9Sm#9V=AfR+D^6MB^KlmkUhn%m*#v*H^@|47lpLu^XGSueb1wKP)!Rnwhqf4r@kbM zd;BQMcivsxpFTGfH|`*%r03#XQLkpj0JWiUC4Y)Xn+;wJPP^+@2kIi&^ED|PZdkll5@*dcr6JE%#6uugssWRGx)6kgt37-SbJx1sTNl8(~t$dl5G z(HcTE$@rkUVU5n53MLl+h1+QPz_UyvP~o6kkh*!FZu-sLSOX8x_^DP^K@ry`753T^~HX>+&W6rwwH?PJs z|Hj@RV5TfMhS_N8VA@m2&Cnt2nca66pNboiKl7|bUhg3xe@>`=p3udW>9)ZMy4&~{ z_9O36GViY7xNV<+h`yg0g}aPpquHkEZY5@Lh4s@&gKqs9M4DMY76h{1pUmgB^B#Tr zg1WLx7GKbBf`nl~-zXRKoA+Zu4^_J)Mz?y^=1_{3#lB!uMDD@9gZflW2`hW@ZZn?!HyIS(+ zcDk+tWxYGSdORsLc>E-8pCebfZTyTmJeWcX)%M9xy6CJzKd3(QX;ag^xSqPNsc9|3 z69^9=Y=vf1us0fr(1EZVp%e7E2=fp>i;#fe8R*5!5gtdl7U5_NmpuskVq&_8a1-X^ zVC+b@Vr|MqXu`5Q+5!|m7#FvJFd0+AYJ{&HZED(%(0Qz>sS)8}gjU?*mVMdO6p!%X z<1hf>M(i%9B3yL>h9i6e)598sM-XmDcpjk@cm2z8;}MTAiEghDo<~SP^hPWm_j+Uh zRelNyL70kgJHj~#8xg*Q(26H4jR@lrUP9$-1|>!~6{G6_!j+gA z6sw|SVA6CTY=yO=0^vY}3lNqgY=nWe2=iPZJcEnX2s>gWtw(q-!ebQ2gEIxYoo5g_ z5ZbYI%0qY)!U}}72p1rH0^w?eA0Vtp_yxja2xntMs9-1e3PK0M?FjP_`e7|3D4lk) zG56wP7cSNyY<(3qfG{4R0&G1KVK74VaJM8cKXiydwQWj}`dGIZSJ@{`O?RN%SPu8g zQ}X@%``u$|>pg0b*L{{{XlzA^!T%!sU#rWV`F**$khAOs1do~2a>XE5xX5xJ*M_n~ z<}m&I7mZAov)MSui>)AjxCiF?_75^V34S z`{VNNFX^&XB`%XNVxLm)ObcptH)1a#=F2lega)%OSGEnYKOvSQGD7SL#Ii+37%l4& zYsX_Th&_+k3B-cE5SjIrx~hA~c%nNn8LXg|dEQX9hHexCUJ>M$K#q5}4FEsh`m)#p92a`%F#k_kV_T)FJZ%Rn3 zGF)zfn5fY^5W9ldY@X;b#D*Xdj}6?2*lNU1#K>>dm~~$gZCiuybmKb?OQ6A z_Z3{$eM`N%D^V99#ZAcHaV}>n-j%pq_@jETXGp8NaT$s^ zj(0yVL~_olAsIbG9H60dyZ@+B2xSgFr%um^ozf-+)!)ynP?>@&og?eM>6`lo@L;^!n_VKvtWsd$Xpk(w1AdCN56Y_YNN|wcna&-DhPu)v$qcAf{5wnACQo5$l)l%I+^GYvD5zF*AFc3&#%!4MnD>}9a-mzZPTwd#X^mek`B|Q~o*x(6s=S;gTJ9|Rq^m((Y=T>0{ zZlKoGR?V3(w`NWkr5Y+Yo3cGPLsBzxP!e%oSEihr)EX5yH zRxoYWlnE27l$Q+GkX8nvT1A6dSri)Ak{hciA10tN!y`;quif#AVz$|^Pun|ylv{mX z1mAMY+)8E6x)m=UVLrPfv0-WTwR-C-1AI>4SQ+y_qHcR7Dk%_$&se}~SWHa;!?C}z z1o#D^iv@gx4(}iES8yExR$SLB0k^2BcSgA^U@ve4EQ&(_;xaqJ1uP)83pQ9RpaI$L zR01|8VxXAP$U*`5)+0g z;1bf4So_U562l@eZaU0Cm9dNvQ{X}eHp!8u$tc_|qM2FX32a+4qD(7Llpv%BsUw?X zQ`6S9XS3Ct){S)qBMmd}j>0OCKMC4`tv;O|h3eor%0@&(&O@2FG({^Rdkry5$g3#+ z9OYeznWC*B&qBW*^H)q3pI1?hp;mi$RDZ_`M%p_4OqCQ=5{9-2I}?aY~OP>i4vJ#bCASE++vOJcvO^Iz-B8q{}Q3uBGyq1WPlR^SL- z469ImU$?V&)XuN>XI1Kq*TYz%y5#k+PTM;}N2BRI=w=I0;kJiJbsURV>t9c2o7D@i z$FY%W*c(yo3pMYJBsM{v`9=@6N`2~$s9qUpnxI7{GJrjeHQ8n%1@se(97m(2g4&z8 z=6d4Nl~5nUDp$VQnRQX)-;89BsD*FFv7YK|T$iZon^|m}`r(`X*m$+w`cRgoCgb-O zb>RAiBl@F$bMF=9wS+7~+vL`Xm^Gvnoj-Sph_wls56g0wikN@MDsaWA)O; zD7HphJ%@E*&!}nd^bDf|rd_jN#&SiS#D(&7%@Hwc$Z2))I|+$_Br#CX;zRyO5``j` z67mhIyz3wl%M7VhKYu5Ky{fj`l#rNG9i=3g=J(h{ih&2boY zeV6mg{fK9GeI0V<=T+a$F$h}bW$M8# z16iFKv$b=~K2&2#A$tgOC{1c+)(uyF&vO-{sApxd<7&;;1hz$eWNRo}roO&4%4A7W zKi?V|Yatu&U=M^-Iy&dfGqp`_i!1s;T1ZB`8=1%@?`8>cBpHL+5R#OEjpvfdCZZRV z+{+$PtKSW=W}_pG+=sEU?A=KA;kuXK?a$Z-_58L-c2e#5UPaDY%y*On8{AR1R>@&i zvnrL6T$2;D3Sv$tCa(>h=`&KYGnN(^@p>hNLWQf5mt3mQ?^Iqw|IM^wHqeUkzLqXb@BEHke=Nh zDM+2zJ?if55fMM4U?nTf??*$^2PmsiQvzGAw%OspZ}N^r>vB}qNHaQI#g2$B6e;<@ zJObU68!-`GUMA%orwii}hs{r`f8P;d^`UyQSiV*F>~NTTBGhv`Vq0-qfu&ur>ew02 zB}PtVoz`{|^QmQD zvh-9h=#fp9^=jCz5H?@U+?DM69O{iL7^Hr@t3z-D>JD|a$%0guE%)o%7ZOu_c~>x- ztZv_xg1-LiuEf^ApgJ6G~>=InztzP%3>pnScG41fLDSoJG^kNbg<vkIfSWSsXbjI3_>&(<56tFUB^ z{L-}6A-nGh)%wxE)|Vj1heMh}UHD0$I{TxptUz7;Q5<_yZTKj$bppBx=kMiw>m#Hk z!d#+;?1|_`?--RF^$ybqUnDG-^A^>(UP~l4G6iX-?ujue$?E-kVy!%>pHDaS?L84G z8?o^yvHLuvo3{1(dPrhWQo}ts=fflJkhN_f539Z6TKl6bD;|Jck0!TBf1@=A@QKk4p_ux zEErPPQA}bZtIb{1L7&7}d74*zveZ9(62T6t+9!jtuRHlkBz}GNCbp_Vp+`P#ZXc`W z>`ex3+TKVjr)@KzR9Ehe0qM=XlWh*_`S(+%v^&_ZCViSZv4OJb{w`*Au}<~5jDbEf zGankqQ4eB$DoCRLUr?l7kYX&4{RBqIi=W2g(G!}AC9ry0N#1lK!lx`3IDUsnSV>^H z>gG>FBQ(THHs1#ZTSwftDWQ_a%qV=xyU(h>e%d2w5Vk@f?3r9=WodjEY%?0t3i zzVO(ak+kIG6!dO3(=8(w-d?QK8+N|KwyCe}%VHVo_xt*~im(kSoM6J}DfU7drsUs` zJPIfNfaOI{SpI4Bz`{u%p!*AoDL)+rF07o76oO*Oe;x}>VbuaOwV+t@PoRDZC(lO@ z7Zm^e!?-S-au*~8#nE?y`tp9Sfww?XQ2JQYP+FF;A4_dvN46iPpdHMCuheY z`&oAMW}@$(gSuW}g6y}D^}9-0pj~!Ccj2)&)szDvEJYo3z!6hOnYLk_QC(l-k~tx1 zJBJ^oKYNXA48R`vfdjE|17SpACX0k#GrNh=8z_Z2>~9!NX6$WziQ607j)Mp6tW^Ew zz^J5==pTh|(~~k$;)M>xH?jLs9rErhi^W?(+rloW^FJ>@r>XzEsNLJJr0{Dt0CNED zs>~Tv)UboyT=&AF!fzR!4JikQs_P^QR(P7tM>aaC8#Uq?R)JBblb)eg{Em%7QFPJ~ zYR2!`vzXO&(tfJ5AJ_<^dLo@=NvN@D$tWGN#MTJKE&PcELe9)y1j~=N6gEwR)b9>< zGNnbU)p=xA4OK@p>0Tlt; zdLSr_GVM?Y9$wz&FjS38r}fA@Up;wvrOA?_-u^}BP)iE#QtWJgSE%@|8_H`Vd$64b z|Lre&o2(A?@)rwo;<2z<690&zb8|;S(vOnTxL(s5ysm$yQC>@Qt_Hns6sphCtww$0 zNCb;e_aBK2`wr=|kQ3YOksHdMB)PO()ec8u%n$rE1`OdofRYSGo>1=0$)9v ziD~hJqY|N9@voC;M?Wl|x*9MYS@9(&!Iw zQF^YY2*311vh;EMm{vGT|Hi}qLRyysn9iji#&3u2*O4Aa&3A{NONc#b6X6Mne+}_+ zDit@%ykd=Od_J0$YR|G_waa__M8v3mEh`>&c~|^J=Co3(n7~UBPNgudD4I}NH5U(_ zF8NYyXvG^+_zqpzHA7*MLUwe;R>_^BbMvPuESfSluUPA<*eBT?bau7EVno_9*sUlN z+ha$@^s;;@#pr}cWDiA|l!MieC5r?zCcTc~$C6zlI#sFcXhU32qc`9kNLzIrlQ%uK zVvJ25im;WLUhAa4DaRb>9+{=F`uep1f45Ej0SThB4qA089`C#Qe2GCEojb3sqCC=$ zboIFhLA0y)0nBY;@#}fb9dVz3y7kc0q$Ig_CnC)pKQ}>aS0Z7mFVz4uuJ9AlOeoiX z-x43VOWpi+N7t%!MRClfN>rkj;M%wzzlu243qk+yS-M>R^4i5s=_A^87?$|u$y7mo zM3cH&xe1~<@5RlGXwH1zoV_!B^w!Ladd!5ykeD|jteT``v}J8$ zbdqV>NU$^fS)sp9vP_>^b(@mWo^>?qB>ccmgf9PSPmz8*+lf_9kQ~!% zCe2kcB3MV5B1n1DT(@Ep&4^|>=zfB>pgI}+j5ziQ8by#4R=op}j4mu4+c-%x(J4?R zqbtk9PD9cx)icnyGg8^(2qeu~?Ss0==)veFK+^oH??DY_WUyhb&TgWkdO23#j2!k4 zbbKk8H!U8EZbomG=ccWlwiBZ&BcB~}*HU5iW{jbX{_F|2HVccQ2kg`CM~!5RWZv-r z$TN5)PwR}no-u|!k163q29_DdOw;bha-31l`l3Wa%rfl&)Mrd!iz9WC5|s#z(*aIo zxR@E2>6w(+I=yBds`XFoXILso{!#Rde)^<&bCe8?d86vab5S;elO_)4x;^Rwk zu^C?lfR@@1vy7yfX4uho?L& z$uXld7QOPG4s;_al{e!IrhxJcf_HCHhkP62dJipFo>hpQnh>$fD4;~yr_t$TqBcGM zf~?0{yk|zsJ7Ctc4+=Kc>b(v9fZr1{IXa$3&58S;d@(vM_~-u@lZov*TY}E~5=?1U_ ztb#*bw*RZZQjV({PfHx8U1YFnn-bg#M9FS8*fCf z7N(*6Wt66ke;!2fDvu254Jno-6IzKsyi>{+y1>%4%$M5!0c~`ye%w<0m{yF27%p_K{yykMNYPn)w^Rl7JDvM^ zfUvAT9{r{PRhmE*$SVManb;SIl)$T8dEOHzAtr#b^)7Fvg1X&7nS4YCp@!bsqyziS z)J*zXN)4A%mAr1#1Xfit>DQKQ0AW1@bMz#y_FS_|>8&RQ#MV=A%O`DNVy+qm>sBipL(C8Q`QNY z(s?b}K>G&jhAxuK{(9Qmz#XL9`MBhI>s-{pV56OrT^tM44bg7b&mT;EO1x`MvTM)^Kos&0;eHPSRkkWFT(<78nM7k0Ts6zH57wDNAxG!R?*|#egO$ zf%wCoLI2Cc=IRPkeXxezz!Lv|eVgqDmU!bWwHt4#-FQn4Z?4^VOYO#6YB%0e!{PHA zZ>imQOYO#6YB%0eyYZG99%+h$p#MW}sePV#<1IBj2@JdeCjOrX6Gw)o35*bcVUc3$ zF3`hZ^Wb8|)I(i$EX&H@JnNj^RXubpFSdeCfv4H56lL6%C(MGxYRMpy`_`TdKOaYMyW~k z5}ocn^}Lkog@g9}I}ylDCDk7{4gg*iUQA0PD&8%dYzYyP z$uh+h4w^|^tYUKemTcfj83F*RoE#yU!FpQPbcJOJ?$pVDlw7mU1=^HrM4O_hZ%v}U zmLf%l+l4Wo!t8giXZ8T1lG%AO#W0ydnC+54SmorKTk;79(=8h-nZ5MHFx!ZO3B!WX zJxZiRYM3z0ftNMr_iSFD&MLgxH<73&*NVK!l`=^;nM7DtDe@jY`427GFl@45mQ7wH znIU@G+rgbG;k(I?NUoxDQK8eDRj8{yDsvLOhnXg2dWH+bXTb1SphU)w;GEoBO7)OZ z!q!`LTZgq|!Zat-+lcDJqt*v@$*a%)VKrJMyT;e#0hHT^#5g0V~r7Ntj|J08LKrw zje=yVF+h!iWT`bkje=yYF+h!iZe8U@KwYk(RBDX+!|H455-*#@XlkQ6rC05wXQ zX|@4slr+n11Jo#K*4YNAQPTWp8=*!?bj&tDjgppEV}Ke3ZEcMKY80fx*#@XlkR;St zV}Kf?b9g1!7@)@JoS{TB)fk{gA!eyDK#hVVpvGDc)Hs(bwALD+#<@A_>QfzEPl&AM zT!SpKIoAS?kFnHiV#r-!FhmU>laMdC-%iik)0v296-xNNbgP@hrK%jQx>ZUrzmzTwmVvV|)y`zKmlP0g(OK6bxaOjs2;u zBmIz1d@$cpKlzb7Vg{WH%SePhfw!ATD|=g)v5mr2XGoH#%)myWX0Ogw;^9}M`W$)6 zeDWN5%G`dAJY}9fN1if+e;pUWKdEl1tA3V6eMLmCBc*M-PS5$+=zRUq< z)^#FgwUbB8oFyXG#!enFbC!yjznwf{=G-S@9qi;0GiRBI1>1+HJAWpRm|y=)9x?3~ zxJS$d7sw;#*B9Pk^VG+G34;I2*MA}Zm!IJmPmq7<2cKuT7lS8|v&+B*q6$B2BW>=i z1aW7Vf!x_8)hGK!=kdlsry^&Uf#mEGccCN@jH3jG0tYeje;Ek>mv3A&_`e+VEBU{? z^;hBlG7kPPpZ(R~|MH7ph5yT>Y!m8_dJ6f!Ov({4tNpZ^a!L5VOd2R?@pkfmnN%oZ zDR%OInKVemGVPV>-IvJ!GHJYsjk3R_`d=3Q zFO#MU+E_dJzf7tTu`+wAI`VR2IQhR!TJQ^cHjA~+#@OZlFH;hzVa##rUoQu;=hfFQ z#{`mZ%c8z)BrNr-Mul^Km+JSIgF};v14ocwuxR3O^_44uKIGuC2o5ekydoT27FMwrpx*D0%!3?U7EWQ?+%(&lxa1Bl%dQFs zm&L-tKmP zvi#_`&Q|heSqxv6>Tkb=!hKXoQ$pC52zt)3y*;`IHH+d zDbh+FDvROEQhl*0l>A%nY>FJrX}Z@+TAmC#NDyAu-B8&m|ju zq6DriAA-Lt_TlTLj9gi2e`ScB)V45I5l+r5-$Dmwt2?6lu2N-4f0e~>W~uctF}v%i zE_2W$6U;qT78~4H{z6P^EGdvoxUodpx$DXfFhpt(W;JkyP&~tVwGrIw2u zjRVZsw;2|QtHDP9b&FtwpxNI>o};i~l>?RF5Yvr zUT`A4Tzk`t!TY6lzzfNjqpnKe{!(l0%_4?TtXTNJbWp>-jsYQShIheW?*FnF{x4B| zT;i}tg7-t3Hk4kByjvE-Gp6=OZ$_>$wa2}g@QqnaZ!l`Ryx~EOyTF8VOzpBa6W%e4 z;T==!>;s#*0=UQ2hWO|_c*NA^6OUYC7Q-c`_9SA_JO-bbn48v7zaE6?OWI6v^v(I& zS3WG6J*Ty^vP5>jmTP6{zLPP0c?rC<7p+WpbQ#P&XBNkKjnbYW;or19R#wLPXvwWu z3cF7$Zw2Cm+LBfb{x7vNM7*Sh`7(IG)Nb=-nQhuf3$}# ztqx4~m>bM&I;x2CY*c4rx(dc9HR1J)Uff~kYmks7Axlvba+p~x9A;8`u#ZVX?`q^Q zvltFDwc6I0*vLa>F+5~y%Ua_#i?!PGt>H%Ol6JK<8_Wu{L2X!E>o=i|kDeySUu-Od zd%P^(;+>#9LEI93Yz>ao+WE1-R!TB7k`GMnyEZI5fTAVvb%_FTC95Mz3EoZAvf8p( z&Mt=AOH2}+{k_n_y;c^(1E#jDEqn-aAC~0kQcC4VaZ89?43C%EF$jqyaCE8p_#sB# zDU0FhQtOJCaA8RfEv16vLID?oXG?9No}>g0EwwciBkz>O@Mx)hq{m9&xKg{|$713+ z51uPAT)EZHqd7$d8z%E$c2MhULp@e$%WW8mRobgICfr(p*;1S6&xC8sV%@c+eZTgZKNG$!OSo@Ku|#p-mL=S`f79bIW4k+|oM^Y(GjVom&>a z`>gg%J0`qaQa@#*JR(6Dsz0=2aBr#E16a5Z`L`@SIYrA4U}0>VHa-A;1~arr0+?`R z>Ex~~pY?(g>B`c{U0Di>@N?zlt}F$`#9diBxhqRS5f7Z4+?A!E2v?R)?#fb7#MyQy zcV#Ik00~_)W+={S`-Z2C!^0FQ1iaPX)43!Q}1I*}~hU6W%Vhb{$!Jc0r5n z$l&2ptM15zi%aL%Y!!ySaB-<^@5qFYOQ-O0`3hK6jpXCfDSTY&Btj3J!pEgfA|IDd z;p0*#k&jEK@Nub=$j7Bq__)+bCy69{Ty9LJZYq3SYOWv_>>7mi-1!TeiS{xx`WA^F zZ%OW;5*!npS7y7ZwohQO?%b06UOLU-mwNbo6GxMQo}T<-&hzjki~M3b$uH&#tz$3? zfG16@OE7cv9uG+~+vSm`{IHjMoXY8E`T{jTBh}1Kxka#BB)6GPxXsk=4Q9e`rW1ZM zwSVv!RV^H6YI`U~E;5~Pk*S@>;>>+yj+H(#wdI|d7W`FL>^!zoCqR!^l1u?ZkbRLQ zMe7s7gzrp~oi#$pZ)^(cQS=e=ovAGhVdOkh+Y-Wr_e>M_p2>IZ@8h1^Zw@7p-ZM?Y zd*%_Mb48eM$a|)#Ta9){D0U_h+GC+i_|N6Jc_;}!_mUvOlJVnjQ!01U(*e_p3c!mWQ8q!!B_th5 zNEKbMQ9$Z~NX6(ez#T%x6_A=Ry24+~*f5BdQhxdea^fTMIO{RkF+uYWV;u%<3m2p~ z$tpVmd4Pk%Ka`AiI^%oJm;nV`r><+8n(zX_D}w&hRK4L9NE( zl*_5c0**V5CSY+yshi%`Y59{9MwDB;Bp>xMXDL43ENcMukZ)k(>)M z`~YTV0p=X!<>#2n!{3zs^Mm$QDd0MhsQZ zh<=oHfifN%J>6#{p|E^SQA&G*qg$jziNXeBYF!Na*g|f|R3SxNKPXmwaY28TzFKMo zzOPxN6AGg8h_2B0vd|`64oO_)SrHq(E5^ zl}CYc1)7{an%5E6G~A=f#bl(SVklQa3Fu|an8B@~_<5q0>Izpx<&j>+2^N9F%}i9v zX+~fZRz~HKjB;zV2p@#7IlZ|Rqld4G5?t3@DK_B;>dKQSSBzaZUuTz~0xCuOOdbB5 zOgvVmEkTV;7EBsuN;%CzY>sY$Ge+cf47#^Av&6i@wcbT_JBL!6SG?w;%9W9|u8Hxe zTsD^`E3;|1_wf5=epyoC1P>oQt_1VSJYhx2@K;)hmH?)_RWL^n-yoS0F?lYsS1G|u zp|=Sx^**KCLK)wq8~(Y>FR2YavD4F7mF5-eUBgQyd#4ObxR=*^MOBV2!H1$0R!4<^ zkjh5Oyg|u^{5_HYleLOnF8WSKdjoFUU|R*M#z+!=ohml+H$FuJV+m+(DT= zqr{0k5;}`;8}g#hR*gUJN|Lj(8SZN*&71)Dw9o1FUFk5PY78{^yB!`cRedi*>KJQ8 zhR)$VBype4M9H5Q%pxjdc@%YwH@ZkOKI$y%-@h%KlyiGL=B#&B@Y(eZDk^!r71piS ztsCA)YS}77VJYX+{8QSJ4MR5wTSgC`B$+R|^u(}qqo>}KDwaw$*Ki32_sLWgm`Vju zo|H>o87wAx#TFVi4F$Nws4d0`jD|vfJ#_d{nPiDfLN&ERWHEL4Y01nVt8-z%F2S9F ze3Gs7cs+));B(=yKOw3w$5{z^WQ(!}Mm(m4$FL|@M@h<%p(0>--CX)+9{rt1iqFVw z4#V%2`BiWjUdE;>)3#HY^d$OTAkPomBtqdkdV$MW_0zDZmHD+n70`=eG~<{S_?Yi^4Hzv&TH9tnyD=Kg>qxj$ghz0&j6%cl!>z=C9&MYw#ra0e_% zmKwt4(}g==BDvs_cGkD3%5>omScv)0B49pU_yZOsM-2h<>B1kdAmz;>cfjew9k3uR zs7>|(Nw@q z0iWjjtgadY=F^2gU_tYbA%DO%^bT;k@CO{2%k!R1NPQXi2mA=1N^s* zvk9p$38^pZu{#n~C~5w)392vS{(vRPF}rhuHY$PjOeUwl zW!&knU|D7pP+!KK{z_rt^mh!L{%RW%@FZSLYvkTnJObkGeIv8Ty{{k$@41n=w%BeTf6ub@fqzLB{*(5KvrXdrR-zRffdB)>pvqInj7 zt~ozw3%cOmTZ}#O?u=(4lO~!fK`DqP?XrU)qvf4}Y&m3;qprcvhaPog89)Hz_O29*! z6PQ3G9zPJP6i6-b_y(F{72xsOyIq;n^*exkCG`ak$WO+QY6i%kgIcq5D_W8%ovdD+ ztUlIYG^y|!+%f+lG#h9k9F(t8zDG2aKzVVA2Nt39-AX;CE$PN0xd&mpHB18Zlq5s~ z^fx2-a0$?-;W|P9^du4?0D6*8LIpriwo(pN+Ldm2runOukir1bYco>tG_z4#lETFI zDPviM_Erj>p}(W;PXV4*rG=(KB2mjiz`s!m5M>n?e262lwSKbodKrTp6rQ7)tTB`Jz?k%+93)?X;*u~(8*eU26JQeq?NtV z#$6vqte$F!?bms>pQ+x(hbbji&jmP`@2*iil#*DzwjqOgzTS(EcF}#*o&Ao^t9F^i|L5HAjXFZ#9qWwLIq+kVws_p z+P!#Q&R*5(DV@OV$DFa^UM8+XLkJta^~l?x3Zb|Y$afP`nHr` zAx)X^{KcXD{%nYwW*Z6)7|B}e9ER^!YOy)YjpJ)Yh_LP2%p4{@T?r%~I~}ap@S=ru zeq*^>@##t+``X7j%nj`?A%P8CAeBjI|7kbPR*y@9_O*&$tQofdSq!vagY9b{_G04m zl?3iP6op#A%!Xmv_xpxY*oeSCU#Z!0nFsUNYI0GoGOaF`0rl7R<}&dKOM?BetD!m5 z%qHNxA*liGWEOnl7p zVcdu@7dAq|Zbf{|lJI}fRuc0uV)DAtnfREcR*}!d*DQ_40QP%C#n&v0aST9PmCx)s zZouCkv$#~(MVtmO0RG9u$l%KDaJ%bHa>nOi=sV|zrjp*C^aYVno9{`@u zwcGol6+YJObBkJE&pdErH$e6zKX_|wMl7U znE~FX`ekcLLLV7AypJ~E%nyxBH`>3VkfZ%C6>_wn4dQ73&4Y|+{}G24S;RsD=mVDo z_oGYjS=lR6OBsTb14J*uhcC4qgII(C_5X1Y3m0Fr1nRE^6*2n6rIuTS6Jh*l0Kk52 zdJ&q2qxS^yuRyGo8{*gADq_*?bZ8$_IL~!}wxx)*Z;jG(4#E7b2Q%?OOM>~aU~##J za3QBzYDawt6VP8m_`g;<7}_aXZ1|#Oqgy){q%#2jfOh^>OF9F9yC$x^CkDrLw9|0_ zemLOLVDwe}aDWy!1WkERyJ-kN1MuJwjMFOZjUmm>0DL=yp8*KI8ROA?1|a`tegkf#dtJ8P)zyhTKRZ@Nc2%lK{7t` z5)|V}071b?0QW%vL1}Riz>4&k>MbKPTHmYqnLFHBGmt!xP=m^e~);2 zY^EJ9X3qlY|I=_LzGVrdAJxjgWogHaz8^n4fGwyF{2v{Txhh4wG@La9{)4Hh<|BbE z2BsK+|K24`e9rQp1OHlG2_}M4?YR;rK4^J8h##F^-U^BjS~~GTOD$mp$NOtWc<}z) zaT_S{{trep$NTv=xlmgMyk9379t7$n1KzKb40yjzGT{9>$$pF@# za1(X&C=9R1wJD>R__8I3=#SB2il-o;^9MMJSi?M0l#G|xtCu7>CsA0i(WdlVGWq1a1(;;UXe_m@dj>WioN=Bs&GutW38xSy-gagI{$VNcV0wW$k zGK3LFC$&cFms4hgbsh7huDhYDQP)Me5{#`(5U^HBX$tP0!n!MpF5W6xlw}W+4FtVn zi}t}d*2#CVRCg{(`(Yf54dO3%>cRtMB71Hq&RLxMuN@JAwIZ#RSSRA4NhwlHh@SMC0V&qdif+lOvHxSfS3q^5iw~tk_j;pgGWvagqW0erNRR-sTPw0Atr*>3^8#la-m~# z#H5)fLQKX>O*F;e&&AzQM`qCn5e2K657fw9!cg35Nh@I}LaXw67Up1O9pER4p&Y>E zM;J2h!tT@DjmGl`~uK<-gnpePsH+!S}UI7oy;L*P<;eob>2M^ct z;E~-tSapF1kB0eBg2(cB@c2v~Jh6lae|?GvtKZ|nlV9=RDaA?&o}urrdj&jK$b&Vr zdGNeSFY9{+{9`STzVsmvUjCT}Yullsy#ijL)1qDhuMXtFx+)&LwvY#}k3r*l1-vnv z2XC(A!TNPPc_r~>u#b6Y zWtR~8grL=2@u^;k8Rb|!yb?3two#Dv83OBWbQad?YX^S+i1o?0E9&1`j2CTcuySCB z$=bY)S)|yT{ebF1ye%V%Vl!iYM`*pX5#6>Mm-zEP0VtFCAHkHv{D&Z0W_}$O_-CHz z1%Y-yBLho%ug*{y@b3a{u7B?ZSRj!LEK0kNkd-C9wt{l}kGu`Lj1umPLD5|Q!t1cF zk+dTL(gD=wEZ`*SyXE&aLs2aq=9Ra^{>3_~m}$Sto(%Z9*L|yix0g zmuj0~dUP_!{i5x3B3vu=ierzO!S8^LV zgZ_<))Atdbevta_$R>_864zqB3L2vy8~>rCB!@PLwVE;fOct+Z?+J5lG}qdQD^%h= zVQg{(Tbn60>rZt4Bl9Z+A%>*mSTA&%z=0+%M>8}}uiIONfg3nfFkLip3ofamH;faB zeY;@OeBPWZ-#_N&(KIhC!~4gWbOOH@l@Q0C!;BVqE6YSZu(KqkQF$q9qbSNu3r-x{ z?23h8wGgBQLex$RX`rguhXqbyygcb7MnBM!gCItz`T|`o@GnBs6t^aRWz3gU$FT`i zj~8GqjR9JNn$>azHS`rx7FwA&6RB2FUnvzeLraw~mTT85F9U}i0P%7|X&Dm@q;p4i z0k^%GS01fyHZK>|3va(TR!J2;hkA_0UB7Y1h%m)1Rv((gBEUKE7cg@FCR~hx|-J}t>&KE1W&w|&Uv)NH{;zx z6|kJ^q;G5w`@5z}9ar$Nq3i|F4SQuy*%|W{!UTP)5#SSA` z;G?{%XdC3IDn49M&#N#W20l%>Fxnt_s!JEBhZ%t?*FamRmKx%iFSgr(kBPi5lLYSy z{L00vR(1$#^aQq@)LrE*KzlDwekjF$NCeiiY+8!xM=+Qe#ZKd z1Z@OcN+htGkXzsuULx8e8Zsf866a#`{2?((%x|=Pw9ym+3p1lZ?Oo-@$GOa3c^qaPg5MjM$O(-i+PN(w^me|Fa8WGd|V2GIR2Sdc*2ZNMO z6tU6vzNEBL#KzcxfhtLpMXc0LuVp4p6*1jchKRve2D*VOsa8bCVb&UiwJ_;UDix!f zFg`i(U5}E2^Bv$VI6*fEu~xcalZSI?PL+pq_@y|U^E2ek&*Kcp00&XA!N%4*)*6N0 zmzuVU`cF}h(dZ-HUE-WhU)B#SKO!-uyMA`3%uTbEg9C>2%5kfkA@42{*;B}@sK^Y% zxcwSQOe1wR>Q)$uT;S%P&^>8EVe5qe?VW7HghW4dvZ9jh!BWK$cP6%e&|tG8uJmB} zBvqb{PRbPM7dDI4fW(lKbOZu}_;g7RorEb!EggeE73)oO7ca6%&do??blAS=mMZ)* zgK}CGqLHkdm9|(hbQ#MpdnS`9{>j@xZcSti2-aO3L#kpAQzpcsYL!QmUUAcGyIr_e zGWgq^g)^Cu)bH40t#q^9&H5>RW9Tx5Zv0}cxyZ0*cl=oWdz{3u$UKPdC|^LJIAd9R z$cIA!BT1NJw*H2m#jJi2_|0bAZ%H6q4%!bcbT%{Vh3VbzTS}@(wmA7jO=)K1iTg8g zc|AeIjK#P(jL}ia%b=Utokj&8!ph=kX2ztl8ePrI9yM~C+JM`c^*|>8*9G=l9(E2> z(fs5<1%a9Eb?1ysO<4Ad(^wh0HnppnU3RAv9fbN7&L5?sgA`}8^=Lr6i-1X1luXF* zp2P*SSsi+atGF*~gApq<7F|agIqSY#z@-*2vl@?_%=9>#r+7H4hmB^o5^T|>h|4pE zUGJhUip!Wd=k>Z2amm{n-gR@>GW4I~D%P5-Ip9{qt)_VbYWU%=+t@xXa@j3HHEp9G zT?GDO&sKrGq%bfHBWtDCbUM5+E1{X7Y_F?ys z7&ljzNIztTu4iU1gDZQ||10fV;Ipc(e9t~#!gokQav%W`pb|pDGX#?GM)2bik^rKF zpgbi!qF_}lAR;Os-qGq@hbrLoFxIweFa3>H1+Cs7GKf`k2S4+@BfqVTMOW zi)x&e0_i`@A-}7{s*A-V-X04XWsi zPP956Oz0N0SaTwt=})Qe*vN%qRoi(Jf!(109#?BftaknE*GZagxb%%c(s|NE_nkcrCGIi})9zBRi@4sR! zF#Ff&OmYyB)qfmUpE-yK^@XL`qSMU3QSJSMe~L063aa|Q+E8`NiA8?DIE!R$)m6vi z645MaF3%8c?-dTjB|;~r3E$k&DeI{Q_cdF-^dH6W&ng~b6=|MUc&xA-1&Os70a(RP zJE=gyvFdE;pGcx^OW<)Bb8;yh{L8XXBfgbv*E9^+V~iSvQT2J>T- zgR^OI9Fh%lTw-V)#vI$TIb!2SwTT_ZWZr#_H==h(>OtabS(|tn-I)1ajPs$1i6+Ep z!o0^EA32VA4v)r)5G#(L(r?W8vw~ zIicF}jm~)jix5^<3h%~xQIV82&1Xm{$dvFkcfprcViIUY7%DCCb)5v_#b)I=u8MkM zBkntk7xfSKFdxEKVN_$jmpbvCRWO`uMcH{2{iEY$CrBIKR)N-ps8_>9WgonRi+PmN2mF=U9Cp!BZO_S`%=sa@D3{?*$HwOKFY)>jEF9@f zEzLj7{M@;ivs_PNt=}^gi;JZ`=}Ic@f6fQdx!@}nI1k2UJAwM23=GUXHJ8rxGV?`e zF>Biw7qh@cxr<;G3*6`gxF+~lyu_<=FF<86?<2yC@rNB~f1PFfmfXKliPyW*9yk5Y z+tu?A`Vr5|CqnTTFv{)*J{>}l8D z8FMhX)7!Duq|c|i(+{}($s+W(*s*SMr8$yO1!C-2HxrM?iF&LXw$OIbd=V$!i~UgR z+x~%av9JIw$ZU=R0><` z7ygEXu>GB5OH*I6uC6wG#C%^j3ShnC%0{mdQ0sr9HLIyu}cb zdSTu)l^Q1MDRwQ%WXBh`FcZ{HvR>ub;ugk&-Epov9a|?0)76G`{<+&Cyx?W#C%a&V zg?eZna|E*;cWiMB^)x+v!fZZ9Zz*uxLOo`mMi*kf8pqek#A(RPaE2{zp`Q0gX3Tc2V>`=2y$yi18}mk%m&$Mduqh3Z zb?!)v!5G1ON1V>Mg(DK^psyuAK|ei#YB47r8!6J}PgeQ>4KJ`*o-LDc`&|jEW%9G7!9pF`x537QYp{|nrR2A6YrKpC{0e+{E5Op*Y z#`glgv}NZU6mUQ}sRt)7^A5!^bPX@uaS_<(_KN@G}4<6+#hlg8hKat zEU<-C%=uw13-H_!Y=lBS9kJPxENDB21i1yFmvoh!FLkJ5fiPyQof1Z^nBuw&V91 z2DF(5n)k2uCt$(IL@C|Rdusk3!oi@X$+L2_qbi_44VBas>TZYXplMp45uP{0T}auT z3pBr{73`^$k6!ey? z>Bv*~P5dTZh{_WS*tU^IqHdzU>_oMj5yUW+3xq!{VC#V(oOtQTJ&rnrrP+dwG-I$Y zZTbV9+F^#PIx$q6IcSy=vU3R9SK82-X)E1eo}@}c%uW#4y4lu)<4^}rktX(Q5mlbo zXtF|jHky9e`ST2l}|41ER5OS*u zhT?Z64Zu|anLRp~NC*O}7;L825j6eC{08_*5+qc{&P4B9%3%zGgktQG<7~KMLKX2` z+I&_@*6oH^A<3GexA5DWgOk@@(@#+FM>-aW++8Jr7~^i^~V%*E2tDQ6^$5wF#*MT$}&BPXDGTA z#LO+N8J&2jxq(N+t74I!FqbJx%5YG|Q$Delm}E(vlI;tcTG;>7gpvgWr{v z$h0b;IcpH=s39W_vv}iwCqhjc}B-XEsf5U zf;OLM$LYb)*-<;34>!Lfb&rs|S(iaq))peyTFBL;{a$mBUPwUOsc(gj$bZu^j7yX~a+8gb_(F zp#6_Df1hOS<(_u~i1=`6hJ(%rVa9odvL9kbX9&`2FEUrOZ}$A*cZ1I7i53yZtc+RK zwu{Xs;u=BGEzM0C9ZXE~?;_3zrebwu!{%}Y?9FJy!tL)NEn#yHWOTrI37d=QpN&73 zp;^s5;*T@~Lr9MqT_{|11CO1Mrgh{)s3gCZ1_)MB2>Y#vyancg3ef7dU;yL-3LZ^| z9;*Tp7#&Q4M5P7kcNHUQ+HKXY1u<+dn}PbCzr|}GkyW+n_K~h`iL-rx*-iNqd!}xg zaGv>*BQ#O#v31*C-V3AtLgN2fCx&|So1RcvVcy9QvTClqDm}7FN|uCz!X>07UTf_` zJSaEAiRetS^|gTOt9|H@9=a1@aVq};T3e2X~^lt~Yw;yg0Xx9@7VIUKG;vf;@hH>t`#G6F86_F=bOX=Y+uadg7n0NK_fYq!u<7}?<7yaS&Fc03j zngB8HYB4Xp@M%%KTqLZ08^peaf9ymi^ENsQDyiKq;hTn<uU zOc@;E((V&>;AiVfcU941ze<1gRl3w(hr15V_}4vI`8Sc+5SNzi>=P#c_uZ|^&{aj* z0NWigT~*BNh%x@QP8lWew*HZ3_Z`Ha#qDcTv}An7K?CcQDK{2kHlij zqRLmLV<9drF4YzbacNOIR*!(Tnf%#jWYA~N=#RR%UK`wF z+Mgi9)v=qGf-7GgyLlvv53MyFRu5Jn{Tr(RxEgRudP~~gf)y;3x`Wx?1 zQfofIsIYv(tyrsBww!_)?_;67d?L23g7Rm$keI@>#$E6f?FAFR-3uc!LShb!6(qx`^#F2$Y%j?7O%bw$o6gOpDM_ks@Vgjf!;d({>seW9i-}t!??< z=NfnK)8aD2>&qxdmZJ4=%( z+ShU9peZvQ*WPdbA<=zo!TAMrwrXLt;(#ejxAyQ7h0Vni^Trk+cztivTuj7EioE=M z!edgcF^$EO^QYvO=M!adF7p%jk{VN6+|%?jscuABn(NgT`*~RAlZ5474sI+Er{t5S z6@+*EmyxDX&BbF2NNA253yr}JnDH%_4Rwr?;t-<5i0;?BmJn+Nr z3ks;5xT!zZYh!c^T-LXQ3fo#^E-0{O+@30|%a6X=kB>pYadCHEYF)foy}HDCb!oO&QTt>yd3AZV zS68T4FLPdv`3j!O_UbCtM7~)~PE9*stx>P8jeAv`=GZQ;G0vq_+AFeMjt1@MSleW~ z{7QAXxHW2j+!UFstmCh?j=zQ-KX8LO9zLWxJHKE6y1})A&5v$7Xv#a@e%P!k>A2$i zroePueAIL#q6eNgeQFnKSz5EpvPh+yx!y1F;R0$2mqx#R-t@hc+OM=o@(|jvD~hz@ zcso0G*=7s5iVIn?S`5mK6*3yQ&-BhgS=UCdp|vFwv^Dka z>v-)Igcj=<{Gz$C+v=Qz*WLfDD23qy%fC|dU;G|4LU#9W?IF0{COAJ>=g%&FNYVqr zu9HE@;b8P`zbXv+Cbs&cOd{W(VuB?nj^*Sg`k%-#iT2==8r<|U=5WWV4-w*}qualj zk8;!J%&s6jS9befdMtQ`{%ufTYw)O#{?=IX%;8{3Q29(S=J4xy@-Hdb?XL_I+k##} zQ=%}KlLF=SVE1GGg=FUS{xnmR$Pdo1AtN`Fkp)q~znZDZ&oK=9UO(~6ZO6=qxqZ5F z$${R{9dDQg>C?YQe)CHn^REj3CvqwX=1f2R&f&wi1}FWRl3VG2Vv}EOKq`R|r(s^O zbhj80+zk`DuqBC%rd)T?J2E}vX#6;px+sW8Fjar-2 zj)oHq@8~#b`X|fIVcPk_qxU~B*Cn52uh)y$@B7F+pBvqE%=8T#S6#PhQ_VVhpE`5n zs;k?hH-BZy=IEw1G06Pe7T7#Bm>!(&^zYN)(csZU7(C+F6#F%$%r(v5qanxt zBH1ykz+aLdy*D$b$Xq3TCORQL|94FGKFUpuBi;lFXXP~n`OVk!U@%$1aKR5)t15&Z+cn5}&0bo;?NlJnWU*>S3!uR%$?ymOx*9qx6jwMj|dkz;WykGPCe{VP69`3Sx z+^G%}e$wGWh5w_E_yqtL?<+~Ecp12_r2!ZE0?#WIK>#dxp`;|J@Wl=nD*Rg&d`pOL zJElP46Al+Dys1ob++1dJyiQWeQQ@r)7b^Uz3IbqL|Kykgg}-pPP~p-2CC4%StzfOB zl%v999WGRO;Q$eA9bg3)NlJnWFLt<4;o7f>VBOcOV7;UysPK4)3l$!Jo(KZ)=x2hY zB&hIYhYJCL7mn=mz4+QsPGww3l&B*KRYt&nq;Tb9w>ab z!-Wdtb95|Nr{AR;KG2#>IVxQ3aG}D_4~)i)K;ID33yvjF_$7x66~41v4K26%?39%9 zQ}}L&3l+x4~NvN_&}RX8bbWsF$D^rakx-nuYv{p)m7MxjHG0# z!Z{8XDx7EK%IX1l^pjtaq6Ev|>jQ-gD^i3aT&Qq^3eK)b5zT9?NKwLq3eTxX5sC#B z-l2j3i00i=k-~2)cuPeJ5CTV4q$puQg?Fjo?ur!Aygd~uN;pS_zg>|c6bmYhZ>!m6 zqaRtjesG2V-Xt9VKPxrgJM%NS@VlI%3_q_g|V~f5rNBdxdQiJy(0WZPHzkruT|Ln!-Rf_<-QC zN+bndXM>fl+YU{2H=!wZ3oNgj1#ANNS@!_Cq}LQncB0SobjgmTI3YY;iDQM$&$__Y z^|GeA4Av9{paS(Tk%{+9N%Le{#N^8b*2Sz&Gn(oQsdQbtYN}r~))b3Qwy*PtiFGN7 zB_h)`^(y!|jlUT)kojtFo;){5stdIp@~kP=RUZB5vPxG;n(CKbHPtV?>gvXRlywC( zh-dW6sk$1`#f7Fi^{Z#}6P=3J8D3L(l0B^RutrPn>|v#2{-yGq6}MYwRm_%_E~!S< z);UmvW$V-?5w5Q~E10#;M3`Y%p-wPs;t+-+ko%+#!QQUW2VJ-L{Aqc$8>LK=!sG=(6KCs9+Vl3rfl+DC zWSMD->Ut(G=sw314&+4JdM3x`otkf-@3}lWM9;T9Wf<{`q0t$7zVzSiGrn6exfh-n z_wboMzBbxM&)=G6pU0F$hv@l8i+%Q9iO%4;`;mcm@;Vw#Do#%Dw^v3Ri<8sxn#Ndk zs%Lbl7;JY;x6gm-__8>8mq}|SS>x>Q1P-%nWo6@gdRklA_+FmYRyMxa)7r|$mw0<^ zePJw!{Up5J-s@74F|?QP`greliSO%u+$Fx$J1Ui$t*6X;DGOg|$qBEYw^iynTcE#p ze^bZ9eUcMQZKsSzfYEeeFg0Vt21mV0lcUS#wy{QAyA*)G@?u~Z+AGGKgr&{)j79HzU%d^obXi1-=M0&POwY(%+^xT?ic^!D; zcW#fK_Yv@(U*hfQ)G)s4gwOPxUKj_Ae|AUc4}5tS?Rp6CJ*fdodoLx$_&Fc=UT6|K zDpK@F5u^Br#+gAF5$>Om;^$I}_PwQh7UcA;rQ1v-rc>HCEZN&3cwJZCB>1~Xs_chC z)uln6Q2#qqe=gLc<5G;rBmcY^Juo2Ix9p^lb=@>rN{|!126FAvgtbT)hBpd%qu}!@ zQmkzX|HhG-$b2o?*Zi$b9%3bBhlN=efAdAji#CtrOfK>|51(&~m@XiGA$gp(T1#`R zX}W+pA>^^qDVVToA;{$Fwrp49!}S*bmdv111>V)7PFI|JMBP@w>q=FP|0~X>jAD^f zmFWr4Ln8Kgbjx{g?=i`3t5{(t3@r3nIz1%UN@vzk;+d(y_l(UP(853SgkRV3TLh2O zFkILjoeGO18I1Qj;jgjyG(K^kVikcX+6F?{MMJ00pi?n*`Ffx5)4?Xf>pFaj6o9__ zOL*O2{6Y9%1-=4!yNKIBO!nsl2!qg*jyAV3VzJ=+bhCWmuISMPvo_DCnZLL9 zR)f_e26+Eu`P1I3(i8t$C=?l#e5G3j_3b-?*Y)E)!vDG8b@QhM$VKC#7GExPnlJn% zz>|Kv6~b8e??RxHnB@O41u4PU(kz$MvG`9*~-|Y++{yo4`W$TK+ zmhd#zmZQ0a-l?zd=;YFB;HeSl+@y_Q74TF7-Fs9?)!Ym`w=bf-cU$hGbK3-ClQ4R2aI$Z@24u4Cu@Nc8t5{0#y3wc+;TFN`hGdlB*9u-Y@7ia+ z2|P8Blvu4p-!99a_H^f>)71|}k#0&~lnm%zE-5JR2eeeW9XFe4OBQ*Q^FL0pC@Fx=8qSPr6SEu#)jO{1rE}9K;8^)UYNO*rlCPC?b)qDC_KfKh9T}RuCt5WuIVIU_nWDYJk~ape3*{*sp1dYs zPNdALZP*gsI6S!|DToM%Ov<8P4NrbYS!UKYtdFi5k-Q~?pyM&`jYzKXyNN~|S?Sk( dY3n8O*gPtEXPJd()#02=_Q{&))ltdk{x=;&n^*t< delta 81029 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 L2YXJ6{rbNE2xe;l diff --git a/versuch07/src/Cramer.cpp b/versuch07/src/Cramer.cpp index ecc02d9..ee4bff9 100755 --- a/versuch07/src/Cramer.cpp +++ b/versuch07/src/Cramer.cpp @@ -19,12 +19,16 @@ ///////////////////////// Funktions-Implementierung ////////////////////////// ////////////////////////////////////////////////////////////////////////////// +Cramer::Cramer(int dim) +{ + x = new Vektor(dim); +} + ////////////////////////////////////////////////////////////////////////////// Vektor Cramer::loese(QMatrix A, Vektor b) { int dim = A.getDim(); double det = A.determinante(); - Vektor result(dim); for (int l = 0; l < dim; l++) { @@ -34,8 +38,8 @@ Vektor Cramer::loese(QMatrix A, Vektor b) Ai.set(k, l, b.get(k)); } - result.set(l, Ai.determinante() / det); + x->set(l, Ai.determinante() / det); } - return result; + return *x; } diff --git a/versuch07/src/Cramer.h b/versuch07/src/Cramer.h index 862de3e..79a0242 100755 --- a/versuch07/src/Cramer.h +++ b/versuch07/src/Cramer.h @@ -22,6 +22,7 @@ class Cramer : public LGSLoeser { public: + Cramer(int dim); Vektor loese(QMatrix A, Vektor b); }; diff --git a/versuch07/src/Gauss.cpp b/versuch07/src/Gauss.cpp index 6f6a451..99a0722 100755 --- a/versuch07/src/Gauss.cpp +++ b/versuch07/src/Gauss.cpp @@ -19,8 +19,66 @@ using namespace std; ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// +Gauss::Gauss(int dim) +{ + x = new Vektor(dim); +} +////////////////////////////////////////////////////////////////////////////// +Gauss::~Gauss() +{ + delete x; + delete b; + delete A; +} -////////////////////////////////////// -////Hier Implementierung einfügen //// -////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// +Vektor Gauss::loese(QMatrix B, Vektor c) +{ + A = new QMatrix(B); + b = new Vektor(c); + + stufenform(); + rueckwaertsEinsetzen(); + + return *x; +} + +////////////////////////////////////////////////////////////////////////////// +void Gauss::stufenform() +{ + int dim = A->getDim(); + + for (int k = 0; k < dim; k++) + { + for (int l = k + 1; l < dim; l++) + { + double quot = A->get(l, k) / A->get(k, k); + + b->set(l, b->get(l) - b->get(k) * quot); + + for (int m = 0; m < dim; m++) + { + A->set(l, m, A->get(l, m) - A->get(k, m) * quot); + } + } + } +} + +////////////////////////////////////////////////////////////////////////////// +void Gauss::rueckwaertsEinsetzen() +{ + int dim = A->getDim(); + + for (int i = dim-1; i >= 0; i--) + { + double xi = b->get(i); + + for (int k = i + 1; k < dim; k++) + { + xi -= A->get(i, k) * x->get(k); + } + + x->set(i, xi / A->get(i, i)); + } +} diff --git a/versuch07/src/Gauss.h b/versuch07/src/Gauss.h index 27f1c18..1e55979 100755 --- a/versuch07/src/Gauss.h +++ b/versuch07/src/Gauss.h @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // Praktikum Informatik 1 -// Versuch 7: Lösung eines mathematischen Anwendungsproblems +// Versuch 7: L�sung eines mathematischen Anwendungsproblems // // Datei: Gauss.h // Inhalt: Gauss-Klasse @@ -14,11 +14,30 @@ ////////////////////////////////////////////////////////////////////////////// #include "LGSLoeser.h" +#include "QMatrix.h" ////////////////////////////////////////////////////////////////////////////// ///////////////////////// CLASS DECLARATION ////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// +class Gauss: public LGSLoeser +{ +public: + // Konstruktor, übernimmt die Dimension + Gauss(int n); + // Lösungsmethode, übernimmt Matrix A und Vektor b und gibt die Lösung x zurück + Vektor loese(QMatrix A, Vektor b); + + // Destruktor + ~Gauss(); + +private: + void stufenform(); + void rueckwaertsEinsetzen(); + + QMatrix *A; + Vektor *b; +}; #endif /*GAUSS_H_*/ diff --git a/versuch07/src/LR.cpp b/versuch07/src/LR.cpp index 2adbef9..eb39102 100755 --- a/versuch07/src/LR.cpp +++ b/versuch07/src/LR.cpp @@ -49,14 +49,16 @@ Vektor LR::loese(QMatrix A, Vektor b) ////////////////////////////////////////////////////////////////////////////// void LR::zerlege(QMatrix& A) { + int dim = A.getDim(); + // TODO Der PseudoCode funktioniert nur, wenn nicht durch 0 dividiert wird. - for (int i = 1; i <= A.getDim(); i++) + for (int i = 0; i < dim; i++) { - for (int j = i + 1; j <= A.getDim(); j++) + for (int j = i + 1; j < dim; j++) { A.set(j, i, A.get(j, i) / A.get(i, i)); - for (int k = i + 1; k <= A.getDim(); k++) + for (int k = i + 1; k < dim; k++) { A.set(j, k, A.get(j, k) - (A.get(j, i) * A.get(i, k))); } @@ -68,16 +70,25 @@ void LR::zerlege(QMatrix& A) // Schreibe aus der Matrix A in die Matrizen L und R void LR::erzeugeLundR(QMatrix& A) { - for (int i = 1; i <= A.getDim(); i++) + int dim = A.getDim(); + + for (int i = 0; i < dim; i++) { - for (int j = 1; j <= A.getDim(); j++) + for (int j = 0; j < dim; j++) { if (i == j) /* Diagonale */ { - L->set(i, j, 1.0); + L->set(i, j, 1); + R->set(i, j, A.get(i, j)); + } + else if (j > i) /* obere Dreiecksmatrix */ + { + R->set(i, j, A.get(i, j)); + } + else if (j < i) /* untere Dreiecksmatrix */ + { + L->set(i, j, A.get(i, j)); } - - R->set(i, j, A.get(i, j)); } } @@ -86,12 +97,36 @@ void LR::erzeugeLundR(QMatrix& A) ////////////////////////////////////////////////////////////////////////////// void LR::vorwaertsEinsetzen(Vektor& b) { + int dim = L->getDim(); + for (int i = 0; i < dim; i++) + { + double yi = b.get(i); + + for (int k = 0; k < i; k++) + { + yi -= L->get(i, k) * y->get(k); + } + + y->set(i, yi); + } } ////////////////////////////////////////////////////////////////////////////// void LR::rueckwaertsEinsetzen() { + int dim = R->getDim(); + for (int i = dim-1; i >= 0; i--) + { + double xi = y->get(i); + + for (int k = i + 1; k < dim; k++) + { + xi -= R->get(i, k) * x->get(k); + } + + x->set(i, xi / R->get(i, i)); + } } diff --git a/versuch07/src/LR.h b/versuch07/src/LR.h index 7edfdba..605e2cc 100755 --- a/versuch07/src/LR.h +++ b/versuch07/src/LR.h @@ -26,26 +26,30 @@ class LR: public LGSLoeser public: // Konstruktor, übernimmt die Dimension LR(int n); + // Lösungsmethode, übernimmt Matrix A und Vektor b und gibt die Lösung x zurück Vektor loese(QMatrix A, Vektor b); - // Destruktor - ~LR(); + + // Destruktor + ~LR(); private: // Unterteilung des Lösungsvorgangs in 4 Schritte: // Zerlegt Matrix A, Die zerlegten Matrizen L und R sind danach in A gespeichert void zerlege(QMatrix& A); + // Herauskopieren der bedeutenden Einträge in L und R void erzeugeLundR(QMatrix& A); + // Vorwaertseinsetzen(berechnen von Vektor y aus L und b) void vorwaertsEinsetzen(Vektor& b); + // Rueckwaertseinsetzen(berechnen von Vektor x aus R und y) void rueckwaertsEinsetzen(); - + Vektor* y; QMatrix* L; QMatrix* R; }; - #endif /*LR_H_*/ diff --git a/versuch07/src/QMatrix.cpp b/versuch07/src/QMatrix.cpp index 9410986..33a3a5b 100755 --- a/versuch07/src/QMatrix.cpp +++ b/versuch07/src/QMatrix.cpp @@ -11,7 +11,6 @@ ////////////////////////////////////////////////////////////////////////////// #include "QMatrix.h" - #include ////////////////////////////////////////////////////////////////////////////// @@ -69,7 +68,7 @@ QMatrix& QMatrix::operator=(const QMatrix& B) // Destruktor QMatrix::~QMatrix() { - delete[] A; + //delete[] A; } ////////////////////////////////////////////////////////////////////////////// @@ -143,8 +142,6 @@ QMatrix QMatrix::inverse() ////////////////////////////////////////////////////////////////////////////// double QMatrix::determinante() { - int dim = getDim(); - if (dim == 1) { return get(0, 0); @@ -154,7 +151,7 @@ double QMatrix::determinante() double det = 0; // Laplace Entwicklung nach erster Spalte - for (int i = 0; i < getDim(); i++) + for (int i = 0; i < dim; i++) { det += pow(-1, i+2) * get(i, 0) * untermatrix(i, 0).determinante(); } @@ -166,11 +163,11 @@ double QMatrix::determinante() ////////////////////////////////////////////////////////////////////////////// QMatrix QMatrix::adjunkte() { - QMatrix mat(getDim()); + QMatrix mat(dim); - for (int i = 0; i < getDim(); i++) + for (int i = 0; i < dim; i++) { - for (int j = 0; j < getDim(); j++) + for (int j = 0; j < dim; j++) { mat.set(i, j, pow(-1, i+j) * untermatrix(i, j).determinante()); } @@ -186,9 +183,9 @@ QMatrix QMatrix::operator*(double scalar) { QMatrix mat(getDim()); - for (int i = 0; i < getDim(); i++) + for (int i = 0; i < dim; i++) { - for (int j = 0; j < getDim(); j++) + for (int j = 0; j < dim; j++) { mat.set(i, j, get(i, j) * scalar); } diff --git a/versuch07/src/Vektor.h b/versuch07/src/Vektor.h index 5e6390c..d824e51 100755 --- a/versuch07/src/Vektor.h +++ b/versuch07/src/Vektor.h @@ -1,9 +1,9 @@ ////////////////////////////////////////////////////////////////////////////// // Praktikum Informatik 1 -// Versuch 7: Lösung eines mathematischen Anwendungsproblems +// Versuch 7: L�sung eines mathematischen Anwendungsproblems // // Datei: Vektor.h -// Inhalt: Vektor-Klasse zum speichern von Vektoren variabler Größe +// Inhalt: Vektor-Klasse zum speichern von Vektoren variabler Größe ////////////////////////////////////////////////////////////////////////////// #ifndef VEKTOR_H_ @@ -24,7 +24,7 @@ using namespace std; class Vektor { public: - // Konstruktor, übernimmt die Dimension + // Konstruktor, �bernimmt die Dimension Vektor(int n); //Kopierkonstruktor Vektor(const Vektor&); diff --git a/versuch07/src/main.cpp b/versuch07/src/main.cpp index 394bc47..c4124de 100755 --- a/versuch07/src/main.cpp +++ b/versuch07/src/main.cpp @@ -8,8 +8,8 @@ #include "QMatrix.h" #include "Vektor.h" -//#include "LR.h" -//#include "Gauss.h" +#include "LR.h" +#include "Gauss.h" #include "Cramer.h" #include @@ -55,6 +55,20 @@ int main() b.set(1, 1); b.set(2, 3); + /*A.set(0, 0, 3); + A.set(0, 1, 2); + A.set(0, 2, 1); + A.set(1, 0, 6); + A.set(1, 1, 6); + A.set(1, 2, 3); + A.set(2, 0, 9); + A.set(2, 1, 10); + A.set(2, 2, 6); + + b.set(0, 1); + b.set(1, 1); + b.set(2, 1);*/ + cout << "A = " << endl << A; cout << "b = " << endl << b; //cout << "Dim(A) = " << A.getDim() << endl; @@ -62,10 +76,13 @@ int main() //cout << "Adj(A) = " << endl << A.adjunkte() << endl; //cout << "A^-1 = " << endl << A.inverse() << endl; - Cramer lgs1; - x = lgs1.loese(A, b); + Cramer solver1(dim); + LR solver2(dim); + Gauss solver3(dim); - cout << "x =" << endl << x; + cout << "x_cramer =" << endl << solver1.loese(A, b); + cout << "x_lr =" << endl << solver2.loese(A, b); + cout << "x_gauss =" << endl << solver3.loese(A, b); return 0; }