elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Sumar día a una fecha
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Sumar día a una fecha  (Leído 2,876 veces)
andoporto

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Sumar día a una fecha
« 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);
}




« Última modificación: 4 Febrero 2015, 16:24 pm por andoporto » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Sumar día a una fecha
« Respuesta #1 en: 4 Febrero 2015, 16:21 pm »

Entre otras, tienes 2 main. Tú dirás cual es el correcto.


En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Sumar día a una fecha
« Respuesta #2 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.
« Última modificación: 4 Febrero 2015, 16:34 pm por avesudra » En línea

Regístrate en
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Sumar día a una fecha
« Respuesta #3 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.
En línea

andoporto

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: Sumar día a una fecha
« Respuesta #4 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);
}
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Sumar día a una fecha
« Respuesta #5 en: 4 Febrero 2015, 18:23 pm »

No, no corregiste las 'ñ'.
En línea

andoporto

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: Sumar día a una fecha
« Respuesta #6 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);
}
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Sumar día a una fecha
« Respuesta #7 en: 4 Febrero 2015, 20:00 pm »

La struct sigue teniendo 'ñ' en año ·_·
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Sumar día a una fecha
« Respuesta #8 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.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines