jueves, 15 de marzo de 2012

Respuesta 2do Reto (eyoZ)

¡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();
  } 

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);
            scanf("%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);
            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];     
       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');
 }

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