Jueves 14 de Noviembre de 2024, 04:05
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Duda con codigo C
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Duda con codigo C (Leído 3812 veces)
cltomas
Nuevo Miembro
Mensajes: 20
Duda con codigo C
«
en:
Miércoles 9 de Marzo de 2011, 15:05 »
0
Tengo que hacer el siguiente programa:
Código: C
/*Dados como entrada 3 enteros representando la fecha como dia ? mes, año, imprimir la fecha del dia anterior.
Por ejemplo para una entrada como: 1 3 1992 La salida seria: Fecha anterior a 1-3-1992 es 29-02-1992 */
Este es mi codigo:
Código: C
#include <stdio.h>
/*Dados como entrada 3 enteros representando la fecha como dia ? mes, año, imprimir la fecha del dia anterior.
Por ejemplo para una entrada como: 1 3 1992 La salida seria: Fecha anterior a 1-3-1992 es 29-02-1992 */
int
main
(
)
{
int
dia
;
int
mes
;
int
anno
;
int
dia2
,
mes2
;
int
fecha
;
int
anno2
;
printf
(
"nIntroduce el Día del mes=>n"
)
;
scanf
(
"%d"
,
&
dia
)
;
getchar
(
)
;
printf
(
"nIntroduce el mes [numerario]=>n"
)
;
scanf
(
"%d"
,
&
mes
)
;
getchar
(
)
;
printf
(
"nIntroduce el año =>n"
)
;
scanf
(
"%d"
,
&
anno
)
;
getchar
(
)
;
dia2
=
dia
-
1
;
mes2
=
mes
-
1
;
anno2
=
anno
-
1
;
/* como restringir la entrada del dia y mes a 2 digitos y año a 4 digitos*/
if
(
(
dia2
==
0
)
&&
(
mes2
==
0
)
&&
(
anno
!=
0
)
)
//caundo la fecha introducida sea del tipo 1-1-1977 sera 30-12-1976
{
dia2
=
31
;
mes2
=
12
;
printf
(
"n[1º] La fecha anterior a %d-%d-%d es %d-%d-%dn"
,
dia
,
mes
,
anno
,
dia2
,
mes2
,
anno2
)
;
}
else
if
(
(
dia2
>
0
)
&&
(
mes2
==
0
)
&&
(
anno
!=
0
)
)
// cuando la fecha introducida sea del tipo 12-1-1977 sera 11-1-1977
{
dia2
=
dia
-
1
;
mes2
=
mes2
+
1
;
printf
(
"n[2º]La fecha anterior a %d-%d-%d es %d-%d-%dn"
,
dia
,
mes
,
anno
,
dia2
,
mes2
,
anno
)
;
}
else
if
(
(
dia2
==
0
)
&&
(
mes2
>
0
)
&&
(
anno
!=
0
)
)
// cuando la fecha introducida sea del tipo 1-12-1977 sera 30-11-1977
{
dia2
=
30
;
mes2
=
mes
-
1
;
printf
(
"n[3º]La fecha anterior a %d-%d-%d es %d-%d-%dn"
,
dia
,
mes
,
anno
,
dia2
,
mes2
,
anno
)
;
}
else
if
(
(
dia2
>
0
)
&&
(
mes2
>
0
)
&&
(
anno
!=
0
)
)
//cuando la fecha introducida sea del tipo 16-4-1977 sera 15-4-1977
{
dia2
=
dia
-
1
;
mes2
=
mes2
+
1
;
printf
(
"n[4º]La fecha anterior a %d-%d-%d es %d-%d-%dn"
,
dia
,
mes
,
anno
,
dia2
,
mes2
,
anno
)
;
}
else
if
(
(
dia
==
0
)
||
(
mes
==
0
)
||
(
anno
==
0
)
)
{
printf
(
"n[5] ERROR ..Has introducido un 0.. n"
)
;
}
else
{
printf
(
"nERROR!!!! (día, mes, año negativo?)n"
)
;
//para numero negativos LoL!!!!
}
getchar
(
)
;
return
0
;
}
Sé que me ido por las ramas con el codigo, pero soy novato y autodidacta, mis dudas son:
1.-¿ como hago para cuando el mes del año tenga 31 días y no 30?.
2.-¿como restringir la entrada del dia y mes a 2 digitos y año a 4 digitos?
Desde ya gracias y Saludos
Tweet
perrete
Nuevo Miembro
Mensajes: 9
Re: Duda con codigo C
«
Respuesta #1 en:
Miércoles 9 de Marzo de 2011, 15:25 »
0
Para los días de cada mes, sólo se me ocurre que los vayas comprobando uno a uno, porque además tienes el problema de febrero que tiene 28...
Para restringir la entrada del mes, puedes utilizar un bucle while, que se repita hasta que el número introducido sea menor que 13. Es una forma muy básica de control de errores, pero en este caso funcionaría.
Y para el año igual, si son cuatro dígitos enciérralo en otro while donde se controle que el número introducido sea mayor que 1000 y menor que 9999.
Espero haberte sido de ayuda, un saludo!
cltomas
Nuevo Miembro
Mensajes: 20
Re: Duda con codigo C
«
Respuesta #2 en:
Miércoles 9 de Marzo de 2011, 15:33 »
0
Gracias, el problema es que se debe realizar sin while ya que aún no llego a los bucles while, for ....
cltomas
Nuevo Miembro
Mensajes: 20
Re: Duda con codigo C
«
Respuesta #3 en:
Miércoles 9 de Marzo de 2011, 15:34 »
0
Gracias, el problema es que se debe realizar sin while ya que aún no llego a los bucles while, for ....
doble post lo siento..no se borrarlo
perrete
Nuevo Miembro
Mensajes: 9
Re: Duda con codigo C
«
Respuesta #4 en:
Miércoles 9 de Marzo de 2011, 16:01 »
0
Pues entonces con un if, cuando se introduzca el numero del mes compruebas que sea menor que 13 y mayor que 0, y el año compruebas que sea mayor que 1000 y menor que 9999. Un saludo!
ehecatl
Nuevo Miembro
Mensajes: 9
Re: Duda con codigo C
«
Respuesta #5 en:
Miércoles 30 de Marzo de 2011, 05:33 »
0
Ya viste la instrucción swith-case? creo que puede venirte bastante bien para el tema de los meses, haces 12 cases, cada uno para cada mes y de este modo, filtras esa condicion de meses de 30-31 dias (incluyendo a febrero, claro), ademas de que podrias meterle tambien, dentro del case 2 (febrero), la condicion cuando el año sea bisiesto que te brinque con 29 dias ...
Saludos
Ehecatl
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: Duda con codigo C
«
Respuesta #6 en:
Miércoles 30 de Marzo de 2011, 09:22 »
0
switch es mala solución, aunque desde luego la más usada. Es mucho más eficiente (si ya has visto vectores/arreglos/arrays):
Código: C
int
dias_meses
[
12
]
=
{
31
,
28
,
31
,
30
,
31
,
30
,
31
,
31
,
30
,
31
,
30
,
31
}
;
Fr33k K0mpu73r
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Duda con codigo C