jueves, 11 de junio de 2015

EJERCICIOS CON MATRICES Y BUENAS PRACTICA DE PROGRAMACIÓN (Semana catorce)

RECORRIDO SOBRE MATRICES

Algoritmo_imprime_por_fila(mat, m,n)
                Variables:
                     i,j: entero
                INICIO
                           PARA i DESDE 1 HASTA m CON_VARIACION +1
                                   PARA j DESDE 1HASTA n CON_VARIACION +1
                                               ESCRIBA(mat[i][j])
                                   Fin (PARA)
                          Fin (PARA)
                FIN
Fin (imprime_por_fila)

Algoritmo_imprime_columna (mat, m,n)
                     Variables:
                     i,j: entero
                INICIO
                           PARA i DESDE 1 HASTA n CON_VARIACION +1
                                   PARA j DESDE 1HASTA m CON_VARIACION +1
                                               ESCRIBA(mat[j][i])
                                   Fin (PARA)
                          Fin (PARA)
                FIN
Fin (imprime_por_columna)

Ejemplo 1

Escriba una matriz que de los puntos intercalados dentro de la matriz como se realiza en una tabla de ajedrez.

Void imprime_ajedrez(matrix,m,n)
                Variables:
                 i: entero
                INICIO
                               PARA i DESDE 1 HASTA m CON_VARIACION +1
                                               SI i % 2 <> 0
                                                               Imprime_fila_intercalada(matrix, i, 1, n)
                                               DE_LO_CONTRARIO
                                                               Imprime_fila_intercalada(matrix,i,2,n)
                                               Fin(SI)
                               Fin(PARA)
                FIN
Fin(imprime_ajedrez)


 Void imprime_fila_intercalada(matriz, fila, inicio, fin)
                Variables:
                  j: entero
                INICIO
                               PARA j DESDE inicio HASTA fin CON_VARIACION +2
                                               ESCRIBA(matriz[fila][j]
                               Fin(PARA)
                FIN
Fin(imprime_fila_intercalada)


EJERCICIO 

se requiere un algoritmo que simule el juego de buscaminas. El juego tendrá 2 etapas:
La primera es el plantado de minas, inicialmente se debe preguntar al usuario el número de minas a colocar el cual no debe exceder a 10, el software debe validar que no supere este número y que tenga al menos una mina.  Luego el primer jugador llenará el campo de 5 x 5 con minas siendo estas representadas por el número 1, ubicándolas usando las coordenadas X(fila) y Y(columna).  la segunda fase consiste en un segundo jugador tratando de no toparse con las minas. Esto es ensayando y contando cuantas fases ha superado.  Se debe ir ingresando coordenadas y marcando con 2 en los intentos que no se encuentre una mina.

Variables  de entrada:
  minas[5][5]: enteros
  i,j: enteros
 cx, cy: entero
 cantminas: entero
 oport: entero
 encuentra: entero

 variables de salida:
 aciertos: entero


 Algoritmo buscaminas
          variables:
                minas[5][5]: enteros
                i,j,cx, cy,cantminas, oport, encuentra: entero
     INICIO
          PARA i DESDE 1 HASTA 5 CON_VARIACION +1
                   PARA j DESDE 1 HASTA 5 CON_VARIACION +1
                         minas[i][j]=0
                    Fin(PARA)
           Fin(PARA)
           ESCRIBA("ingrese el número de minas a colocar")
           LEA  (cantminas)
           MIENTRAS cantminas<1 v cantminas>10
                     ESCRIBA ("la cantidad de minas debe ser mayor a 1 y menor o igual a 10")
                     LEA (cantminas)
           FIN (MIENTRAS)
                    oport=25 - cantminas
           PARA i DESDE 1 HASTA cantminas CON_VARIACION+1
                     ESCRIBA("ingrese las coordenadas X y Y")
                     LEA (x,y)
                     MIENTRAS minas [x][y]< >0
                               ESCRIBA ("posición ocupada, ingrese la coordenada de nuevo")
                               LEA (x,y)
                      FIN (MIENTRAS)
                           minas [x][y]=1
            FIN (PARA)
            ESCRIBA ("modo jugador")
                aciertos=0
                 encuentra=0
            PARA i DESDE 1 HASTA oport CON_VARIACION +1
                       SI encuentra==0
                                ESCRIBA("ingrese las coordenadas de su intento")
                                LEA [x][y]
                               MIENTRAS minas [x][y]==2
                                          ESCRIBA("posición ocupada, ingrese la coordenada de nuevo")
                                          LEA (x,y)
                               FIN (MIENTRAS)
                                   SI minas[x][y]=1
                                     encuentra=1
                                    DE_LO_CONTRARIO
                                       minas[x][y] =2
                                       aciertos=aciertos +1
                                   FIN (SI)
                       FIN (SI)
         FIN (PARA)
         ESCRIBA("el usuario alcanzó un número de aciertos igual a:  ", aciertos)         
     FIN
Fin(buscaminas)

BUENAS PRACTICAS DE PROGRAMACIÓN

  • Escribe tus programas lo más simple y directo posible. Keep it simple.
  • Ajusta las opciones del programa para que arroje la mayor cantidad de errores y advertencias posibles al compilar, tu aplicación tendrá menores chances de obtener errores aleatorios.
  • Explicar el propósito, funcionamiento completo y el resultado esperado.
  • Dentro de las funciones definidas, establece un espaciado o indentación, que resalte la estructura funcional de la aplicación y facilite la lectura al programador al que le corresponda analizar el código
  • Se recomienda declarar variables en líneas separadas, ya que se facilita la descripción de cada variable mediante comentarios.
  • Poner un espacio después de cada coma(,) facilita la legibilidad del código.
  • No uses variables cuyo nombre no posea algún significado descriptivo, una variable con nombres significativos permite al lector entender el contexto del código y permite disminuir la cantidad de documentación asociada.
  • Se recomienda usar:  numero_de_filas=input(‘Entre el número de filas: ’)                                                               En lugar de: m=input(‘Entre el número de filas: ’);
  • Comenta cuando sea justo y necesario.
  • Se recomienda como buena costumbre, añadir al inicio de cada función, un bloque de comentarios que expliquen el comportamiento general de la función, así se facilita la búsqueda de errores.
  • Se recomienda usar:   % aplica la formula de la sumatoria de los enteros hasta n                 Suma=(n*(n+1))/2                                                                                                               En lugar de: suma=(n*(n+1))/2
  • Es altamente recomendada la definición de variables locales al inicio de la implementación de cada función, como un bloque de código bien separado del bloque que contenga las instrucciones ejecutables, ésta separación puede consistir en una línea en blanco, o bien un comentario que denote la utilidad de cada bloque.
  • En caso de usar operadores binarios (por ejemplo +, -, &&, ||, entre otros) se recomienda poner espacio a los extremos de cada operador, de modo que se resalte su presencia y se facilite la lectura del código. 
  • Se recomienda en algunas operaciones complejas, hacer uso de paréntesis redundantes o innecesarios que sirven para poder agrupar expresiones dentro de tales operaciones.
  • Evita la incorporación de más de una instrucción por línea. Esto reduce notoriamente la legibilidad del código, ya que el programador habitualmente está acostumbrado a leer una instrucción por línea.
  • Si el código soporta la separación de sentencias en varias líneas, procura realizar una separación coherente, en el que cada punto de ruptura tenga sentido.
  • Si una instrucción abarca más de una línea, recuerda realizar la indentación necesaria.
  • Cuando escribas operaciones que hagan uso de muchos operadores, procura revisar que las operaciones se estén realizando en el orden que tu esperas que se realicen.
  • Si el lenguaje soporta llaves({}) para la separación de bloques, es altamente recomendado usarlas, ello facilita el proceso de distinción de bloques de código en forma rápida, permitiendo identificar y reparar errores en el código con menos dificultad.
  • Si deseas evitar omitir una llave, abre y cierra el bloque de código que deseas crear, y luego introduce código dentro del bloque, con eso te aseguras la victoria.
  • Nunca olvides inicializar los contadores y sumadores.
Referencias
‘Arbeláez Velázquez Andrés’-recomendaciones para la programación en Matlab
http://www2.udearroba.co/mod/resource/view.php?id=79212

No hay comentarios:

Publicar un comentario