Ir ao conteúdo
  • Cadastre-se

helis

Membro Júnior
  • Posts

    5
  • Cadastrado em

  • Última visita

Reputação

0
  1. Bem, apos varios testes percebi que uma das causas do problema foi um mero esquecimento de colocar uma saida caso o programa chegasse ao fim da excecução Ele estava tranvando pois nao sabia o que fazer, pra onde ir quando o laço chegava ao fim
  2. Nem eu entendi, deve ter sido o sono...
  3. você deve seguir os passos: escolher opcao 1. iniciar maquina de turing no submenu opcao1: inserir dados da fita e colocar algo como:aaaaaaaaaaaaaaaaaaaa voltado ao submenu opcao 2. inserir dados na tabela de acoes vamos trocar os 'as' pos x.... um modelo de entrada: estado atual: init conteudo atual: a novo conteudo : x direcao: d novo estado: halt q (pra sair) voltando a submenu opcao 6: executar ai vai travar na excucao
  4. Eu estava tentando criar algo , fiz aqui um codigo aqui mais ou menos mas to com um problema na funcao execute() esta travando; #include<stdlib.h> #include<string.h> #include<conio.h> #define SIZE 21 #define MAX 13 char fita[SIZE]; struct tabela{ char estadoatual [15]; char conteudoatual; char novoconteudo; char direcao; char novoestado[15]; }acoes [MAX]; int menu(void); int submenu_turing(void); void manpage(void), credits(void); void init_acoes(void), init_fita(void); void enter_acoes(void), enter_fita(); void display(void),display_fita(void); void load(void),save (void); void execute(void); int main (void) { init_fita(); init_acoes(); system ("color 3f"); int op, opsub; do { op = menu_principal(); switch (op) { case 1: system("cls"); do { opsub = submenu_turing(); //abre o submenu TURING switch (opsub) { case 1: enter_fita(); system("cls"); break; case 2: enter_acoes(); system("cls"); break; case 3: system("cls"); display(); system("PAUSE"); break; case 4: system("cls"); save(); break; case 5: system("cls"); load(); break; case 6: system("cls"); execute(); break; } } while (opsub != 7); break; case 2: system("CLS"); manpage(); case 3: system("CLS"); credits(); } } while(op!=4); system("cls"); system("PAUSE"); return 0; } /*inicializa a fita.*/ void init_fita(void){ register int t; for(t=0;t<SIZE;t++) fita[t]='\0'; /*um estado de comprimento zero significa vazio*/ } /*inicializa a tabela.*/ void init_acoes(void){ register int t; for(t=0;t<MAX;t++) *acoes[t].estadoatual='\0'; /*um estado de comprimento zero significa vazio*/ } /*Obtem uma selecao de menu.*/ /*Menu principal*/ int menu_principal (void) { int op; char *menu = "MENU PRINCIPAL\n\n\n" "[1] - Iniciar Maquina de turing\n" "[2] - Tutorial\n" "[3] - Creditos\n" "[4] - Sair\n"; do { printf("MAQUINA DE TURING\n"); printf("------------------------------------------------------------------------------\n\n\n\n"); puts (menu); scanf ("%d", &op); fflush(stdin); system("CLS"); } while (op > 4 || op < 1); return op; } /*fim menu principal*/ /*inicio do submenu turing*/ int submenu_turing (void) { int op; char *menu ="MENU INICIAR MAQUINA DE TURING\n\n" "[1] - Inserir os dados da fita\n" "[2] - Inserir dados da tabela de acoes\n" "[3] - Visualizar dados\n" "[4] - Salvar dados\n" "[5] - Carregar dados\n" "[6] - Executar\n" "[7] - VOLTAR\n"; do { printf("MAQUINA DE TURING\n"); printf("------------------------------------------------------------------------------\n\n\n\n"); puts (menu); scanf ("%d", &op); fflush(stdin); system("CLS"); } while (op > 7 || op < 1); return op; } /*fim do submenu*/ /*funcao explicativa da maquina de turing e os propositos do programa*/ void manpage(void){ printf("MAQUINA DE TURING\n"); printf("------------------------------------------------------------------------------\n\n\n\n"); printf("Em contrucao"); system("PAUSE"); } /*Mostra os creditos*/ void credits(void){ printf("MAQUINA DE TURING\n"); printf("------------------------------------------------------------------------------\n\n\n\n"); system("PAUSE"); } /*Pede os dados da fita*/ void enter_fita(void){ printf("MAQUINA DE TURING\n"); printf("------------------------------------------------------------------------------\n\n\n\n"); printf("Insira os dados da fita\n\n"); printf("Exemplo: \n\n Fita: 11111111111111\n\n\n\n"); if (*fita){ printf("Fita preenchida\n"); printf("\n\n"); display_fita(); system("PAUSE"); return; } if(strlen(fita)==SIZE){ printf("Fita cheia\n"); return; } if(fita==1){ return; } printf("Fita: "); gets(fita); system("PAUSE"); } /*Mostra os dados da fita*/ void display_fita(void){ register int i; printf("FITA(Visualizacao)\n"); printf("______________________________________________________________________________\n"); for(i=0;i<strlen(fita);i++){ printf(" %c ", fita[i]); } printf("\n______________________________________________________________________________\n"); printf("\n\n\n"); } /*Recebe as ações da maquina de turing*/ void enter_acoes(void){ register int i; char exit='\0'; char direcao; char conteudo; for(i=0;i<MAX;i++){ printf("MAQUINA DE TURING\n"); printf("------------------------------------------------------------------------------\n\n\n\n"); display_fita(); printf("Insira os dados da tabela de acoes ou funcoes de transicao\n\n"); if (*acoes[i].estadoatual){ display(); break; } if(i==MAX){ printf("Lista cheia\n"); return; } if(exit=='q'){ return; } printf("%d. Estado Atual(Exs: init, 1): ",i+1); gets(acoes[i].estadoatual); do{ printf("%d. Conteudo Atual(Tem que estar contido na fita): ",i+1); scanf("%c", &conteudo); fflush(stdin); acoes[i].conteudoatual=conteudo; }while(strchr(fita,conteudo)==NULL); printf("%d. Novo Conteudo(Exs:x, 0;) : ",i+1); scanf("%c", &acoes[i].novoconteudo); fflush(stdin); printf("%d. Direcao(d-direita|e-esquerda): ",i+1); scanf("%c", &direcao); acoes[i].direcao= toupper(direcao); fflush(stdin); printf("%d. Novo estado(Exs: halt, : ",i+1); gets(acoes[i].novoestado); printf("\nDigite q para sair. Ou enter para continuar"); exit=getchar(); system("CLS"); } } /*Mostra a tbaela de acoes*/ void display (void) { register int i; printf("MAQUINA DE TURING\n"); printf("------------------------------------------------------------------------------\n\n\n\n"); display_fita(); printf("Tabela de acoes ou funcoes de transicao(Visualizacao)\n\n"); printf("Estado\tConteudo\tconteudo\tDirecao\testado\n"); printf("Atual \tAtual \tnovo \t \tnovo \n"); for(i=0;i<MAX;i++){ if(*acoes[i].estadoatual) { printf("%s", acoes[i].estadoatual); printf("\t%c", acoes[i].conteudoatual); printf("\t%c", acoes[i].novoconteudo); printf("\t%c", acoes[i].direcao); printf("\t%s", acoes[i].novoestado); printf("\n"); } } } /*Execucoa da maquina de truring*/ void execute(void){ int i; char estadoinicial[15]; register int t; int auxcmp1,auxcmp2; char posinicab[2]; int pos; printf("MAQUINA DE TURING\n"); printf("------------------------------------------------------------------------------\n\n\n\n"); display_fita(); printf("Qual posicao inicial do cabecote:\n"); gets(posinicab); pos=atoi(posinicab); printf("Qual estado inicial da maquina:\n"); gets(estadoinicial); t=pos-1; while(t<=strlen(fita)){ for(i=0;i<MAX;i++){ if(*acoes[i].estadoatual){ if(i>0){ auxcmp2 = strcmp(acoes[i].estadoatual, acoes[i-1].estadoatual); if(auxcmp2==0 && acoes[1].conteudoatual==acoes[i-1].conteudoatual){ printf("MAQUINA DE TURING\n"); printf("------------------------------------------------------------------------------\n\n\n"); printf("ESTADO INICIAL: %s\n", estadoinicial); display_fita(); printf("Este simulador é para maquinas de turing determinista. Não é possivel a execução pois há mais de uma instacia para acao estado-conteudo"); system("PAUSE"); break; } } auxcmp1 = strcmp(acoes[i].estadoatual, estadoinicial); if((auxcmp1==0) && (fita[t]==acoes[i].conteudoatual)){ printf("MAQUINA DE TURING\n"); printf("------------------------------------------------------------------------------\n\n\n"); printf("ESTADO INICIAL: %s\n", estadoinicial); display(); strcpy(estadoinicial,acoes[i].estadoatual); fita[t]=acoes[i].novoconteudo; if(t==0 && acoes[i].direcao=='E'){ printf("Error: cabecote na posicao primeira da fita , nao é possivel ir para direita. Excecução parada. Reescreva sua maquina de turing\n"); execute(); }else if(t==strlen(fita) && acoes[i].direcao=='D'){ printf("Error: cabecote na posicao ultima da fita , nao é possivel ir para esquerda. Excecução parada. Reescreva sua maquina de turing\n"); execute(); } else { if(acoes[i].direcao=='D') t++; if(acoes[i].direcao=='E') t--; } printf("Aperte enter para ver a execucao passo"); getch(); system("CLS"); } } } } system("PAUSE"); } void save (void) { FILE *ff, *fa; register int i; if((fa=fopen("acoes.txt", "wb"))== NULL){ printf("O arquivo nao pode ser aberto.\n"); return; } for(i=0;i<MAX;i++) if (*acoes[i].estadoatual) if(fwrite(&acoes[i],sizeof(struct tabela),1,fa)!=1) printf("Erro de escrita no arquivo acoes.\n"); fclose(fa); if((ff=fopen("fita.txt", "w"))== NULL){ printf("O arquivo nao pode ser aberto.\n"); return; } if (*fita) fputs(fita,ff); fclose(fa); } void load(void){ printf("MAQUINA DE TURING\n"); printf("------------------------------------------------------------------------------\n\n\n"); puts("Não implementado"); system("PAUSE"); } #include<stdio.h>

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!