[C con Clase] Dudas acerca del punto 3-11

Steven Davidson srd4121 en njit.edu
Sab Dic 3 00:30:09 CET 2011


Hola Santiago,

2011/12/2 Santiago <santiagonar1 en hotmail.com>:
> Saludos compañeros.
>
> He comenzado el curso de C++, y debo decir que es excelente, muy completo y
> organizado. Pero como buen novato :p ya me he encontrado con algunas dudas.
>
> En el punto 3 del capitulo 11 se pide hacer una función que muestre las
> fechas, para la cual es necesario un array que almacene los meses. Mi
> problema es que no se muy bien como implementar dicho array, mirando el
> siguiente capitulo encontré un ejemplo en el cual se usan punteros, y
> guiándome por este implemente esta función:
>

Cuando tienes cuestiones como ésta, es mejor pensar en lo que te
interesa hacer. Es decir, desde el punto de vista de los conceptos,
fíjate en lo que quieres hacer. En este caso, te interesa crear una
lista de nombres de los meses. Ahora tienes que pensar en la forma de
representar estos conceptos en términos de C++. Una posibilidad es
crear un array de cadenas de caracteres. Por ejemplo,

char lista[12][11] = { "enero", "febrero", ... , "diciembre" };

Y ya tienes solucionado el problema.

> --------------
>
> void Mostrar(fecha)
> {
> char *meses[] = {"enero", "febrero", "marzo", "abril", "mayo", "junio",
> "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"};
>

Puedes crear un array de punteros, pero como no hemos visto el tema de
punteros, no lo aconsejo para este ejercicio.

> cout<<"La fecha es: "<<Fecha.dia<<"de "<<meses[Fecha.mes -1]<<"del
> "<<Fecha.anno<<endl;
> }
>
> -------------
>
> Sin embargo me aparece un error: "Conversion obsoleta de una constante de
> cadena  a '*char'[-Wwrite-string]". ¿Porque ocurre esto?.
>

Bueno, Israel te ha contestado a esta pregunta. Sólo quiero mencionar
que la batalla del tipo de dato de una cadena literal ha sido MUY
larga. Menos mal que la gente de C++ impuso que una cadena literal y
por tanto constante, debería ser del tipo 'const char *'.

 Nuevamente, no hemos dado este tema de punteros, así que por ahora
usar el array de arrays de 'char'.

> Mi última duda es como acceder a los elementos del array, es decir a enero,
> febrero, etc.
>

El acceso es el mismo que para cualquier array. Tienes que pensar que
'meses' es un array. Y cualquier cosa que hagas con un array es válido
para cualquier otro tipo de array. El acceso se hace con el operador
[], el cual requiere un índice entero. Por ejemplo,

cout << meses[0] << endl;

De todas maneras, has hecho el acceso correctamente en el código anterior.


Por cierto, para los temas de los ejercicios del curso de C++,
recomiendo que los envíes a nuestro apartado de correo-e: ejercicios
(arroba) conclase (punto) net, para ser corregidos y analizados. Así
los demás seguidores del curso no se ven con la tentación de copiarse
los ejercicios :)

Espero haber aclarado las dudas.

Steven




Más información sobre la lista de distribución Cconclase