Saludos! Ayuda con una idea de Convertir de Texto a Numero!

Iniciado por eLPortaFrases, 13 Abril 2013, 12:04 PM

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

eLPortaFrases

Resulta que tengo que hacer dos ejercicios ... uno de convertir de Numero a Mes ..
Y otro de Mes a Numero .... pude convertir de Numero a mes con este Codigo:

1-Programa que pida el numero del mes y al final imprima los meses siguientes en letra:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

main ()
{
int a=0; int b=0;
printf ("\n DIGITE EL NUMERO DEL MES: ");
scanf ("%d",&b);

for (a=1;a<=12;a++)
if (a>b)
switch (a)
{
case 1:
printf ("\n ENERO");
break;
case 2:
printf ("\n FEBRERO");
break;
case 3:
printf ("\n MARZO");
break;
case 4:
printf ("\n ABRIL");
break;   
case 5:
printf ("\n MAYO");
break;   
case 6:
printf ("\n JUNIO");
break;
case 7:
printf ("\n JULIO");
break;
case 8:
printf ("\n AGOSTO");
break;
case 9:
printf ("\n SEPTIEMBRE");
break;   
case 10:
printf ("\n OCTUBRE");
break;   
case 11:
printf ("\n NOVIEMBRE");
break;
case 12:
printf ("\n DICIEMBRE");
break;
}
if (a!=13)
{
printf ("\n %d",a);
}

getch ();
}

2- Programa que pida el nombre del mes y al final imprima los meses siguientes en NUMERO:
en este no he podido .. me dan una idea please!!

0xDani

#1
Para el primero:


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

const char *months[] = {"Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"};

int main(int argc, char **argv)
{
int a;

do{
  scanf("%d", &a);
  if(a>=1 && a<=12)
   printf("%s\n", months[a-1]);

}while(a>=1 && a<=12);

return 0;
}


Para el segundo:


#include <stdio.h>
#include <stdlib.h>
const char *months[] = {"Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"};

int main(int argc, char **argv)
{
char month[20];
int i, found;

do{
scanf("%s", month);
found = 0;
for(i=0; i<12; i++)
{
  if(!strcmp(month, months[i]))
  {
   found=1;
   break;
  }
}

if(found)
  printf("%d\n", i+1);
else
  printf("Mes invalido");
}while(found);

return 0;
}



I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

leosansan

#2
Cita de: eLPortaFrases en 13 Abril 2013, 12:04 PM
Resulta que tengo que hacer dos ejercicios ... uno de convertir de Numero a Mes ..


Aunque funciona bien el swtich, prefiero los arrays. Manias:


Código (cpp) [Seleccionar]

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

int main()
{
   int i,j=0;
   char aux[10],mes[12][11]={"ENERO","FEBRERO","MARZO","ABRIL","MAYO","JUNIO","JULIO","AGOSTO","SEPTIEMBRE","OCTUBRE","NOVIEMBRE","DICIEMBRE"};
   do{
       printf ("\n\nDIGITE EL NUMERO DEL MES: ");
       scanf ("%d",&i);
       }while(i-1<0 || i-1>11);
   printf("%s  ",mes[i-1]);
   do{
       printf ("\n\n NOMBRE DEL MES: ");
       scanf ("%s",&aux);
       for (i=0;i<12;i++){
           if (strcmp (aux,mes[i])==0){
               printf("%d  ",i+1);
               j++;
               break;
           }
       }
   if (j==0)
       puts("\nNUMERO DE MES NO VALIDO" );
   }while(j==0);
   return EXIT_SUCCESS;
}


Saluditos!. ....

P.D: Se me ha adelantado 0xDani, aunque tiene que revisar la condición del while.

REEDITADO

0xDani

#3
Cita de: leosansan en 13 Abril 2013, 15:57 PM
aunque tiene que revisar la condición del while.

EDIT: Ok, en el segundo, la condicion no es esa. Es lo que tiene cuando programo directamente en el mensaje del foro, que me lio a copiar y pegar xD. Gracias por la correccion.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

eLPortaFrases

Muchas gracias OxDani y Leosansan por la atencion prestada ... he aprendido cosas nuevas con esto codigos ..
pero no se porque no me corren en mi programa ... solo me corre el primer ejercicio de OxDani .. pero el segundo de OxDani no me corre ni el primero de Leosansan ..

De todas formas gracias por el tiempo empleado!

rir3760

Cita de: eLPortaFrases en 14 Abril 2013, 01:15 AMpero no se porque no me corren en mi programa ... solo me corre el primer ejercicio de OxDani .. pero el segundo de OxDani no me corre ni el primero de Leosansan ..
En el segundo programa de 0xDani falta incluir el encabezado <string.h>, este es necesario para tener acceso al prototipo de la función strcmp.

En el caso del programa de leosansan el problema se debe a que utiliza un array de arrays, ya que cada elemento solo puede contener una cadena de nueve caracteres no puede detectar "SEPTIEMBRE". Eso se soluciona cambiando la declaración de ese array a:

char aux[11], *mes[] = {
   "ENERO", "FEBRERO", "MARZO", "ABRIL",
   "MAYO", "JUNIO", "JULIO", "AGOSTO",
   "SEPTIEMBRE", "OCTUBRE", "NOVIEMBRE", "DICIEMBRE"
};


También se debería limitar el numero de caracteres a almacenar en el array modificando la llamada a scanf:
scanf("%10s",aux);

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

leosansan

Cita de: eLPortaFrases en 14 Abril 2013, 01:15 AM
.......................................................... ..
pero no se porque no me corren en mi programa ... solo me corre el primer ejercicio de OxDani .. pero el segundo de OxDani no me corre ni el primero de Leosansan ..


¿¿¿¿¿:::????????

¿ Seguro que introduces los meses en mayúsculas?. Porque a mí me furula perfectamente, una muestra:

Código (cpp) [Seleccionar]

DIGITE EL NUMERO DEL MES: 9
SEPTIEMBRE

NOMBRE DEL MES: ENERo

NUMERO DE MES NO VALIDO


NOMBRE DEL MES: 11

NUMERO DE MES NO VALIDO


NOMBRE DEL MES: ENERO
1
DIGITE EL NUMERO DEL MES: 12
DICIEMBRE

NOMBRE DEL MES: FEBRERO
2
DIGITE EL NUMERO DEL MES: 5
MAYO

NOMBRE DEL MES: MARZO
3
DIGITE EL NUMERO DEL MES: 15

DIGITE EL NUMERO DEL MES: 8
AGOSTO

NOMBRE DEL MES: adsfgadfga

DIGITE EL NUMERO DEL MES: ABRIL
DICIEMBRE

NOMBRE DEL MES: 4


Cita de: rir3760 en 14 Abril 2013, 03:35 AM

También se debería limitar el numero de caracteres a almacenar en el array modificando la llamada a scanf:
scanf("%10s",aux);


También convendría ene ese caso hacer una limpieza posterior del buffer, supuesta una entrada errónea de más allá de diez caracteres.

Lo de Septiembre parece que me persigue, tengo que aprender a sumar, es decir a prestar más atención a lo que escribo. Thanks!.

Saluditos!. ....

leosansan


eLPortaFrases

Ahora si perfecto todo!! ... gracias Leosansan, OxDani ..
y gracias rir3760 por las correcciones ...

quisiera tener conocimientos acerca de C\C++ ya que me parece muy interesante, es primera vez q doy Programacion .. por donde empezar? ..
aunq ya se algunas cosas basicas, como usar un switch, un printf y un scanf.

thanks!