63 lines
1.9 KiB
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;
|
|
}
|