Donar $20 Donar $50 Donar $100 Donar mensualmente
 


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
[AYUDA] Sintaxis y Semantica
Autor Mensaje
Fechhe Sin conexión
Empleado de Fotocopiadora
Live your dream and share your...
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 42
Agradecimientos dados: 1
Agradecimientos: 0 en 0 posts
Registro en: Jun 2014
Facebook Twitter
Mensaje: #1
[AYUDA] Sintaxis y Semantica Ejercicios Sintaxis y Semántica de los Lenguajes
Hola, como están?
Estoy terminando un TP de sintaxis que quede adeudando indefinidamente y llego la hora de entregarlo.

Quería ver si alguien me podía dar una pauta de por donde estoy metiendo la pata, si bien compila, tengo errores de logica y este no funciona como debiese.

El enunciado pide que :
Definimos una palabra como una sucesión no vacía de letras. Número como una sucesión no vacía de dígitos. Rechazo es toda cadena que contenga mezcla de letras y números. Cualquier carácter que no sea ni una letra ni un número es un separador.Se pide mostrar que se reconoce y contar los totales.
Ejemplo de salida:
Reconocida la palabra: aabcZe
Reconocido el número: 568
Rechazada la cadena: 23dhs4s
Rechazada la cadena: am56
Cantidad total de palabras: 1
Cantidad total de números: 1
Cantidad total de de rechazos: 2

--------------------------------------------------------------------------------------------
Mi problema definitivamente esta en mostrar la palabra o aceptarla pero no pedo entender que esta pasando.
--------------------------------------------------------------------------------------------


#include<stdio.h>
#include<ctype.h>

#define EXIT_SUCCESS 0
#define INITIAL_STATE 0
#define ERROR_STATE 6
enum {COLUMN1,COLUMN2,COLUMN3,COLUMN4};

//Headers
int isEndState(int state);
int isOther(char character);
unsigned int getColumn(char character);
int i;

unsigned int transitionTable[7][4] = {
{1, 2, 6, 3},
{1, 6, 6, 4},
{6, 2, 6, 5},
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0},
{6, 6, 6, 3}
};

char buffer[10];
int cont;

int main(){
//Declarations
char character;
int acceptednum = 0, rejected = 0, acceptedchar = 0;
unsigned int state, column;

FILE* file = fopen("text.txt","r");

//Statements
character = fgetc(file);
buffer[0]=character;
cont++;
state = INITIAL_STATE;
while(!feof(file)){
state = INITIAL_STATE; //blanqueo de estado
cont=0;
while(!isEndState(state) && (state != ERROR_STATE)){
column = getColumn(character);//tomo columna
state = transitionTable[state][column];//tomo estado
if (column != COLUMN3){
character = fgetc(file);
buffer[cont]=character;
cont++;
}
}

if(isEndState(state)){ // pueden ser 4 y 3 y 5
if(state == 4){ // 4 son las aceptadas numericas
printf("\nAceptada numerica");
acceptednum++;
buffer[cont]='\0';
for(i=0;i==cont;i++){
printf("%d\n",buffer[cont]);
}
}
else if(state == 5){ // 5 son las aceptadas char
printf("\nAceptada caracter");
acceptedchar++;
buffer[cont]='\0';
for(i=0;i==cont;i++){
printf("%d\n",buffer[cont]);
}
}
else // solo pueden ser 3 y son rechazadas
{
rejected++;
}
}
else if (state == ERROR_STATE){ //en estado 6 espero un c.especial y blanqueo el estado
while((!isOther(character)) && (column != COLUMN3) && (!isEndState(character) ) ){
character = fgetc(file);
buffer[cont]=character;
cont++;
}
printf("\nRechazada"); //rechazo la cadena en error sin pasar por el estado final
buffer[cont]='\0';
for(i=0;i==cont;i++){
printf("%d\n",buffer[cont]);
}
rejected++;
}
}

printf("\nEl total de cadenas numericas aceptadas es: %d", acceptednum);
printf("\nEl total de cadenas de caracteres aceptadas es: %d", acceptedchar);
printf("\nEl total de cadenas rechazadas es: %d", rejected);

fclose(file);
scanf("%");
return EXIT_SUCCESS;
}


//Functions

int isEndState(int state){
return state == 3 || state == 4 || state == 5;
}
int isOther(char character){ //cualquiera que no sea letra ni numero
return !(isdigit(character) || isalpha(character));
}


unsigned int getColumn(char character){
if(isdigit(character))
return COLUMN1; //numero
else if(isalpha(character))
return COLUMN2;//letra
else if(character = EOF)
return COLUMN3;//eof
else
return COLUMN4;//c.especial
}




Desde ya, Gracias.

Programar hoy es una carrera entre ingenieros de software que se esfuerzan de construir programas a prueba de idiotas más grandes y mejores,
y el Universo que trata de producir a idiotas más grandes y mejores. Hasta ahora, el Universo gana.
(Este mensaje fue modificado por última vez en: 23-02-2016 23:13 por Fechhe.)
23-02-2016 23:12
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Fechhe Sin conexión
Empleado de Fotocopiadora
Live your dream and share your...
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 42
Agradecimientos dados: 1
Agradecimientos: 0 en 0 posts
Registro en: Jun 2014
Facebook Twitter
Mensaje: #2
RE: [AYUDA] Sintaxis y Semantica
Tarde un rato pero lo logre.
Lo solucione, si a alguien le interesa dejo el código.

Ya pueden cerrar el th.

Gracias de todos modos.


#include<stdio.h>
#include<ctype.h>

#define EXIT_SUCCESS 0
#define INITIAL_STATE 0
#define ERROR_STATE 6
enum {COLUMN1,COLUMN2,COLUMN3,COLUMN4};

//Headers
int isEndState(int state);
int isOther(char character);
unsigned int getColumn(char character);
int i;
char *p;

unsigned int transitionTable[7][4] = {
{1, 2, 6, 3},
{1, 3, 6, 4},
{3, 2, 6, 5},
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0},
{6, 6, 6, 3}
};

char buffer[10];
int cont=0;

int main(){
//Declarations
char character;
int acceptednum = 0, rejected = 0, acceptedchar = 0;
unsigned int state, viejostate, column;

FILE* file = fopen("text.txt","r");

//Statements

//buffer[0]=character;
//cont++;
state = INITIAL_STATE;
while(!feof(file)){
state = INITIAL_STATE; //blanqueo de estado
character = fgetc(file);
//cont=0;
while((!isEndState(state)) && (state != ERROR_STATE)){
column = getColumn(character);//tomo columna
viejostate=state;
state = transitionTable[state][column];//tomo estado
if ((column == COLUMN2)||(column == COLUMN1)){
buffer[cont]=character;
cont++;
character = fgetc(file);
}
}


if(isEndState(state)){ // pueden ser 4 y 3 y 5
if(state == 4){ // 4 son las aceptadas numericas
printf("\nAceptada numerica\n");
acceptednum++;
p = buffer;
while (*p != '\0'){
printf( "%c", *p ); /* Mostramos la letra actual */
p++;
}
cont=0;
buffer[0] = '\0';
printf( "\n", *p );
}
else if(state == 5){ // 5 son las aceptadas char
printf("\nAceptada caracter\n");
acceptedchar++;
buffer[cont]='\0';
p = buffer;
while (*p != '\0'){
printf( "%c", *p ); /* Mostramos la letra actual */
p++;
}
cont=0;
buffer[0] = '\0';
printf( "\n", *p );
}
else // solo pueden ser 3 y son rechazadas
{
printf("Rechazada\n"); //rechazo la cadena en error sin pasar por el estado final
buffer[cont]='\0';
p = buffer;
while (*p != '\0'){
printf( "%c", *p ); /* Mostramos la letra actual */
p++;
}
cont=0;
buffer[0] = '\0';
printf( "\n", *p );
rejected++;
}
}
//else if (state == ERROR_STATE){ //ESTA EN EOF
//termino
//}

}

printf("El total de cadenas numericas aceptadas es: %d", acceptednum);
printf("\n El total de cadenas de caracteres aceptadas es: %d", acceptedchar);
printf("\n El total de cadenas rechazadas es: %d", rejected);

fclose(file);
scanf("%");
return EXIT_SUCCESS;
}


//Functions

int isEndState(int state){
return state == 3 || state == 4 || state == 5;
}
int isOther(char character){ //cualquiera que no sea letra ni numero
return !(isdigit(character) || isalpha(character));
}


unsigned int getColumn(char character){
if(isdigit(character))
return COLUMN1; //numero
else if(isalpha(character))
return COLUMN2;//letra
else if(character == EOF)
return COLUMN3;//eof
else
return COLUMN4;//c.especial
}



Programar hoy es una carrera entre ingenieros de software que se esfuerzan de construir programas a prueba de idiotas más grandes y mejores,
y el Universo que trata de producir a idiotas más grandes y mejores. Hasta ahora, el Universo gana.
24-02-2016 01:38
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.