• Miércoles 6 de Noviembre de 2024, 07:34

Autor Tema:  como asociar un mes con un numero?  (Leído 2799 veces)

pacorubio77

  • Miembro MUY activo
  • ***
  • Mensajes: 207
    • Ver Perfil
como asociar un mes con un numero?
« en: Lunes 20 de Octubre de 2008, 19:04 »
0
Hola a todos,quisiera que me dierais una idea de asociar un mes con su respectivo numero,es decir septiembre con el 9,

yo lo he echo de una forma,pero queda muy burrada,quisiera una forma un poco más "profesional",me refiero mas simplificada, yo he echo de esta forma..(lo pongo esquemático)

int ConMes(string m){

    int dev;
    if(m=="enero"){
        dev=1;
    }
    else{
        if(m=="febrero"){
              dev=2;
       }
     //y asi sucesivamente con todos.....
   }

}

pero si alguien me da una idea como simplificar todo esto?

Espero respuestas,Gracias.

eternity

  • Miembro activo
  • **
  • Mensajes: 78
  • Nacionalidad: ar
    • Ver Perfil
    • http://lameriendadejuan.blogspot.com/
Re: como asociar un mes con un numero?
« Respuesta #1 en: Lunes 20 de Octubre de 2008, 19:56 »
0
Código: C
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. enum MES{
  5.     Enero,Febrero,Marzo,Abril,Mayo,Junio,
  6.     Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre
  7. };
  8.  
  9. void main(void){
  10.  
  11.     char meses[12][10];
  12.     int i;
  13.  
  14.     strcpy(meses[0],"Enero");
  15.     strcpy(meses[1],"Febrero");
  16.     strcpy(meses[2],"Marzo");
  17.     strcpy(meses[3],"Abril");
  18.     strcpy(meses[4],"Mayo");
  19.     strcpy(meses[5],"Junio");
  20.     strcpy(meses[6],"Julio");
  21.     strcpy(meses[7],"Agosto");
  22.     strcpy(meses[8],"Septiembre");
  23.     strcpy(meses[9],"Octubre");
  24.     strcpy(meses[10],"Noviembre");
  25.     strcpy(meses[11],"Diciembre");
  26.  
  27.     for (i=Enero; i<=Diciembre; i++)
  28.         printf("mes %d = %sn",i+1, meses[i]);
  29. }
  30.  
  31.  

eso es lo mas cercano a no hacer infinitos IFs Anidados y creo que es mas simple, espero que te sirva si lo entiendes?

 :good:


pacorubio77

  • Miembro MUY activo
  • ***
  • Mensajes: 207
    • Ver Perfil
Re: como asociar un mes con un numero?
« Respuesta #2 en: Lunes 20 de Octubre de 2008, 20:31 »
0
Hola,no se si me serviria,porque yo tengo que meter por teclado el mes ,tipo string y me tiene que devolver el numero,este me parece que no es el caso..verdad?

rfog

  • Miembro MUY activo
  • ***
  • Mensajes: 166
    • Ver Perfil
Re: como asociar un mes con un numero?
« Respuesta #3 en: Lunes 20 de Octubre de 2008, 20:42 »
0
Hola, no hace falta que construyas dinámicamente el array, lo puedes hacer de forma estática

Código: Text
  1. char meses[12][]={"enero","febrero","marzo",...};
  2.  

Luego, cuando te metan el mes por teclado, lo pasas a minúsculas y en un bucle recorres el array de los meses haciendo comparaciones de cadenas hasta que encuentres el mes adecuado. Luego el número es el del índice de la posición en el array más uno.
Microsoft Visual C++ MVP - Mi blog sobre programación: http://geeks.ms/blogs/rfog

eternity

  • Miembro activo
  • **
  • Mensajes: 78
  • Nacionalidad: ar
    • Ver Perfil
    • http://lameriendadejuan.blogspot.com/
Re: como asociar un mes con un numero?
« Respuesta #4 en: Lunes 20 de Octubre de 2008, 22:12 »
0
Cita de: "rfog"
Hola, no hace falta que construyas dinámicamente el array, lo puedes hacer de forma estática

en ningun lado use allocacion dinamica de memoria, intenta leer bien mi codigo!

 :no:


eternity

  • Miembro activo
  • **
  • Mensajes: 78
  • Nacionalidad: ar
    • Ver Perfil
    • http://lameriendadejuan.blogspot.com/
Re: como asociar un mes con un numero?
« Respuesta #5 en: Lunes 20 de Octubre de 2008, 22:13 »
0
Código: C
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. void main(void){
  5.  
  6.     char meses[12][12];
  7.     char mes[12];
  8.     int i;
  9.  
  10.     strcpy(meses[0],"Enero");
  11.     strcpy(meses[1],"Febrero");
  12.     strcpy(meses[2],"Marzo");
  13.     strcpy(meses[3],"Abril");
  14.     strcpy(meses[4],"Mayo");
  15.     strcpy(meses[5],"Junio");
  16.     strcpy(meses[6],"Julio");
  17.     strcpy(meses[7],"Agosto");
  18.     strcpy(meses[8],"Septiembre");
  19.     strcpy(meses[9],"Octubre");
  20.     strcpy(meses[10],"Noviembre");
  21.     strcpy(meses[11],"Diciembre");
  22.  
  23.     printf("ingrese el nombre del mes (primera letra en mayuscual): ");
  24.     scanf("%s", mes);
  25.  
  26.     for (i=0; i<12; i++)
  27.         if (strcmp(mes, meses[i])==0){
  28.             printf("%s es el mes numero %dn", mes, i+1);
  29.             i=13;
  30.         }
  31.     if (i=13)
  32.         printf("escribiste mal el mes!n");
  33. }
  34.  

bueno ahora si, esta tiene que ser la respuesta!

 :good:


Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: como asociar un mes con un numero?
« Respuesta #6 en: Lunes 20 de Octubre de 2008, 22:22 »
0
Cita de: "eternity"
Cita de: "rfog"
Hola, no hace falta que construyas dinámicamente el array, lo puedes hacer de forma estática

en ningun lado use allocacion dinamica de memoria, intenta leer bien mi codigo!

 :no:

Nadie dijo que lo hubieras hecho, lee nuevamente lo que se dijo ya que es correcto.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

rfog

  • Miembro MUY activo
  • ***
  • Mensajes: 166
    • Ver Perfil
Re: como asociar un mes con un numero?
« Respuesta #7 en: Lunes 20 de Octubre de 2008, 22:27 »
0
Cita de: "eternity"
Cita de: "rfog"
Hola, no hace falta que construyas dinámicamente el array, lo puedes hacer de forma estática

en ningun lado use allocacion dinamica de memoria, intenta leer bien mi codigo!

 :no:

No he dicho asignación dinámica de memoria, he dicho "construir dinámicamente el array" frente a hacerlo de forma estática. Es decir, en mi caso, ya sea un array global o local, es el compilador el que genera el array (realmente estará en RODATA y lo que hará será poner un puntero a ese área). Mi programa funcionará más rápido que el tuyo, usará menos memoria y encima, si por error se intentara escribir en el array para la comparación, el compilador lo detectaría.

Además, en el código de ejemplo que has puesto, si el usuario introduce "Enero" o "enERO" etc, el programa no encontrará el mes. Recuerda el teorema del universo y los usuarios.
Microsoft Visual C++ MVP - Mi blog sobre programación: http://geeks.ms/blogs/rfog

eternity

  • Miembro activo
  • **
  • Mensajes: 78
  • Nacionalidad: ar
    • Ver Perfil
    • http://lameriendadejuan.blogspot.com/
Re: como asociar un mes con un numero?
« Respuesta #8 en: Lunes 20 de Octubre de 2008, 22:28 »
0
Cita de: "Eternal Idol"
Cita de: "eternity"
Cita de: "rfog"
Hola, no hace falta que construyas dinámicamente el array, lo puedes hacer de forma estática

en ningun lado use allocacion dinamica de memoria, intenta leer bien mi codigo!

 :no:

Nadie dijo que lo hubieras hecho, lee nuevamente lo que se dijo ya que es correcto.

pero tampoco nadie asintió que se de debiera hacer de forma dinamica! &lt;_&lt;

de todas formas considero que fue error mio, por precipitarme!

 :brickwall:


eternity

  • Miembro activo
  • **
  • Mensajes: 78
  • Nacionalidad: ar
    • Ver Perfil
    • http://lameriendadejuan.blogspot.com/
Re: como asociar un mes con un numero?
« Respuesta #9 en: Lunes 20 de Octubre de 2008, 22:40 »
0
Cita de: "rfog"
Mi programa funcionará más rápido que el tuyo, usará menos memoria y encima, si por error se intentara escribir en el array para la comparación, el compilador lo detectaría.

esto no se trata de una competencia!, de todos modos los dos programas utilizan la misma cantidad de memoria (12*cantidad maxima de letras del mes mas largo). al fin y al cabo es un foro, no un coliseo!

Cita de: "rfog"
he dicho "construir dinámicamente el array

tendrias que haber dicho algo mas como, humanamente! cuestion de interpretacion!

en fin

 :beer:


rfog

  • Miembro MUY activo
  • ***
  • Mensajes: 166
    • Ver Perfil
Re: como asociar un mes con un numero?
« Respuesta #10 en: Lunes 20 de Octubre de 2008, 22:52 »
0
Cita de: "eternity"
esto no se trata de una competencia!, de todos modos los dos programas utilizan la misma cantidad de memoria (12*cantidad maxima de letras del mes mas largo). al fin y al cabo es un foro, no un coliseo!

 :beer:

A ver, ya sé que no es una competencia ni mucho menos, pero simplemente he puesto una alternativa.

De todos modos, mi programa usa menos memoria que el tuyo, de hecho mi programa (o tu programa con mi array estático, para entendernos) sólo usará un puntero (4 bytes) para el Array, que estará almacenado en el segmento RODATA del ejecutable. Al cargar en memoria mi programa, el sistema operativo cargará el array (las 12 cadenas) y asignará el puntero a dichas cadenas. Tu programa también contiene las 12 cadenas en el segmento de RODATA, pero al entrar en main asignará en la pila 12xla palabra más larga y luego copiará esas cadenas que están en RODATA al hueco dejado en la pila, con lo que las cadenas estarán duplicadas, gastando la parte de RODATA (que si el programa tiene un tiempo de ejecución largo o consumiera mucha memoria podría descartarse a paginación junto a los demás valores RODATA que estén en la misma página) y de la pila. Haz un build release y compruébalo.

Más  :beer:  :hola:
Microsoft Visual C++ MVP - Mi blog sobre programación: http://geeks.ms/blogs/rfog