Turing_Machine/find_nth_prime 1.1/main.c

63 lines
1.9 KiB
C

#include <stdlib.h>
#include <stdio.h>
#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;
}