LeonelThurler / Puerta-Automatica

0 stars 0 forks source link

Codigo #2

Open DamRCorba opened 4 years ago

DamRCorba commented 4 years ago

Leonel. el codigo no cumple con los lineamientos del tp. Recorda que cada estado en tu diagrama tiene que estar representado por una funcion de estado.

Por otro lado, el tp pide seguir buenas practicas, cosa que un codigo escrito completamente sobre el main no pasa. Tenes que separar en archivos. Un lib.h donde tengas los prototipos, definiciones y tipos. Un archivo main.c donde solo este el main y los llamados a los funciones de estado por switch case o vector de punteros a funciones. Y un archivo funciones.c donde tengas a la resolucion de las funciones de estado.

Si bien tu codigo puede ser funcional, la idea del tp es resolver un problema con la metodologia planteada.

LeonelThurler commented 4 years ago

Hola profe, ya deje un poco mas limpio el main como usted me indico, puse todas las funciones que utilizo en un nuevo archivo llamado "Funciones" y declare todas las variables, librerías y prototipos en el archivo "Encabezado". Cualquier cosa me avisa si hay algo mal

DamRCorba commented 4 years ago

Hola Leonel, esta mejor. Pero aun le faltan algunas cuestiones. Primero, el desarrollo de las funciones no se hace en los archivos.h sino que en los .c Por lo que tu archivo funciones.h deberia ser funciones.c

Eso tambien te va a traer el problema de compilacion, el cual es el objetivo que tengas para que veas realmente como se usa esta separacion de archivos. Esta mal hacer "include "funciones.c"" Por lo que tenes que crear un proyecto en tu IDE y agregar a los archivos ahi. Por otro lado, tu funcion caso, deberia estar embebida en tus funciones de estados, para que estas funciones devuelvan un estado y la maquina, sepa que estado ejecutar ni bien finaliza la ejecución del estado en curso.

Recorda, toda funcion de estado tiene que devolver un estado.

LeonelThurler commented 4 years ago

Hola profe disculpe que lo moleste, ya cree el proyecto y agregue los archivos "funciones", "encabezado" y el "trabajo practico" y lo introduje en el repositorio, lo que no entiendo es con lo que quiere decir cuando dice que la función "caso" tiene que estar embebida en las funciones de estados, aguardo su respuesta.

DamRCorba commented 4 years ago

vos haces switch(caso()) y tendrias que hacer switch(estado) case estado1: estado= f_estado1();

y tu funcion estado1(){

--- algo que hace el estado

return caso() }

es decir como caso es la que elije el estado deberia estar dentro de las funciones de estado para que estas devuelvan un estado.

saludos

LeonelThurler commented 4 years ago

Hola profe disculpe que lo moleste nuevamente pero ya corregí como usted me indico el trabajo practico, cabe recalcar que agregue la variable "o" para que no me pregunte de nuevo si quiero ir al estado de emergencia cuando anteriormente ya había salido de ese mismo estado

DamRCorba commented 4 years ago

Leonel, ya esta quedando mejor. Tiene un gran error que esta relacionado a las buenas practicas. No se admiten variables globales. Por lo tanto tenes que modificar los prototipos de las funciones para pasarles los datos que vas leyendo. Por global, no. Y Ademas cambia los nombres de las variables. "o" no es un nombre representativo para una variable.

LeonelThurler commented 4 years ago

listo profe ya lo corregí espero que ahora este bien

DamRCorba commented 4 years ago

Hola Leonel. Estoy viendo que el codigo no esta representado por la metodologia propuesta. Tenes que tener por cada estado de tu diagrama una funcion de estado que devuelva un estado. En tu diagrama tenes abierto, cerrado y emergencia y esas tres condiciones las tenes pero no de la forma que pedi. Tenes que tener las tres funciones y estas ir ejecutandose segun el las transiciones de tu diagrama.

LeonelThurler commented 4 years ago

Hola profe disculpe pero no entiendo lo que me quiere decir, ¿yo no me tengo que correr del diagrama que hice?, osea del ciclo que esta comprendido el estado "cerrado", "abierto" y "emergencia" no me puedo mover de esos pasos de ejecucion que esta puesto en el diagrama o estoy entendiendo algo mal?

DamRCorba commented 4 years ago

Claro, la idea del tp es que de un problema, hagas un diagrama y del diagrama sigas las reglas propuestas para obtener el codigo. En tu caso agregaste cosas al codigo que no estan reflejadas en el diagrama. Por lo que tu codigo no es lo que propusiste inicialemente. En este punto podrias modificar el diagrama con los cambios que hiciste en el codigo y corregir la parte de los tres estados planteados, osea mantenerlos en el diagama y modificar el codigo O solo modificar la parte del codigo que tiene la apertura, cierre y emergencia dejando a los agregados en el codigo pero no el diagrama.

LeonelThurler commented 4 years ago

ok profe ya incluí el llamado a la función de emergencia tal como esta en el diagrama y corregí unas cosas que estaban mal en el diagrama, no se si ahora esta mejor o peor pero me apegue mas al diagrama, sino cualquier cosa modifico el diagrama

LeonelThurler commented 4 years ago

porque viendo el diagrama no aparece la opción de configurar la hora de habilitación de la puerta y otras cosas mas, cualquier cosa modifico le diagrama

DamRCorba commented 4 years ago

Vi los cambios, y hay otra cosa que no estas repetando. No puede haber funciones bloqueantes. La funcion emergencia tiene un while que obliga a que se quede ahi. La filosofia de la maquina es que las funciones se ejecuten sin bloqueos y de ser necesario mantener un estado repetir la ejecución de la función de estado mientras esta decida que el estado devuelto sea si mismo.

Por otro lado te falta la función de los estados abrir y cerrar, en tu código están dentro de la función puerta automática, lo cual esta mal, semánticamente hablando.

LeonelThurler commented 4 years ago

Ok profe, dividí la función de "puerta_automática" en dos, una que se llama "abierto" y otra que se llama "cerrado" y a la función de "emergencia" le saque el bucle while y lo reemplace con un printf, la repetición de la función la va a tener que dar el usuario cuando se ejecute en la función "horario de apertura"

DamRCorba commented 4 years ago

Leonel, pero tu main, que es el que ejecuta tu maquina de estados no llama a abrir y cerrar. Por lo que no sigue a tu diagrama. Modifica el diagrama para que se ajuste a este codigo. Ya que terminaste haciendo algo parecido pero no igual al planteo original

LeonelThurler commented 4 years ago

Hola profe disculpe la demora y los inconvenientes con el código y el diagrama es que en informática 2 con la teoría y la practica me esta yendo un poco mal, ya tengo subido el diagrama nuevo acorde a mi código.

DamRCorba commented 4 years ago

Caso no es un estado. Los estados son los que tenes en tu main.

LeonelThurler commented 4 years ago

Ok profe, ahora en el diagrama corregido solo puse los estados que tengo

DamRCorba commented 4 years ago

Ahora si, Tp aprobado.

LeonelThurler commented 4 years ago

ok profe perfecto, muchas gracias por su ayuda