Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: andoporto en 4 Febrero 2015, 15:28 pm



Título: Sumar día a una fecha
Publicado por: andoporto en 4 Febrero 2015, 15:28 pm
Hola gente tengo la siguiente codificación pero no puedo resolver los errores, que puede ser?

Código:


// Función Es fecha válida by Módica

#include <stdlib.h>
#include <stdio.h>

typedef struct
{
    int dia,
        mes,
        año;
} t_fecha;

void IngrDato();
int EsFechaValida(int,int,int);
int CantDiasMes(int,int);
int EsBisiesto(int);

int main()
{
    system("cls");
    t_fecha fecha;
    IngrDato();
    if (EsFechaValida(fecha.dia,fecha.mes,fecha.año) == 1)
        printf("\n Es valida");
    else
        printf("\n No es valida");
    SumaUnDia(fecha.dia,fecha.mes,fecha.año);
    printf("\n");
    return 0;
}

void IngrDato()
{
    //t_fecha fecha;
    printf("\n Ingrese el d%ca: ",161);
    scanf("%d",&fecha.dia);
    printf("\n Ingrese el mes: ");
    scanf("%d",&fecha.mes);
    printf("\n Ingrese un a%co: ",164);
    scanf("%d",&fecha.año);


}



int EsFechaValida(int dia,int mes,int año)
{
    int fv = 0;
    if (año > 1600)
        if (mes >= 1 && mes <= 12)
            if (dia >= 1 && dia <= CantDiasMes(mes,año))
                fv = 1;
    return (fv);
}


int CantDiasMes(int mm,int aa)
{
    int cdm;
    cdm = 31;

    if(mm == 4 || mm == 6 || mm == 9 || mm == 11 )
    {
        cdm = 30;
    }
    else
    {
        if (mm == 2)
        {
            cdm = 28+EsBisiesto(aa);
        }
    }
    return(cdm);
}

int EsBisiesto(int a)
{
    int b;
    if ((a%4==0 || a%100==0)||(a%400==0))
        b=1;
    else
        b=0;
    return(b);
}




Título: Re: Sumar día a una fecha
Publicado por: ivancea96 en 4 Febrero 2015, 16:21 pm
Entre otras, tienes 2 main. Tú dirás cual es el correcto.


Título: Re: Sumar día a una fecha
Publicado por: avesudra en 4 Febrero 2015, 16:32 pm
Entre otras, tienes 2 main. Tú dirás cual es el correcto.
Lo habrá modificado porque yo no los veo.

Primero decirte que no puedes usar el caracter 'ñ' en C por tanto no puedes poner año , y segundo que en las funciones la estructura fecha no está definida y la función SumaUnDia no aparece por ningún lado, esos son tus fallos. La respuesta que te ha dado eferion abajo es más completa.

Saludos.


Título: Re: Sumar día a una fecha
Publicado por: eferion en 4 Febrero 2015, 16:33 pm
El detector de años bisiestos está mal: Un año es bisiesto si es divisible entre 400, también es bisiesto si es divisible entre 4 y no es divisible entre 100.

Por otro lado, el lenguaje C no admite 'ñ' en el nombre de las variables. Esto si dedicas un poco de esfuerzo a leer los mensajes de error lo ves en seguida. Ya eres mayorcito y tienes que aprender a leer y entender este tipo de información.

"IngrDato" guarda los datos en una variable local llamada "fecha"... pero esa variable muere cuando el código sale de la función. ¿No te faltará un return?

La función "SumaUnDia" no está. Me da la sensación de que no la has implementado porque tampoco está el prototipo de la función... Este error también te aparece claramente al compilar, lo dicho, aprende a interpretar esos mensajes que te salen.

Un saludo.


Título: Re: Sumar día a una fecha
Publicado por: andoporto en 4 Febrero 2015, 18:20 pm
Corregi el programa pero me sigue sin andar

Código:
#include <stdlib.h>
#include <stdio.h>

typedef struct
{
    int dia,
        mes,
        año;
} t_fecha;

void IngrDato();
int EsFechaValida(int,int,int);
int CantDiasMes(int,int);
int EsBisiesto(int);
void SumaUnDia(int,int,int);

int main()
{
    system("cls");
    IngrDato();
    printf("\n");
    return 0;
}

void IngrDato()
{
    t_fecha fecha;
    printf("\n Ingrese el d%ca: ",161);
    scanf("%d",&fecha.dia);
    printf("\n Ingrese el mes: ");
    scanf("%d",&fecha.mes);
    printf("\n Ingrese un a%co: ",164);
    scanf("%d",&fecha.año);

    if (EsFechaValida(fecha.dia,fecha.mes,fecha.año) == 1)
        printf("\n Es valida");
    else
        printf("\n No es valida");
     SumaUnDia(fecha.dia,fecha.mes,fecha.año);
}



int EsFechaValida(int dia,int mes,int año)
{
    int fv = 0;
    if (año > 1600)
        if (mes >= 1 && mes <= 12)
            if (dia >= 1 && dia <= CantDiasMes(mes,año))
                fv = 1;
    return (fv);
}


int CantDiasMes(int mm,int aa)
{
    int cdm;
    cdm = 31;

    if(mm == 4 || mm == 6 || mm == 9 || mm == 11 )
    {
        cdm = 30;
    }
    else
    {
        if (mm == 2)
        {
            cdm = 28+EsBisiesto(aa);
        }
    }
    return(cdm);
}

int EsBisiesto(int a)
{
    int b;
    if ((a%4==0 || a%100==0)||(a%400==0))
        b=1;
    else
        b=0;
    return(b);
}

void SumaUnDia(int d,int m,int a)
{
int df, mf, af;
df = d+1;
mf = m;
af = a;

if (df <= CantDiasMes(mf,af))
{
mf++;
df = 1;
if (mf>12)
{
af++;
mf = 1;
}
}
printf("\n\n Dia: %d  Mes: %d  Año:%d", df, mf, af);
}


Título: Re: Sumar día a una fecha
Publicado por: ivancea96 en 4 Febrero 2015, 18:23 pm
No, no corregiste las 'ñ'.


Título: Re: Sumar día a una fecha
Publicado por: andoporto en 4 Febrero 2015, 19:47 pm
Código:
#include <stdlib.h>
#include <stdio.h>

typedef struct
{
    int dia,
        mes,
        año;
} t_fecha;

void IngrDato();
int EsFechaValida(int,int,int);
int CantDiasMes(int,int);
int EsBisiesto(int);
void SumaUnDia(int,int,int);

int main()
{
    system("cls");
    IngrDato();
    printf("\n");
    return 0;
}

void IngrDato()
{
    t_fecha fecha;
    printf("\n Ingrese el dia: ");
    scanf("%d",&fecha.dia);
    printf("\n Ingrese el mes: ");
    scanf("%d",&fecha.mes);
    printf("\n Ingrese un año: ");
    scanf("%d",&fecha.año);

    if (EsFechaValida(fecha.dia,fecha.mes,fecha.año) == 1)
        printf("\n Es valida");
    else
        printf("\n No es valida");
     SumaUnDia(fecha.dia,fecha.mes,fecha.año);
}



int EsFechaValida(int dia,int mes,int año)
{
    int fv = 0;
    if (año > 1600)
        if (mes >= 1 && mes <= 12)
            if (dia >= 1 && dia <= CantDiasMes(mes,año))
                fv = 1;
    return (fv);
}


int CantDiasMes(int mm,int aa)
{
    int cdm;
    cdm = 31;

    if(mm == 4 || mm == 6 || mm == 9 || mm == 11 )
    {
        cdm = 30;
    }
    else
    {
        if (mm == 2)
        {
            cdm = 28+EsBisiesto(aa);
        }
    }
    return(cdm);
}

int EsBisiesto(int a)
{
    int b;
    if ((a%4==0 || a%100==0)||(a%400==0))
        b=1;
    else
        b=0;
    return(b);
}

void SumaUnDia(int d,int m,int a)
{
int df, mf, af;
df = d+1;
mf = m;
af = a;

if (df <= CantDiasMes(mf,af))
{
mf++;
df = 1;
if (mf>12)
{
af++;
mf = 1;
}
}
printf("\n\n Dia: %d  Mes: %d  año:%d", df, mf, af);
}


Título: Re: Sumar día a una fecha
Publicado por: ivancea96 en 4 Febrero 2015, 20:00 pm
La struct sigue teniendo 'ñ' en año ·_·


Título: Re: Sumar día a una fecha
Publicado por: eferion en 5 Febrero 2015, 08:10 am
Corregi el programa pero me sigue sin andar

Vamos a intentar ser un poco serios. Se supone que tienes que aprender y pegarte un poco con el problema. El foro está para servirte de ayuda, pero tienes que aprender a valerte por tí mismo:

* Aprende a interpretar los mensajes de error: si no entiendes alguno busca información en google.
* Aprende las reglas de codificación. Sería recomendable para este punto que consiguieses un buen manual de C para futuras referencias
* Se paciente. O aprendes a tener paciencia con los problemas o no vas a pasar nunca de la línea de salida.

No tiene sentido que estés poniendo una versión del programa cada vez que cambias dos letras solo para repetir... "no funciona". Tienes que intentar valerte por tí mismo.

* Si el código no te compila, lee e interpreta los mensajes de error.
* Si el código compila pero no funciona como es debido, aprende a usar el depurador de código. Es una herramienta muy poderosa y algo totalmente imprescindible en el mundo de la programación.

Un saludo.