¡Que tal!, como les dije en la entrada anterior, hoy publicare la respuesta
a mi 2do reto de programación (aunque un poco tarde), me da nostalgia que nadie
mando la respuesta, (ni siquiera un intento ¡NADA!), primero analicemos
las instrucciones:
1.- El programa pretende almacenar 5 mensajes decodificados y después
mostrarlos, no intentes programar un fichero, por el momento este no es nuestro
objetivo, en primera instancia el código tiene varios errores, pero compila.
Arregla solo el error de almacenado, ya que lo hiciste, ¿crees que es mejor que
m y n sean estáticos o dinámicos, pensando en optimización de código? (explica
brevemente tu respuesta), se cual sea tu respuesta aplícala al código, y por
ultimo agrega las sentencias de control que necesites.
Aquí el código (original):
#include"conio.h"
#include"stdio.h"
main()
{
char Matriz [5][15];
printf("Inserta Mensaje 1: ");
scanf("%s", &Matriz[1]);
printf("Inserta Mensaje 2: ");
scanf("%s", &Matriz[2]);
printf("Inserta Mensaje 3: ");
scanf("%s", &Matriz[3]);
printf("Inserta Mensaje 4: ");
scanf("%s", &Matriz[4]);
printf("Inserta Mensaje 5: ");
scanf("%s", &Matriz[5]);
printf("\nMensaje 1: ");
printf("\n%s", Matriz[0]);
printf("\n%s", Matriz[1]);
printf("\n%s", Matriz[2]);
printf("\n%s", Matriz[3]);
printf("\n%s", Matriz[4]);
getch();
}
{
char Matriz [5][15];
printf("Inserta Mensaje 1: ");
scanf("%s", &Matriz[1]);
printf("Inserta Mensaje 2: ");
scanf("%s", &Matriz[2]);
printf("Inserta Mensaje 3: ");
scanf("%s", &Matriz[3]);
printf("Inserta Mensaje 4: ");
scanf("%s", &Matriz[4]);
printf("Inserta Mensaje 5: ");
scanf("%s", &Matriz[5]);
printf("\nMensaje 1: ");
printf("\n%s", Matriz[0]);
printf("\n%s", Matriz[1]);
printf("\n%s", Matriz[2]);
printf("\n%s", Matriz[3]);
printf("\n%s", Matriz[4]);
getch();
}
Ahora hay que arreglarlo, primero contestamos la pregunta: ¿crees que es
mejor que m y n sean estáticos o dinámicos, pensando en optimización de código?
tenemos dos respuestas.
1.- Como ya se sabe que el código pretende almacenar 5 mensajes, conviene
que m se reserve en 5 su tamaño y para n igualmente conviene tener el arreglo estático
(nos ahorraremos memoria al iniciar A[m][n]).
2.- Si pensaste de una vez adelantarte al paso 2 del ejercicio, estas en lo
correcto, pero como el programa es bastante "especifico", puesto que
se sabe que es la continuidad de un ejercicio propuesto por Ex tmail (ver), así que m
podrías darle un valor dinámico, mientras que a n, un valor estático suponiendo
un "colchón" para la entrada.
Respuesta de la primera parte:
#include<conio.h>
#include<stdio.h>
main()
{
char Matriz [5][15];
for (int i=1; i < 6; i++){
printf("\n Mensaje %d: ", i);
main()
{
char Matriz [5][15];
for (int i=1; i < 6; i++){
printf("\n Mensaje %d: ", i);
scanf("%s", &Matriz[i]);
}
printf("\n\n Los mensajes son: \n\n");
for (i=1; i<6; i++){
printf("\n%s", Matriz[i]);
}
}
printf("\n\n Los mensajes son: \n\n");
for (i=1; i<6; i++){
printf("\n%s", Matriz[i]);
}
getch();
}
}
Respuesta de la segunda parte:
#include<stdio.h>
main()
{
char Matriz [5][15];
for (int i=1; i < 6; i++){
printf("\n Mensaje %d: ", i);
main()
{
char Matriz [5][15];
for (int i=1; i < 6; i++){
printf("\n Mensaje %d: ", i);
fflush(stdin);
gets(m[i]);
}
printf("\n\n Los mensajes son: \n\n");
for (i=1; i<6; i++){
puts(m[i]);
fflush(stdin);
}
gets(m[i]);
}
printf("\n\n Los mensajes son: \n\n");
for (i=1; i<6; i++){
puts(m[i]);
fflush(stdin);
}
}
Eliminamos la librería conio.h ya que getch(); es considerado como un
error de programación, y utilizamos gets y puts para el tratado de cadenas, y
fflush que nos ayuda a limpiar el buffer.
En lo personal yo cree un tercer condigo el cual es mas "robusto",
por que permite ciertas cosas, revísalo (este último solo es opcional):
#include<stdio.h>
#include<stdlib.h>
#define n_mensaje 50
main()
{
char m[n_mensaje][20];
#define n_mensaje 50
main()
{
char m[n_mensaje][20];
int
i=0;
int
mensaje=0;
char regresa;
do{
do{
system("cls");
printf("\n Cuantos Mensajes tienes: ");
scanf("%d", &mensaje);
}while(mensaje < 1 || mensaje > n_mensaje);
for (i=1; i < mensaje; i++){
printf("\n Mensaje %d: ", i);
fflush(stdin);
gets(m[i]);
}
printf("\n\n Los mensajes son: \n\n");
for (i=1; i<mensaje; i++)
{
puts(m[i]);
fflush(stdin);
}
printf("\n\n\tPresione:\n\n\t\t Repetir \"R\": ");
printf(" :\"Q\" Salir\b\b\b\b\b\b\b\b\b\b\b\b");
regresa=_getche();
}while(regresa == 'R' || regresa == 'r');
}
do{
do{
system("cls");
printf("\n Cuantos Mensajes tienes: ");
scanf("%d", &mensaje);
}while(mensaje < 1 || mensaje > n_mensaje);
for (i=1; i < mensaje; i++){
printf("\n Mensaje %d: ", i);
fflush(stdin);
gets(m[i]);
}
printf("\n\n Los mensajes son: \n\n");
for (i=1; i<mensaje; i++)
{
puts(m[i]);
fflush(stdin);
}
printf("\n\n\tPresione:\n\n\t\t Repetir \"R\": ");
printf(" :\"Q\" Salir\b\b\b\b\b\b\b\b\b\b\b\b");
regresa=_getche();
}while(regresa == 'R' || regresa == 'r');
}
Bien eso es todo por el momento, dudas, comentarios, etc. retoswm [at] gmail.com, esperen el próximo reto el día sábado.
No hay comentarios:
Publicar un comentario