Function(Crear Matriz) C++

Iniciado por NecBalaam, 22 Agosto 2011, 14:42 PM

0 Miembros y 2 Visitantes están viendo este tema.

NecBalaam

Saludos tengo este codigo de una matriz en C++:

///////////////////////////////////////////////////////Matriz A
  cout <<"Matriz A" <<endl;
  cout <<"Numero de Filas: ";   cin >>a; /*Filas*/
  cout <<"Numero de Columnas: "; cin >>b; /*Columnas*/
  vector<vector<int> > MatA ( a, vector<int> ( b ) );
  cout <<endl;

///////////////////////////////////////////////////////Valores Matriz A   
  int otro=0;
  cout <<"Dame los valores de la Matriz A " <<a <<"x"<<b <<endl;
  cout <<"(Con un enter por cada numero)"<<endl<<endl;
  for ( int i = 0; i < a; i++ ) {posicion.Y= 3+i;
  for ( int j = 0; j < b; j++ ){
  color(14);  
      //Posicionando cursor
  posicion.X= 3+otro;
  SetConsoleCursorPosition(consola, posicion);
  otro=otro+5;
  //Captura Valor
  cin >> valA;
  //Inserta valor a matriz
  MatA[i][j] = valA;

  color(15);
}otro=0;}
system("cls");



Lo que yo quiero es crear la matriz llamandola desde una "function" como este codigo basico:

void matrizn(int **m,int f,int c){
//CARGANDO LA MATRIZ DINAMICA.
for(int i=0;i<f;i++)
for(int j=0;j<c;j++){
cout<<"Introduzca el elemento ["<<i+1<<"]["<<j+1<<"]= ";
cin>>m[i][j];}
}


pero lo que quiero es utilizar esta sintaxis:

vector<vector<int> > MatA ( a, vector<int> ( b ) );

para crear mi matriz, yo digo que todo el asunto esta en ese codigo, para que yo lo pueda hacer dinamico, pero busco y busco y no lo encuentro al igual que probe intentar hacerlo con el codigo mostrado y no me salio espero me puedan ayudar saludos.
No esperes tener el 100% de todo, por que no tendrás nada, mejor trabaja en equipo y obtendrás el 50% de algo.

Valkyr

Ya que has declarado tu matriz de esta forma: vector<vector<int> > MatA ( a, vector<int> ( b ) ); puedes hacer el acceso como si fuese una matriz normal y corriente, es decir, MatA[posicion][posicion2] y por tanto puedes hacer asignación a esa posición.

También podrías crearte un vector de vectores vacíos e ir llenandolo con las operaciones push_back().

Saludos.

rir3760

Debes precisar que es exactamente lo que quieres hacer ya que comentas 'crear la matriz llamandola desde una "function"' mientras que en la funcion que mencionas la matriz ya ha sido creada y solo se piden sus valores.

En el primer caso donde se crea y piden los datos de la matriz:
Código (cpp) [Seleccionar]
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

#include <vector>
using std::vector;

vector<vector<int> > crear(int num_filas, int num_cols);
void imprimir(vector<vector<int> >& matriz);

int main()
{
   cout << "Matriz A" << endl;
   
   cout << "Numero de Filas: ";
   int num_filas;
   cin >> num_filas;
   
   cout << "Numero de Columnas: ";
   int num_cols;
   cin >> num_cols;
   cout << endl;
   
   vector<vector<int> > matriz = crear(num_filas, num_cols);
   cout << "----" << endl;
   imprimir(matriz);
   
   return 0;
}

vector<vector<int> > crear(int num_filas, int num_cols)
{
   vector<vector<int> > matriz(num_filas, vector<int>(num_cols) );
   
   for (int i = 0; i < num_filas; i++)
      for (int j = 0; j < num_cols; j++) {
         cout << "matriz[" << i << "][" << j << "]: ";
         cin >> matriz[i][j];
      }
     
   return matriz;
}

void imprimir(vector<vector<int> >& matriz)
{
   vector<vector<int> >::size_type i;
   vector<int>::size_type j;
   
   for (i = 0; i < matriz.size(); i++)
      for (j = 0; j < matriz[i].size(); j++)
         cout << "matriz[" << i << "][" << j << "]: " << matriz[i][j] << endl;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

NecBalaam

#3
[quote author=rir3760 link=topic=337020.msg1655184#msg1655184 date=1314028988]
Debes precisar que es [b]exactamente[/b] lo que quieres hacer ya que comentas 'crear la matriz llamandola desde una "function"' mientras que en la funcion que mencionas la matriz ya ha sido creada y solo se piden sus valores.


 while (opc!=6) {
 cout <<"Menu" <<endl;
 cout <<"1. Nueva Matriz A" <<endl;   ///Listo
 cout <<"2. Nueva Matriz B " <<endl; ///Listo
 cout <<"3. Suma matrices" <<endl; ///Listo
 cout <<"4. Multiplica matrices" <<endl;
 cout <<"5. Obtener Matriz transpuesta" <<endl;
 cout <<"6. Finalizar programa" <<endl;
 cout <<"Opcion (Numero): "; cin >>opc;
 switch (opc){
///////////////////////////////////////////////////////Matriz A
         case 1:   cout <<"Matriz A" <<endl;
               cout <<"Numero de Filas: ";   cin >>a; /*Filas*/
               cout <<"Numero de Columnas: "; cin >>b; /*Columnas*/
               system("cls");
                                       vector<vector<int> > MatA = crearMatA(a,b);
               break;
///////////////////////////////////////////////////////Matriz B
         case 2: cout <<"Matriz B"<<endl;
               cout <<"Numero de Filas: ";    cin >>c; /*Filas*/
               cout <<"Numero de Columnas: "; cin >>d; /*Columnas*/
               system("cls");
                                       vector<vector<int> > MatB = crearMatB(c,d);
               break;   


Muchas gracias, pero ahora tengo otro problema...

En switch me sale el siguiente error:
Error: transfer of control bypasses initialization of:

Cuando intento llamar la funcion que me pasaste y que implemente en todo mi programa, antes de entrar a la opcion de acciones si captura los datos mi matriz y me salen bien mis operaciones, multiplicacion, transpuesta y suma...

Lo que quiero es poder crear nuevamente mi matriz y trabajar con ella intentando declararla dentro de mi Switch... pero me sale ese error?... de casualidad sabes que sucede?...
ante mano muchas gracias :)
No esperes tener el 100% de todo, por que no tendrás nada, mejor trabaja en equipo y obtendrás el 50% de algo.

rir3760

OK. ¿Puedes publicar el codigo fuente completo del programa?

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

NecBalaam

Cita de: rir3760 en 23 Agosto 2011, 00:14 AM
OK. ¿Puedes publicar el codigo fuente completo del programa?

Un saludo

podrias mejhor pasarme tu correo??... esque no lo quiero publicar :/
No esperes tener el 100% de todo, por que no tendrás nada, mejor trabaja en equipo y obtendrás el 50% de algo.