Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Estudiante000000 en 16 Noviembre 2018, 03:06 am



Título: Ayuda para entender el programa.
Publicado por: Estudiante000000 en 16 Noviembre 2018, 03:06 am
Buenas noches quisiera saber el paso a paso de este programa osea en frio , el programa haya el determinante de una matriz cuadrada de 3x3 , pero quisiera saber el paso  a paso del programa , puse comentarios en las linea de codigo que no entiendo del programa , muchas gracias

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. int main()
  5. {
  6.  
  7. int matriz[6][4];
  8. int i, j;
  9. int valor1=0, valor2=0, delta, aux;
  10.  
  11. for (i = 1; i <= 3; i = i + 1)
  12. {
  13.  for (j = 1; j <= 3; j = j + 1)
  14.  {
  15.   system("cls");
  16.   cout << "Ingrese valor (" << i << "," << j << ")= ";
  17.   cin >> matriz[i][j];
  18.  }
  19. }
  20.  
  21. for (i = 4; i <= 5; i = i + 1)
  22. {
  23.  
  24.   matriz[i][1] = matriz[i - 3][1];
  25.   matriz[i][2] = matriz[i - 3][2];
  26.   matriz[i][3] = matriz[i - 3][3];
  27. }
  28.  
  29.  
  30. for (i = 1; i <= 3; i = i + 1)
  31. {
  32.  
  33.  aux = matriz[i][1] * matriz[i + 1][2] * matriz[i + 2][3];
  34.  valor1 = valor1 + aux;
  35.  aux = matriz[i][3] * matriz[i + 1][2] * matriz[i + 2][1];
  36.  valor2 = valor2 + aux;
  37. }
  38.  
  39. delta = valor1 - valor2;
  40.  
  41. system("cls");
  42. for (i = 1; i <= 3; i = i + 1)
  43. {
  44.  cout << "|" << matriz[i][1] << " , " << matriz[i][2] << " , " << matriz[i][3] << "|" <<endl ;
  45. }
  46.  
  47. cout << "La resuesta es: " << delta<< endl;
  48. system("PAUSE");
  49. return 0;
  50.  
  51. }


Título: Re: Ayuda para entender el programa.
Publicado por: K-YreX en 16 Noviembre 2018, 03:43 am
En primer lugar preguntarte si estos programas los has implementado tú o son códigos que has obtenido de algún otro sitio. Ya que tanto este como el otro programa que has comentado hace un rato y que vengo de responder tienen errores básicos de indexación. Por lo tanto te recomendaría que le echarás un vistazo a ese punto ya que es fundamental para casi cualquier programa.

Lo segundo recalcar que los índices en C++ empiezan en 0, no en 1 como estás teniendo en cuenta; otro dato que debes tener en cuenta.

Y te recomiendo que empieces corrigiendo estos errores, y acostumbrarte a no usar "números mágicos" como te he explicado en el otro post ya que dificulta un poco el entendimiento del programa.

Por ejemplo si sabes que la matriz es 3x3 no crees de manera aleatoria una matriz de 6x4. En todo caso podrías crear una matriz más grande si no sabes cuantas filas o columnas vas a utilizar (y usar dos variables para recorrer solo las posiciones útiles de la matriz, esto es habitual cuando trabajas con matrices estáticas de las que desconoces su tamaño) para ello:

Código
  1. const int TAM = 10;
  2. int matriz[TAM][TAM];
  3. int fila_util = 3;
  4. int col_util = 3;

Te comento que a cada posición de una matriz se accede como matriz[fila][columna] tanto para leer su contenido como para escribir en ella. Dicho esto empieza haciendo programas más pequeños y sencillos para familiarizarte con ello y te será más sencillo que querer abarcar programas con más código como estos.


Título: Re: Ayuda para entender el programa.
Publicado por: Estudiante000000 en 16 Noviembre 2018, 07:15 am
Hola , bueno estos codigos los pone el profesor para que lo analizemos  , se que estos programas son algo confuso totalmente de acuerdo ,pero por eso pongo en los comentarios mis dudas se que hace el programa pero en donde puse los comentarios seria fantastisco que me aclararas esas dudas gracias amigo.


Título: Re: Ayuda para entender el programa.
Publicado por: K-YreX en 16 Noviembre 2018, 08:36 am
Dudo mucho que a un nivel de universidad se cometan errores de indexación como estos. No sé que nivel tendréis ahora mismo ya que si estáis empezando igual lo pone para que os deis cuenta de los errores que contiene dicho código. Pero me parece un poco extraño que haga eso, igual depende del país o de la universidad, o del propio profesor...
Dicho esto vamos a ver que se puede hacer con el código.

Código
  1. for (i = 1; i <= 3; i = i + 1){
  2.  for (j = 1; j <= 3; j = j + 1){
  3.   system("cls");
  4.   cout << "Ingrese valor (" << i << "," << j << ")= ";
  5.   cin >> matriz[j];
  6.  }
  7. }

Lo primero es que este bloque tiene toda la pinta de ser para introducir los valores a la matriz pero en ese caso la línea 5 debería ser:
Código
  1. cin >> matriz[i][j];

Observando el segundo bloque en el que tienes dudas, donde aparecen los auxiliares creo entender que cuando sólo se pone un índice a la matriz es porque es igual el primero que el segundo; es decir, que matriz[1] creo que se refiere a matriz[1][1]. Dando esto por supuesto en todo el programa:

Código
  1. for (i = 4; i <= 5; i = i + 1) {
  2.   matriz[1] = matriz[i - 3][1];  
  3.   matriz[2] = matriz[i - 3][2];
  4.   matriz[3] = matriz[i - 3][3];
  5. }

En este bucle se haría una primera iteración en la que:
matriz[1][1] = matriz[1][1]
matriz[2][2] = matriz[1][2]
matriz[3][3] = matriz[1][3]
Es decir se copiarían los valores de la primera fila en la diagonal principal de la matriz y en la segunda iteración con i = 5 quedaría:
matriz[1][1] = matriz[2][1]
matriz[2][2] = matriz[2][2]
matriz[3][3] = matriz[2][3]
Por lo que se copiarían los valores de la segunda fila en la diagonal (unas operaciones un tanto absurdas creo yo pero eso es lo que hace literalmente).

Finalmente el segundo bucle for asigna un valor indeterminado a las variables ya que se cuando la i vale más de 1 se accede a posiciones de la matriz que no han sido escritas por lo que pueden contener basura (dudo si en tal caso siempre valdrían 0 esas posiciones pero creo que no, que pueden tener cualquier valor basura ya que la matriz no ha sido inicializada entera a 0).

Conclusión: Si estos códigos son de un profesor de universidad, estoy entre dudar de mis conocimientos adquiridos hasta ahora en C++ o dudar de los conocimientos de ese profesor. Si al final le encuentras sentido a estos códigos me gustaría que me lo hicieras saber por si he pasado algo por alto.