Autor
|
Tema: Sumar día a una fecha (Leído 3,179 veces)
|
andoporto
Desconectado
Mensajes: 17
|
Hola gente tengo la siguiente codificación pero no puedo resolver los errores, que puede ser?
// 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
Mensajes: 3.412
ASMático
|
Entre otras, tienes 2 main. Tú dirás cual es el correcto.
|
|
|
En línea
|
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
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
Mensajes: 1.248
|
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
Mensajes: 17
|
Corregi el programa pero me sigue sin andar #include <stdlib.h> #include <stdio.h>
typedef struct { int dia, mes, anio; } 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.anio);
if (EsFechaValida(fecha.dia,fecha.mes,fecha.anio) == 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 anio) { int fv = 0; if (anio > 1600) if (mes >= 1 && mes <= 12) if (dia >= 1 && dia <= CantDiasMes(mes,anio)) 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
Mensajes: 3.412
ASMático
|
No, no corregiste las 'ñ'.
|
|
|
En línea
|
|
|
|
andoporto
Desconectado
Mensajes: 17
|
#include <stdlib.h> #include <stdio.h>
typedef struct { int dia, mes, anio; } 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 anio: "); scanf("%d",&fecha.anio);
if (EsFechaValida(fecha.dia,fecha.mes,fecha.anio) == 1) printf("\n Es valida"); else printf("\n No es valida"); SumaUnDia(fecha.dia,fecha.mes,fecha.anio); }
int EsFechaValida(int dia,int mes,int anio) { int fv = 0; if (anio > 1600) if (mes >= 1 && mes <= 12) if (dia >= 1 && dia <= CantDiasMes(mes,anio)) 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 anio:%d", df, mf, af); }
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
La struct sigue teniendo 'ñ' en año ·_·
|
|
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
campos de fecha mysql y funciones de fecha php
PHP
|
SirLanceCC
|
9
|
9,587
|
3 Enero 2008, 12:36 pm
por Hans el Topo
|
|
|
[SOLUCIONADO]sumar nuemro a una fecha????
Java
|
josco
|
2
|
5,401
|
28 Abril 2010, 00:23 am
por josco
|
|
|
cambiar la fecha del sistema tomando la fecha desde un archivo texto?
Scripting
|
.:UND3R:.
|
5
|
12,753
|
9 Septiembre 2011, 21:26 pm
por leogtz
|
|
|
como anular la fecha de un programita que tiene fecha de vencimiento
Ingeniería Inversa
|
quinipilar
|
3
|
5,547
|
19 Octubre 2011, 20:32 pm
por .:UND3R:.
|
|
|
Como insertar fecha en la que abrí por ultima vez un form(no la fecha actual) C#
.NET (C#, VB.NET, ASP)
|
arzteek
|
1
|
3,075
|
17 Julio 2013, 04:00 am
por Eleкtro
|
|