Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: santibarquero98 en 26 Mayo 2015, 17:01 pm



Título: Problema con Arrays en C (no C++)
Publicado por: santibarquero98 en 26 Mayo 2015, 17:01 pm
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?


Título: Re: Problema con Arrays en C (no C++)
Publicado por: 0xFer en 26 Mayo 2015, 21:21 pm
Puedes crear un arreglo de 12 elementos para eso:

Código
  1. int meses [12] = { DIAS_ENERO,DIAS_FEBRERO,...};
  2.  

Pides los datos:
Código
  1. //Ingresa un mes, ejemplo: 1- Enero, 2-Febrero, 3-Marzo etc
  2.  int mes;
  3.  
  4.  //Ingrese dia del mes
  5.  int dia;
  6.  

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.

Código
  1. int Dia_Del_anio = meses[0] + meses[1] + 14; //días de enero + días de  febrero + 14 días de marzo
  2.  

Un saludo
  


Título: Re: Problema con Arrays en C (no C++)
Publicado por: Stakewinner00 en 26 Mayo 2015, 21:41 pm
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
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.  //TODO
  8.  //Comprobar que año y mes y día sean del rango adecuado
  9.  //Tratar errores en caso de que se introduzca una letra
  10.  
  11.  unsigned int ano;
  12.  cout << "Year: ";
  13.  cin >> ano;
  14.  
  15.  unsigned int mes;
  16.  cout << "Mes: ";
  17.  cin >> mes;
  18.  
  19.  unsigned int dia;
  20.  cout << "Dia: ";
  21.  cin >> dia;
  22.  
  23.  unsigned int n = 0;
  24.  if(!(ano%4) || !(ano%100 && (ano%400))) //bisiesto
  25.  {
  26.    if(mes > 2)  //Si ya pasamos febrero
  27.    {
  28.      n += 1;
  29.    }
  30.  }
  31.  
  32.  switch(mes-1)
  33.  {
  34.    case 11: n += 30;
  35.    case 10: n += 31;
  36.    case 9:  n += 30;
  37.    case 8:  n += 31;
  38.    case 7:  n += 31;
  39.    case 6:  n += 30;
  40.    case 5:  n += 31;
  41.    case 4:  n += 30;
  42.    case 3:  n += 31;
  43.    case 2:  n += 28;
  44.    case 1:  n += 31;
  45.  }
  46.  
  47.  n += dia;
  48.  
  49.  cout << "Hoy estamos en el día del anyo numero" << n << endl;
  50.  
  51.  
  52. }
  53.  


Título: Re: Problema con Arrays en C (no C++)
Publicado por: Peregring-lk en 26 Mayo 2015, 23:05 pm
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
  1. #include <iostream>
  2.  
  3. int main()
  4. {
  5.  unsigned mes, dia; std::cin >> mes >> dia;
  6.  
  7.  unsigned dias[] = {
  8.        31, 30, 28, 30, 31, 30,
  9.        31, 31, 30, 31, 30, 31
  10.  };
  11.  
  12.  dias[mes - 1] = dia;
  13.  
  14.  unsigned diaanno = 0;
  15.  
  16.  while (mes --> 0)
  17.      diaanno += dias[mes];
  18.  
  19.  std::cout << diaanno << std::endl;
  20.  
  21.  return 1;
  22. }



Título: Re: Problema con Arrays en C (no C++)
Publicado por: Stakewinner00 en 26 Mayo 2015, 23:12 pm
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 :(


Título: Re: Problema con Arrays en C (no C++)
Publicado por: Peregring-lk en 26 Mayo 2015, 23:19 pm
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).


Título: Re: Problema con Arrays en C (no C++)
Publicado por: Stakewinner00 en 26 Mayo 2015, 23:24 pm
Ups si, no me fije. Lo que si que faltaría sería std:: en el cin para poder compilarlo pero bueno...


Título: Re: Problema con Arrays en C (no C++)
Publicado por: Peregring-lk en 26 Mayo 2015, 23:41 pm
Jaja. Hecho.