From 5437778e30cdb37acb6c8d8e5fb3f02deb09a03c Mon Sep 17 00:00:00 2001 From: shockrahwow Date: Tue, 2 Oct 2018 22:48:10 -0700 Subject: [PATCH 1/7] adding lec10 half adder --- cst337/img/fig0lec10.png | Bin 0 -> 11377 bytes cst337/lec/lec10.md | 30 +++++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 cst337/img/fig0lec10.png diff --git a/cst337/img/fig0lec10.png b/cst337/img/fig0lec10.png new file mode 100644 index 0000000000000000000000000000000000000000..e064e1144bd0417f2ceed80dff17be6b0a0d01f7 GIT binary patch literal 11377 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 literal 0 HcmV?d00001 diff --git a/cst337/lec/lec10.md b/cst337/lec/lec10.md index 7fd6d5e..4fc3406 100644 --- a/cst337/lec/lec10.md +++ b/cst337/lec/lec10.md @@ -1,4 +1,32 @@ # lec10 -> whole section still needs to be transcribed over fom paper +## Half-adder + +This will be the building block for adding bit-strings together later on however, for now we are going to just add two singular bits. +To accomplish this we'll build a half adder. + +This means our logic circuit must adhere to the following logic table. +If both inputs are 0 then our result is 0 and we don't have to carry anything out. +If only one input A/B is 1 then our result will clearly be 1 and our carry will be 0. +Finally if both inputs are 0 then since we can't fit 2 in a single bit it means we have to carry-out a 1, and our result will be 0. + +With all of this in mind we have a table to guide how we will implement our logic circuit. +I __highly__ suggest that you try to build a logic circuit on your own first as most of the content is best learned through practice. + +| A | B | Carry-out | Result | +|---|---|---|---| +| 0 | 0 | 0 | 0 | +| 0 | 1 | 0 | 1 | +| 1 | 0 | 0 | 1 | +| 1 | 1 | 1 | 0 | + +![fig0](../img/fig0lec10.png) + +## Full Adder + +If we only want to add single-bit's then a half-adder works fine but if we want to add multiple bits say `1011 + 0010` then we need to consider that we will likely have to chain these together. +The full-adder has 1 main difference from the half-adder, it has 3 inputs, 2 main inputs and 1 input for the carry bit. +The carry bit will propagate along the operation now if we chain these together, _just like real addition_! + +![fig1](../img/fig1lec10.png) From b30cbb7ffe4cf7ca3b74875d081f2a3bf398f742 Mon Sep 17 00:00:00 2001 From: shockrahwow Date: Wed, 3 Oct 2018 00:04:50 -0700 Subject: [PATCH 2/7] adding full adder diagram --- cst337/img/fig1lec10.png | Bin 0 -> 2330 bytes cst337/lec/lec10.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 cst337/img/fig1lec10.png diff --git a/cst337/img/fig1lec10.png b/cst337/img/fig1lec10.png new file mode 100644 index 0000000000000000000000000000000000000000..c1172bb009a62ed40d4c8673868d945c079cc3c6 GIT binary patch literal 2330 zcmV+#3FY>QP)}1ONa48FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H12$xAjK~#90?c95eTvZ*w@y~W=+tQX6P^7T-0p%$aXiEzsL>eJt z0AsWopD{)gH5wBW(LanK`kxs8F)=Yl5;eYp0Zn`bM2l8@Ae9iLpx}d-6x*_ZZRvKm zUH|yauy<$gYi4J5Zg=*ZOm_C%bI(0@&N;vHdz^Ea%2np63=8n{URR>uS&;aC2L6df zJ*vw*7)*S>68}OC&-SJ|^VAaGhp`4r@IY^>Gfz@v9l~dDe2?lf4+aw7Ps4x2NO`)= z@-|{6R^uop>gh*t8(wI$+~C!dvM{b*XS5yL2;I8yajK{xHc+A#^R>* zaeNoAzx8r&|h5wbW<~(^^iz{-jZ^33$ z=cgnCqEY5aVX!#MG)9G;axmli%KG(1IFR$)rRFF3X*7$hPB0*}we|RKMxKYU6_0n| zdF${Gd`L8K4J)u8Khc>+Uns&Gk7O9&9KagroUP2#6>NZeUbQalKdTK3PmD0 zZ@q-?V>hmD@i|HM;R`q)L&E2Gy>KcZ_6%jNoUu1ozFL%(5c{9>P5> zlszVtitjb0Z^838JLA3waUCA1m(dD0(U@(oVW`h-q2;wdTVwR(9) z3dxX|j4Ml7U)Hb~8D$v6tA*B<#b%w2xs2DJTO>-xO62J&&4%IWVp4DB<6;8dE>z5e z(zT-y$eHpCe%FC=UZ%N0o)+3lGuwnVbeEX;N3ka*-zxmg zbX%dp*<$|bgoWNr*`B`$KNasVQ(D#73TbYT!_r*@H=9)XmWk-%NJ_r*WLvYZ#d6%y zdNoT?wm}vOW3iHy^<}jpcVAb}ze&9OFiyg~_(MyzE6-xlNElE&LYE8sAWv&NNw`2NO*h={ z?XW`jkNJ80Sxm$$g!Y!4=f)EE<~7JxQ+;5Sq|qQ3;spFw=<|!suB`nap3JzmMa)Hq zL@z&Ls>=F|XrMK+wYO`9N?v(tLL|IRyyy<0MV&2r6uDy;FtSc|vfhl+h$-DZ#cAlAjg>QA~&7K)K|fe>|1 zb**+CrY6L|6JlNOA~8X(72(gbM1!o>`-aKlaUssmuYYR77WyN;*28+WMNPO8mWkeU zp~<;pw{SUA-jCG__SXM?y{EP45H;cI_?(zSzEn@k3iQm=WolxQyhEszjd;PGqUYUT z&$l=A?rQM~A-bBG5cA@#W?_-SY_T!%eU*rJbgTTlYgzG-qB0iY1KJBt%_{Az?L8J5 z#dpkX^~tPIHXd@iSkXZ&m>$zvH$+(t?f`C(E}GK3&q>CFPwhB!Ky-CmWR-pPO!F-e zVSvigFCwc!auZP{>9+V8FK+Km zb*9pf4N}85#U7RhWi`33(~lx+g$jpq`*DOc;_qcRP3)&^sLD?YBerY1srqq*wDQge z#p1!c#H!5$Vm16W=?lBB5^LCs7MiCq)N1AC3axB(eO`=?5i#*UDCVEvh;;zX5@rK_ zA)=U#HDZHJe;YJAI&Y9tU{xuz&F;7od4|Q-g=UsyJY!6{A-PBFG~0$B)YAsVh}t1M z(%%*l%a4hDFfR#BZd@o7U&XhCC;E820k@a!EvK4X&E8mwGt7$$ch*eq3ArW zz@Jjm_lpI7%`^@`*lYS>2;=qi4fW?P5fRp1VpKgQ)+;SBZ_Txy+>z(n}62{w?n=Q_x&$kWWc>iA)HQ z@gwQGzBEM4r4Ot4cGMw5&WPgaOyi!2xAB z3;*s!LG6gF7w}%`7VPGF`u!=_x=qnW(g|T9uh9Aq+#=u9DlFUX;69WQUO z+<}6!SIgdY+%o+lvXbPThmyt``P&&b2t%+V%q1P? z&<~87eq`T(*qoHcWf|#L3Y9g@d)zktD6&Shw(6vLLSKUS37eyIakC=8~4R(&Wyt%F&M^>qHekFSs8YWT^^oN9e}}Y3DTW zS!2FIDn=_>*4s~Btm2jQn^M Date: Wed, 3 Oct 2018 00:06:11 -0700 Subject: [PATCH 3/7] fixed resolution on full adder diagram --- cst337/img/fig1lec10.png | Bin 2330 -> 12387 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/cst337/img/fig1lec10.png b/cst337/img/fig1lec10.png index c1172bb009a62ed40d4c8673868d945c079cc3c6..92b60f07923227ca6b5c0e28508ab119c67f9c85 100644 GIT binary patch literal 12387 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

t6AEg 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 RXBYqg002ovPDHLkV1lFrb#DLw From fb8b8e29965a0da10be5d89ca2b71b6dbcfbc084 Mon Sep 17 00:00:00 2001 From: shockrahwow Date: Wed, 3 Oct 2018 00:08:14 -0700 Subject: [PATCH 4/7] final rendition of full adder --- cst337/img/fig1lec10.png | Bin 12387 -> 13503 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/cst337/img/fig1lec10.png b/cst337/img/fig1lec10.png index 92b60f07923227ca6b5c0e28508ab119c67f9c85..c5f2410aaa646c5aa6dbf3eeb044cbfe2dad04cf 100644 GIT binary patch literal 13503 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

Qlku6bgq zRXe`z#5oOlVHQO*P$s;>QPa-{@pYbD_SZ6}JwL&}*HCvk`yGN@qYF>|=I~ZtQ7%vQ z5iv;9vqv2X{4iZ7mC!gvCQG^pI#3ycQ*#G(dPCG+{sixEN@c8rp3!}nXS=0eFeHZ_ZwqmR3y9P}A3_API5Urmr-mzFK zw%NW=YG;@;zpC1sLYO+V9%7>}$c&It&F=~l`sPIMzifn%re%9FhfnxJ-0FY%{c0D2 zhK+ShT@9RzBs(_HKx6j&MVXo+-9JHjZ<*EF5ac5l{>6dBv=uJ|AMjE_ew@8lAi0fG z{(cMFIn)rXf4Z&9c-&}cLoCQz;c0Kp(X=43Lw^8xp(%P}8;{+eOz!Ro{t%D|vh;L9r;~%s%op68-^y5l2TgFNe;L9t_=vJzb{f2?z^F zBR84O&ojBRjG1pA1Vt(^Jt{R6V${iv9p7U715ydogX;~BLZ?z$;mRlvTMxM_yuv;d zy#MM#_g4k|oZpxAs*{-USzmq7Z%#XblcLEW0b{CF?KNk_u=O(oTuXeWABPEEfoj|8 zfjUU|OzG@z^2~MipriLub-du2fY2O&Gj_z@8zfyoMjjGJRo6r#{km6yYyvU7V|GMk zKZ=V(E=_h)Nsy7u6DJ@D9{5i22(X%Sas_%iPX_Pw#mD!BzU+}St5#+A z8(bYZ%Re8DQH(h*)=jzdho$<^OuS6vd2@W1J10`MdM~-hlv7qs&CD9)c39(`vL&{) z#2YS&WCNmo%leqnmN%=w8v_dZfq@&mh#xB)&mhXkPT8?j2_B#k>X6(Rb?({ti#Ht* zi?2+Ip!WacJbsg+sctg5hOqCoxXFy_(9yu9kTm3gTi!}vD7guC7t?7$n5^fW1{Xn{ zpS)bp90LcAff@NfhCorb?WQgiST88%>P6h5Gc;SdE6S!qt{Ev}j6{nElaWn!?aKlq z&aPv>&i6; zmtq@8TrYWpC?1y#NPq4dvi)m-7n;&0rOE8QUD>539T&snVb^Sg8jb9VGOFp+jar||HrwIJX#ZG>50V@1;dA2_$lLI@VJC{BYm7jz|K)5>{!2J{t+#u& zySvLFr5kZ3DCwHNAQzegnGTr<$v6K0I+Rh|^S^{oA&Xx*aoWF$J~X)C9DeXBG!prO zS;w<4oWefOA-RGfs)&BPS<@SeT04>GL3_e|#2_km>#}msa7*+`#c5vmJp{JJGzI>|A;C?F8vVS#(yNNSA&8OK)-nr7tGUm!?@|F8>!NQHk3#nMfA%;NyE zHSr?F%!xf0Dj-k@m~n^-iFLF(kKw=qh;HX1vUw$~w+jz~$oBbG#Vb7p9kw%W(2sDCMs=q5` z>v6Q6LC&0CA?LkJVzU4EjMo+j6B(V?X-{_0T)JlV_mWpgr1c+MGy$pAK#u?IZM|B} z-HIn<<}(0!`k}6Q+Ys&dRS;exa?p2o*Q4X?ysE9$B~awTkoonoI-C@Bx6||SW_BqpWM}`c zlkS1HZrCQ0Xv9j)KE53;%Mf%n{_y%5=mm)6KZ=IXokhL+XMMu9YzmXJr7GW4=WK1H!I`=z{kTY#L3IU$@4~whew1* zNQ4KO7DWEe3^}p?KMGDRmUh;V|G&Zy=u`?)f&8BbO&4nqu$h|`01O6m**QD7TbO;a Y;&O4b$v6_FKnejq$g0Y~q)b2m9~la2DgXcg literal 12387 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

t6AEg zqTlwKT-ZZBY#(8ifjH@-jku(Uyt~t{0ENi6y@az>i}OzW-IE(#6QS|Xg_Ydb8X~!j zliRfIz@2pSUCDeEMgU?NL(k2OEWw#uGEiLvGf z?dXn6Qns|e{_EQ2o}84`PaR37jC8bIrmKt9m;QDS?HP7j77`EF_9UevMdoVa^GF6v zB121a#fq7k)Sl+odU-@P6`uW#PVMJS^{#j8>y9^ztmerObSma3j`aLee^{9r%%|io zOOZt*>|vd0&}F9f@W=Xnd(_vX7YS0Ok0@kdzI)1*MzE5HXlq;_7k08nQ|C(jQMAN(@9wXZGrfN)AR!x)YSQ{;M1y!X&Q&IMXN~k3Et9NOxxm4*y z`66zm;eOe6_l+pdHGw_7V1C+8=6fEV^*+KF=s zeEkepzV)7qaH1Ru{dDgCYIEX=*yN~F{oqiwz}yk{d4$xGlDb4~AzPQSt6G%W>gZ`V z`pXj){ajjIhyb*ab#im}ag4N7Q-JP>xZx%LVB7C1BenxNtkXu0I_%bdV^8CI?494mgvEfWO4W=q=r zBIfeFYQjMg((4)I9cH~qH*Fs3?(MxB@04enp>4i$q@WJ2Hv&T6R{QE?x%(2O9^Ary}vsV0>K|2XVThH{L33E_Vg z&*{n}Gcv+=r1WdL#_idr`N!)HvaZ7$y!i0uV1a&0T8wRMM$tHm<2FY@w6F&a{_$SD z3{5ELb?KXpny>x~@Bd~SEq<-Ym4*h~$^EF(G^_#fRufXM^ALldwa-XD0_LcuT>4eW z`)y=xN0p_TCUhWMJe!I;ZgspB+yQm2D?Ia|I%8$|P~-g=;>fYx zpH#A1;c7k#3}bNJQk)>phm8})e7UdNPe)Rcy@ zy>RXENvOtFoD+Pb_FT5!UR9KBfGh2jgZS%Oy1nW4l$Dg=*J10m4?H4c!QHSw z4gOFWn$aHzI^TrUQ#epu0gyk+VZBfa7G68HqdUJ;(*3g*LuK}BZdVAcn2p!$->h!P zLXwTvO32PHXhu1Y2&(u6CztP8p4c?Myk~3@Pw#v!tDRA3k*7_NJgoR!dJ$e6sn{zg zR!PDBA{|v#nf>SV;g@%Uw$U)nx%47??S;rU$`3bF?;~DYe2f(@X!Y?h10o`->1jpa zkd)JE_q7jn94YB-0{xL5nXM68XGtaolqD%8QJUq1y6xfSzvQbmmetC^rcrylT{?IE z@Gsr^d`Y)mev-sB`aT=z6oh z;Kp%0xr0&coTNlsTrX_ z=YXXw)%gn`lGL0^V&vDb7=S3cBnmo}BuT_m*^j?55_4 zhqim~FTCa9PCH=8{LR>QWlJ00@gA8nvv1404^a{hy$HhInZSVF*|gDWL(=zC`<^f2 za0i`ze6#W>jr=pW-!ted@O#zy+SuXG4-Cn!tt6RFrD&hG&S**KNtUdM$a*`ir=P)# zi_U)|qJZQD6R?xvejW|MB@cSI_t0t@_WqIS)|jG39|-^ANP^|}l+CYQ@?&Z<%75Rs ztVIEDU@%#un$n~nOa#9m)E@Z~nK}oHFx5XTsQ1P1NF+de~n))Ko+ zAg_%@)}EBQ_8FJuihs-%^9QGuJx{;X;;FGKCr8N6+FH)M>}CzHC4DEOt=>Epu9^}7 zc7Z(!+{rMZ!ET>ZNxLqUlr8LA2}W=g^yH+T_?VCimX*Hb8$bRz-W6K9pj7{8oiWo# zy~sc(CHTgweN+fR1LO11G_q+0j9+HynF80o))0ra*pQD^hDyLNlb%(Cd7YbHwc0q$ zU%|}T3=bGW;aD2QD5qJ_G{36i`yBZI1>>?D{GZq`v7=Z^8S^Nn9Cnw-9y+Z*wYYh_Q%}ItlBg$I`~#j%X{5sODFyYh0eeI;RnHrZgMzu!trsE`m%{ zWc#KU@88HLFp=dPJ`~*UYAaVOxRrzFbmqF723;f9Bpb8GArP8B*`gzabAHnuuHWe= z1D?9_RIU;FsrQS;rw+A;pR0arINJen{b8lo(EzY_+kGt_4xM6?%~)Yo7+R??=;>;b z=vD<(9d9S#=S20BD%<9Z>w%`z>3>Rd)#LV-+$iiprNs(Ly68|A&on$uKX)BZil0E6 zS?oGPP@}DM3XLRb5b`mecYoJ3`t=LCWcHgtzV?zbyhpmfHj`Coxg8$f6^=jzS-1on z0E9!WUg7b(r=ujvqz5;qC6p-cMLr`~HZKf2=$FN!qN*j{_(4G(=3CnVGP^-{G0Vw% zErCz{Try`Bcf*EZgQ+iFFu8~2Ax>YS@ZjOy4{Q83< zHU|$&H4@f_?QKb|?x7p`v{TTBm}lrQV9WA!M$bocpiR)&#y{Cm)OzfU05Wg9i@~Ng zFYTGw>e&4%`3GeR$M0OAMv*DX_$bG>)L#lMCV2H<`Y1#a{guhoe|;LCnsl48SDn)N@w|I(;Tp zotnzUE{+A2v=J@!x&`@B_dJrvb}(ry{lgfuL5r_K^kdZ0yCWnj+GmbMYUtnS56lUb z9VO_?VuAW)gu|CuSD4`mQ|RLmP67{P*zfFap~TSDqqm_D$NAE=OTn%H>w53)r_&*Wk)FS50#NWv!h3s_8q!%^ zSyQXE9@ji*+a6gY#Tl|*HY)I>GzSkcd@rlR=PYG;ciY`rJh#A>qgCOL4Mx226~SQ} zF1p#zapmkz+t&d`mXim2NA1_9o@&B>8{lP})o3QD6;VHWCBFe{ih-#2DYA#K@i0g& z^W#~nFS+ie=^|9k19zoEgMyirY&R1RVZNoK%^RV(eOGiXb&)!cLJ49!S-bb4zorSP zy!L5AB<fV#KNgp?qM!GaJ$VMQ0$%Y&A!^dGDTJVk$c22OBE%%#Vk>aHFtfO2AsTP(w@ zmZD^&N(>~XH}L|yGZsWx82?yl__vv}upeWqQ?(#u{b6~YADqxZd-e`LZwl|&<07Ql zOIVeACqzKJyI!GRd9JkO)8X>+oyGweYmV!EM0hzagO{)@biJzdZvWcGdp{UCpw`C- zHB<&If1s?xn&;hwdT$4S331C+$o=)X%kf+GCzG_#m|BCXh2>pBs76ZKN2b+*`vleI zs>XDAR0DXt?x+i-4 zOs-9`uv28&s+rG23a^BBY?HJwsTWZqa)T6NS!XJ-ruwy1wa-tevQRR|Dc^_mCzwl# zoGo-Ub5iF_T8Wx^yE6pzG`W8E1_l>G9Ofqy{CqW^aN_*qLp^~ZpZ&ajR78S!V^rkz z*;MMm<{qgZS*q^0&w+X+<#i9t9a4f4`G|E9@sv5Q<-e3F(W@8vDW)!+iK6e-7<@=D zW@Si@jM6Cem`T^K531!*v@4Z?_WsVatKAUF5Rwo8 zQp^5iMmtqCKvX=RdYj=(+HN&rLqWTUMciE&D>u1Mj8gi<{7rnsXs{Sv1xeH`o&nv{ z68VtLVmb9&7T)KSt`D@l_o2VgdInR|IvdO7tN+ONFn7q z%~8ud2nVcV@9XGUlGn@?bpPdyRgFhNVX$>)UL(w))+x6&xgW(K$dRNchGqccwFrcv z+Rz5DP;o~6Ji-`Zhb=UK^j`r&0c`q^DL|o7ZIb5rTB8Xz9#iXO8VM}!A#EeoOzfHwJd2o-vNB;ug}%K z{y3gTdB?}h0b;qa^}S$%=UVp~-S>MBmArQUV@dJy$I;l7Tm*0~iQtXjeE1xsdICBu zxo{>@xfp60*I(XhqGU)`lzCE8sB3Q8Nm%)cH)O5;*_$ z7MBs;E28btd1wfF9=9lve+^3YZxSe)0HJj|{FW>}(3u7AEvu$SX%x*04h0*NiWPH| zFri;ZYe#o^S`nT)lLl~Y`K_18Kag@}Ke3(pl=r8O#1BmGgPy;u$;C3D1?*`xIHSpJ zIvZs;Bh?DXk?g?i=ougRfx(gDym$<>>2691>XqkEong8dbJbZ0Xne9LBYcUx0c+?E>6(NZ(YXm06t(mT3Lmx|oAj zdq$=IGPA*F)C!1&!@@`kdx~0`a25i1Dh+03Z6+K$g5xdsz$Si{K#OO-QKbrJ7`RK4 zk2JsQ`|Y2I0#f@FQ@$MgSfof7@9o&%h;@VnPNc&Fv5SMP!Z_%;qmeB=Bt@?|g0J3Y zVAnnsrxWTS4h-^r4rC_`07Z$>3$smS;JFgO*C^5`KgqSn-BP4i<7PHGyDlfwe}6Cz z4aRkU5Pf`UE3DZ@EAh5aZzZBCBHFia(|?lUi1~Q28HYPpjsAp|iZ(7i9Z%ZevK8!+ zEjx|t4d?mB3QpA!V5m>-ie)iMUgJ_dIC1CoxC`IKKUDyM7)FU_0WQ&md6Tjb&HjYn zrRVCt{al50EFoWlUJRWvnBsnHtulcn_Zq5f#8`bDAxQN1x9XP zF+d{a*^5bGNVF?XkRS~dm-Xnv&z_X7>DREIUR5f*H2UOw3%h;f2%zCVxJ3#}(?4!T zn+}}MVelo=!_t)T7*oyDVn^M)FPi(WG>l(-i!IARelQ=lG>mHQ3sbb*`D2p_nu)nO zScAQLuTE00Pm~b$R4^AO)~8E9(Byh+PYY*s^6Ct?`Nk*JG5)E*8CAo4v_D1ajpaK# zQq{$5b;{VJKOUMlMb|BywVMsk)$qM&|Fv+8E;dPBxUcft25#Oy3Aqv|Np=wnGk;&a zcG1*n{uxDLWRu8~d~nmjD&Tj7rxi@BIb5zC-&J7V^aPUYUbVp3+;n1yb zC?y<1ye<{bWpA^d7pcV0gk&xP*_2OfYId+RQpvbv@g)j39A@BA=6>27dS&d4>f`pu ze2&VWc!Z}EMt4;H(SKs~txU2{^aw*I^G1ps#}EydDQxOWc+4<_ z_0jefTM9eU?D&&_Clk$tHnv=os)?)Ual+oHESkZ!$7V3MxKEm z9PHp9725nCHTxX+eL8Zne(~QEhY`|PA(DNhElA5Jd*KI$k|a@{eJOaxU<2R z+DJ~Yn4-lMaoDzfjI!WsxPdl+zfl`BXtv+u*gAdw`%pvw>x3BRCCOq&Q(FI2;jUrM z?^%u0xSryo_253KXVdn#{RG-19l98}buJV_r!F5zDjL7p%=G|b+v0w1?v7hsJ7bi1 zHWnIM%lWaqVI6C6zK96>E;WyUecKRjn*y-sjmadG4<=~A^i$UFJWIcD6C#WlgOP<& zMsiGgw%uB^W3h2(D0a_c(WbmtzT$cOmeO|P@BPK)MLG6OjkCW)E;x3qpm+2)+~pAe z&VU&WUCo`?jW)`CUM}OvryEN<4p zSJ=2}e`$F<8&(-_f-}rE>ZfM)SK7K}D~CxO!d}H1E!b&U?%XkoRx!c%G2-k|*S+<-^tydBUlu$f1O55O-*}Vm zIqaOq8$I@Wk=B-14z)^cJJfsYP_J{!CRn15zPR<JJSq0EZjrKL+d2E*?gWiMavEFs;4HRcbt>pd=`cI{+795e3C88n!xY$=c7g6&?@;*m{H8TMegS?1LKG~ zw%6=YHlNOS5jnVSfBh8uq>Q463(QqNXB^kjLpI?ziI; z$mJ;kSK(GXzl2To%xEQ*ux(rS36VP$vmG|{gwK=^Mt}MMB?k_pNlo9I8@dBfO>zz? zt#xf9Md7xn<2#3JKL*}g8fDHU>n8l9y>`i5S*KUE`Ai=^3n5(lX*t?cDmCfZ`~Q!O+{YIZaGzcRn^8MZT8mlLyR3zr7_ z)<*EGNA9yDsbW{W1?^H@!`D+(zvp@ z7d2$5d6#Dj$O_CJt-a-WlgvmAN;JMT;S75J}tO z=4G@%X{XNl+7=kE51em_AzHg;VA+!oJC1&eet{0uyyZpr#XM`-DnQLBb(4W7UIO#a z!ER`CLDk84LBPo|(WMbfGQ_gzyLcT1C@F@%^wSb) z7?=UfMmkH!Y4Tp2l2%Lq3(8X_fPO2&IS_9n4wS!Ed16Iz6`Fjbw<_-K?DGCPzvZ(2 z(AT!6!g!F@@^aY%FNsfV{NvVR3!Iax#Ue(X83QB&R0AFWOem+-pI;bGDPxvG@5dk| z^7n28jXQI3Xu6UYm70_RJX>USW3Rg0pA8Xlw|#7`Z6S}+f5|_u4IteIa?nV$pIgxQ z58MBMz&Knp<`JpE72;8rD`n+KXYP+*+Am9TWxXiKD-{ zIIeNpeG*ImhN~;ai2E;a!UyF7BtXM84(UaUxWMmGG4%Z3==F4OqFnqlkB;^QUUV!2 zwmzQGGBIZW@OR=m?G&$4yl4dT5hQ?H)YB8GR7k`&Pjik*_Ahg(Xz6$isOfYduFxas zky`a4+#E<`=YV7k=wcKJ;w6a${Qk8`nh*gvBg-CW@aAmK*E<*hGGfwq+2GtK9b`p8 zAg|^eRtUDLUaK7}PZ3{k3kGT>uPwm8+n?*XT9FSCXVgA$maGAx)V>-%m}j0=)oec_ zk?4QhmVT=ElT&b6Eu9KwN8%4w8=5T)V8Or{9TVjb;EP;r5WRMbr=Kz5SX5*qtyRi) zCsaj4JS$oI{MUv?ijg`!SE_6xF+Fyh28Smsr1N3#jI2?qIR$fr?5`=s-~56dUNA*( zqc;QM4v=$Y8$bpd%Knod&M2}i;4ItBCQ27ds$Uw5?FVy_EYE#?yZA2)9sff3d3v)1 zY=~fvz9d(pIpKH|&FR^^eo>CGt>mXjl}CcD=Y^lZ5OTGq=JY+scuY41Do zt)S8DJ!)q*%gkZhY$6Owm*wkhO{L{Aa25hvgZ;@uHVV-bIPs}YPv(O*^o7FqBN|{m zAjUImgr8yUoZ!Dq4nmKviJG@cRY&YukKX@V^>V%u{g1uayfxWA@T~#SkL#I(ttRC5 z`K2LIavJ-gk|dJk6*9-i66OE;`BPML0_>c|+vy(JqsPivru`=t>8Kk(`lT@G@kC6i zZ~wYl=h(sj`hpt4Sb4;SM?{`O`5(_=!~2u>D2T}E6#RP% zH`!eshwlU8*MpzP0}L<%T_Q|!2ZdGvxRdd4ebP-*`8fKon17c(+Ca?$j36hnPXBB0 zAdw=Gj|J|3B?A5dl)!EJpNs@rpeUs~DR9g|?!%=NPq7LbFWJFNhoLi<;#{pzR)rC~ zq-RtLTp@x!!Z54KTW}E75nTWrAcSh)d_K5&t5oQ}1 zB9j5KdGk4Y1>HgBB3(1a?|k1@>R6FZfmGmW25B#mR2I4OkL#d&%72^Yry$^UU@)Xw z9rBDDfoy#WIDCK=F27&Hug-&(Li|GibqX36nTU#rn-VVBt z5VA0&BeKFaP?N}UGQr}J%w Date: Wed, 3 Oct 2018 00:29:53 -0700 Subject: [PATCH 5/7] asm: lec10 ready for master --- cst337/img/fig2lec10.png | Bin 0 -> 11012 bytes cst337/lec/lec10.md | 17 +++++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 cst337/img/fig2lec10.png diff --git a/cst337/img/fig2lec10.png b/cst337/img/fig2lec10.png new file mode 100644 index 0000000000000000000000000000000000000000..ed0fc0019ed167bfb7ec87895f5329ee3a2c3713 GIT binary patch literal 11012 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 literal 0 HcmV?d00001 diff --git a/cst337/lec/lec10.md b/cst337/lec/lec10.md index 3c59b3d..ddcefca 100644 --- a/cst337/lec/lec10.md +++ b/cst337/lec/lec10.md @@ -30,3 +30,20 @@ The carry bit will propagate along the operation now if we chain these together, ![fig1](../img/fig1lec10.png) +With this we can start chaining together multiple Full-adders we can start adding multiple bits at the same time since the carry now propagates along the chain. + +## Ripple Adders + +An N-bit adder is really just made up of Full adders chained together. +Each adder is chained to the next by the carry-out line which then acts as the next adder's carry-in line. +If we have say a 4-bit ripple adder, then each bit in the bit strings will go to a different adder. +For now the initial carry in bit will be fed a 0 everytime. + +![fig2](../img/fig2lec10.png) + +Here we see that our 4-bit input A & B have the values `1111` & `0000` respectively. +The 0th bit goes to Adder0, the 1th goes to Adder1, and so on. +You should have also noticed that each one also takes a carry-in, which for now is 0 but it does mean we have to let the comutation happen one adder at a time. +None of the sequential adders can do anything if the previous have done anything yet either. +At the end of it all we get some bit results, and a carry-out. +We can then simply reassemble the results back into one bit-string to assemble our final result. From ff69cfae11e410b20f1f9384735e889fc5cb6fac Mon Sep 17 00:00:00 2001 From: shockrahwow Date: Wed, 3 Oct 2018 00:33:41 -0700 Subject: [PATCH 6/7] shuffling file names around --- cst337/lec/lec10.md | 62 +++++++++---------- cst337/lec/lec11.md | 41 ------------- cst337/lec/lec8.md | 118 ++++++++++++++++++++++++++++++++++++ cst337/lec/lec9.md | 143 ++++++++++++-------------------------------- 4 files changed, 182 insertions(+), 182 deletions(-) delete mode 100644 cst337/lec/lec11.md create mode 100644 cst337/lec/lec8.md diff --git a/cst337/lec/lec10.md b/cst337/lec/lec10.md index ddcefca..5425808 100644 --- a/cst337/lec/lec10.md +++ b/cst337/lec/lec10.md @@ -1,49 +1,41 @@ -# lec10 +# lec11 -## Half-adder +At this point I'l mention that just reading isn't going to get you anywhere, you have to try things, and give it a real earnest attempt. -This will be the building block for adding bit-strings together later on however, for now we are going to just add two singular bits. -To accomplish this we'll build a half adder. +__ALU:__ Arithmetic Logic Unit -This means our logic circuit must adhere to the following logic table. -If both inputs are 0 then our result is 0 and we don't have to carry anything out. -If only one input A/B is 1 then our result will clearly be 1 and our carry will be 0. -Finally if both inputs are 0 then since we can't fit 2 in a single bit it means we have to carry-out a 1, and our result will be 0. +## Building a 1-bit ALU -With all of this in mind we have a table to guide how we will implement our logic circuit. -I __highly__ suggest that you try to build a logic circuit on your own first as most of the content is best learned through practice. +![fig0](../img/alu.png) -| A | B | Carry-out | Result | -|---|---|---|---| -| 0 | 0 | 0 | 0 | -| 0 | 1 | 0 | 1 | -| 1 | 0 | 0 | 1 | -| 1 | 1 | 1 | 0 | +First we'll create an example _ALU_ which implements choosing between an `and`, `or`, `xor`, or `add`. +Whether or not our amazing _ALU_ is useful doesn't matter so we'll go one function at a time(besides `and/or`). -![fig0](../img/fig0lec10.png) +First recognize that we need to choose between `and` or `or` against our two inputs A/B. +This means we have two inputs and/or, and we need to select between them. +_Try to do this on your own first!_ -## Full Adder +![fig1](../mg/fig1llec11.png) -If we only want to add single-bit's then a half-adder works fine but if we want to add multiple bits say `1011 + 0010` then we need to consider that we will likely have to chain these together. -The full-adder has 1 main difference from the half-adder, it has 3 inputs, 2 main inputs and 1 input for the carry bit. -The carry bit will propagate along the operation now if we chain these together, _just like real addition!_ +Next we'll add on the `xor`. +AGAIN: try to do this on your own, the main hint I'll give here is: the current mux needs to be changed. -![fig1](../img/fig1lec10.png) +![fig2](../img/fig2lec11.png) -With this we can start chaining together multiple Full-adders we can start adding multiple bits at the same time since the carry now propagates along the chain. +Finally we'll add the ability to add and subtract. +You may have also noted that we can subtract two things to see if they are the same dhowever, we can also `not` the result of the `xor` and get the same result. -## Ripple Adders +![fig3](../img/fig3lec11.png) -An N-bit adder is really just made up of Full adders chained together. -Each adder is chained to the next by the carry-out line which then acts as the next adder's carry-in line. -If we have say a 4-bit ripple adder, then each bit in the bit strings will go to a different adder. -For now the initial carry in bit will be fed a 0 everytime. +At this point our _ALU_ can `and`, `or`, `xor`, and `add`/`sub`. +The mux will choose one which logic block to use; the carry-in line will tell the `add` logic block whether to add or subtract. +Finally the A-invert and B-invert line allow us to determine if we want to invert either A or B (inputs). -![fig2](../img/fig2lec10.png) +## N-bit ALU -Here we see that our 4-bit input A & B have the values `1111` & `0000` respectively. -The 0th bit goes to Adder0, the 1th goes to Adder1, and so on. -You should have also noticed that each one also takes a carry-in, which for now is 0 but it does mean we have to let the comutation happen one adder at a time. -None of the sequential adders can do anything if the previous have done anything yet either. -At the end of it all we get some bit results, and a carry-out. -We can then simply reassemble the results back into one bit-string to assemble our final result. +For sanity we'll use the following block for our new ALU. + +![fig4](../img/fig4lec11.png) + +Note that we are chaining the carry-in's to the carry-out's just like a ripple adder. +also each ALU just works with `1` bit from our given 4-bit input. diff --git a/cst337/lec/lec11.md b/cst337/lec/lec11.md deleted file mode 100644 index 5425808..0000000 --- a/cst337/lec/lec11.md +++ /dev/null @@ -1,41 +0,0 @@ -# lec11 - -At this point I'l mention that just reading isn't going to get you anywhere, you have to try things, and give it a real earnest attempt. - -__ALU:__ Arithmetic Logic Unit - -## Building a 1-bit ALU - -![fig0](../img/alu.png) - -First we'll create an example _ALU_ which implements choosing between an `and`, `or`, `xor`, or `add`. -Whether or not our amazing _ALU_ is useful doesn't matter so we'll go one function at a time(besides `and/or`). - -First recognize that we need to choose between `and` or `or` against our two inputs A/B. -This means we have two inputs and/or, and we need to select between them. -_Try to do this on your own first!_ - -![fig1](../mg/fig1llec11.png) - -Next we'll add on the `xor`. -AGAIN: try to do this on your own, the main hint I'll give here is: the current mux needs to be changed. - -![fig2](../img/fig2lec11.png) - -Finally we'll add the ability to add and subtract. -You may have also noted that we can subtract two things to see if they are the same dhowever, we can also `not` the result of the `xor` and get the same result. - -![fig3](../img/fig3lec11.png) - -At this point our _ALU_ can `and`, `or`, `xor`, and `add`/`sub`. -The mux will choose one which logic block to use; the carry-in line will tell the `add` logic block whether to add or subtract. -Finally the A-invert and B-invert line allow us to determine if we want to invert either A or B (inputs). - -## N-bit ALU - -For sanity we'll use the following block for our new ALU. - -![fig4](../img/fig4lec11.png) - -Note that we are chaining the carry-in's to the carry-out's just like a ripple adder. -also each ALU just works with `1` bit from our given 4-bit input. diff --git a/cst337/lec/lec8.md b/cst337/lec/lec8.md new file mode 100644 index 0000000..ab9fcf4 --- /dev/null +++ b/cst337/lec/lec8.md @@ -0,0 +1,118 @@ +# lec9 + +This lecture has a corresponding activity found in `lab/` it is called `combinational-logic.md`. +It is more useful to practice combinational logic as opposed to read about it so the sub section here will be minimal in information. +It's recommended that you try as many of the problems in the activity until you understand the concept, _don't bother doing them all_. + +## Combinational Logic + +### OR + +`a+b` is equivalent to saying `a` or `b`. + +### AND + +`ab` is equivalent to saying `a` and `b`. + +Note that this syntax is simlar to multiplication so `a*b` is equivalent to the above. + +### NOT + +`!a` is equivalent to saying not `a`. +We can also denote it with a bar over the expression we want to _not_. + +![Figure-Not](../img/not.png) + +### Big AND + +Behavior is the same as an `and` but instead of two inputs we can have many more inputs. +It will only ever return a 1 if all inputs are 1. + +### Big OR + +Again we are mimicing the behvior of the normal or gate but this time we can have multiple inputs as opposed to just two. +If only one of the many inputs is 1 then we return a 1 for the output of the Big OR. + +## Decoders + +Here we'll learn by doing + +``` +Selector = 2 Bits +Output = 4 Bits +``` +As a challenge you can try using the combinational logic gates from above to try and tackle this yourself + +|s1 |s2 |o3 |o2 |o1 |o0 | +|---|---|---|---|---|---| +| 0 | 0 | 0 | 0 | 0 | 1 | +| 0 | 1 | 0 | 0 | 1 | 0 | +| 1 | 0 | 0 | 1 | 0 | 0 | +| 1 | 1 | 1 | 0 | 0 | 0 | + + +## Multiplexor + +Typically we'll refer to multiplexors by their size. + +> what does it do? + +It takes a signal as `2^n` inputs and out puts out `n` signals as output. + +Example: We have a selector(s0), two inputs[in0 & in1], and one output `out`. +The selector will select an input and we will generate some output in `out`. + +|s0 | i1 | i0 | out| +|---|---|---|---| +|0 | 0 | 0 | 0| +|0 | 0 | 1 | 1| +|0 | 1 | 0 | 0| +|0 | 1 | 1 | 1| +|1 | 0 | 0 | 0| +|1 | 0 | 1 | 0| +|1 | 1 | 0 | 1| +|1 | 1 | 1 | 1| + + +This ultimately lets us pick data out of memory given some address. + +## Half Adder + +For now we'll take two inputs and get 1 output, with a carry-output. + +Let's add 2 bits + +|a |b |out| +|---|---|---| +|0 |0 |0 | +|0 |1 |1 | +|1 |0 |1 | +|1 |1 |0 | + +What about the carry bit however? What would _it_ look like given the preivous operations? + +|a |b |carryout| +|---|---|---| +|0 |0 |0 | +|0 |1 |0 | +|1 |0 |0 | +|1 |1 |1 | + +Before what this implies note that the result of the carryout resembles + +## Full Adder + +Two inputs, One output, One carry-out, One carry-in + +Here we'll add up `a & b`(inputs) and `c` carry-in + +|c|a|b |output| +|---|---|---|---| +|0|0|0 |0| +|0|0|1 |1| +|0|1|0 |1| +|0|1|1 |0| +|1|0|0 |1| +|1|0|1 |0| +|1|1|0 |0| +|1|1|1 |1| diff --git a/cst337/lec/lec9.md b/cst337/lec/lec9.md index ab9fcf4..ddcefca 100644 --- a/cst337/lec/lec9.md +++ b/cst337/lec/lec9.md @@ -1,118 +1,49 @@ -# lec9 +# lec10 -This lecture has a corresponding activity found in `lab/` it is called `combinational-logic.md`. -It is more useful to practice combinational logic as opposed to read about it so the sub section here will be minimal in information. -It's recommended that you try as many of the problems in the activity until you understand the concept, _don't bother doing them all_. +## Half-adder -## Combinational Logic +This will be the building block for adding bit-strings together later on however, for now we are going to just add two singular bits. +To accomplish this we'll build a half adder. -### OR +This means our logic circuit must adhere to the following logic table. +If both inputs are 0 then our result is 0 and we don't have to carry anything out. +If only one input A/B is 1 then our result will clearly be 1 and our carry will be 0. +Finally if both inputs are 0 then since we can't fit 2 in a single bit it means we have to carry-out a 1, and our result will be 0. -`a+b` is equivalent to saying `a` or `b`. +With all of this in mind we have a table to guide how we will implement our logic circuit. +I __highly__ suggest that you try to build a logic circuit on your own first as most of the content is best learned through practice. -### AND - -`ab` is equivalent to saying `a` and `b`. - -Note that this syntax is simlar to multiplication so `a*b` is equivalent to the above. - -### NOT - -`!a` is equivalent to saying not `a`. -We can also denote it with a bar over the expression we want to _not_. - -![Figure-Not](../img/not.png) - -### Big AND - -Behavior is the same as an `and` but instead of two inputs we can have many more inputs. -It will only ever return a 1 if all inputs are 1. - -### Big OR - -Again we are mimicing the behvior of the normal or gate but this time we can have multiple inputs as opposed to just two. -If only one of the many inputs is 1 then we return a 1 for the output of the Big OR. - -## Decoders - -Here we'll learn by doing - -``` -Selector = 2 Bits -Output = 4 Bits -``` -As a challenge you can try using the combinational logic gates from above to try and tackle this yourself - -|s1 |s2 |o3 |o2 |o1 |o0 | -|---|---|---|---|---|---| -| 0 | 0 | 0 | 0 | 0 | 1 | -| 0 | 1 | 0 | 0 | 1 | 0 | -| 1 | 0 | 0 | 1 | 0 | 0 | -| 1 | 1 | 1 | 0 | 0 | 0 | - - -## Multiplexor - -Typically we'll refer to multiplexors by their size. - -> what does it do? - -It takes a signal as `2^n` inputs and out puts out `n` signals as output. - -Example: We have a selector(s0), two inputs[in0 & in1], and one output `out`. -The selector will select an input and we will generate some output in `out`. - -|s0 | i1 | i0 | out| +| A | B | Carry-out | Result | |---|---|---|---| -|0 | 0 | 0 | 0| -|0 | 0 | 1 | 1| -|0 | 1 | 0 | 0| -|0 | 1 | 1 | 1| -|1 | 0 | 0 | 0| -|1 | 0 | 1 | 0| -|1 | 1 | 0 | 1| -|1 | 1 | 1 | 1| +| 0 | 0 | 0 | 0 | +| 0 | 1 | 0 | 1 | +| 1 | 0 | 0 | 1 | +| 1 | 1 | 1 | 0 | - -This ultimately lets us pick data out of memory given some address. - -## Half Adder - -For now we'll take two inputs and get 1 output, with a carry-output. - -Let's add 2 bits - -|a |b |out| -|---|---|---| -|0 |0 |0 | -|0 |1 |1 | -|1 |0 |1 | -|1 |1 |0 | - -What about the carry bit however? What would _it_ look like given the preivous operations? - -|a |b |carryout| -|---|---|---| -|0 |0 |0 | -|0 |1 |0 | -|1 |0 |0 | -|1 |1 |1 | - -Before what this implies note that the result of the carryout resembles +![fig0](../img/fig0lec10.png) ## Full Adder -Two inputs, One output, One carry-out, One carry-in +If we only want to add single-bit's then a half-adder works fine but if we want to add multiple bits say `1011 + 0010` then we need to consider that we will likely have to chain these together. +The full-adder has 1 main difference from the half-adder, it has 3 inputs, 2 main inputs and 1 input for the carry bit. +The carry bit will propagate along the operation now if we chain these together, _just like real addition!_ -Here we'll add up `a & b`(inputs) and `c` carry-in +![fig1](../img/fig1lec10.png) -|c|a|b |output| -|---|---|---|---| -|0|0|0 |0| -|0|0|1 |1| -|0|1|0 |1| -|0|1|1 |0| -|1|0|0 |1| -|1|0|1 |0| -|1|1|0 |0| -|1|1|1 |1| +With this we can start chaining together multiple Full-adders we can start adding multiple bits at the same time since the carry now propagates along the chain. + +## Ripple Adders + +An N-bit adder is really just made up of Full adders chained together. +Each adder is chained to the next by the carry-out line which then acts as the next adder's carry-in line. +If we have say a 4-bit ripple adder, then each bit in the bit strings will go to a different adder. +For now the initial carry in bit will be fed a 0 everytime. + +![fig2](../img/fig2lec10.png) + +Here we see that our 4-bit input A & B have the values `1111` & `0000` respectively. +The 0th bit goes to Adder0, the 1th goes to Adder1, and so on. +You should have also noticed that each one also takes a carry-in, which for now is 0 but it does mean we have to let the comutation happen one adder at a time. +None of the sequential adders can do anything if the previous have done anything yet either. +At the end of it all we get some bit results, and a carry-out. +We can then simply reassemble the results back into one bit-string to assemble our final result. From 1989680cb17e8db12b8250514c45c353d1ffb748 Mon Sep 17 00:00:00 2001 From: shockrahwow Date: Wed, 3 Oct 2018 13:13:17 -0700 Subject: [PATCH 7/7] db: lec1-7 rdy for master --- cst363/lec/lec1.md | 40 +++++++++++++++++++------------ cst363/lec/lec2.md | 60 ++++++++++++++++++++++++---------------------- cst363/lec/lec4.md | 10 ++++---- cst363/lec/lec5.md | 16 +++++++------ cst363/lec/lec6.md | 5 ++-- cst363/lec/lec7.md | 12 ++++------ 6 files changed, 79 insertions(+), 64 deletions(-) diff --git a/cst363/lec/lec1.md b/cst363/lec/lec1.md index b610c11..7f53d79 100644 --- a/cst363/lec/lec1.md +++ b/cst363/lec/lec1.md @@ -1,25 +1,35 @@ # lec1 -## A few reasons to have them \ -And what they *require* \ -Database systems generally need support for: -1. querying - \ - * Finding things \ - * Just as well structured data makes querying easier +## Databases introduction -2. access control - \ - * who can access which data segments and what they can do with that data \ - * reading, writing, sending, etc +First off why do we even need a database and what do they accomplish? -3. corruption prevention - \ - * mirroring/raid/parity checking/checksums/etc as some examples +Generally a databse will have 3 core elements to it: + +1. querying + * Finding things + * Just as well structured data makes querying easier + +2. access control + * who can access which data segments and what they can do with that data + * reading, writing, sending, etc + +3. corruption prevention + * mirroring/raid/parity checking/checksums/etc as some examples + +## Modeling Data -## Modeling Data \ Just like other data problems we can choose what model we use to deal with data. +In the case for sqlite3 the main data model we have are tables, where we store our pertinent data, and later we'll learn even data about our data is stored in tables. -__Schema__ is the deisgn or structure of a specific database. While the __instance__ is the occurance of that schema with some data inside the fields. _The data inside those fields at this point don't really matter. \ +Because everything goes into a table, it means we also have to have a plan for _how_ we want to lay out our data in the table. +The __schema__ is that design/structure for our databse. +The __instance__ is the occurance of that schema with some data inside the fields, i.e. we have a table sitting somewhere in the databse which follows the given structure of a aforemention schema. -__Queries__ are typically known to be declarative; typically we don't care about what goes on behind the scenes in practice since by this point we are assuming we have tools we trust and know to be somewhat efficient. \ +__Queries__ are typically known to be declarative; typically we don't care about what goes on behind the scenes in practice since by this point we are assuming we have tools we trust and know to be somewhat efficient. -__Transactions__ are a set of operations. Transactions are not alllowed to fail. If _anything_ fails then everything should be undone and the state should revert to previous state. +Finally we have __transactions__ which are a set of operations who are not designed to only commit if they are completed successfully. +Transactions are not alllowed to fail. +If _anything_ fails then everything should be undone and the state should revert to previous state. +This is useful because if we are, for example, transferring money to another account we want to make sure that the exchange happens seamlessly otherwise we should back out of the operation altogether. diff --git a/cst363/lec/lec2.md b/cst363/lec/lec2.md index 9a96ebe..23f60c6 100644 --- a/cst363/lec/lec2.md +++ b/cst363/lec/lec2.md @@ -2,61 +2,64 @@ Covering `tables, tuples, data stuff` -## Problem Statement \ +## Problem Statement + We need to be able to manipulate data easily -> IMS had been using trees for a while a long time ago +For sometime previous databses systems, like IMS, had been using tree structures for a while but, there was still a demand for a system that _anyone_ could use. +This issue is what brings us closer to the table structure that we have mentioned in previous lectures. -> Rows --> __atributes__ +To actually guide _how_ we use tables we'll use the followig logic: -> Columns --> __tuple__ +* Rows --> Contain whole entries or records + * all the data in a row is meant to go together + +* Columns --> Individually they are attributes or fields + * Each column is guaranteed to have _only_ 1 type of data in it(e.g. name, title, balance, id\_number) -somtimes we refer to the title of the columns to be fields +* Table --> __relation__ -> Table --> __relation__ +Relational instance as well for another term -relational instance as well for another term - -> Domain - -The set of values allowed in a field +* Domain + * The set of values allowed in a field ## NULL -cant operate on it at all +`NULL` is special, especially in sqlite3 because we aren't allowed to perform operations with it at all. +If we tried to do for example `NULL < 3` then we would just get back NULL; that way we avoid non-deterministic behavior and we are able to parse out bad results later on. +There are a few exceptions to NULL however, where they will be accounted for. -> Count - -The only thing that lets you operate on NULL. Even then you only get 0 back. +* Count + * We only count if there is a row there or not, the data inside does not matter in this context. ## Keys Types -> Super Key +* Super Key +* Candidate Key +* Primary Key -> Candidate Key +### Problem Statement -> Primary Key - -## Problem Statement - -The rows are not distinguishable from each other; we still have a mes of data sitting there unlabeled. Some kind of identifier is necessary to be able to access every tuple in the relational set. +The rows are not distinguishable from each other; we still have a mess of data sitting there unlabeled. Some kind of identifier is necessary to be able to access every tuple in the relational set. ### SuperKey -Set of attr is a superkey for a table as long as that combination of fields remains unique for every tuple in the relational set. -In other words if we have multiple fields; f1 f3 f5 might be a good combo to use as a key into the table. +A set of attributes is a __superkey__ for a table as long as that combination of fields remains unique for every tuple in the relational set. +In other words if we have multiple fields; f1 f3 f5 might be a good combo to use as a key into the table, because it might be able to identify a unique entry in our table. -> What's a valid superkey? +* What's a valid superkey? For starters anything that contains another valid superkey Any subset of a full tuple that can uniquely identify any row in the table. -> Can a whole row be a superkey? -...full on brainlet.........yes +* Can a whole row be a superkey? +As long as it can identify any unique row in a table then it _is_ a superkey for that table. ### Candidate Key Any super key that wouldn't be a superkey if one of the attr were removed. Say then that we have a super key that takes columns {1,3,5,6,7}, but removing anyone of the rows no longer reliably returns an arbitrary _unique_ row. +To put it simply it is the most minimal superkey; though this doesn't entail that there can't be multiple candidate keys for a given table. ### Primary key @@ -64,5 +67,6 @@ Any candidate key the database designer has chosen to serve as the unique ### Foreign Key -Set of attrs in one table that are the primary key attrs of another table. More info about this key type will come later but just know for now that it exists in the wild. +If a table/relation includes among it's attributes the primary key for another relation then it is referred to as a foreign key because that key references another relation. +The table being refferred to is identified as a referenced relation. diff --git a/cst363/lec/lec4.md b/cst363/lec/lec4.md index fbbee57..922fcd1 100644 --- a/cst363/lec/lec4.md +++ b/cst363/lec/lec4.md @@ -1,15 +1,15 @@ # lec4 +This section mostly relies on practicing some of the most basic commands for sqlite3, for that reason most of the content is expressed through practice in the lab sub-section. ## Lab* -This lecture has some lab questions in the `lab/` dircory named `table1.pdf` *and* some example data called `patients.sql`. -`table1.pdf` will have some exercises to learn the basic commands of sqlite and `patients.sql` should have some example data which _table1_ asks you to query. +This lecture has some lab questions in the `lab/` directory named `table1.pdf` *and* some example data called `patients.sql`. +`table1.pdf` will have some exercises to learn the basic commands of sqlite3 and `patients.sql` should have some example data which _table1_ asks you to query. ## Serverless -Instead of having listen server listen for requests to perform actions upon these requests we simply have some databse held on a machina and we perform all of our sql commands on that machine. - -For now we'll be dealing with small test db's so that we can practice the commands and observe each one's behavior; this will give you a good feeling of what does what in sqlite3. +Instead of having listen server listen for requests to perform actions upon these requests we simply have some database held on our own machine and we perform all of our sql commands on that machine. +For now we'll be dealing with small test databases so that we can practice the commands and observe each one's behavior; this will give you a good feeling of what does what in sqlite3. diff --git a/cst363/lec/lec5.md b/cst363/lec/lec5.md index b843dc5..bc8802d 100644 --- a/cst363/lec/lec5.md +++ b/cst363/lec/lec5.md @@ -7,33 +7,35 @@ This lecture will have a lab activity in `cst366/lab/1994-census-summary.sql` wi ## Distinct Values -> Mininum - min(field) +* Mininum - min(field) Finds the smallest value in the given filed -> Maximum - max(field) +* Maximum - max(field) -Find the largest value in th given field +Find the largest value in the given field Say we have a column where we know there are duplicate values but we want to konw what the distinct values in the column may be. SQLite3 has a function for that: `select distinct field, ... from table;` -> select substr(field, startIndex, length) ... +* select substr(field, startIndex, length) ... -_Note_: the start index starts counting at `1` so keep in mind we are offset `+1`. +_Note_: the start index starts counting at `1` so keep in mind we are offset `+1` compared to other language like C. ## Joins Now we want to join to tables together to associate their respective data. +To accomplish this we can perform a simple `join` to combine tables. Important to note that a simple join does not necessarily take care of duplicate fields. If we have duplicate fields we must denote them as `target.field`. -Here target is the table with the desired table and field is the desired field. +Here `target` is the table with the desired table and `field` is the desired field. ## Type Casting -If we have say `56` we can use a cast to turn it into an integer. +If we have say `"56"` we can use a cast to turn it into an integer. > cast(targetString as integer) This will return with an error if a non number character is given as input to the cast function, here in this example we denote it with `targetString`. + diff --git a/cst363/lec/lec6.md b/cst363/lec/lec6.md index e998cf9..4a6cf8b 100644 --- a/cst363/lec/lec6.md +++ b/cst363/lec/lec6.md @@ -4,7 +4,7 @@ This lecture features a lab activity in the lab/ directory named: `courses-ddl.sql` with instructions in `simple-joins-lab.pdf`. -* Note: Just make sure to read int courses-ddl.sql first then courses-small.sql second otherwise there will be random errors.(I'm not taking responsibility for that garbage so don't flame me) +* Note: Just make sure to read in courses-ddl.sql _first_ then courses-small.sql _second_ otherwise there will be random errors.(I'm not taking responsibility for that garbage so don't flame me) ## Natural Joins @@ -15,4 +15,5 @@ Form: ``` select columns_[...] from tableLeft natural join tableRight ``` -While ther is no need to write extra `where` statements there is also the issue where there may be accidental matches since attributes are dropped. +While there is no need to write extra `where` statements there is also the issue where there may be accidental matches since attributes are dropped. +This implies that if two tables have attributes with the same field name, then only one will be returned in the resulting table. diff --git a/cst363/lec/lec7.md b/cst363/lec/lec7.md index fe2b6a8..d9e8f46 100644 --- a/cst363/lec/lec7.md +++ b/cst363/lec/lec7.md @@ -6,14 +6,12 @@ This lecture has two correspondnig lab activities in `lab/` using `1994-census-s ## Null Operations -take the following table as a trivial example of working data +Take the following table as a trivial example of working data -``` -a | b ------ -1 | 2 -3 | N -``` +| a | b | +|---|---| +| 1 | 2 | +| 3 | N | Where `a` and `b` are attributes and N signifiies a NULL value. If we `select a+b from table` we only get back 2 rows like normal but the second row is left empty since we are operating with a NULL value.