From 48fb1a487ebdfbafce52273b37b844814fc90425 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nu=C3=B1o=20Sempere?= Date: Sat, 7 Apr 2018 17:43:24 +0200 Subject: [PATCH] Add files via upload --- find_nth_prime 1.1/main | Bin 0 -> 25584 bytes find_nth_prime 1.1/main.c | 62 +++++ find_nth_prime 1.1/states.c | 446 ++++++++++++++++++++++++++++++++++++ find_nth_prime 1.1/states.h | 6 + find_nth_prime 1.1/states.o | Bin 0 -> 2576 bytes find_nth_prime 1.1/turing.c | 150 ++++++++++++ find_nth_prime 1.1/turing.h | 8 + 7 files changed, 672 insertions(+) create mode 100644 find_nth_prime 1.1/main create mode 100644 find_nth_prime 1.1/main.c create mode 100644 find_nth_prime 1.1/states.c create mode 100644 find_nth_prime 1.1/states.h create mode 100644 find_nth_prime 1.1/states.o create mode 100644 find_nth_prime 1.1/turing.c create mode 100644 find_nth_prime 1.1/turing.h diff --git a/find_nth_prime 1.1/main b/find_nth_prime 1.1/main new file mode 100644 index 0000000000000000000000000000000000000000..888de12087e8a7a2a29649b000f32a33305ba743 GIT binary patch literal 25584 zcmeHvdwf*ong4rcCdo+#CV>P5yd4V2MKeh-V7vemAUd%@QA3Fr9EQmx8A)c+xgdB! z+JNh9#D>q}%Ex7acD1Xm7rM1wt6hY`Pq6jZ(p|etciC
K8f#Y=5k(fq#8dpUE? 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 literal 0 HcmV?d00001 diff --git a/find_nth_prime 1.1/main.c b/find_nth_prime 1.1/main.c new file mode 100644 index 0000000..3098c51 --- /dev/null +++ b/find_nth_prime 1.1/main.c @@ -0,0 +1,62 @@ +#include +#include +#include "turing.h" +#include "states.h" +#include "const.h" + +#define REJECT -1 +#define ACCEPT -2 + +// gcc -g main.c turing.c states.c turing.h states.h const.h -o main + +int main(){ + + int List[] = {0,10,10,10,10,5,1,8,2,9,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,42}; + // 0 == |- ; leftmost character. This TM is only infinite in one direction. + // 5: A character to detect whether the first divisor of n is m. + // 10 ==A: Every time it finds a prime, it changes an A to a B. When it runs out of As, it stops. + // 11 ==B. Wie gesagt. + // At every step, it checks whether a number n, represented by a number of 1s followed by an 8. + // For example: 10= 1111111118; 1x9, and 8x1. + // divides a number m, represented by a number of 2s followed by a 9. + // 12: Blanks. Out Turing Machine should have infinite of those to the right. + // m will be moved to the right, to make room for 7s between n and m. + // 7s: Between n and m, regulate the maximum size of the divisors of the current number. + + int longitud=length(List); + + fprintf(stdout,"\nEsta función acepta cuando ha encontrado el enésimo primo\n"); + + int state=0; + int previous_state=0; + + int position=0; + + int symbol= List[position]; + int previous_symbol=List[position]; + + int movement =0; // undefined. + int placeholder; + + fprintf(stdout,"\nIt starts at State=0, Symbol =0, Position =0, \n"); + print_lista(List, longitud, position); + fprintf(stdout, "\n"); + while(state!=ACCEPT && state!=REJECT){ + fscanf(stdin,"\n%d", &placeholder); + + previous_state= state; + previous_symbol=symbol; + + carry_out_step(&symbol,&state,&movement); + + List[position]=symbol; + position = position +movement; + symbol=List[position]; + + print_linea(); + print_variables(previous_state, state,position,previous_symbol, symbol, movement); + print_lista(List, longitud, position); + } + + return 1; +} diff --git a/find_nth_prime 1.1/states.c b/find_nth_prime 1.1/states.c new file mode 100644 index 0000000..7aa2830 --- /dev/null +++ b/find_nth_prime 1.1/states.c @@ -0,0 +1,446 @@ +#include +#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); +void state11(int *symbol, int *state, int *movement); +void state12(int *symbol, int *state, int *movement); +void state13(int *symbol, int *state, int *movement); +void state14(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. +// I thought to use pointers to functions, 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); + } + else if(*state==11){ + state11(symbol,state, movement); + } + else if(*state==12){ + state12(symbol,state, movement); + } + else if(*state==13){ + state13(symbol,state, movement); + } + else if(*state==14){ + state14(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 if(*symbol ==3){ // Note that we need an else because otherwise after it changes a 1 to a 3, symbol=3 and it goes back to state1. + // Note that we have inadvertently created a function to see whether m is(n't) k modulo n; we would only have to start with n-k 3s at the beginning + *symbol=3; + *movement= 1; + *state=1; + } + + else if(*symbol ==8){ // 8 = X + *symbol=8; + *movement= 1; + *state=4; + } + + else{ + *symbol=*symbol; + *movement= 1; + *state=1; + } +} + +void state2(int *symbol, int *state, int *movement){ + + if(*symbol ==2){ + *symbol=4; + *movement= -1; + *state=3; + } + + else if(*symbol ==9){ + *symbol=9; + *movement= -1; + *state=7; + } + + else{ + *symbol=*symbol; + *movement= 1; + *state=2; + } +} + +void state3(int *symbol, int *state, int *movement){ + + if(*symbol ==0){ + *symbol=0; + *movement= 1; + *state=1; + } + + else { + *symbol=*symbol; + *movement = -1; + *state= 3; + } +} + +void state4(int *symbol, int *state, int *movement){ + + if(*symbol ==2){ + *symbol=4; + *movement=-1; + *state=5; + } + + else if(*symbol ==9){ + *symbol=9; + *movement=-1; + *state = 6; + } + + else{ + *symbol = *symbol; + *movement =1; + *state=4; + } + +} + +void state5(int *symbol, int *state, int *movement){ + // Note that after state 4, the TM is in m-territory. + if(*symbol ==3){ + *symbol=1; + *movement=-1; + *state=5; + } + + else if(*symbol ==5){ + *symbol=6; + *movement= -1; + *state = 5; + } + + else if(*symbol ==0){ + *symbol=0; + *movement= 1; + *state = 1; + } + + else{ + *symbol = *symbol; + *movement =-1; + *state=5; + } + +} + +void state6(int *symbol, int *state, int *movement){ + if(*symbol ==5){ + *symbol=5; + *movement=-1; + *state=9; // It now goes to see whether this is the nth prime. + } + + else if(*symbol ==6){ + *symbol=5; + *movement= -1; + *state = 10; // The number isn't a prime. Move on to the next number. + fprintf(stdout, "\nIt rejects because m is bigger than n and n | m.\n"); + } + + else{ + *symbol = *symbol; + *movement =-1; + *state=6; + } + +} + +void state7(int *symbol, int *state, int *movement){ + if(*symbol ==4){ + *symbol=2; + *movement=-1; + *state=7; + } + + else if(*symbol ==3){ + *symbol=1; + *movement= -1; + *state = 7; + } + else if(*symbol ==6){ + *symbol=5; + *movement= -1; + *state = 7; + } + else if(*symbol ==0){ + *symbol=0; + *movement= 1; + *state = 8; + } + else{ + *symbol=*symbol; + *movement= -1; + *state = 7; + } + +} + +void state8(int *symbol, int *state, int *movement){ + if(*symbol ==8){ + *symbol=1; + *movement=1; + *state=8; + } + + else if(*symbol ==7){ + *symbol=8; + *movement= -1; + *state = 3; + } + else if(*symbol ==2){ + *symbol=2; + *movement= -1; + *state = 9; + } + else{ + *symbol=*symbol; + *movement= 1; + *state = 8; + } + +} + +void state9(int *symbol, int *state, int *movement){ + if(*symbol ==10){ + *symbol=11; + *movement=1; + *state=10; + } + else if(*symbol ==0){ + *symbol=0; + *movement= 0; + *state = ACCEPT; + fprintf(stdout,"\nIt accepts because it has found the nth prime\n"); + } + else{ + *symbol=*symbol; + *movement= -1; + *state = 9; + } + +} + +void state10(int *symbol, int *state, int *movement){ + if(*symbol ==1){ + *symbol=1; + *movement=1; + *state=11; + } + else if(*symbol ==3){ + *symbol=1; + *movement=1; + *state=11; + } + else{ + *symbol=*symbol; + *movement= 1; + *state = 10; + } + +} + +void state11(int *symbol, int *state, int *movement){ + if(*symbol ==1){ + *symbol=8; + *movement=1; + *state=12; + } + else if(*symbol ==3){ + *symbol=8; + *movement=1; + *state=12; + } + else if(*symbol ==8){ + *symbol=8; + *movement=1; + *state=12; + } + else{ + *symbol=*symbol; + *movement= 0; + *state = REJECT; + // But print warning message, because it should't be here. + fprintf(stdout,"\nWarning: Unpredicted behaviour in state 11"); + } + +} + +void state12(int *symbol, int *state, int *movement){ + if(*symbol ==1){ + *symbol=7; + *movement=1; + *state=12; + } + else if(*symbol ==3){ + *symbol=7; + *movement=1; + *state=12; + } + else if(*symbol ==8){ + *symbol=7; + *movement=1; + *state=12; + } + else if(*symbol ==2){ + *symbol=7; + *movement=1; + *state=13; + } + else if(*symbol ==4){ + *symbol=7; + *movement=1; + *state=13; + } + else if(*symbol ==7){ + *symbol=7; + *movement=1; + *state=12; + } + else{ + *symbol=*symbol; + *movement= 0; + *state = REJECT; + // But print warning message, because it should't be here. + fprintf(stdout,"\nWarning: Unpredicted behaviour in state 12"); + } + +} + +void state13(int *symbol, int *state, int *movement){ + if(*symbol ==4){ + *symbol=2; + *movement=1; + *state=13; + } + if(*symbol ==9){ + *symbol=2; + *movement=1; + *state=13; + } + else if(*symbol ==12){ + *symbol=2; + *movement=1; + *state=14; + } + else{ + *symbol=*symbol; + *movement= 1; + *state = 13; + } + +} + +void state14(int *symbol, int *state, int *movement){ + if(*symbol ==12){ + *symbol=9; + *movement=-1; + *state=3; + } + else{ + *symbol=*symbol; + *movement= 0; + *state = REJECT; + // But print warning message, because it should't be here. + fprintf(stdout,"\nWarning: Unpredicted behaviour in state 14"); + } + + +} diff --git a/find_nth_prime 1.1/states.h b/find_nth_prime 1.1/states.h new file mode 100644 index 0000000..625b918 --- /dev/null +++ b/find_nth_prime 1.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/find_nth_prime 1.1/states.o b/find_nth_prime 1.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]<42){ // Por cómo construimos nuestras listas. + i=i+1; + } + + /*Anecdóticamente, el siguiente código da error. + i=0; + while (List[i]<=9){ + i=i+1; + } + Y lo hace porque al asignar un trozo de memoria, + si la lista tiene, p.ej., longitud 6, + List[0] hasta Lista[5] son la lista de verdad, + pero Lista[6] <9, y la sigue contando. + */ + //fprintf(stdout, "\n%d\n",i+1); + 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; + for(i=0; i"); + + } + + else if(L[i]==8){ + fprintf(stdout, "X"); + } + else if(L[i]==10){ + fprintf(stdout, "A"); + } + else if(L[i]==11){ + fprintf(stdout, "B"); + } + else if(L[i]==12){ + fprintf(stdout, "_"); + } + + else if(L[i]==9){ + fprintf(stdout, "W"); + } + + else{ + fprintf(stdout, "%d",L[i]); + } + + if(i==position){ + fprintf(stdout, " } "); + } + else{ + fprintf(stdout, " "); + } + } + fprintf(stdout, "\n\n"); + + } + +} + +void print_lista2(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 Current state = %d\n",tabs,previous_state, state); + fprintf(stdout,"\n%sPrevious Symbol = %d -> Current Symbol = %d\n",tabs,previous_symbol, symbol); + fprintf(stdout,"\n%sPrevious Position = %d -> Current Position = %d \n",tabs,position-movement,position); + fprintf(stdout,"\n%sMovement =%d\n\n",tabs,movement); +} + +void print_variables2(int state, int position, int symbol, int movement){ + char tabs[]="\t\t\t\t\t\t\t\0"; + fprintf(stdout,"\n%sState =%d\n",tabs,state); + fprintf(stdout,"\n%sPosition =%d\n",tabs,position); + fprintf(stdout,"\n%sSymbol =%d\n",tabs,symbol); + fprintf(stdout,"\n%sMovement =%d\n\n",tabs,movement); +} + +void print_linea(){ + char tabs[]="\t\t\0"; + fprintf(stdout,"\n%s__________________________________________________________________________________________\n",tabs); +} diff --git a/find_nth_prime 1.1/turing.h b/find_nth_prime 1.1/turing.h new file mode 100644 index 0000000..09c3d2b --- /dev/null +++ b/find_nth_prime 1.1/turing.h @@ -0,0 +1,8 @@ +#ifndef __CONST_H_ +#define __CONST_H_ + +void print_lista(int*L, int length, int position); +void print_variables(int previous_state, int state, int position, int previous_symbol, int symbol, int movement); +int length(int *List); +void print_linea(); +#endif