Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: C-- en 19 Noviembre 2012, 06:11 am



Título: [C++] Matrices
Publicado por: C-- en 19 Noviembre 2012, 06:11 am
Hola a todos..... tengo una duda existencial que aun no puedo resolver... necesito crear una matriz cuadrada de dimension n ingresada por el usuario por consola y luego el programa imprime la matriz con determinada forma creada por mi.

El codigo es el siguiente:

Código:
#include <iostream>
using namespace std;

void printMatriz(int m[][], int n){

    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            cout << m[i][j];
            if(j==n-1) cout << endl;
        }
    }
    cout << endl;

}

void forma(int m[][], int n){

    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            if(i==0) m[i][j] = 1;
            if(j==0||j==n-1) m[i][j] = 1;
            if(i==n-1) m[i][j] = 1;
        }
    }
    printMatriz(m,n);

}

int main(){

    int n = -1;
    int f;
    do{
        do{
            cout << "Ingrese dimension de matriz cuadrada mayor a 4: ";
            cin >> n;
            if(n==0) break;
        }while(n<5);
        int m[n][n];
        forma(m,n);        
    }while(n!=0);
    return 0;

}

Sé que esta mal la recepción de la matriz en las funciones, pero estoy perdido en como hacerlo funcionar.

Dado el código anterior, ¿Cuáles serían las modificaciones que ustedes le harían para realizar lo que quiero?
No es necesario que lo expliquen, sólo escriban el código funcional, con el menor numero de cambios posibles, así yo me encargo de investigar bien cómo es que funciona (si explican, mejor (más rapido). Si no, bien igual, que yo me craneo :P).

Saludos y gracias.


Título: Re: [C++] Matrices
Publicado por: ecfisa en 19 Noviembre 2012, 12:24 pm
Hola.

Un ejemplo:
Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4.  
  5. using namespace std;
  6.  
  7. void llenar(int **, int);
  8. void mostrar(int **, int);
  9.  
  10. int main()
  11. {
  12.  int **mat, n, f;
  13.  
  14.  srand(time(NULL));
  15.  do{
  16.    cout << "Dimension de la matriz cuadrada: ";
  17.    cin >> n;
  18.  } while ( n < 5 || n == 0);
  19.  if (n) {
  20.    mat = new int*[n];
  21.    for(int f=0; f < n; f++) mat[f] = new int[n];
  22.    llenar(mat,n);
  23.    mostrar(mat,n);
  24.  }
  25.  return 0;
  26. }
  27.  
  28. void llenar(int **m, int n) {
  29.  for(int i=0;i<n; i++)
  30.    for(int j=0; j<n; j++) m[i][j] = rand()%99;
  31. }
  32.  
  33. void mostrar(int **m, int n) {
  34.  for(int i=0;i<n;i++) {
  35.    for(int j=0;j<n;j++) {
  36.      cout.width(4);
  37.      cout << left << m[i][j];
  38.    }
  39.    cout << endl;
  40.  }
  41. }
  42.  


Saludos.


Título: Re: [C++] Matrices
Publicado por: C-- en 19 Noviembre 2012, 20:39 pm
Excelente!! Hiciste exactamente lo que pedía :)
MUY agradecido.

Sólo me quedó una duda: Ya que la matriz se creó con new, ¿No es necesario poner en algun lado el comando delete para liberar memoria (en mi caso, al final del do-while del main que creé y antes del return, por ejemplo), y de ser así, cómo quedaría en el codigo para liberar esta matriz en particular?


Título: Re: [C++] Matrices
Publicado por: ecfisa en 20 Noviembre 2012, 02:26 am
Hola.
Citar
Sólo me quedó una duda: Ya que la matriz se creó con new, ¿No es necesario poner en algun lado el comando delete para liberar memoria
Si, totalmente!! Te pido mil disculpas por el olvido. :(

Código
  1.  ...
  2.  for(int i=0;i < n; i++) delete [] mat[i];
  3.  delete [] mat;
  4.  return 0;
  5. }
  6.  

Saludos.


Título: Re: [C++] Matrices
Publicado por: C-- en 21 Noviembre 2012, 01:14 am
Muy agradecido nuevamente :)

Salu2!!