From c5e6fc51200e93c1344d596153403d2453e67912 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nu=C3=B1o=20Sempere?= Date: Fri, 6 Apr 2018 22:28:18 +0200 Subject: [PATCH] Add files via upload --- is_prime 0.1/const.h | 9 ++ is_prime 0.1/main | Bin 0 -> 20240 bytes is_prime 0.1/states.c | 298 ++++++++++++++++++++++++++++++++++++++++++ is_prime 0.1/states.h | 6 + is_prime 0.1/states.o | Bin 0 -> 2576 bytes is_prime 0.1/turing.c | 73 +++++++++++ is_prime 0.1/turing.h | 8 ++ 7 files changed, 394 insertions(+) create mode 100644 is_prime 0.1/const.h create mode 100644 is_prime 0.1/main create mode 100644 is_prime 0.1/states.c create mode 100644 is_prime 0.1/states.h create mode 100644 is_prime 0.1/states.o create mode 100644 is_prime 0.1/turing.c create mode 100644 is_prime 0.1/turing.h diff --git a/is_prime 0.1/const.h b/is_prime 0.1/const.h new file mode 100644 index 0000000..b0babc6 --- /dev/null +++ b/is_prime 0.1/const.h @@ -0,0 +1,9 @@ +#ifndef __CONST_H_ +#define __CONST_H_ + +#define REJECT -1 +#define ACCEPT -2 + +#endif + + diff --git a/is_prime 0.1/main b/is_prime 0.1/main new file mode 100644 index 0000000000000000000000000000000000000000..876a2ed1455bb02dc297584b20ec93d2ff10028e GIT binary patch literal 20240 zcmeHPd6-nymA|iEFR!|wdSexoQs5JeRD-fKQJ@;Su-bGhVq-c{e7#h4cS(0urxpS_ zirTnTS`=n7kv|A%GzJq*Fr$tUqs=F=F>w--FFMW_jcCL`&;*w_?MBV-+~w7)*VSej zlg#&x7y6xh)_cym_r7=UTWV9VaivSsm?|!|lo3`@65u3p1iq4^l2*&yEWl>4Q&|Zp z#rO+w4na{6n5lK8lV0nx(yFR{$8{0RpU^A9Ijo zsjNDj3R8XaIF14actybn1(_+R^e%!P`T6IT3Msf+wl`W{j?4HIlqjp|iMB7CU(*ww z(-V!QH_X{kyKv6J`Tk_we-@9M?33(y7p&nesXY3CkhO1Pp4RCUpmzRnP@WJv3RlBne1qbb+XPcC!(ncn2BgC)d@D4BRh$d z+1mzf)9mVv$0WsM=QTDgUtyl*pKsL`S+%qL3&>?1{psTWm<6fdbl!KWgT_UpW2xuk z&>-4Gj_Yir#M385(XB4l51h*Iv{nwO@9pDS<%!M#Dpw?^@wko0i*NxCX@zp2!Sm=hqRPm9kzzOy5 zH=Yy{*#!x(vNKaSmQM?yMtCdR%)Ekd3gzfQj<*v|Asij#_!kM+3E#u<)r6DF zNAKYH`Gk|JN4IkPt;s&txfM7s^WJF4{QUAz=9N(YtH)P0Hw+D~st&Nw(7r=e1cpjV z1MJA{P<*Ged|EwYkC+H_O=wOFK&XG%8_FDBKjjfJMd4MheS#R-LlEA~?XP{3qU!W3 z{Bh#130?PlZeZUD9R@;~=mW8yZLO(x|8gE(iC~M`@*xDyW``0dc0RFRd`?zQmM%W_FVM4$y-5n$gKLjo2_34VXI6zn14T1uk@K10 z@VvpH;6ZYFDELdt_fYV88gWCx7btr}!9xPPD!>r|UZGrq)3hx^#?!H27(`kwuiQiyMaidf#8vlc5s0854*2<8BV`4(FZ?1e7xK4a}z8= z%`zH*(F2+E{>+*|N8g0{uRg$1#z1iYIl;kA(_wHM42ClM9vzR?9;Xg_VjWB$DTB$Q z{{$QzCmbpMY8m{=1P_%zT)Yj{n}hJ1^NxlfHxPUQCezbkaw(bIvgXj^*V&!i{b4qH z>}0T~DfW$ab_Q(N$P4`d5B-M0^kk?VnLv&{^+Yq=IdTr9k8VS)uuA{1k)8mZ2c=F6 z>6DTKt)nTpxkA5G_&g~*_W=}Y3My2<_~#*;-w!{60>mi~J_s!2#`Zl*gIlEbE0o&r zk=b$JPmqlvne0du)c)WL=zi$$FTdr!6WQ!mbUzIpF}pBy=0nKp<++)wU&y4N&#d`n zrs<%wp9hK$W7>s8cfEotx(iL-H6FvK=>^_9U$dvb43@#~=lth6|86_~ckgq42j~Bi z^B=PFe=PVbIR7B$@3-^64gQF5A|P7fR5(HyDE<$)oe3U?Td$AfBkK6$&)aQYQpjed z-KGx{VK|gY9}i{LApGF*0fx~uH8en26D$Y8<>!QJF@%q9z(Gj$4{HU*zD;5m*~DB0 z#hxXxGi+jdL9s;`8Ao-SSW!W-UJ|33rhF?dDE502d&nkMQc&!D61&wVR!Y-rL_)5? z3Gdhyszsxq%qt|bQpvar%6thI(PO76nX>f60&UgcDzH@!g!~R0<{gH~6dWFc%RB`~ zhWMI zrcmngoBbG1q~^KLyXWXHV_>VHxTEk2h19c|by zU0Ziq-P*d#>&z#&=JqphKZ#tCJ-MaRu%|7X8D{uj7EC1K311}U>q|sZsf~OO4rcNy zI5arvoItTd$NZZW z@|1cSrK}<4OGK`Sbfl8L_DDxtIvMdL2-%LcVHK^mFzA(!zbro7pUFA#MSD2Jm`x$qbB{C*ICx>jB5Tlg)+!-^aOU zGvL$jX0vw#p8Vh0?0&#s3}>^i0#1J~n=Qf+P6N&WJONk_cqtZDVL%`xM%Rk5C3>xfra3A+yp`!SIJdveGMQpn(K)`zDyGIwedL}gJ5;(0RsoW+2qvw27 zCJDgTma@tLmT;o@S~*nLx~-C|)@!tLq%u(ecBm-8Yl^;I;>z!klvC?t)jpPuJf0RQ zkBt<^RX(x&<9I;wrJ27uP|vZQ4c#OA^fz5=~yc5 zTi~DXpF3w^nq%{>nYYkCcfNn|Y(e*(HFw^^xeMnmW@o~P=m(Kade%gRuXlMZ{~+WS zp(};_3M0S;F1I?jko-BNO8!odkY5T)p>j6t6mf>3EkZ|)DTQ~m_$}m^i$;j+`C1%x zqx3F_7ZnxbAuH31N_PX(HDd?yT&2$t&`Nf4tk@5mx>0-rBCeN6u0IL}PlLXhs<1{6 z-;0eB<6nj5H#xQVJ(4y`cLJ2s+X>GXy?HwH40@HJ=q-BS%#8DJDEe=j6ox@lq-dDx z6~;!Ad5`LojE9N-KGl7ON%Rk>KFjb?{X?qHHGYUjiaw%xtuY73q7zgPxasa|5z`0> zx#?YwB8?-f+=q$d;z*18BSMNavfk>xiI5U40;JnbdxauHBX9fM6@-l8NXk8v5U)m? zq7CkUCZtNEkH&LVGv~>Xe?s>$Sq+JE%X7_ADPSvi0*j9H7iOtrw z0NL(djAPLm9J#|CAmlR~+3o%jA!l-Ak2^s+evRUN#C;ucYPfHM?%$H>dD?Xl*w4z| zBG%VRZvt^r(GCjI_%R85ovO^3MD?8%u3?l={Tmc*1uHSA?@Nqt1M^VVlG|f$M1`o- zm7KawQLEWl57f0Wr0yJo+Kwq0tzNppu6e2I+7|G72`eXYecNN3yr-k0RSIfLnLPH%?OBii*kfQ`9v# zjR!R_`Hd6c+K%6VCnl4d&f2bRE#*iG{>emsq`+=@JWwMwh8Z$K6S7tZb53N}9z~v>n4} zL&%dUO?xAR$}bIxZ;;e za@)FqQde>+ome;(bN);WTWy9Kg#1P&l(ii%K}JlA8DhS7iwPvLRxwE=*22nPgS^&s z$=Cq2anq9@$Z0~Ving=o*juvI}(GPiDc)+H>4eY zLzvs?vh2K=XGdbvj>KT+6teUF9hCucgT2C!cXDAJcllud@kM0_=G}H zE*Z)tcYbhX`N4VegBz0z&KAn)lN+k@gDD;nj3H7^u~p=faQfsty-MiW1gks`6>Ej`ri?{*O9VZh)VEwF;H^ZD|T=wdo;2!5GhMlBeL-l zhLMYXg9elKfp;v9{KE^ZfV7%)GC{A@*K~Ds)ZkrubK!jXVtrREU9+Gj8tdpuha-&3 zNo1s4do-2I6Jd;A>h^b_NqR3l9O?9T(;EYL_#8>1iaCl#qj6MmBBA%kWfjxPrM8&5 zN4x$t*Rtx@(&@b$zPQV%F_s#S8Qpuk^wguwRiu?%U!qqVRhZbCHi4FN?C!s7h^aJQ zX7BndgH%iZllG=-8jL%Q`Xb~su)O)!xu0-6jojH{$ zJN51sGC6*y9^+!%2vOiRHj9wX$w3Q8w zK}<6A2^VQkcXA2S>}w03g)c7v&dw?Kr4p>B8?RE-#L}^NO?|v0O>cN4Ynu6ZH=Eiz zx}&j3O+(V;Z&EO`H;yv|J_q67alnUU+xm#v-j!H>9q$Q8 z61+M7O^6WWPRwV??sy{Qv$W_oruevoLgQvBG(vjf_yPqX_qHY0MG{G7_QjL@q{Gb4 zp0=(e;z}Y=mgMiNFcYm(o{|yhkS=`y^ClcAQZcbk!p2Eu~@x+{DDiM!$ai@ecNJTnfcEo$qy)o7Uo{t~$qB1+9 zJ&{y>Zj z*fPzB1NGGKqe*Deh*`ine7FhcdEZgW`TIrY z`nE)r;z&vypKC?htU8iNJxd=9S*KBion**LSE^f#Ryu?5VLNZGfD+6T*x3SL)X>mg zAizQa770)*z+wT;VjXRX#6}aX;zOed-QoS%g4u=d1Op>vbX;nh3(|F#Do8J~o+sIj z>3F&{SWv!%?a>2vQC`T{%BOpndajmFAH%j5 z2kazX*V$OCmJ89n)_0tCC7qQs^_(uBUcp-B^SgX{rS%$#tu zspIVu^}H{iKAzEMI?kfA3Ha`^5Pc#Wo>qvCWtXoIeKHFbr02f7v$w4?^|aDXr8~q^ z^9d5u*~z2O`x&4#a2AMbVgUZGD(+c$Cm7tUTLk>H1XI(2W9=-{Bp}6iFh5pbe^wIM3 zIB&O#&6*TIEmxjFwNTzjqL4q&bJgk*sCFRv~Z;s+n%o8|r9?|`5jh<3F z#-|_jD&&*CzN13BX(~%W_wic(;ftUb`i?Xv?WlFGy2TxYK_8ydJLg4O$~*7)UdQSA zZ4$Oa$~*5u-v@f3?^mCY^3Gf5KLNc0{|-xnXLew;&tYK)hP0GC)8KKP73r&*JQTJ zkvF;(T8S3a`MgN#Zsqp9)_wSg5I>b&l72|u0g4DRdlj$(Z);rZu-_o%)$atHA?3dZ zI>|fxaj%qDo604!-9brr-g!D8>CRi4Ka+Ilt-R+X-FZvxMbLfHH#>M!$~$jS4okZ8 z)^3*5?G{A6S{M0u#ybsk-$-$GFSk?R`reU9B~$6nPOP;|^ZXU7&Blg{n@y8pksj&7 zYA=#7Q@v&f)|FVwnPxa{cJ;*D+j`6}7QaceExmzt#C!XCBB@B&zi7eY`GtkB;EhF1 zEWg?|V)KzoY-F8@w%&*tPWSe1go+I_A(_e(m1|pTrN|e2v^q4+m86u;$XAcT(`V2 zNG$`ayWW(2Rd12{g<&nd{2vRppP1+!c!%O&#J;`{xa4mC33Ykeo1+7+Mf zt1tYW5_uo@V-zLhW;b5QN1FJ~j($MEr0tD!g>FkY^%`7hPbOtk{C5NRP*D2=Y>sFv zAol>Z%shX+xmu3m6+LaqB!)1TkeQe(f0w}NE&5RnDe7P~5%Rj1`LVUcmIW}C5U^X- zu)T^T`j|h4J)*yEdBdDkTbIOeTg~5|j^g(#qG9GIth+7Q&HUkwG1wCj`z+2`kBu$9 zy~smM@Dh=pHd2tazMd5G^X&Lh^>@XArf4VWr#T0qI3E}ONVlA2-C-C}m{1kdO=zh4 z6&(;mGi|-m4)_pHk$F&PkonOK%#Vprw+29qw5PkE*B0wSiX|G2b;eb_t-U=FS+6h} z`Kpeb6*yh}#Uxs1(y1M%IbPJhjb3M<;#@(?%Yb0wI30hu<80}x{hj(96(4x^qONO- zHV+lMzS;-Ub&|>q0j#4_zaAWXq7Ya9Z+8W_>~=|*#WAesB*f#2ymA3BJZP}|A9MwP zG3+lnV8;bucs|bar1Y@@Q^14vZqt9|cwsUMPps(okto2CA8DR-zSz-x!3 z{#HpReae|r|5nf_C*&U$wU6$T4XXD}1y}g0>ICW0sa;>~x3@}t=go==sjT2v9r~;! zAS9$i%3rBw`LFP=qhfDgt*OZx9Y?b<_5z|(j@jL*YU0?lfk@`KO2W`4kb+-S6Ltours2wj9=>fI9INN_3Ogv5G zbBN^BK1}_-kyGA@KMS35o4&eVF-dOao$^lnW$04;a=KdkbKjq-{~C0utChaG|Dk?= zieA^EB8P)De$+VF4xYVzb)RHd-g0pIt8fMX;Lx}Br9LoFLIPMvrKjL9IQI6{{wCxT zD#}k~K8bdsf_;25bdsJY`U zK2hJABk`KjQ{*Y5=ubUWNI2)OQ~&f)^e?9yH7H({7=c=TOO!1bMZbqGj3~eU6Z&;h z- +#include +#include "const.h" +#include "states.h" + +// States of a Turing Machine that checks whether a number DOESN'T divide another number +// NTS: Check that the first number is smaller? Actually not necessary: see state 2. + +/* +Initially, I defined a triplet, which was what the different states, which are functions returned. + +typedef struct { + + int state; // Finite list of states: initial (0), state 1, state 2, state 3, ..., state 7. + int symbol; // Finite list of symbols: 0,1,2,3,4,5,6,7,8,9 + int movement; // Left = -1, Right =1; + +} ssm; + +But I thought that modifying pointers was easier and more elegant. +*/ + +void state0(int *symbol, int *state, int *movement); +void state1(int *symbol, int *state, int *movement); +void state2(int *symbol, int *state, int *movement); +void state3(int *symbol, int *state, int *movement); +void state4(int *symbol, int *state, int *movement); +void state5(int *symbol, int *state, int *movement); +void state6(int *symbol, int *state, int *movement); +void state7(int *symbol, int *state, int *movement); +void state8(int *symbol, int *state, int *movement); +void state9(int *symbol, int *state, int *movement); +void state10(int *symbol, int *state, int *movement); + +// This function is the delta of which Kozen speaks of in p.210 &ss in Automata and Computability. +void carry_out_step(int *symbol, int *state, int *movement){ // I could make this a bigger if/else tree, but I don't want to. +// Initially, I thought to use https://stackoverflow.com/questions/840501/how-do-function-pointers-in-c-work, but this proved unnecessary. + + if(*state==0){ + state0(symbol,state, movement); + } + else if(*state==1){ + // Nótese que los else ifs son necesarios, porque después de state0, *state es =1, pero queremos que se de cuenta en la siguiente vuelta + state1(symbol,state, movement); + } + else if(*state==2){ + state2(symbol,state, movement); + } + else if(*state==3){ + state3(symbol,state, movement); + } + else if(*state==4){ + state4(symbol,state, movement); + } + else if(*state==5){ + state5(symbol,state, movement); + } + else if(*state==6){ + state6(symbol,state, movement); + } + else if(*state==7){ + state7(symbol,state, movement); + } + + else if(*state==8){ + state8(symbol,state, movement); + } + + else if(*state==9){ + state9(symbol,state, movement); + } + else if(*state==10){ + state10(symbol,state, movement); + } +} + +void state0(int *symbol, int *state, int *movement){ + if(*symbol ==0){ + *symbol=0; // This is the left endmarker. It isn't changed. This line could be ommited. + *movement= 1; // Move to the right (0 would be to the left). + *state=1; // Change to state 1. + } + + else{ + *state = REJECT; // This is defined as a constant in const.h + // The program ends, because it has unspecified behaviour + *movement= 0; + } + +} + +void state1(int *symbol, int *state, int *movement){ + if(*symbol ==1){ + *symbol=3; // Another symbol. + *movement= 1; // Move to the right (-1 would be to the left). + *state=2; // Change to state 2. + } + + else{ + *state = REJECT; // This is defined as a constant in const.h + // The program ends, because it has unspecified behaviour + *movement= 0; + } +} + +void state2(int *symbol, int *state, int *movement){ + + if(*symbol ==2){ + *symbol=4; // You get the idea. + *movement= -1; + *state=3; + } + + else if(*symbol ==9){ + *symbol=9; + *movement= -1; + *state=8; + } + + else{ + *symbol=*symbol; // redundant + *movement= 1; + *state=2; + } +} + +void state3(int *symbol, int *state, int *movement){ + + if(*symbol ==0){ + *symbol=0; + *movement= 1; + *state=4; + } + + else { + *symbol=*symbol; + *movement = -1; + *state= 3; + } +} + +void state4(int *symbol, int *state, int *movement){ + + if(*symbol ==3){ + *symbol=3; + *movement= 1; + *state=4; + } + + else if(*symbol ==1){ + *symbol=1; + *movement= -1; + *state=5; + } + + else if(*symbol ==8){ + *symbol=8; + *movement= 1; + *state=6; + } + + else{ + *state = REJECT; // This is defined as a constant in const.h + // The program ends, because it has unspecified behaviour + *movement= 0; + } +} + +void state5(int *symbol, int *state, int *movement){ +// This state comes to be because at the end of option symbol ==1 in state 4, I want to stay on the same place, but have to move. + *symbol =*symbol; + *movement = 1; + *state = 1; +} + +void state6(int *symbol, int *state, int *movement){ + + if(*symbol ==2){ + *symbol=4; + *movement=-1; + *state=7; + } + + else if(*symbol ==9){ + *symbol=9; + *movement=0; // Only because it rejects + *state = REJECT; + fprintf(stdout,"\nIt rejects because some number DOES divides our candidate prime\n");// The number does divide. + } + + else{ + *symbol = *symbol; + *movement =1; + *state=6; + } + +} + +void state7(int *symbol, int *state, int *movement){ + + if(*symbol ==3){ + *symbol=1; + *movement=-1; + *state=7; + } + + else if(*symbol ==0){ + *symbol=0; + *movement= 1; + *state = 1; + } + + else{ + *symbol = *symbol; + *movement =-1; + *state=7; + } + +} + +void state8(int *symbol, int *state, int *movement){ + + if(*symbol ==4){ + *symbol=2; + *movement=-1; + *state=8; + } + + else if(*symbol ==3){ + *symbol=1; + *movement= -1; + *state = 8; + } + + else if(*symbol ==0){ + *symbol=0; + *movement= 1; + *state = 9; + } + + + else{ + *symbol = *symbol; + *movement =-1; + *state=8; + } + +} + +void state9(int *symbol, int *state, int *movement){ + + if(*symbol ==8){ + *symbol=1; + *movement=1; + *state=9; + } + + else if(*symbol ==5){ + *symbol=8; + *movement= 1; + *state = 10; + } + + else if(*symbol ==2){ + *symbol=2; + *movement= 0; // Only because it accepts + *state = ACCEPT; + } + + else if(*symbol ==4){ + *symbol=4; + *movement= 0; // Only because it accepts + *state = ACCEPT; + } + + else{ + *symbol = *symbol; + *movement =1; + *state=9; + } + +} + +void state10(int *symbol, int *state, int *movement){ + + if(*symbol ==0){ + *symbol=0; + *movement=1; + *state=1; + } + + else { + *symbol = *symbol; + *movement =-1; + *state=10; + } + +} diff --git a/is_prime 0.1/states.h b/is_prime 0.1/states.h new file mode 100644 index 0000000..625b918 --- /dev/null +++ b/is_prime 0.1/states.h @@ -0,0 +1,6 @@ +#ifndef __STATES_H_ +#define __STATES_H_ + +void carry_out_step(int *symbol, int *state, int *movement); // This is the only function I'm going to need to use outside of states.c + +#endif diff --git a/is_prime 0.1/states.o b/is_prime 0.1/states.o new file mode 100644 index 0000000000000000000000000000000000000000..1e33186fbb83ecb042c3b8d3801d7260980bfe15 GIT binary patch literal 2576 zcmbtV&ubG=5T0$UHfgI>R0I`+TB)E*VzpRBiI%mCh)6NiTi7-mTQrGm-eUa?7KIoK zf|nk>dG)9sv?^M}gFW=ne?YLIZvtE@fA*%~bvAYIZ7b*Os++AjPg)^XUnD^x6!F zrkXW<(3-ls&8{_)w_SblbRCY*DAsdAK2kU9;Cj-Uqxq!uIgVDCw7$mUZ>(<`pG_mD zX3e3Tzgf$TWj{Y7C%ZcNm`16FBzxQ*TYF1BsaZ3&F;#4G<05|C)GTuD%WTJ~pT-!J?2d;*}ir{_SjBRk-igrD4J?ln`pyL`Dy zUr%?Lsl8_R&HzvDNu|3|U8!z5jgE_m4+0Sn&r&Kn$Yy8w2(+DNoEK ztYQ0xx)Bd=MKZU&i#;%&hrDt=Q^($-ik4G{*x*`<$>BSGb@*h!WjUwBD`Q6 z(lgIJ@0h|J5n$#W;ea_%setK~gT-LESak6sGD~IQn!P8pyJZz3f!y4oT)}gS?yori zIZ2{Fy;}GS%^*gmzsq11aP^$Vjo9e+$YA4^QCCWvN($9J#nCs!21VYX@bJyl{97^= zS#cLv0K0HOn*ZvbR+`~(I{rQ$OmR6xmpi>zii0@MD8YLEs+{1c@(;O#AKs86Xg|&G zSN>u8hywO&q8fGnHQa}jsPj9e3PPU~ogevXe~qt3ES!6UU`Y8pv|twAKdr-iC;B4= ao>C6 +#include +#include "turing.h" +#include "const.h" + +// Turing print defines functions that take a list, take a position in that list and print the list with a pointer to that position. +// It prints this vertically + +int length(int *List){ + int i =0; + while (List[i]<=9){ // Por cómo construimos nuestras listas. + i=i+1; + } + fprintf(stdout, "%d",i); + return i; +} + +void print_lista(int*L, int length, int position){ + if(L==NULL || length <= position){ + fprintf(stdout, "\nError en prettyprint"); + } + else{ + int i=0; + char tabs[]="\t\t\t\t\t\t\t\0"; + for(i=0; i