Problema con Arrays en C (no C++)

Iniciado por santibarquero98, 26 Mayo 2015, 17:01 PM

0 Miembros y 1 Visitante están viendo este tema.

santibarquero98

Ya he escrito varias veces acerca de problemas de programación y es posible que algunos ya conozcáis mi caso xD. Estoy aprendiendo a programar en C y he llegado a los Arrays o matrices y tengo un ejercicio en el que tengo que hacer lo siguiente:

- Tengo que almacenar los días que tienen los 12 meses del año (no bisiesto) y pedir al usuario que elija uno. Después tiene que elegir un día de ese mes y a partir de esos dos datos, tengo que sacar el día de todo el año y mostrárselo, por ejemplo el 4 de Enero pues sería el cuarto día del año.

Lo que yo he intentado hacer es una matriz con 12 elementos llamada meses pero creo que es innecesario ya que solamente se guardan 3 números (30,28 y 31) y me estoy haciendo un lío grande en la cabeza también ya que después pide lo de los días...

¿Cómo se haría ese ejercicio? ¿Y algún consejo para poder solucionar este tipo de problemas?

0xFer

#1
Puedes crear un arreglo de 12 elementos para eso:


int meses [12] = { DIAS_ENERO,DIAS_FEBRERO,...};


Pides los datos:

//Ingresa un mes, ejemplo: 1- Enero, 2-Febrero, 3-Marzo etc
 int mes;
 
 //Ingrese dia del mes
 int dia;


Para calcular los dias, pongamos como ejemplo que mes = 3 y dia = 14, entonces en el arreglo sumas los primeros 2 indices que corresponden a los meses de enero y febrero y luego le sumas los 14 días de marzo.


int Dia_Del_anio = meses[0] + meses[1] + 14; //días de enero + días de  febrero + 14 días de marzo


Un saludo
 
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

Stakewinner00

#2
Si entendi bien, no se porque usar arrays o matrices....

Dejo lo que hice por si es esto y sirve aunque esta en C++ sintácticamente se parece

Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

int main()
{
 //TODO
 //Comprobar que año y mes y día sean del rango adecuado
 //Tratar errores en caso de que se introduzca una letra

 unsigned int ano;
 cout << "Year: ";
 cin >> ano;
 
 unsigned int mes;
 cout << "Mes: ";
 cin >> mes;
 
 unsigned int dia;
 cout << "Dia: ";
 cin >> dia;

 unsigned int n = 0;
 if(!(ano%4) || !(ano%100 && (ano%400))) //bisiesto
 {
   if(mes > 2)  //Si ya pasamos febrero
   {
     n += 1;
   }
 }

 switch(mes-1)
 {
   case 11: n += 30;
   case 10: n += 31;
   case 9:  n += 30;
   case 8:  n += 31;
   case 7:  n += 31;
   case 6:  n += 30;
   case 5:  n += 31;
   case 4:  n += 30;
   case 3:  n += 31;
   case 2:  n += 28;
   case 1:  n += 31;
 }
 
 n += dia;

 cout << "Hoy estamos en el día del anyo numero" << n << endl;
 
 
}

Peregring-lk

#3
Aunque solamente se guarden 3 números diferentes, no hay ningún "patrón" que puedas sacar, así que no te queda otra que un vector.

O!! la solución de Stakewinner00, que hace lo que pides perfectamente, aunque la descripción de tu ejercicio dice que debes almacenarlos (te está diciendo claramente que uses un vector), pero bueno.

Otra solución (no la he probado, pero debería funcionar):

Código (cpp) [Seleccionar]

#include <iostream>

int main()
{
 unsigned mes, dia; std::cin >> mes >> dia;

 unsigned dias[] = {
       31, 30, 28, 30, 31, 30,
       31, 31, 30, 31, 30, 31
 };

 dias[mes - 1] = dia;

 unsigned diaanno = 0;

 while (mes --> 0)
     diaanno += dias[mes];

 std::cout << diaanno << std::endl;

 return 1;
}



Stakewinner00

A esta última solución creo que le faltaría sumarle los días de este mes. Por lo que veo solo suma los días de los meses anteriores.
Creo que esta última solución es más acertada :(

Peregring-lk

#5
Fíjate en la línea 12.

Además, recuerda que si el usuario quiere "enero", introducirá un 1, y no un 0. Así que en la primera vuelta del lector ya se suman los dias del mes introducido (línea 12).

Stakewinner00

Ups si, no me fije. Lo que si que faltaría sería std:: en el cin para poder compilarlo pero bueno...