5 signed char losDigitos
[ BUFSIZ
];
6 size_t laCantidadDeDigitos
;
9 Entero
Entero_CrearDesdeCadena(char *unaCadenaConUnNumero
);
10 Entero
Entero_Sumar(Entero unEntero
, Entero otroEntero
);
11 Entero
Entero_Read(FILE *in
);
12 int Entero_Write(const Entero unEntero
, FILE *out
);
13 int Entero_Scan(FILE *in
, Entero
*unEntero
);
14 void Entero_Print(Entero unEntero
, FILE *out
);
15 int Entero_Comparar(Entero unEntero
, Entero otroEntero
);
17 static void strEspejo(char *s
, int len
);
18 static int EsEntero(const char *unaCadena
);
19 static int ColumnaAutomata(const char c
);
22 Entero
Entero_CrearDesdeCadena(char *unaCadenaConUnNumero
)
25 char *s
= unaCadenaConUnNumero
;
26 int CantDig
= strlen(unaCadenaConUnNumero
);
29 * Le saco el signo más y los puntos, si es que los tiene.
32 if ( s
[CantDig
- 4] == '.' ) {
35 for(i
= 0; s
[i
] != '\0' ; i
++)
44 strcpy(temp
.losDigitos
, s
);
45 temp
.laCantidadDeDigitos
= CantDig
;
50 Entero
Entero_Sumar(Entero unEntero
, Entero otroEntero
)
56 static void strEspejo(char *s
, int len
)
61 for(i
=0; i
<len
; i
++, len
--){
69 int Entero_Comparar(Entero unEntero
, Entero otroEntero
)
71 return strcmp(unEntero
.losDigitos
, otroEntero
.losDigitos
);
75 Entero
Entero_Read(FILE *in
)
79 fread(&temp
, sizeof temp
, 1, in
);
85 int Entero_Write(const Entero unEntero
, FILE *out
)
87 fwrite(&unEntero
, sizeof unEntero
, 1, out
);
92 void Entero_Print(Entero unEntero
, FILE *out
)
94 if(EsEntero(unEntero
.losDigitos
))
95 fprintf(out
,"%s;",unEntero
.losDigitos
);
99 int Entero_Scan(FILE *in
, Entero
*unEntero
)
104 while( ((c
= getc(in
)) != ';') && (c
!= '\n') && (c
!= EOF
) )
108 if( (c
== ';') && EsEntero(s
) )
109 *unEntero
= Entero_CrearDesdeCadena(s
);
111 *unEntero
= Entero_CrearDesdeCadena("");
117 * | 0 1..9 +,- . default
118 * --|------------------------
129 * 10+| -1 -1 -1 -1 -1
131 * -1 es estado de rechazo directo.
134 static int EsEntero(const char *unaCadena
)
136 static const int matrizAF
[11][5]={{10,2,1,-1,-1},
148 int i
, estadoactual
= 0;
150 for( i
=0 ; (unaCadena
[i
]!='\0') && (estadoactual
!=-1) ; i
++)
151 estadoactual
= matrizAF
[ estadoactual
][ ColumnaAutomata(unaCadena
[i
]) ];
153 if ( (estadoactual
==2) || (estadoactual
==3) ||
154 (estadoactual
==4) || (estadoactual
==5) ||
155 (estadoactual
==9) || (estadoactual
==10) ) return 1; //Es Reconocido
160 static int ColumnaAutomata(const char c
)
164 else if ( (c
>='1') && (c
<='9') )
166 else if ( (c
=='+') || (c
=='-') )
171 return 4; //Con esta opcion, la matriz siempre devuelve -1, NO ACEPTADA.