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

Dias y Años

Estas en el tema de Dias y Años en el foro de C/C++ en Foros del Web. Hola. Quería consultar si alguien sabe cómo puedo en C, dado un día del año ingresado por el usuario, decir a qué mes corresponde. Inicialmente, ...
  #1 (permalink)  
Antiguo 31/10/2010, 08:19
 
Fecha de Ingreso: mayo-2010
Mensajes: 2
Antigüedad: 13 años, 11 meses
Puntos: 0
Dias y Años

Hola.
Quería consultar si alguien sabe cómo puedo en C, dado un día del año ingresado por el usuario, decir a qué mes corresponde.
Inicialmente, se me ocurrió hacer un if evaluando del 0-31, del 32-60, etc.
No encuentro otra forma de optimizar el código sin necesidad de evaluar tantas condiciones.

PD: En este caso no se consideran los años bisiestos.

Este sería el código que implementé, por las dudas:

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

int diames(int dia);

int main()
{
int d;
char m[15];
printf("Ingrese el dia: ");
scanf("%d}",&d);

printf("El dia %d corresponde al mes de %s",d,diames(d));
return 0;
}

int diames(int dia)
{
int mes;

if(dia >= 1 && dia <= 31) mes=1;
else if(dia >= 32 && dia <= 59) mes=2;
else if(dia >= 60 && dia <= 90) mes=3;
else if(dia >= 91 && dia <= 120) mes=4;
else if(dia >= 121 && dia <= 151) mes=5;
else if(dia >= 152 && dia <= 181) mes=6;
else if(dia >= 182 && dia <= 212) mes=7;
else if(dia >= 213 && dia <= 243) mes=8;
else if(dia >= 244 && dia <= 273) mes=9;
else if(dia >= 274 && dia <= 304) mes=10;
else if(dia >= 305 && dia <= 334) mes=11;
else if(dia >= 335 && dia <= 365) mes=12;

return mes;
}


Gracias por su ayuda.
Saludos.

Última edición por manaciano; 31/10/2010 a las 15:14 Razón: Implementación de código
  #2 (permalink)  
Antiguo 31/10/2010, 16:52
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Dias y Años

LA verdad que eso esta bastante optimizado ya que todo los calculos los hiciste vos antes de compilarlo. Y el programa solo chekea en que rubro esto...
Como lo meses no tienen numeros de dias fijos..tampoco podes usar algun metodo de division o modulo asi que esta forma me parece bastante correcta.
  #3 (permalink)  
Antiguo 16/11/2010, 21:02
 
Fecha de Ingreso: mayo-2010
Mensajes: 2
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Dias y Años

Gracias Sam90,

Finalmente, lo resolví de esta manera (más que optimizarlo, lo que hice es retornar el nombre del mes en vez del número).

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

char*diatomes(int dia);

int main()
{
int d;
printf("Ingrese el dia: ");
scanf("%d",&d);
printf("El dia %d corresponde al mes de %s",d,diatomes(d));
return 0;
}

char*diatomes(int dia)
{
char*mes=malloc(sizeof(mes)*15);

if(dia >= 1 && dia <= 31) strcpy(mes,"Enero");
else if(dia >= 32 && dia <= 59) strcpy(mes,"Febrero");
else if(dia >= 60 && dia <= 90) strcpy(mes,"Marzo");
else if(dia >= 91 && dia <= 120) strcpy(mes,"Abril");
else if(dia >= 121 && dia <= 151) strcpy(mes,"Mayo");
else if(dia >= 152 && dia <= 181) strcpy(mes,"Junio");
else if(dia >= 182 && dia <= 212) strcpy(mes,"Julio");
else if(dia >= 213 && dia <= 243) strcpy(mes,"Agosto");
else if(dia >= 244 && dia <= 273) strcpy(mes,"Septiembre");
else if(dia >= 274 && dia <= 304) strcpy(mes,"Octubre");
else if(dia >= 305 && dia <= 334) strcpy(mes,"Noviembre");
else if(dia >= 335 && dia <= 365) strcpy(mes,"Diciembre");

return mes;
}

Etiquetas: dias
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 15:12.