-
Notifications
You must be signed in to change notification settings - Fork 0
/
AA prova acm.c
135 lines (90 loc) · 3.73 KB
/
AA prova acm.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
//IDEIA PRINCIPAL VERIFICAR CADA STRING E CLASSIFICAR ELA EM CADA ESTADO
// grafo possui um padrão:
// padrão 1: estado atual (que é o numero dentro do vertice ou do circulo)
//padrão 2 : elemento a ser reconhecido(caractere sobre a aresta ou seta )
// padrõ 3: estado posterior (numero dentro do vertice ou círculo)
// o estado (0)é sempre o inicial
//o final é marcado com dois circulos
//um reconhecimento só ocorre se o estado final é alcançado para uma dada entrada de caracteres
// o (épsilon) corresponde a espaço em branco, tubulação
//any é usado para qualquer termo LETRA ou DIGITO
// letter apenas para LETRAS
// O DESAFIO É: criar um programa que LEIA um arquivo BINARIO
// carregar em vetor dinamico
//ler string até que a string (. (ponto)) seja informada
// Os códigos são: 𝜀=0, letter=1, number=2, any=9, caractere específico=código ASCII
typedef struct {
int estadoAtual, estadoFuturo, caractereAReconhecer;
char estadoFinal; // 1 == Sim, 0 == Não
} Transicao;
//funções importantes
Transicao *carregaAutomato(char *nomeArqBin, long *numEstados){ // objetivo carregar os elementos do arquivo binario em vetor dinamico de estretura Transicao e retornar o ponteiro
FILE *arqGrafos = fopen("nomeArqBin", "a+b");
Transicao *grafos=NULL;
int tam;
int numEstados = 0
if(arqGrafos == NULL) { printf("ops erro\n"); exit(1); }
if(ftell(arqGrafos)>0)
{
rewind(arqGrafos);// vai para o inicio do arquivo
while(!feof(arqGrafos))
{
grafos = (Transicao*) realloc(grafos, ((*tam)+1)*sizeof(Transicao));
fread(&grafos[*tam], sizeof(Transicao), 1, arqGrafos); // fread ler o conteudo do arquivo e tras para memoria ram
(*tam)++;
}
}
fclose(arqGrafos);
return grafos;
}
void gravaStatus(FILE*arqSainda, char *entrada, char status){
FILE *arqGrafos = fopen("nomeArq.txt", "wb"); // abrir pra leitura podendo alterar (binário)
if(arqGrafos == NULL) { printf("Erro\n"); exit(1); }
fwrite(entrada, sizeof(Transicao), status, arqGrafos);
fclose(arqGrafos);
if(status == -1){
char entrada[30];
printf("erro de conhecimento");
}
if(status == 1){
printf("reconhecida");
}
if (status == 0){
printf("nao reconhecida");
}
}
long *localizaEstado(Transicao *automato, long numEstados, int estadoAtual, int *numEstadosAtuias, char qual){ // retorna um vetor dinamico automato de tamanho numEstadosAtuais, onde o parametro estadoAtual é igual ao estado Atural
//se qual = 0 ou estado futuro (se qual igual 1) doautomato
}
int avaliTransicao(Transicao*automato,long numEstados, int estadoAtual){
// localiza estadoAtual no vetor dinamico atomato atraves da função localiza estado
//e verifica se o caractereceAtual satifaz o caractereAReconhecer.
//se satisfazer a função retorna o estadoFuturo e se nao satisfazer retorna -1(erro)
localizaestado()
}
void reconhece(FILE*arqSaida, Transicao *automato, long numEstados, char *entrada){
// se a funcao avaliaTransicao retornar -1 chama a função gravaStatus com o status igual a -1
// caso a entrada seja totalmente processada chama a funcao gravaStatus com o status igual a 0
if(){
}
}
//fread
//fwrite
// a main deve chamar a funçao carregaAutomato
//criar o arquivo texto de saida e entrar com um laço para ler strings ate ler o (.)
int main(){
int numEstados = 0;
int i;
Transicao *grafos = carregaAutomato("nomeArqBin", &numEstados);
// criar um laço que ler strings até o "."
for (i = 0; /*string*/ != '.'; i++){
// o laco deve chamar a funcao reconhece para cada nova string exceto '.'
}
// finalizando fechando arquivos abertos e liberando memoria alocada
free(grafos);
return 0;
}