elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda acerca de matriz en c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Duda acerca de matriz en c++  (Leído 5,403 veces)
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Duda acerca de matriz en c++
« Respuesta #10 en: 20 Mayo 2014, 13:41 pm »

Varias cosas:

* Tabula el código... es imposible leer un código que no está correctamente tabulado.

* Pon nombres con sentido a las variables. 'fil' y 'col' dan a entender que son índices para la fila y la columna... cuando realmente están indicando el total de filas y columnas... nuevamente lo que prima aquí es que el código sea lo más legible posible para evitar problemas.

* No uses variables globales, no sucede en este caso concreto, pero dan problemas. Es mejor pasar la matriz como parámetro.

* Cúrrate un poquito la interfaz de usuario. El sistema para rellenar la matriz es espantoso... si pones un carácter no válido no te avisa, no sabes qué está pasando... poner mensajes de error ante entradas incorrectas te ayuda a ver también que el programa hace lo que debe... si no pones mensajes no sabes si se está tragando información incorrecta.

Respecto a este punto... cómo sabes cuándo has dejado de rellenar la matriz y el programa te está pidiendo los movimientos?? sencillamente, con tu código, es imposible saberlo.

Queda más bonito algo del tipo:

Código
  1. const int FILAS = 20;
  2. const int COLS = 20;
  3.  
  4. // ...
  5.  
  6. int main( )
  7. {
  8.  int num_filas, num_columnas;
  9.  
  10.  do
  11.  {
  12.    cout << "Numero de filas: ";
  13.    cin >> num_filas;
  14.    if ( num_filas < 1 || num_filas > FILAS )
  15.      cout << "Valor incorrecto." << endl;
  16.  } while ( num_filas < 1 || num_filas > FILAS );
  17.  
  18.  do
  19.  {
  20.    cout << "Numero de columnas: ";
  21.    cin >> num_columnas;
  22.    if ( num_columnas < 1 || num_columnas > COLS )
  23.      cout << "Valor incorrecto." << endl;
  24.  } while ( num_columnas < 1 || num_columnas > COLS );
  25.  
  26.  // ...
  27. }

Es más código pero si algo funciona mal puedes ver qué es simplemente "jugando" con tu aplicación.

* Procura reducir el ámbito de las variables al mínimo posible:

Código
  1. int i,j,c,pasos,x,y,l,m,Ac;

Tienes esta línea al inicio de 'Mover_posicion'. No es necesario... si vas a usar un índice en un for puedes declarar la variable dentro del for:

Código
  1. for ( int i=0; i < 20; i++ )
  2. {
  3. }

Reutilizar variables dentro de una misma función es algo que hay que realizar con sumo cuidado para evitar meteduras de pata.

* Reutiliza código. Usas en varios puntos, por ejemplo, el código que imprime la matriz en pantalla. Saca ese código a una función y evita duplicarlo... por un lado, si ese código tiene errores, solo tendrás que corregirlos en un sitio, por otro, todas las invocaciones funcionarán igual.

Código
  1. void PintaMatriz( char matriz[][COLS], int filas, int columnas )
  2. {
  3.  for ( int i = 0; i < filas; i++)
  4.  {
  5.    for ( int j = 0; j < columnas ; j++)
  6.      cout << matriz[i][j] << " ";
  7.    cout << endl;
  8.  }
  9. }

* Cuidado con las asignaciones. La siguiente instrucción de tu programa no hace nada. ¿Metedura de pata o despiste?

Código
  1. matriz[x][y] = matriz[x][y];

* Controla el rango de valores de las variables:

Código
  1.  cout<<"Ingrese filas y columnas"<<endl;
  2.  cin>>fil>>col;

¿Qué sucede si pongo 1000 y 244? Que el programa fallará al intentar escribir fuera de la matriz de 20x20 que has definido.

* Inicializa las variables:

Código
  1.  int c,pasos,x,y,l,m,Ac;
  2.  
  3.  // ...
  4.  Ac=Ac + Puntaje(x,y); // Que valor tiene Ac aqui???

Código
  1. float Puntaje(int x, int y)
  2. {
  3.  float Pts;
  4.  if (matriz[x][y]=='$')
  5.    Pts=1.0;
  6.  else if (matriz[x][y]=='%')
  7.    Pts=1.5;
  8.  else if (matriz[x][y]=='&')
  9.    Pts=2.0;
  10.  
  11.  return Pts; // Cuantos puntos vale '|' ??
  12. }

* No tienes ningún chequeo que impida introducir varios 'I' o 'F' así como tampoco compruebas que, obligatoriamente, se haya introducido una 'I' y una 'F' en la matriz.

* No compruebas que con 'pasos' te puedas salir de la matriz.

Tienes bastantes fallos en la aplicación. Te he indicado un poco lo que he ido viendo.

Dale un repaso al código, corrige las cosillas y seguimos revisando.


En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
duda con arrays o matriz?
Programación Visual Basic
ricardovinzo 4 3,997 Último mensaje 10 Junio 2008, 23:36 pm
por CeLaYa
Duda - Buscar si existe una matriz dentro de otra matriz
Programación Visual Basic
EddyW 2 6,007 Último mensaje 14 Agosto 2010, 06:18 am
por EddyW
duda resultado de matriz [resuelto y con for incluido :) ]
Programación C/C++
flony 7 4,657 Último mensaje 16 Octubre 2010, 01:53 am
por Akai
Duda con la matriz de cadena en C.
Programación C/C++
orehmu 1 1,836 Último mensaje 1 Abril 2015, 05:12 am
por rir3760
Duda con matriz
Programación C/C++
bistec 1 1,799 Último mensaje 7 Abril 2017, 17:37 pm
por n-utz
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines