Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Calcular días que quedan hasta final de año

Estas en el tema de Calcular días que quedan hasta final de año en el foro de C/C++ en Foros del Web. Hola. Estoy practicando con ejercicios de arrays, y estaba haciendo uno en el que tengo que hacer un array en el que inserto el número ...
  #1 (permalink)  
Antiguo 15/01/2012, 13:05
 
Fecha de Ingreso: enero-2012
Mensajes: 68
Antigüedad: 12 años, 3 meses
Puntos: 0
Calcular días que quedan hasta final de año

Hola.

Estoy practicando con ejercicios de arrays, y estaba haciendo uno en el que tengo que
hacer un array en el que inserto el número de días que tiene cada mes. A partir de ahí, le pido al usuario que inserte una fecha (sólo día y mes). Entonces, tengo que averiguar cuántos días quedan hasta final de año.

Mi código es:

Código C:
Ver original
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int main(){
  5.  
  6.  
  7.  int n,i,x,d,suma,transcurridos,restantes;
  8.  int dias[12]={31,28,31,30,31,30,31,31,30,31,30,31};
  9.  
  10.  printf("Elige un dia del 1 al 31");
  11.  scanf("%d",&d);
  12.  
  13. do{
  14. printf("Elige un mes del 1 al 12");
  15. scanf("%d",&n);
  16. }
  17. while(n<1||n>12);
  18.  
  19.  
  20.  
  21. for(i=0;i<n;i++);
  22.  
  23. transcurridos+=dias[n-1];
  24. transcurridos+=d;
  25. restantes=365-transcurridos;
  26.  
  27. printf("Dias restantes: %d",restantes);
  28.  
  29. system("pause");
  30. return 0;
  31. }

Sé que mi problema está al plantear el bucle for (de hecho, lo que tengo en el bucle for no lo he enlazado con las instrucciones de debajo)...

Muchas gracias.

Saludos.
  #2 (permalink)  
Antiguo 15/01/2012, 14:03
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años
Puntos: 71
Respuesta: Calcular días que quedan hasta final de año

Hola, le comento algunas cosas acerca de su implementación.
  1. La variable transcurridos debe de inicar en cero ya que es un acumulador de sumas.
  2. En la declaración del vector dias no se requiere colocar la longitud, ya que al ser declarado de esta forma el compilador es el que se encarga calcular su longitud.
  3. No todos los meses tienen 31 días, aquí hay un punto grave de su algoritmo ya que si el año es bisiesto y lee como día 29 de febrero tendrá errores muy tontos. Para salvar esto le aconsejo leer el año, luego el mes y finalmente el día c/u con su respectiva validación.
  4. En la declaración de su for este no hace efecto a ninguna línea ya que hay un ; al final.
  5. Si esta sumando los dias de los meses trancurridos no debería tomar i<n, sino i<n-1, ya que al final suma los días del mes en curso.

Puesto de esta manera su código quedaría como se muestra abajo, faltando los puntos de lecturas de año y sus validaciones. Esto para que haga sus pruebas y tenga como avanzar lo que le falta.

Código C:
Ver original
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int main() {
  5.  
  6.     int n, i, d, transcurridos = 0, restantes;
  7.     int dias[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  8.    
  9.     printf("Elige un dia del 1 al 31: ");
  10.     scanf("%d", &d);
  11.  
  12.     do {
  13.         printf("Elige un mes del 1 al 12: ");
  14.         scanf("%d", &n);
  15.     } while (n < 1 || n > 12);
  16.     for (i = 0; i < n-1; i++) {
  17.         transcurridos += dias[i];
  18.     }
  19.     transcurridos += d;
  20.     restantes = 365 - transcurridos;
  21.  
  22.     printf("Dias restantes: %d", restantes);
  23.     system("PAUSE");
  24.     return 0;
  25. }


Si tiene más dudas puede preguntar.
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%
  #3 (permalink)  
Antiguo 15/01/2012, 14:10
 
Fecha de Ingreso: enero-2012
Mensajes: 68
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Calcular días que quedan hasta final de año

¡Muchas gracias!

Gracias a su ayuda he terminado de hacer el programa.

Saludos.
  #4 (permalink)  
Antiguo 15/01/2012, 14:11
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años
Puntos: 71
Respuesta: Calcular días que quedan hasta final de año

Si lo ha terminado tan rápido me gustaría ver su implementación.
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%
  #5 (permalink)  
Antiguo 15/01/2012, 14:16
 
Fecha de Ingreso: enero-2012
Mensajes: 68
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Calcular días que quedan hasta final de año

Aquí está ^^

Código C:
Ver original
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int main ()
  5. {
  6.     int n, d, i, transcurridos, restantes;
  7.     int dias[] = {
  8.         31, 28, 31, 30,
  9.         31, 30, 31, 31,
  10.         30, 31, 30, 31
  11.     };
  12.  
  13.    
  14.     transcurridos = 0;
  15.     restantes = 0;
  16.  
  17.  
  18.  
  19.     do
  20.     {
  21.         printf ( "Elige un mes del 1 al 12: " );
  22.         scanf ( "%d", &n );
  23.     } while ( n < 1 || n > 12 );
  24.    
  25.       do
  26.     {
  27.         printf ( "Elige un dia del 1 al 31: " );
  28.         scanf ( "%d", &d );
  29.     } while ( ((n==1||n==3||n==5||n==7||n==8||n==10||n==12))&&(d>31)||(n==4||n==6||n==9||n==11)&&(d>30)||((n==2)&&(d>28))||(d<1) );
  30.  
  31.    
  32.     for ( i = 0; i < (n - 1); i++ )
  33.     {
  34.         transcurridos += dias[i];
  35.     }
  36.  
  37.     transcurridos += d;
  38.     restantes = (365 - transcurridos);
  39.  
  40.     printf ( "Dias restantes: %d\n", restantes );
  41.     system ("pause");
  42.  
  43.     return 0;
  44. }

Saludos
  #6 (permalink)  
Antiguo 15/01/2012, 14:32
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: Calcular días que quedan hasta final de año

Hola DickGumshoe! bueno 1º que nada a la variable transcurridos tendrias que inicializarla en 0 osea transcurridos=0 para poder hacer transcurridos+=dias[n-1]; sino le estarias sumando "basura" + dias[n-1] a transcurridos.

Despues el for quedaria asi(no lo probe pero creo q esta bien):
for(i=0;i<n-1;i++)
{
transcurridos+=dias[i]; // fijate el cambio que hice en vez de n-1 puse i
}
trancurridos+=d;
restantes = 365 - transcurridos;

Perdona que no puse el codigo como vos es que no se usarlo :S. Otra observacion seria que cuando vos pedis el dia ( del 1 al 31) acordate que febrero tiene 28 dias¿que pasa si el usuario ingresa 31 y mes febrero?fijate como resolves eso... ahhh y creo que este año febrero tiene 29 dias :)

SAludos, espero te sirva
  #7 (permalink)  
Antiguo 15/01/2012, 14:43
 
Fecha de Ingreso: enero-2012
Mensajes: 68
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Calcular días que quedan hasta final de año

Bueno, muchas gracias, cesar.

Ya lo tenía hecho (es el último código que está posteado aquí), pero como lo has explicado muy bien, le doy un +1 ^^

Gracias.

Saludos.
  #8 (permalink)  
Antiguo 15/01/2012, 14:48
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años
Puntos: 71
Respuesta: Calcular días que quedan hasta final de año

Aún no resuelve el problema de un año bisiesto, sino trate con el 29 de febrero. Así que no le de por finalizado.
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%
  #9 (permalink)  
Antiguo 15/01/2012, 15:01
 
Fecha de Ingreso: enero-2012
Mensajes: 68
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Calcular días que quedan hasta final de año

El enunciado del programa, sacado de un libro llamado Curso de C, de Nacho Cabanes, dice que suponga que el año no es bisiesto.

De todas formas, hice hace tiempo un programa en el que introducía el año, mes, día, hora, minuto, segundo que quería, y a eso le sumaba un segundo. Ahí si puse la posibilidad de si el año es bisiesto.

Saludos.
  #10 (permalink)  
Antiguo 15/01/2012, 15:09
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años
Puntos: 71
Respuesta: Calcular días que quedan hasta final de año

Cita:
Iniciado por DickGumshoe Ver Mensaje
El enunciado del programa, sacado de un libro llamado Curso de C, de Nacho Cabanes, dice que suponga que el año no es bisiesto.

De todas formas, hice hace tiempo un programa en el que introducía el año, mes, día, hora, minuto, segundo que quería, y a eso le sumaba un segundo. Ahí si puse la posibilidad de si el año es bisiesto.

Saludos.
Bueno aquí todas las observaciones y ayudas son para desarrollar soluciones completas y no a medias.
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%

Etiquetas: año, final, calculadora
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:51.