Implementación AUTOMATA FINITO DETERMINISTA (AFD) en Ruby
Publicado por Miguel (1 intervención) el 30/07/2017 22:23:31
Buenas tardes, estoy implementando un automata finito determinista en ruby, tenia uno perfectamente funcional en C y lo pase a ruby, pero no funciona correctamente, alguien sabe si cometi un error al momento de pasar codigo C a ruby
CODIGO EN C
CODIGO EN RUBY
CODIGO EN 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
#include<stdio.h>
#include<string.h>
#define fl(i,a,b) for(i=a; i<b; i++)
#define scan(a) scanf("%d", &a)
#define nline printf("\n")
#define MAX 1000
int states, symbols, symdir[20], final_states, mark[20], mat[20][20];
int main()
{
int i, j, k;
printf("Enter the number of states : ");
scan(states);
printf("Enter the number of symbols : ");
scan(symbols);
printf("Enter the symbols : ");
nline;
fl(i,0,symbols)
{
printf("Enter the symbol number %d : ", i);
scan(symdir[i]);
}
printf("Enter the number of final states : ");
scan(final_states);
printf("Enter the number of the states which are final : ");
nline;
fl(i,0,final_states)
{
int temp;
scan(temp);
mark[temp]=1;
}
printf("Define the relations for the states and symbols : ");
nline;
fl(i,0,states)
{
fl(j,0,symbols)
{
printf("Enter the relation for Q(%d) -> %d : ", i, symdir[j]);
scan(mat[i][symdir[j]]);
}
}
//--------------------------------------------------------//
int cases;
printf("Enter the number of strings to be tested : ");
scan(cases);
fl(k,0,cases)
{
printf("Enter the string to be tested : ");
char str1[MAX];
scanf("%s", &str1);
int curr=0;
int limit=strlen(str1);
fl(i,0,limit)
{
int ele=(int)(str1[i]-'0');
curr=mat[curr][ele];
}
printf("The entered string is ");
if(mark[curr]==1)
printf("Accepted");
else
printf("Rejected");
nline;
}
return 0;
}
CODIGO EN RUBY
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
class AFDs
def initialize
end
num_simbolos = 2
simbolos = [0,1]
finales = []
estados = []
puts 'Introduce el numero de estados: '
estados = gets.to_i
num_estados=gets.to_i
puts 'Introduce el numero de estados finales:'
estados_finales = gets.to_i
puts 'Introduce los estados finales:'
for i in (0..estados_finales-1)
temporal = gets.to_i
finales[temporal] = 1
i = i+1
end
puts 'Define la relacion entre los estados y los simbolos:'
for a in (0..num_estados-1)
for j in(0..num_simbolos-1)
puts "Introduce la relacion entre Q(#{a}) ->#{simbolos[j]}: "
estados[a][simbolos[j]] << gets.to_i
j = j+1
end
a = a+1
end
puts 'Ingrese el numero de cadenas que quiere probar: '
num_cadenas = gets.to_i
for b in (0..num_cadenas-1)
puts 'Introduzca la cadena a probar:'
str1 = []
str1 = gets
curr=0
limit = 0
limit = str1.length
#limit= str1.length
for c in(0..limit)
ele = str1[c].to_i - 0
curr = estados[curr][ele]
c=c+1
end
puts'La cadena ingresada es: '
if finales[curr] == 1
puts 'Aceptada'
else
puts'Rechazada'
end
b = b+1
end
end
Valora esta pregunta
0