Programa en C,universidad

Chetero

Necesito este programa para una tarea de la universidad.

http://gyazo.com/9100e1eabb55b59b4d50adfc6f436e7e

He intentado hacerlo para ver que no sabia hacer y que errores me daban y al final tengo esto.

http://gyazo.com/8be77d34da400cd95a3e5b699676a669
http://gyazo.com/19bb8a28f460edc689e5e5f0f827c6ef
http://gyazo.com/4cbda173a5f16dc4de47f87d950da69e
http://gyazo.com/2d0bbc3b04fc6a6b1fdf5969b301c0f4
http://gyazo.com/fd509e2c70bc51905c07aec32bc3e769
http://gyazo.com/ce8d81ce683c999d9d06c735e0c49adf
http://gyazo.com/9e659601c9684a45837d384d02dec1b7

Por aqui os dejo por si alguien quiere descargarse el problema y verlo mejor.

https://mega.co.nz/#!HowBGKJD!uSG38wa1oGpOzhg9xadZxRd7jsSmr dcMPz5ur5IBRBE

Estoy seguro de que todo o casi todo relacionado con las fechas lo he hecho mal, y tampoco he logrado hacer la parte en la que deberia añadir la cantidad modifica de kilos recogidos a los kilos recogidos desde la plantacion.

Si pudierais aclararme un poco esas 2 partes y ver el problema y comentarme fallos lo agradeceria.

PD:Ya lo he resuelto gracias a los que ayudaron.

gonya707

#1 Tienes una etiquiete

 para estas cosas, poner capturas de pantalla de codigo lo veo algo absurdo.

Además te recomendaría que en vez de enseñarnos todo el programa, nos digas qué es lo que falla exactamente, y cual es el pedazo de código que ejecuta esa parte, pues será la que hay que corregir

http://sscce.org/
2 1 respuesta
Chetero

#2 Lo siento,es la primera vez que intento exponer un problema por aqui.

El principal problema sobre las fechas es el principio del programa,que no se como debe ir (siento si no se explicarme bien,me han intentado enseñar estas cosas en 4 clases de 1 hora...asique tengo bastante poca idea)

Al principio he hecho esto ya que piden que la fecha este compuesta por una estructura de dia,mes y año.

typedef struct {
        texto10 codigo;
        texto20 nombre;
        float kilosrec;
        float kilosplant;
        }datoscult;
typedef struct {
        int mespl;
        int diapl;
        int aniopl;
        }fechaplant;
        
typedef struct { int mesrec; int diarec; int aniorec; }fecharecol;



char menu (void); void datos_cultivo(datoscult *cult,fechaplant *plantacion,fecharecol *recolecion); int leer_num(int c); void modif_nombre(texto20 nom); int modif_fecharecol(int fechare); float modif_kilosrec(float kilosre); void imprime (datoscult cult,fechaplant plantacion,fecharecol recolecion);

En la parte del menu de los casos donde me piden que pueda cambiar la fecha he puesto esto

  case 'c':if (control != -1){
                    numero=leer_num(control);
                    modif_fecharecol(catalogo[numero].fecharecol);
                    }
                    else
                    printf("No se puede modificar pues no se han introducido datos\n");
                    break;

Y al final del programa

 int modif_fecharecol(int fechare)
     
{ printf("La fecha antigua de recolecion es: %d\n", fechare); printf("Dame la nueva fecha: "); scanf("%d", &fechare); fflush(stdin); }

Todo esto me ha hecho pensar que tenga mal el principio y que seria mas facil si se pudiera poner asi

typedef struct {
        texto10 codigo;
        texto20 nombre;
        float kilosrec;
        float kilosplant;
        int mespl;
        int diapl;
        int aniopl;
        int mesrec;
        int diarec;
        int aniorec;
        }datoscult;
        
char menu (void); void datos_cultivo(datoscult *cult); int leer_num(int c); void modif_nombre(texto20 nom); int modif_aniopl(int aniopla); int modif_mespl(int mespla); int modif_diapl(int diapla); int modif_aniorec(int anioreco); int modif_mesrec(int mesreco); int modif_diarec(int diareco); float modif_kilosrec(float kilosre); void imprime (datoscult cult,fechaplant plantacion,fecharecol recolecion);

Aunque tampoco se si estaria bien ni si seria lo que me piden en el problema..Ando muy perdido en programación =S.

Gif

#1 Te pongo la estructura como tendría que ser.

typedef struct{
	int dia;
	int mes;
	int anno;
} fecha;

typedef struct{
	char cod_inv[10];
	char name[20];
	fecha plant_fecha;
	fecha rec_fecha;
	float cantidad_rec;
	float cantidad_acc;
} cultivo;
/**
 * @brief pide el nombre del cultivo y lo cambia.
 * Comprueba que el usuario introduce <20 caracteres
 * @param cult cultivo * puntero al cultivo.
 */
void changeName(cultivo * const cult);
/**
 * @brief Cambia candidad de kilos
 * Pide la cantidad de kilos recogidos al usuario,
 * cambia la fecha por la actual y añade la cantidad
 * a la acumulada y la recogida.
 */
void recolectar(cultivo * const cult);
/**
 * @brief Muestra los datos del cultivo
 * @param cult cultivo * puntero al cultivo
 */
void showCultivo(const cultivo * const cult);

1 respuesta
Chetero

#4 El uso del const no lo hemos dado por lo que no lo voy a usar.He cambiado la estructura y ahora le veo mas color.Me ha quedado así.

typedef char texto10[10];
typedef char texto20[20];

typedef struct{
        int dia;
        int mes;
        int anno;
        } fecha;

typedef struct{
        texto10 codigo;
        texto20 nombre;
        fecha plant_fecha;
        fecha rec_fecha;
        float cantidadrec;
        float cantidadacc;
        } cultivo;





char menu (void);
void datos_cultivo(cultivo *cult);
int leer_num(int c);
void modif_nombre(texto20 nom);
void recolectar (int recfecha,float cantidadr);
void imprime (cultivo *cult);

Y ahora me surge una nueva duda,en la parte de los casos del menú.
Este es modelo que tengo he ido siguiendo.

 case 'a':if (control < 4){
                    control++;
                    datos_cultivo(&catalogo[control]);
                    }
                    else
                    printf("Catalogo completo no se pueden introducir más datos\n");
                    break;
               case 'b':if (control != -1){
                    numero=leer_num(control);
                    modif_nombre(catalogo[numero].nombre);
                    }
                    else
                    printf("No se puede modificar pues no se han introducido datos\n");
                    break;

¿En el caso c que debería de poner ?

case 'c':if (control != -1){
                    numero=leer_num(control);
                    recolectar(catalogo[numero].

Y ya en la parte final he cambiado a esto.

void recolectar (int recfecha,float cantidadr)
     
{ printf("La fecha antigua de recolecion es: %d\n", recfecha); printf("Dame la nueva fecha: "); scanf("%d", &recfecha); fflush(stdin); printf("La cantidad de kilos recogidad en la ultima recolecion es: %f\n", cantidadr); scanf("%f", &cantidadr); fflush(stdin); } void imprime (cultivo *cult) { printf("El codigo del invernadero es: %s\n",cult.codigo); printf("El nombre del cultivo es: %s\n",cult.nombre); printf("La cantidad de kilos recogidos en la ultima recolecion es: %f\n",cult.cantidadrec); printf("La cantidad de kilos recogidos desde la plantacion es: %f\n",cult.cantidadacc); printf("La fecha de recolecion es: %d\n",cult.rec_fecha); printf("La fecha de plantacion es: %d\n",cult.plant_fecha); system("PAUSE"); }

Gracias por las molestias.

Usuarios habituales

  • Chetero
  • Gif
  • gonya707