From cb2ff40d8209db7938e07a811e675cd66ec24d4d Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 5 Feb 2024 12:50:30 +0000 Subject: [PATCH] Build .adoc Files for GitHub Pages from 26a1c9b29d0e795fb20537addb1d25f43cd43ebc --- .gitignore | 4 + chapters/chapter_template_folder/chapter.html | 697 ++++++ .../chapter_template_folder/images/logo.png | Bin 0 -> 10891 bytes chapters/combining_strategies/chapter.html | 707 ++++++ chapters/combining_strategies/images/logo.png | Bin 0 -> 10891 bytes chapters/flow_and_state/chapter.html | 737 ++++++ chapters/flow_and_state/images/logo.png | Bin 0 -> 10891 bytes chapters/goals_and_strategies/chapter.html | 692 ++++++ chapters/goals_and_strategies/images/logo.png | Bin 0 -> 10891 bytes chapters/strategies/chapter.html | 1792 ++++++++++++++ chapters/strategies/images/if-1.png | Bin 0 -> 36046 bytes chapters/strategies/images/switch_loop.png | Bin 0 -> 17257 bytes .../chapter.html | 719 ++++++ .../images/logo.png | Bin 0 -> 10891 bytes index.html | 2076 +++++++++++++++++ 15 files changed, 7424 insertions(+) create mode 100644 .gitignore create mode 100644 chapters/chapter_template_folder/chapter.html create mode 100644 chapters/chapter_template_folder/images/logo.png create mode 100644 chapters/combining_strategies/chapter.html create mode 100644 chapters/combining_strategies/images/logo.png create mode 100644 chapters/flow_and_state/chapter.html create mode 100644 chapters/flow_and_state/images/logo.png create mode 100644 chapters/goals_and_strategies/chapter.html create mode 100644 chapters/goals_and_strategies/images/logo.png create mode 100644 chapters/strategies/chapter.html create mode 100644 chapters/strategies/images/if-1.png create mode 100644 chapters/strategies/images/switch_loop.png create mode 100644 chapters/strategy_centered_assignments/chapter.html create mode 100644 chapters/strategy_centered_assignments/images/logo.png create mode 100644 index.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b416c1d --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.ruby-version +.vscode/* +**/.DS_STORE +docs/index.html \ No newline at end of file diff --git a/chapters/chapter_template_folder/chapter.html b/chapters/chapter_template_folder/chapter.html new file mode 100644 index 0000000..062c233 --- /dev/null +++ b/chapters/chapter_template_folder/chapter.html @@ -0,0 +1,697 @@ + + + + + + + +Chapter Title Goes Here + + + + + + +
+
+

Wut?

+
+
+
+Sinatra Logo +
+
+
+ + + + \ No newline at end of file diff --git a/chapters/chapter_template_folder/images/logo.png b/chapters/chapter_template_folder/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..061d2ecbabe5677bc3bc0632556bdfa1551614cc GIT binary patch literal 10891 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 literal 0 HcmV?d00001 diff --git a/chapters/combining_strategies/chapter.html b/chapters/combining_strategies/chapter.html new file mode 100644 index 0000000..6c8214d --- /dev/null +++ b/chapters/combining_strategies/chapter.html @@ -0,0 +1,707 @@ + + + + + + + +Kombinering av strategier + + + + + + +
+
+

Sammanfogning

+
+ +
+
+
+

Nästning

+
+ +
+
+
+

Ihopvävning

+
+ +
+
+
+ + + + \ No newline at end of file diff --git a/chapters/combining_strategies/images/logo.png b/chapters/combining_strategies/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..061d2ecbabe5677bc3bc0632556bdfa1551614cc GIT binary patch literal 10891 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 literal 0 HcmV?d00001 diff --git a/chapters/flow_and_state/chapter.html b/chapters/flow_and_state/chapter.html new file mode 100644 index 0000000..abada2a --- /dev/null +++ b/chapters/flow_and_state/chapter.html @@ -0,0 +1,737 @@ + + + + + + + +Flöde och State + + + + + + +
+
+
+
+

Att programmera är att ge instruktioner till en dator, eller snarare datorns processor.

+
+
+

En processor kan bara göra en sak åt gången, och instruktionerna utförs därför en efter en, i ett flöde.

+
+
+

Under flödets gång kommer variabler att skapas och deras värden uppdateras.

+
+
+

State är värdet på alla variabler i ett program, vid ett givet tillfälle.

+
+
+

Programmets state ändras alltså allteftersom programmet körs.

+
+
+

Att programmera handlar därför om att skapa ett flöde som bearbetar state och ser till att programmet har rätt state när det är klart.

+
+
+

Man kan alltså se flödet som en serie av transformationer av state.

+
+
+

För att konstruera programmets flöde och för att transformera state finns ett begränsat antal verktyg som används av alla programmerare oavsett vilka program de skriver eller språk de använder.

+
+
+

Genom att kombinera dessa verktyg på olika sätt, kan man skapa alla program.

+
+
+

Verktygen är oberoende av kod, men kan så klart implementeras i kod i valfritt programmeringsspråk.

+
+
+

Den här boken går igenom de verktyg man behöver för att klara Programmering 1 (och antagligen bra mycket mer än så).

+
+
+
+
+

Flödesschema

+
+
+

För att illustrera verktygen används flödesscheman.

+
+
+

Flödesscheman fungerar såhär …​

+
+
+
+
+ + + + \ No newline at end of file diff --git a/chapters/flow_and_state/images/logo.png b/chapters/flow_and_state/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..061d2ecbabe5677bc3bc0632556bdfa1551614cc GIT binary patch literal 10891 zcmV;6Ds0jpLuw}A*eQD^HAW=knZ$7l;z?$zW>RDPM`|jSjKOiL69171 zW~;G_3}WK4jlq_1z!C_MgwO`E5t|U&-g5V)&zbX`t*efK>p!{+mY37IkoO>{rh$+R{KRhIFW1XKrtwV0$r55toPqu$ zHV}NXYV2lAe6R}`J$&W*o0oyP3^;e$zx$aD98C8TAa@Z26(6_`a2*6mugL}3=z(I8%Apry&TpDC@ zO$4|k*c8+(ma|bO8P8r*wMGDf1fT~>zHH^&yZH9*PN#kN@@sD1x(uuLDB$>wCOA142L$ayH~&c&b*L-+INhx6CdB?krkf zdu7){3>|BZ(inM+zljXE^@4R*%`O9O zi7c<~+p)e>n%Y^KoB|rPIpEs1Yon(CB>h~9!I78wVHzfhx1qlyjS{i-6kl!T>#Y}D zbk(k9z@4E5eQaan6FXN-uUf}#0>N$;OLWz<(odbqbt=}hY$eLF1>t}bSN&!Q_r(qWqfA{cjz?E@5BR0EaD z-)Htuh^<{5^eB2CUj6>db}a*L@z`x$5QeW!pR*c@#W9Fl4PSU=8kBhRD5b)IGiPY!WFhwMeUF%d-_2{IO2 zl(>%^2Uspw5MZOU1FdEQs+Botx9S390$fasT;e&2t!RayAnSb+ACK*94m2Pw$Fu|_ zekOg0(w7)WXSIrs^jN0(*r)~^f9n+lpAfwqe214AZea{J!*9s+^r|&5K0X1FV4hY& zj8Z0<41tEA5hsaaGR!F!%L#8?n~UUnt-{AVv^m%)|GowfQ6OVXLCR1MNi|3uNy;qw zs{j{+FBxt_)(aIAhWr=>3kI4IL-{(J;kqp-ZXf33p{2xp)y4Lj|}HbQEPkz}aH=>l}3VFN@Uvm-SjaHT-;v7L3htG;QCu`(bi#`Gt=CuV?rDj3Po{ar1)dPFo-&B{+*^^GXz+Ni%t}u z2qpw-jvEGq1g?u?flk~7fsp@hgaeN~B7)gMih~OEAdknJlV}aJ4m;ekk%R6j4!Vby z0oNzP>7~O#)#8lB)J+jm00Wh>cbI5E;#Af^DTsAtL3yOWTh!K1_b3XDI z@;NDv10h+%VSnN)sMDRv8yTF9fD<=@%Ah!cuib7*Yc%TUYz?p-WddyI@(_Aa3_9CI z5xX?9UjsQkDla}T9S*!syDio&;ht$rw+^MA`Y_P4j%Ls;#3k)8ke`8TJoBKeQRz|$m1`m0gT}1C_U8ynJ4SnEKqw3$ zE=t2FfGCjuMX3@{z|^dTKETU>>#4tiO8M5Aw_resdL5D&GDD!4O}G<~-2!5XOt8dg zI#BGt4yc9&;R3`lRmKqx0Y22@IN(@7hh@2Cz-8!f>wFR51kWL6Jdt%l;yklBbQH%h zHCU2h>cUQhc(KzVL71r{Ce+i!=i22X5)Now;G@rZ8E}ilZjh1{k}%jz6iCM}1EFNQ znICClGex9&AT-h1k%Ex)#d3CD4D(W;&ZeZFr4G1TZ2irC`kBRYF6+q~8fR;yI7^+t zKT-IwG{Dmi!Y*Py15(U-;LawNTk3#IS8xqcu@pl9;zAnBm*#`V&n_7W2>m@T7=)G) zBK>WBmZHPDW%$~qfhrd*mZZKo>jFX_02~}KK2kvFyw0*!cqLx?uM9?CZn@Xh-&m>$WeIVrSU_)!n$^JMrLkT{gU?baAar%CK|#o@RevDV zd2swUQYm7!2M8q=1_Yu1 zS>GUJPR^VLUMyFK;yApv%Yd_%yVKc?c~D|qD)i#WgPn>bZl}ds?(0PaAsz#R1ekh) z5LB+5NYM0?3(mf>;@lEsH=U>7U4J9-%_S)osvY*iH3>=IqO)%h`rz@LyD}86dPCj=n(1 zl=VprvkB0V*l5so7t4TKG-Dw)8eFbnXfiXjwthh9 zokbFa5_Gbni^z2lIQ0+<0o%Jr-`cX{AHTC%RQNO4{7WDE7pG01TT+jRG8VRU1Ds60 zltFB)8;v?m4{R#Bfa@>^#j$ZH6iZMjj6p76aNQ|hjEp68z@)Co60hwKn78S+`${sk zW%e-lw?*4A1-P85;F8s6p%Sk{=flDAV{bvdUX!s|=~mjs|31XGAG>kGor?;-rIu=N zcQ1DHog(SajLL}J`HPRm4I$P)5>7IFlN`2g}c6x+hV{vf}euWj41`O$4Zdi2isJi{qtVWtcZgy) zq6`Mv(KAl7iW@Huf9uL~C!toI5e%n~nTkRl2AvMo39g6v`w#N1hd*-br)S@b47aiW zuS$bJhp<@EBVq-&nQ7S|L~y&M^rkcxi!)4Y7IPWKV?vVL2T9pSHzw5Q5tv~$R@Cel z#MS!?zUiSXIh1R?Z?4dDDLqyQIP)Rvk#&Og7`*oMlaD;`^b?P)d#^FvYaATwda;|< z;o4YvFN}gn)iy9kj}sTs6hafx+96*o3Wm$)amY3g*_Ln`^JVCBK9ezz7nx_?IKAPR zWN2ZysMiEc>j!-fdV9!XXlJQbW}#Z10lRA_sMLL6+On6d*Y4o8HZCTt@G=hWML%L_Zfh56I$&QeqDa4pO03X@)7BC;06Z!>Mgf_ z_V8H=xV<}{ew3fZU45||lbwxJ-(2}LTK+cs)B??NsQc)K)BH68EiV99fG}53U6Vq~ zkzqMC2xL20eVfH1J6$pFTg8&0Bg4+vNCzl&K%|58f!*#w>z$(lTxG^<6$VZVvH04@ z*A*GB)l$Hd?{Px|5O}jo9&pb;^Tdbpx#I70>bNUk2&emHHypB(USA|?3ZlVl`9KU) zXt6{L`{i=7dy)p6*ydt4AUYi#`u60rL^1&}9ZJk)Hnl%^jFISxLM`CgDM->l2po|* zWJ8IgeY6pU#E3FY!Bj zH3B7<4+RkV1ze%C5PHR;w({aG@$7 zc3cZYbuQxIlX_iV0Waq?5d@OVK}$`YWT4{|29RbB2S=PnR%xRp{*9y8dO$`AxcM0< zmrq&-gYCA7nN0^xh-qV{f0r4T3a)GQws5KNWfKS8Z=bQy)}9xhxtm|u-{lwXM$Kkn zp5Ih{QSnKCWzQja>7~62aD9j_6Bh*&*CYyAOn@s;At$eIFNqZ{#+bQ@vAEL{dQj+a zK!?I*kT?D05O|>ifN6x|K@Ybm0e2cDrCU-KDOQVOL%}^b<2DIA_sU`{&py8suDt96 zM#LLtBd#9D9LrmYe8qTp4du0@Fi|Q%wbnw=-SgDVNxp{~LDh+5=zz+Mo96?Cr!^AjaWF%|#JGZ|^1%>%J1p`iohD zBp8oa?YpD`9|{l>EouX=R>B9G)rP{EpTT0Lm|f-XhN>Nx=nxRNk%v(;+;4pLZurJu z{E0h@jvanWb7m8-R>bP?sS_m>=U7k~L$oy_mUfZ@zT|ezNV^*aFo6W30OmQf1u8Lu3YYfdU>rD3cRK zn6EVXbI&$%rh6>SkXSI__U+m}%@6lpWHkOm)7X9>U&u@Ou9^ZGR?{Lzt=~TKj@bU| zZ$2#cb^C3<(p8-L+LB2e66kYd4mRirEJ7v^OUYH~`XjMO*ZF#WGNm(R(;`&IAh7TG z!k5HxQma9B%*;va)Mh&Z_Ay(fz5$pp+{AbRDzzql@^>6`7yB-g+(LlHSNHNCypN-N zI?QW}3XHyD1I_K@CPmG$V<%L{@CY9MACJH@+jhWz`0^KFa1`*Pkp!VFNJJb zo6#Jc#eYWjTjfd>HvXI6hkg4GI7XNawnUV~@ykJMIAENY$>V0|>!d=d6QIj;9N=iT zqjUII{|g^qUT`dx>uLXvAIKj5gZJn2`RTFoqR`RA%m+~voBUB^On<%2tp08996ctk zDFUuislegakHCF@bU$qR@89CDtL}wKRA#Z^ZtzIhZA5@eOe_+sOe5)qsN5{ucf1In zxZ_i>{n;G`NYq3VnCV@@)O*+vQFMT()WoG3xGg6l)$2t5TV~d{l*S5L4Bg9FZhB~j z+x`63E4byhiBt29*nhTA%$wMzng4)Ast1P3I-tyQW4QO~*zuFXV$~vZer^`V$4mUe z?1t^n?dI0&Rq*To{5Dv9-Z@Fv!xC7Swupy>o8d5F>@bzI&WuaNH#GVM8GgT9uE6&m z{~`Rv1K)rnTy;rG4C;p6e1vzIkC1~W}y$)m^U!jnLR;z=%_>fIS}BU z`Qf*7Q_~mzSN^p85xNP+#)`4CHsJ?LFXz)v9irCAZmv^7j%KR~r)Ew;u~3AUUVa5$ z*tr*0u9$#dy5U;5>Bj5fg7eQ4Pao@(cutGp)cqFJS_3hDn;HLAtjERSBc0)^Ja%zr zvsIPV4ct1bWS)cUyN^EsPdvE=9{<4)g^I(}=hVw56p{vDA>A|;<7o?)ZwJiuA|8tY zclSVm+qq-Q6=9HnGzfz$#)@N5EEbIKim5z*YAhJyq)HQQPMQl9m>Y2X#HmzB=!=T2 zMrUVdgh;@r@yAcU06*NaorApq|7_j+;F6!e2-aV7r3FB$ZZJ7>qIQTIMo8?I(CijZ zk0k&2$49J$PIR1a(u!Y4<@cR@do3e^Blc zm;aWZZxN^Sq%>h=I_m|pS|;e2D*k41W(?}}ish~aRR^01xZN-O<3|3?O@({`CQ79^ z(^SU@O~V&rO?V-Dc%WPteoyuEYOBlUx??9!Ch+E9Esg)sz~C3O(P)@ADwR6??C{(0 z=3B>L$BX;;>oPRz4Y>O1%f%D6?xGLCim4L3Z|(W8_QDIqIxZok9s#&>TQN2w=Cl2R zM0u|akOC{DCC6TFNtVl1c>aZ*P^nho(4p60|Neu*uqqS^vGR^xJ_9-F3CmC|65ET^ znOy>n#DEhyhylp?9z_cKW0`>4{rrzN@?C7g!js9#NtxB!MSs9gDQE>!o)`_{cwF+@ z6F7SGcw&#FXE=nUo+vV4yVaI_%5PX{VglZH^Br+)Z@qm?91sF^zC15(RE^)n>#w^; z+^F(=8E*XW_2O8upKhK%l~-MPxjW6Ib&qbk@doF>G&uL}JIME6b^!*iBNqpLuhnX) z$w>g7dwwSra(S_@=U><*SbU5#m1r@hZXQ*J+1S{aWbOqnAL8e37=X+ZmHo)0zL`QMP(jC7U8NK*> zp$en9sXi&EZeFD&HzS>zh?9yfHHGm8x-mIXMLQf$+0 z-va_SZNv&*4Zp(?}LL&lo2dX$hlno6&W_zzws>=-E4jp`Hx>2v8HL92`c1?D- z?o`rw#xK{Exy0)jQNHa_5fw9iE1CgR4X#6(pve1 zIQ1tR&bZJVAzd#t8*rU=`vJzH=?TSb-5h^eKcszZ$rkkP^0sh9l5_(##Y!F2qm~9j zcBU=WL2uru#i-|cLS2`EJ?#LAqYX$KRKRW^(D}Da=FD;ZndE1k(AKL5cCU+~&PJRp z4L$#UlFk4>*OL`RNb8+yZfkL_g0%j#94YbaF7V_=sh4(!h) z3BZM{z1v|p4z{nL^;0O6M&qaVTi1Hafdj8(*q}?OhwUgWxWy2U3-r=xE0|~zD(Hs@ z_X6iS0X~sXN?2dNNvv>~9vX0MGB)b~j)UzkoD?<}lCHU1{rsq#C6pfd)Pec#j<}`S zjEeOG%taKRna0ZifOID$)?Nk`?ZEI9Mch&OJ=UN5L@*>+Ifs07BC14cVVC)(SN88( z&y~CBTxxyh!k(rqz}#`iC&BK)3n@-t+a*F4l|oK0>zxh*q^CuzCk0N+$8&P?`s+a# z_fOHze;G%PB4o}GK6%?6TMghi*ft0`8wMj1V7*Pw%P+qKZn)uk)$F-fGkD^-=gz{G zXiLtLz3R%#j7utWx=!VN=m%_JKoW_WosP_qrX=UgT*wKO-2%!tv(O8YfLg`@HyaK3 z=HGl>IAG=P+GTKQCXb!Zf0iR|81XqmV`JsYl_FYV_nC{gA<@p&pAyu+-@135&zQ}Y zbi7B9chb!HcgVWf!dQHElh+)TQVRd?v2Vkrmt7)?Y;3KKoF(kS7W;S>;NZ<#{_Pj; zfl_JADT*<@OuP(adxpleJB?CN_Z<#Q(;gx!^F@*-$TL%i8f9EL3OIDfk_XC&gC9r)va z{|E3_fA!zsL)Tv?0@S*X23ZpRk<(~oqyTH)?- z!x?U(GzBlbxEnS-{6AsezJqdKSQ=<`@b&@BQd;LTuZc|JJ?I|y^kbkbtzNT>nCmy* zni&(-?^&55)HKPCQ@vF8lW2Pgdk8G(y&AxSD zTsF84)uef@ae+WnwW-h`lV9c5>HUfOY~L8>xFA$IwAvm7bgls)Q=3?iFiEG~hPk;J zxbljN;TvE7b2xDDRro*OdPF1}YD{%>2FRIaDYkTlE&}ATOD~4s-uPQ^>#ux_ON<<} zn>A=Mnmyf@^=}!aRt>6Ex@e*hp=*_@`-}nqMnksYXp^zS5#%0B#fE0MVj*-Zsx7N< z*qNPJYL7JLPTG;Nh}wzbIH%|qJpO|p!M1JB!u|uVh^GiMk1+?%uB{xJ;j+?<`eC(& zFkBz|?ZswH$n8<(@eT`MId9S85dVi?mU|R|rQB%?7_CB$u zV6q|$xQ{v)r7f;F~F{0Z>%%0IOPS9wzB7RJ5AqVSF zdhin;zx@w0@23MelO-}bmP@dm^~A-%i=VWfPDativH*pAk?RX}c>0-baOkH$gFP?p zg;!oZ#7*+HNgNe7E2639{bB+xvF{=EK?DJ&)8qMGcG<;n-3PCQD=xp3s~wk$x((6Q zAfj>0hAb9yTD-cS>tc1gVBNG|)pAE^c^DIa1w4l$BxHXZwe9h{eL5A!>K!CV21DUBem?>8y#H;vDs7}~ryDdf?ssdCW zz3B$n@UfeO(Sb~eaoRmE@8w3v0paa_ZpZV0)n?naKPzq={`ADe#2I&eAWKC`U&8F< z4}bUuv3=g^^WXy?cpt1;vs%<(U{qkDG%n6LQVfP5X}4OA_1LvuH{(NQH`xI>$%(!z zrb(EI9{6D{e%u`FO)g4>b;^o|Dz(-h^AA?>f$7|>)I-_7_r)#T^4NglG?%j{L9=^Z zBzvPRJhX1RUECCBhxyoG*{8axpD^7;vq8Dmeb@Hv*$Z>?^Wyklf8$M&2#SR%{;}1A%j%sHZ&_3%xi7ysH{yxQ#y$7E-LMxzclfAl8fa=-`tqaXR@xHAEjx>IC&$7$Ay zQmk=5CERQIpVHYf(a2gG38rnW%o<_Tttqx89kK2l0xiGj7@l?nMhAv%QZm~e;i(7~r4LTyIf3e#OjHz)$7Gl!NU-4z?rwey=iIQ|e5JnQ+?5lci|C2!M8s4zwGpkR zPng@=aTLL*xb2nB7AEGziK%3_3WptWFhFe5@j*q46EI^w2l@sK%l;hfzECOib9u8B z4&C^|+7BVx{iWMEx@;EP1~_pDSI%0>`sEMld^2~XQf_>k16OD&sJp4rP@}Haairnc ziJ50iWS=re*x9TS(=~N28iNs~Z(H$sq9*=x*a*}#+^XqwV2!hDD#sp=DCz(0^hk^w z8jP*Uj67~zM{~Mxk~q{T3>YfGCQ{Htn5~D0%k#DGt2Sz5YK&V0vw2JZ_wWDS`N5#m zY@XmI?GNNmeQU}CozOi@_IKb7ch!N+KQEgVS$Jj%0z6 zK+pJIN=6MC;I|U0lQS<^T=b5y(UuaSZJO(xn5TQIl{%)4qwVq5fD%zJJ6^>O&W z-M3gJ*&ODCmTmFbmspM2%_)9CR%>^JTM6H7(h!c$vYENL+G{k58sHWN=qbY7>B3?_ zhH0_X*N+`P^}i-3#%>%RE38JAE95=v#GBlhXvwOd5^Zg%Mm8{F!=fLp$TXBD%=BF& zrqh#(`56VACFV8lW`bmO=+*P{rgb%sOFR5d;o`Qs5g4m%U90gd%P2^^O%~{rQ?2mP zFz7_aKNzt9W~#JZsnkw!E41qH3G}>Vsf%DZE>;_iM!VmB=ft0B147L*lHw?g#jLz# zG|p-;`W>}eP>Gt1MQ6Me{*#s8q5*B(^4=I5{J|4L>wqLo7$dG>k})KgI`2s_ul5ge zn;6DbGs}oMAY^xR84wTUybxi|%o!op>U;JSNbWK8YCugg*0wW%36SBvmz^;QHwp-Q z>sX`84TCu*=4bM5r(Ek1dE54&X$*(Up+>#_+`A`c|N6o;=l&kX&01~Abg3@eOvZ~R zk07SY5`j3ug`LK{Uhl#aS3VKNfUL_gu^tSUq3V18ihTH8av*G~DYlL|QW z3Ud>7*UYKeN&W<`yKv1pcZgII{&k!+I5Sp|3Or`9j14?64MmC98tV)gl5UqH=GR{) z0TiDn>79@4l}nPuwex$ZFe`MZUK1}~ODrRf__OdZuaX|WgY|x~6tV%Y9ljzG!oN0K zjbL`Z!6F$x=y+^pgQ;zemKxgsW^ZeMTqhw?Ezn`Vsb^1~IQ7kwvy~rXh6c{Yf``zx zCyO`pT>PIcZex$OD{h%PqumnnmZi0#SUiuPuY*f{Tl}Yt4l_B4QUPLBAati^%J9jF zsec(UeeW7vf*qf0!Qpo*aPnjs!4_FS^TFi2`&%&uwW#B+#9-DPMkTpF(X;A5PRgH=@%6^og>m}jh zb&9V(a?Ux^cdlK#`gcoX2C7{-Uk#SH7|W+&F-f=##68TzWlsWZ$r7-gqgW2&`!q|vD9O= zmNjgU*`O+`F{cI=%FI}?R1DsqN)6t3yD=PelYDjUc&T*j+6!0z$8%P$C}BG<%q9ia z8Iq3r1fQd0^;5?9-US>{v0rK@1SshNRPtLGN-GzSuhpoFPcbQSw$gx8vsIDK4i58*sKI%B)%t*C@bAg@x-RCucp3M4n&^ zPR`83T)772N)4KgmYl&b{V|AofUTYaHVwFWi`iy9u+4C=wHB;paNyyLBG;^#UitY8 z*R1;7im8bS(PNCC5YAybitLMS;LDB{x{TRRZQ+>!oR}TRipRuJ8Y^B6%zckB7x;Tr{&6tK;E z%%%ZX@h#Gk*-;#Lm<4cgX>#I@^H!bn#Z}W&Kab4}rBQ+UUBbaUN(iR3^Rk;6k}jS! zAIRAepDyW^DdIaL$Bk*<89*W{*8&+bRxZpbkmW^mgd&4ctjKB#aLt!FgK<$=t<~g2 zD81cCtPh}R!=Rbs(x_yJQJ>jxyOmYLFjB)^S+Wvs37nqF~!p~!*9F9>ED z5EI#0TwjL^Ad=C(wR-|jzuvX(QCII%mdxapGfhiy<&+*K=O&X?XLIvqsMZ@$tyVdc zRiRODifXI@yeKRs%+&V8XVYV~Mv4fnq=-?Q*>GL+GkQ;hr$_(~6YkbdtXQ#;1MhPj zc$Z-9C>DK~j@FFA;$+zl!iwFXMY>;+jO^k>a|WFoAS%>3u<`{*x!3gySZy_1E{n>u z3fH}G0+1?Sn_}d_+;r431gI5mYNxn5e5Y+K#qE)0jp|YDM|>_C;4I)_{?nTL*!b<| zuRix*ub3>|GLCa|5sQVGye^C_KJ$&{a`Y(J4)dZg8`qM(Lcv}F1qwV^p;fEbVV<*B zrCJw?J~G&V;IbLa7ne53(!x)ExT&6D7*ta9HCv3Z8lQ;YBtbp!@$?q5QNP^MdxV;oM+ii<;TZwykPaYpDT@x zeSEA~SX(IM9e|7bzT(L(> z5gDw`MI&Q52jAN9v4Rjs2@u*2UuO<0S3e_QGbec4$q<_B=L4arcU0dru2->k zyUj2ev0SMzWZc>L`8aemIHN^008Xb9AzwJw5NHI(;;F7U96KJ*BzwV$7# zo}o0D?v(|yG!{!sZfvKpSr*XhT?~S%dcUavc19HCC0op?7*K<-*adiF7VrvPz?bU* zzCnT4&5E>L6~h26D-W$-(OI*=)jpjJcGdze1BAo^O5S2QA9yzS@+qumgU>H_3q0_p zfiCUZb+as4AG%owvNLMC0j*&HtFx5Ab=Cu}3lPBqieDeu3wSw?_0kxx7wCFfn{)s} zzz15(5~p?z0bR<#dQSsx0CwzFI~jI)FAa2AhC?^QAg!XQ1IfxKcD4d)8E~Uz(Lt^k hdoKcJq09dlU;qPnqvwQ<6o~);002ovPDHLkV1n$cBjNx6 literal 0 HcmV?d00001 diff --git a/chapters/goals_and_strategies/chapter.html b/chapters/goals_and_strategies/chapter.html new file mode 100644 index 0000000..c9e2222 --- /dev/null +++ b/chapters/goals_and_strategies/chapter.html @@ -0,0 +1,692 @@ + + + + + + + +Mål och Verktyg + + + + + + +
+
+

[exclamation circle] Här behövs text om hur programmerare sätter upp mål- och delmål och hur de använder verktyg för att uppnå dessa mål- och delmål. Gärna med praktiska exempel.

+
+
+ + + + \ No newline at end of file diff --git a/chapters/goals_and_strategies/images/logo.png b/chapters/goals_and_strategies/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..061d2ecbabe5677bc3bc0632556bdfa1551614cc GIT binary patch literal 10891 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 literal 0 HcmV?d00001 diff --git a/chapters/strategies/chapter.html b/chapters/strategies/chapter.html new file mode 100644 index 0000000..af26778 --- /dev/null +++ b/chapters/strategies/chapter.html @@ -0,0 +1,1792 @@ + + + + + + + +Strategier + + + + + + +
+
+

Ändring av state (transformation)

+
+
+

Tilldelning

+
+

[question circle] Är tilldelning ett verktyg eller räknas det som programming "knowledge"?

+
+
+

För att kunna använda värden (t.ex tal) i program måste man först lagra dem i en variabel. +Att lagra ett värde i en variabel gör man med hjälp av tilldelning.

+
+
+

En tilldelning består av tre komponenter: en variabel, ett tilldelningstecken och ett värde.

+
+
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+
Tilldelningsverktyget i Ruby
+
+
speed = 10
+
+
+
+
+
+
+
speed = 10
+
+
+
+
+
+
+
const speed = 10;
+
+
+
+
+
+
+
var speed = 10;
+
+
+
+
+
+
+
+

Initialisering

+
+

Initialisering används när man vet att man kommer behöva ett värde som man kan modifiera längre fram i flödet.

+
+
+ + + + + +
+
Note
+
+
Exempel: Summera tal
+
+

När man vill räkna ut summan alla värden i en lista behöver man ha en variabel som innehåller summan. För varje värde i listan vill man sen addera värdet till summa-variabeln. Men för att man ska kunna addera det första värdet i listan till summa-variabeln måste summa-variabeln först vara initialiserad med ett värde, antagligen 0.

+
+
+
+
+ + + + + +
+
Note
+
+
Exempel: Bilspel
+
+

I ett bilspel vill man kunna gasa och bromsa. Både gas- och bromskoden kommer modifiera hastigheten på bilen, men för att hastigheten ska kunna modifieras måste det först skapas en variabel som innehåller hastigheten, och variabeln måste ha initialiserats med ett värde som kan modifieras.

+
+
+
+
+
+Initialiseringsverktyget +
+
+
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+
+
speed = 0 (1)
+
+...
+
+if pressed_button == 'w'
+    speed += 1 (2)
+elsif pressed_button == 's'
+    speed -= 1 (2)
+elsif pressed_button == 'esc'
+    speed = 0  (2)
+end
+
+
+
+
    +
  1. +

    Initialisering av speed-variabeln

    +
  2. +
  3. +

    Modifiering av speed-variabeln

    +
  4. +
+
+
+
+
+
+
speed = 0
+
+
+
+
+
+
+
const speed = 0;
+
+
+
+
+
+
+
var speed = 10;
+
+
+
+
+
+
+
+

Inkrementering

+
+

Inkrementering innebär att öka värdet på en variabel. Oftast är värdet ett heltal. Inkrementering används ofta inne i loop-verktygen för att hålla koll på räknar-variabeln, men det går även att använda tillsammans med de olika if-verktygen.

+
+
+

För att inkrementera värdet på en variabel måste variabeln först vara initialiserad

+
+
+
Inkrementering med if och if-elsif
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+
+
healthiness_score = 0 (1)
+
+...
+
+if favourite_drink == 'water'
+    healthiness_score += 1 (2)
+end
+
+if favourite_food == 'fruit'
+    healthiness_score += 1 (2)
+elsif favourite_food == 'carrot'
+    healthiness_score += 2 (2)
+elsif favourite_food == 'pizza'
+    healthiness_score -= 2 (3)
+end
+
+
+
+
    +
  1. +

    Initialisering av healthiness-variabeln

    +
  2. +
  3. +

    Inkrementering av healthiness-variabeln

    +
  4. +
  5. +

    Dekrementering av healthiness-variabeln

    +
  6. +
+
+
+
+
+
+
speed = 0
+
+
+
+
+
+
+
const speed = 0;
+
+
+
+
+
+
+
var speed = 10;
+
+
+
+
+
+
+
Inkrementering i räknande loop
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+
+
number_of_greeted_people = 0 (1)
+
+...
+
+while number_of_greeted_people < number_of_people
+    puts "Hello, nice to meet you!"
+    number_of_greeted_people += 1 (2)
+end
+
+
+
+
    +
  1. +

    Initialisering av number_of_greeted_people-variabeln

    +
  2. +
  3. +

    Inkrementering av number_of_greeted_people-variabeln

    +
  4. +
+
+
+
+
+
+
speed = 0
+
+
+
+
+
+
+
const speed = 0;
+
+
+
+
+
+
+
var speed = 10;
+
+
+
+
+
+
+
+

Dekrementering

+
+

Dekrementering innebär att minska värdet på en variabel. Oftast är värdet ett heltal. Dekrementering används ofta inne i loopar för att hålla koll på räknar-variabeln, men det går även att använda tillsammans med if-verktygen.

+
+
+

För att dekrementera värdet på en variabel måste variabeln först vara initialiserad

+
+
+
Dekrementering med if och if-elsif
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+
+
healthiness_score = 0 (1)
+
+...
+
+if favourite_drink == 'water'
+    healthiness_score += 1 (2)
+end
+
+if favourite_food == 'fruit'
+    healthiness_score += 1 (2)
+elsif favourite_food == 'carrot'
+    healthiness_score += 2 (2)
+elsif favourite_food == 'pizza'
+    healthiness_score -= 2 (3)
+end
+
+
+
+
    +
  1. +

    Initialisering av healthiness-variabeln

    +
  2. +
  3. +

    Inkrementering av healthiness-variabeln

    +
  4. +
  5. +

    Dekrementering av healthiness-variabeln

    +
  6. +
+
+
+
+
+
+
speed = 0
+
+
+
+
+
+
+
const speed = 0;
+
+
+
+
+
+
+
var speed = 10;
+
+
+
+
+
+
+
Dekrementering i räknande loop
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+
+
number_of_laps_left = 5 (1)
+
+...
+
+while number_of_laps_left > 0
+    puts "Running a lap!"
+    number_of_laps_left -= 1 (2)
+end
+
+
+
+
    +
  1. +

    Initialisering av number_of_laps_left-variabeln

    +
  2. +
  3. +

    Dekrementering av number_of_laps_left-variabeln

    +
  4. +
+
+
+
+
+
+
speed = 0
+
+
+
+
+
+
+
const speed = 0;
+
+
+
+
+
+
+
var speed = 10;
+
+
+
+
+
+
+
+

Mellanlagring

+
+

Mellanlagring används när man vill återanvända värdet från en uträkning eller ett funktionsanrop senare i flödet. Exempelvis för att funktionsanropet kräver mycket resurser, tar lång tid att genomföra, eller kräver input från en användare, eller för att det bara blir tydligare kod.

+
+
+ + + + + +
+
Note
+
+
Exempel: Lagra användares initialer
+
+

Istället för att varje gång man vill använda en användares initialer extrahera dessa från variabeln som innehåller användarens namn, kan man extrahera dem en gång och mellanlagra resultatet i en variabel.

+
+
+
+
+ + + + + +
+
Note
+
+
Exempel: Hur många gånger förekommer ordet i boken?
+
+

Ett program ska jämföra vilket av två ord som förekommer flest antal gånger i en bok. Det tar relativt lång tid att söka igenom boken och räkna antalet förekomster av ordet. Därför kan man räkna anatalet förekomster en gång, och lagra resultatet i en variabel, som man sedan använder varje gång man vill använda värdet.

+
+
+
+
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+
+
initials = "#{first_name[0].capitalize}.#{last_name[0].capitalize}." (1)
+
+...
+
+puts "Your initials are: #{initials}" (2)
+
+
+
+
    +
  1. +

    Mellanlagring av värdet.

    +
  2. +
  3. +

    Användning av värdet.

    +
  4. +
+
+
+
+
+

Python

+
+
+
+
+

Javascript

+
+
+
+
+

C#

+
+
+
+
+
+
+

Konkatenering

+
+

[question circle] Är det här ett verktyg?

+
+
+
+

Konfigurationslagring

+
+

Konfigurationslagring används när man vill använda ett värde längre fram i flödet, men man vill inte skriva ut värdet direkt, utan vill kunna använda en variabel med ett beskrivande namn istället för att skriva värdet direkt.

+
+
+ + + + + +
+
Note
+
+
Exempel: Priser med och utan moms
+
+

Ett program som ska visa priser med och utan moms. Istället för att skriva pris * 1.25 kan man skriva pris * moms, förutsatt att man i moms-variabeln lagrat värdet 1.25.

+
+
+
+
+ + + + + +
+
Note
+
+
Exempel: Kastbanor med gravitationskonstant
+
+

I ett program som ska räkna ut kastbanor kan man lagra gravitationskonstanten (9.807) i variabeln gravitation och använda den istället för värdet varje gång man behöver använda gravitationskonstanten.

+
+
+
+
+ + + + + +
+
Note
+
+
Exempel: Spara återkommande textfraser
+
+

I Bröderna Lejonhjärta-spelet ska alla vakter avsluta sina meningar med frasen "All makt åt Tengil vår befriare!". Istället för att skriva frasen på alla ställen kan man lagra frasen i en variabel och använda variabeln vid varje tillfälle.

+
+
+
+
+

Konfigurationslagring gör koden tydligare att förstå för oss människor (datorn bryr sig inte), och gör det enklare att ändra - om man behöver ändra det man lagrat behöver man bara ändra på ett enda ställe.

+
+
+
+Sinatra Logo +
+
+
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+
+
vat = 1.25 (1)
+
+...
+
+puts "#{price} exkl moms (#{price * vat} inkl. moms)" (2)
+
+
+
+
    +
  1. +

    Konfigurationslagring av momssatsen (vat står för Value Added Tax, (moms på engelska)),

    +
  2. +
  3. +

    Användning av momssatsen.

    +
  4. +
+
+
+
+
+
+
gravitation = 9.807
+
+
+
+
+
+
+
const gravitation = 9.807;
+
+
+
+
+
+
+
var gravitation = 9.807;
+
+
+
+ + + + + +
+
Note
+
+Type inference räknar ut vilken datatyp som lagras i variabeln. Även om det inte står att variabeln innehåller en specifik datatyp kommer variabeln fortfarande vara "låst" till den datatyp som initialt lagrades i variabeln (i det här fallet en int). +
+
+
+
+
+
+
+
+
+

Uppdelning av flöde (selektion)

+
+
+

If

+
+

Om du vill att ditt program ska göra en sak enbart om ett villkor är sant, kan du använda if.

+
+
+

If-verktyget använder ett villkor (ett påstående som kan vara sant eller falskt), och om villkoret utvärderas till sant kommer något ske. +Om villkoret inte utvärderas till sant kommer programflödet fortsätta efter villkoret, som om ingenting hänt.

+
+
+ + + + + +
+
Note
+
+
Exempel: Pris med eller utan moms.
+
+

På en hemsida som framförallt säljer till företag visas priserna utan moms. Men om någon klickat i att de vill se priserna med moms, ska priserna modifieras med momsen

+
+
+
+
+
+If-verktyget +
+
+
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+
+
if show_price_with_vat?
+    price = price * vat
+end
+
+
+
+
+
+
+
if show_price_with_vat:
+    price = price * vat
+end
+
+
+
+
+
+
+
null
+
+
+
+
+
+
+
Null
+
+
+
+
+
+
+ + + + + +
+
Note
+
+
Exempel: Ett till exempel
+
+

Exempeltext

+
+
+
+
+
+

If-else

+ +
+
+

If-elsif

+ +
+
+

If-elsif-else

+ +
+
+

Lorem

+
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+

Ruby

+
+
+
+
+

Python

+
+
+
+
+

Javascript

+
+
+
+
+

C#

+
+
+
+
+
+
+

Ipsum

+
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+

Ruby

+
+
+
+
+

Python

+
+
+
+
+

Javascript

+
+
+
+
+

C#

+
+
+
+
+
+
+
+
+

Upprepning av flöde (iteration)

+
+
+

Räknande Loop

+
+

En räknande loop används när …​

+
+
+

Inkrementerande Loop

+
+

En inkrementerande loop används när …​

+
+
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+

Ruby

+
+
+
+
+

Python

+
+
+
+
+

Javascript

+
+
+
+
+

C#

+
+
+
+
+
+
+

Dekrementerande Loop

+
+

En inkrementerande loop används när …​

+
+
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+

Ruby

+
+
+
+
+

Python

+
+
+
+
+

Javascript

+
+
+
+
+

C#

+
+
+
+
+
+
+
+

Loop Med Brytvärde

+
+

[exclamation circle] Behöver utvecklas (alla loopar är väl egentligen loopar med brytvärde, men själva intentionen är väl det som skiljer).

+
+
+
+
+
+

Avbrott av flöde

+
+
+

[question circle] Är detta en grupp av verktyg?

+
+
+

Tidigt avbrott

+
+

[question circle] Är detta ett verktyg? (och ska den i så fall ligga här eller under upprepning av flöde?)

+
+
+
+
+
+

Sammansatta verktyg

+
+
+

Iterativt uppbyggd output

+
+

Iterativt uppbyggd output används när man har en mängd data (ofta en lista) att behandla, och output är beroende av datan.

+
+
+

I iterativt uppbyggd output initialiserar man först output-variabeln med ett lämpligt värde som vi sedan kan modifiera.

+
+
+

Sedan itererar man över datan man behöver behandla och modifierar i iterationen output-variabeln (t.ex genom att addera värden till den)

+
+
+

Slutligen, när iterationen är klar kommer output-variabeln innehålla rätt värde, och man kan returnera den.

+
+
+ + + + + +
+
Note
+
+
Exempel: Skapa en lista av alla ord som börjar med en given bokstav i en text
+
+

Först initialiserar vi output-variabeln med lämpligt värde, i det här fallet antagligen en tom lista (som kan innehålla alla ord vi hittar).

+
+
+

Sen itererar vi (med lämpligt verktyg för uppreping av flödet) över orden och i varje varv i iterationen använder vi if-verktyget för att modifiera output-variabel-listan om om ordet börjar med den givna bokstaven.

+
+
+

Slutligen, när iterationen är klar kommer output-variabel-listan innehålla alla ord som efterfrågades, och vi är klara

+
+
+
+
+

Lämpliga värden att initialisera output-variabeln med är ofta:

+
+
+
    +
  • +

    0 (om output ska vara ett tal)

    +
  • +
  • +

    en tom sträng (om output ska vara en sträng)

    +
  • +
  • +

    en tom lista (om output ska vara en lista)

    +
  • +
+
+
+

Men det finns undantag, t.ex kan man ibland initialisera output-variabeln till ett av värdena som finns i mängden man ska behandla.

+
+
+
+

Switch Loop

+
+

[question circle] Är detta ett verktyg?

+
+
+
+Switch Loop? +
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/chapters/strategies/images/if-1.png b/chapters/strategies/images/if-1.png new file mode 100644 index 0000000000000000000000000000000000000000..7c5793332da0c467620c40fc79e6100e94dc23a2 GIT binary patch literal 36046 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%0DLbFKQsG!l-_E+b9=>-?U3E*+Ls`CJQ`l)u`J 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 JVk75>{{nB_diMYT literal 0 HcmV?d00001 diff --git a/chapters/strategies/images/switch_loop.png b/chapters/strategies/images/switch_loop.png new file mode 100644 index 0000000000000000000000000000000000000000..ab850cca4a33e8ad171bb68ba82b564a8ac16bc8 GIT binary patch literal 17257 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 literal 0 HcmV?d00001 diff --git a/chapters/strategy_centered_assignments/chapter.html b/chapters/strategy_centered_assignments/chapter.html new file mode 100644 index 0000000..12cd619 --- /dev/null +++ b/chapters/strategy_centered_assignments/chapter.html @@ -0,0 +1,719 @@ + + + + + + + +Strategibaserade Uppgifter + + + + + + +
+
+

Strategi 1

+
+
+

Uppgift 1

+ +
+
+

Uppgift 2

+ +
+
+
+
+

Strategi 2

+
+
+

Uppgift 1

+ +
+
+

Uppgift 2

+
+
+Sinatra Logo +
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/chapters/strategy_centered_assignments/images/logo.png b/chapters/strategy_centered_assignments/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..061d2ecbabe5677bc3bc0632556bdfa1551614cc GIT binary patch literal 10891 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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..de3051e --- /dev/null +++ b/index.html @@ -0,0 +1,2076 @@ + + + + + + + +Flöde och State + + + + + + + + +
+
+

Flöde och State

+
+
+

Att programmera är att ge instruktioner till en dator, eller snarare datorns processor.

+
+
+

En processor kan bara göra en sak åt gången, och instruktionerna utförs därför en efter en, i ett flöde.

+
+
+

Under flödets gång kommer variabler att skapas och deras värden uppdateras.

+
+
+

State är värdet på alla variabler i ett program, vid ett givet tillfälle.

+
+
+

Programmets state ändras alltså allteftersom programmet körs.

+
+
+

Att programmera handlar därför om att skapa ett flöde som bearbetar state och ser till att programmet har rätt state när det är klart.

+
+
+

Man kan alltså se flödet som en serie av transformationer av state.

+
+
+

För att konstruera programmets flöde och för att transformera state finns ett begränsat antal verktyg som används av alla programmerare oavsett vilka program de skriver eller språk de använder.

+
+
+

Genom att kombinera dessa verktyg på olika sätt, kan man skapa alla program.

+
+
+

Verktygen är oberoende av kod, men kan så klart implementeras i kod i valfritt programmeringsspråk.

+
+
+

Den här boken går igenom de verktyg man behöver för att klara Programmering 1 (och antagligen bra mycket mer än så).

+
+
+

Flödesschema

+
+

För att illustrera verktygen används flödesscheman.

+
+
+

Flödesscheman fungerar såhär …​

+
+
+
+
+
+

Mål och Verktyg

+
+
+

Här behövs text om hur programmerare sätter upp mål- och delmål och hur de använder verktyg för att uppnå dessa mål- och delmål. Gärna med praktiska exempel.

+
+
+
+
+

Strategier

+
+
+

Ändring av state (transformation)

+
+

Tilldelning

+
+

Är tilldelning ett verktyg eller räknas det som programming "knowledge"?

+
+
+

För att kunna använda värden (t.ex tal) i program måste man först lagra dem i en variabel. +Att lagra ett värde i en variabel gör man med hjälp av tilldelning.

+
+
+

En tilldelning består av tre komponenter: en variabel, ett tilldelningstecken och ett värde.

+
+
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+
Tilldelningsverktyget i Ruby
+
+
speed = 10
+
+
+
+
+
+
+
speed = 10
+
+
+
+
+
+
+
const speed = 10;
+
+
+
+
+
+
+
var speed = 10;
+
+
+
+
+
+
+
+

Initialisering

+
+

Initialisering används när man vet att man kommer behöva ett värde som man kan modifiera längre fram i flödet.

+
+
+ + + + + +
+ + +
Exempel: Summera tal
+
+

När man vill räkna ut summan alla värden i en lista behöver man ha en variabel som innehåller summan. För varje värde i listan vill man sen addera värdet till summa-variabeln. Men för att man ska kunna addera det första värdet i listan till summa-variabeln måste summa-variabeln först vara initialiserad med ett värde, antagligen 0.

+
+
+
+
+ + + + + +
+ + +
Exempel: Bilspel
+
+

I ett bilspel vill man kunna gasa och bromsa. Både gas- och bromskoden kommer modifiera hastigheten på bilen, men för att hastigheten ska kunna modifieras måste det först skapas en variabel som innehåller hastigheten, och variabeln måste ha initialiserats med ett värde som kan modifieras.

+
+
+
+
+
+Initialiseringsverktyget +
+
+
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+
+
speed = 0 (1)
+
+...
+
+if pressed_button == 'w'
+    speed += 1 (2)
+elsif pressed_button == 's'
+    speed -= 1 (2)
+elsif pressed_button == 'esc'
+    speed = 0  (2)
+end
+
+
+
+ + + + + + + + + +
1Initialisering av speed-variabeln
2Modifiering av speed-variabeln
+
+
+
+
+
+
speed = 0
+
+
+
+
+
+
+
const speed = 0;
+
+
+
+
+
+
+
var speed = 10;
+
+
+
+
+
+
+
+

Inkrementering

+
+

Inkrementering innebär att öka värdet på en variabel. Oftast är värdet ett heltal. Inkrementering används ofta inne i loop-verktygen för att hålla koll på räknar-variabeln, men det går även att använda tillsammans med de olika if-verktygen.

+
+
+

För att inkrementera värdet på en variabel måste variabeln först vara initialiserad

+
+
+
Inkrementering med if och if-elsif
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+
+
healthiness_score = 0 (1)
+
+...
+
+if favourite_drink == 'water'
+    healthiness_score += 1 (2)
+end
+
+if favourite_food == 'fruit'
+    healthiness_score += 1 (2)
+elsif favourite_food == 'carrot'
+    healthiness_score += 2 (2)
+elsif favourite_food == 'pizza'
+    healthiness_score -= 2 (3)
+end
+
+
+
+ + + + + + + + + + + + + +
1Initialisering av healthiness-variabeln
2Inkrementering av healthiness-variabeln
3Dekrementering av healthiness-variabeln
+
+
+
+
+
+
speed = 0
+
+
+
+
+
+
+
const speed = 0;
+
+
+
+
+
+
+
var speed = 10;
+
+
+
+
+
+
+
Inkrementering i räknande loop
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+
+
number_of_greeted_people = 0 (1)
+
+...
+
+while number_of_greeted_people < number_of_people
+    puts "Hello, nice to meet you!"
+    number_of_greeted_people += 1 (2)
+end
+
+
+
+ + + + + + + + + +
1Initialisering av number_of_greeted_people-variabeln
2Inkrementering av number_of_greeted_people-variabeln
+
+
+
+
+
+
speed = 0
+
+
+
+
+
+
+
const speed = 0;
+
+
+
+
+
+
+
var speed = 10;
+
+
+
+
+
+
+
+

Dekrementering

+
+

Dekrementering innebär att minska värdet på en variabel. Oftast är värdet ett heltal. Dekrementering används ofta inne i loopar för att hålla koll på räknar-variabeln, men det går även att använda tillsammans med if-verktygen.

+
+
+

För att dekrementera värdet på en variabel måste variabeln först vara initialiserad

+
+
+
Dekrementering med if och if-elsif
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+
+
healthiness_score = 0 (1)
+
+...
+
+if favourite_drink == 'water'
+    healthiness_score += 1 (2)
+end
+
+if favourite_food == 'fruit'
+    healthiness_score += 1 (2)
+elsif favourite_food == 'carrot'
+    healthiness_score += 2 (2)
+elsif favourite_food == 'pizza'
+    healthiness_score -= 2 (3)
+end
+
+
+
+ + + + + + + + + + + + + +
1Initialisering av healthiness-variabeln
2Inkrementering av healthiness-variabeln
3Dekrementering av healthiness-variabeln
+
+
+
+
+
+
speed = 0
+
+
+
+
+
+
+
const speed = 0;
+
+
+
+
+
+
+
var speed = 10;
+
+
+
+
+
+
+
Dekrementering i räknande loop
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+
+
number_of_laps_left = 5 (1)
+
+...
+
+while number_of_laps_left > 0
+    puts "Running a lap!"
+    number_of_laps_left -= 1 (2)
+end
+
+
+
+ + + + + + + + + +
1Initialisering av number_of_laps_left-variabeln
2Dekrementering av number_of_laps_left-variabeln
+
+
+
+
+
+
speed = 0
+
+
+
+
+
+
+
const speed = 0;
+
+
+
+
+
+
+
var speed = 10;
+
+
+
+
+
+
+
+

Mellanlagring

+
+

Mellanlagring används när man vill återanvända värdet från en uträkning eller ett funktionsanrop senare i flödet. Exempelvis för att funktionsanropet kräver mycket resurser, tar lång tid att genomföra, eller kräver input från en användare, eller för att det bara blir tydligare kod.

+
+
+ + + + + +
+ + +
Exempel: Lagra användares initialer
+
+

Istället för att varje gång man vill använda en användares initialer extrahera dessa från variabeln som innehåller användarens namn, kan man extrahera dem en gång och mellanlagra resultatet i en variabel.

+
+
+
+
+ + + + + +
+ + +
Exempel: Hur många gånger förekommer ordet i boken?
+
+

Ett program ska jämföra vilket av två ord som förekommer flest antal gånger i en bok. Det tar relativt lång tid att söka igenom boken och räkna antalet förekomster av ordet. Därför kan man räkna anatalet förekomster en gång, och lagra resultatet i en variabel, som man sedan använder varje gång man vill använda värdet.

+
+
+
+
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+
+
initials = "#{first_name[0].capitalize}.#{last_name[0].capitalize}." (1)
+
+...
+
+puts "Your initials are: #{initials}" (2)
+
+
+
+ + + + + + + + + +
1Mellanlagring av värdet.
2Användning av värdet.
+
+
+
+
+

Python

+
+
+
+
+

Javascript

+
+
+
+
+

C#

+
+
+
+
+
+
+

Konkatenering

+
+

Är det här ett verktyg?

+
+
+
+

Konfigurationslagring

+
+

Konfigurationslagring används när man vill använda ett värde längre fram i flödet, men man vill inte skriva ut värdet direkt, utan vill kunna använda en variabel med ett beskrivande namn istället för att skriva värdet direkt.

+
+
+ + + + + +
+ + +
Exempel: Priser med och utan moms
+
+

Ett program som ska visa priser med och utan moms. Istället för att skriva pris * 1.25 kan man skriva pris * moms, förutsatt att man i moms-variabeln lagrat värdet 1.25.

+
+
+
+
+ + + + + +
+ + +
Exempel: Kastbanor med gravitationskonstant
+
+

I ett program som ska räkna ut kastbanor kan man lagra gravitationskonstanten (9.807) i variabeln gravitation och använda den istället för värdet varje gång man behöver använda gravitationskonstanten.

+
+
+
+
+ + + + + +
+ + +
Exempel: Spara återkommande textfraser
+
+

I Bröderna Lejonhjärta-spelet ska alla vakter avsluta sina meningar med frasen "All makt åt Tengil vår befriare!". Istället för att skriva frasen på alla ställen kan man lagra frasen i en variabel och använda variabeln vid varje tillfälle.

+
+
+
+
+

Konfigurationslagring gör koden tydligare att förstå för oss människor (datorn bryr sig inte), och gör det enklare att ändra - om man behöver ändra det man lagrat behöver man bara ändra på ett enda ställe.

+
+
+
+Sinatra Logo +
+
+
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+
+
vat = 1.25 (1)
+
+...
+
+puts "#{price} exkl moms (#{price * vat} inkl. moms)" (2)
+
+
+
+ + + + + + + + + +
1Konfigurationslagring av momssatsen (vat står för Value Added Tax, (moms på engelska)),
2Användning av momssatsen.
+
+
+
+
+
+
gravitation = 9.807
+
+
+
+
+
+
+
const gravitation = 9.807;
+
+
+
+
+
+
+
var gravitation = 9.807;
+
+
+
+ + + + + +
+ + +Type inference räknar ut vilken datatyp som lagras i variabeln. Även om det inte står att variabeln innehåller en specifik datatyp kommer variabeln fortfarande vara "låst" till den datatyp som initialt lagrades i variabeln (i det här fallet en int). +
+
+
+
+
+
+
+
+

Uppdelning av flöde (selektion)

+
+

If

+
+

Om du vill att ditt program ska göra en sak enbart om ett villkor är sant, kan du använda if.

+
+
+

If-verktyget använder ett villkor (ett påstående som kan vara sant eller falskt), och om villkoret utvärderas till sant kommer något ske. +Om villkoret inte utvärderas till sant kommer programflödet fortsätta efter villkoret, som om ingenting hänt.

+
+
+ + + + + +
+ + +
Exempel: Pris med eller utan moms.
+
+

På en hemsida som framförallt säljer till företag visas priserna utan moms. Men om någon klickat i att de vill se priserna med moms, ska priserna modifieras med momsen

+
+
+
+
+
+If-verktyget +
+
+
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+
+
if show_price_with_vat?
+    price = price * vat
+end
+
+
+
+
+
+
+
if show_price_with_vat:
+    price = price * vat
+end
+
+
+
+
+
+
+
null
+
+
+
+
+
+
+
Null
+
+
+
+
+
+
+ + + + + +
+ + +
Exempel: Ett till exempel
+
+

Exempeltext

+
+
+
+
+
+

If-else

+ +
+
+

If-elsif

+ +
+
+

If-elsif-else

+ +
+
+

Lorem

+
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+

Ruby

+
+
+
+
+

Python

+
+
+
+
+

Javascript

+
+
+
+
+

C#

+
+
+
+
+
+
+

Ipsum

+
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+

Ruby

+
+
+
+
+

Python

+
+
+
+
+

Javascript

+
+
+
+
+

C#

+
+
+
+
+
+
+
+

Upprepning av flöde (iteration)

+
+

Räknande Loop

+
+

En räknande loop används när …​

+
+
+
Inkrementerande Loop
+
+

En inkrementerande loop används när …​

+
+
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+

Ruby

+
+
+
+
+

Python

+
+
+
+
+

Javascript

+
+
+
+
+

C#

+
+
+
+
+
+
+
Dekrementerande Loop
+
+

En inkrementerande loop används när …​

+
+
+
+
+
    +
  • +

    Ruby

    +
  • +
  • +

    Python

    +
  • +
  • +

    Javascript

    +
  • +
  • +

    C#

    +
  • +
+
+
+
+

Ruby

+
+
+
+
+

Python

+
+
+
+
+

Javascript

+
+
+
+
+

C#

+
+
+
+
+
+
+
+

Loop Med Brytvärde

+
+

Behöver utvecklas (alla loopar är väl egentligen loopar med brytvärde, men själva intentionen är väl det som skiljer).

+
+
+
+
+

Avbrott av flöde

+
+

Är detta en grupp av verktyg?

+
+
+

Tidigt avbrott

+
+

Är detta ett verktyg? (och ska den i så fall ligga här eller under upprepning av flöde?)

+
+
+
+
+

Sammansatta verktyg

+
+

Iterativt uppbyggd output

+
+

Iterativt uppbyggd output används när man har en mängd data (ofta en lista) att behandla, och output är beroende av datan.

+
+
+

I iterativt uppbyggd output initialiserar man först output-variabeln med ett lämpligt värde som vi sedan kan modifiera.

+
+
+

Sedan itererar man över datan man behöver behandla och modifierar i iterationen output-variabeln (t.ex genom att addera värden till den)

+
+
+

Slutligen, när iterationen är klar kommer output-variabeln innehålla rätt värde, och man kan returnera den.

+
+
+ + + + + +
+ + +
Exempel: Skapa en lista av alla ord som börjar med en given bokstav i en text
+
+

Först initialiserar vi output-variabeln med lämpligt värde, i det här fallet antagligen en tom lista (som kan innehålla alla ord vi hittar).

+
+
+

Sen itererar vi (med lämpligt verktyg för uppreping av flödet) över orden och i varje varv i iterationen använder vi if-verktyget för att modifiera output-variabel-listan om om ordet börjar med den givna bokstaven.

+
+
+

Slutligen, när iterationen är klar kommer output-variabel-listan innehålla alla ord som efterfrågades, och vi är klara

+
+
+
+
+

Lämpliga värden att initialisera output-variabeln med är ofta:

+
+
+
    +
  • +

    0 (om output ska vara ett tal)

    +
  • +
  • +

    en tom sträng (om output ska vara en sträng)

    +
  • +
  • +

    en tom lista (om output ska vara en lista)

    +
  • +
+
+
+

Men det finns undantag, t.ex kan man ibland initialisera output-variabeln till ett av värdena som finns i mängden man ska behandla.

+
+
+
+

Switch Loop

+
+

Är detta ett verktyg?

+
+
+
+Switch Loop? +
+
+
+
+
+
+
+

Kombinering av strategier

+
+
+

Sammanfogning

+ +
+
+

Nästning

+ +
+
+

Ihopvävning

+ +
+
+
+
+

Strategibaserade Uppgifter

+
+
+

Strategi 1

+
+

Uppgift 1

+ +
+
+

Uppgift 2

+ +
+
+
+

Strategi 2

+
+

Uppgift 1

+ +
+
+

Uppgift 2

+
+
+Sinatra Logo +
+
+
+
+
+
+
+ + + + \ No newline at end of file