Ejercicio práctico 2.3

Ejercicio práctico 2.3

de Luis Guillermo Repetto Marci -
Número de respuestas: 4

Hpla, no logro entender el comportamiento del programa que escribí.

adjunto el programa y, al final del mismo, copio como comentarios pantalla de resultados obtenidos, para diferentes valores de n.

La letra del problema, al inicio del programa.

Me llama la atención la "Q" agregada a "+----" sólo cuando n > 81

y también el core dump que obtengo con cualquier otro valor <= 80

Desde ya muchas gracias.

Luis

En respuesta a Luis Guillermo Repetto Marci

Re: Ejercicio práctico 2.3

de Manuel Molina Chamsarian -
Hola Luis Guillermo, hay algunos comentarios para hacer:

1) char inic [5] = "+----"; este tipo de inicialización tiene un problema: cuando indicás 5, se reservan 5 bytes para esta variable, cuando en realidad requiere 6, ya que C siempre "agrega" un byte al final con el caracter '\0' para marcar el fin de la cadena de texto. Si pensás inicializar la cadena de texto al momento de declararlo, es mejor práctica hacerlo así: char inic[] = "+----" ya que C se encarga de agregar el mencionado caracter al final de la cadena.

2) La línea que entiendo que pusiste dentro del while para la impresión de las guías "printf("%s",inic[j%5]);" sólo imprimiría el caracter de la posición j%5 de inic (cambiando %s por %c). Por lo tanto, no se estaría resolviendo el ejercicio.

3) Te recomiendo que sigas los siguientes pasos para resolver este ejercicio (considerando que se pide usar sólo un bucle).
a) Calcular la cantidad de patrones enteros a imprimir.
b) Calcular cuántos caracteres debes imprimir del último patrón (el que puede quedar cortado).
c) Guardar en una cadena de texto los caracteres del último patrón (puede usarse alguna función de la librería string.h).
d) Imprimir los patrones enteros y por último la cadena de texto del punto anterior.

Quedo a las órdenes,
Manuel
En respuesta a Manuel Molina Chamsarian

Re: Ejercicio práctico 2.3

de Luis Guillermo Repetto Marci -

gracias Manuel, los errores eran 2:

primer error

modifiqué char inicial [5] = "+----";

por inicial [] = "+----";

segundo error

modifiqué printf("%s",inicial[i%5]); 

por printf("%c",inicial[i%5]); 

El %s daba el core dump

adicionalmente, eliminé j ya que no es necesario.

la operación i%5, retorna sucesivamente 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1.......