[C++] Matrices

Iniciado por C--, 19 Noviembre 2012, 06:11 AM

0 Miembros y 1 Visitante están viendo este tema.

C--

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:

#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.

ecfisa

Hola.

Un ejemplo:
Código (cpp) [Seleccionar]

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

void llenar(int **, int);
void mostrar(int **, int);

int main()
{
  int **mat, n, f;

  srand(time(NULL));
  do{
    cout << "Dimension de la matriz cuadrada: ";
    cin >> n;
  } while ( n < 5 || n == 0);
  if (n) {
    mat = new int*[n];
    for(int f=0; f < n; f++) mat[f] = new int[n];
    llenar(mat,n);
    mostrar(mat,n);
  }
  return 0;
}

void llenar(int **m, int n) {
  for(int i=0;i<n; i++)
    for(int j=0; j<n; j++) m[i][j] = rand()%99;
}

void mostrar(int **m, int n) {
  for(int i=0;i<n;i++) {
    for(int j=0;j<n;j++) {
      cout.width(4);
      cout << left << m[i][j];
    }
    cout << endl;
  }
}



Saludos.

C--

#2
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?

ecfisa

#3
Hola.
CitarSó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 (cpp) [Seleccionar]

 ...
 for(int i=0;i < n; i++) delete [] mat[i];
 delete [] mat;
 return 0;
}


Saludos.

C--

Muy agradecido nuevamente :)

Salu2!!