Ver Mensaje Individual
  #15 (permalink)  
Antiguo 07/07/2014, 04:30
Avatar de leosansan
leosansan
 
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años
Puntos: 49
Respuesta: Consulta: se puede hacer esto en c++

Cita:
Iniciado por dmorill Ver Mensaje
.................................................. ........
Primero gracias a todos en especial a vangodp y leosansan por su atención y sus aportes, realmente es muy agradable que personas compartan sus grandes conocimientos :D
..........................................
De nada, es un placer compartir conocimientos con otros.

Aprovecho para ahondar en l idea sugerida por Italico76 de obtener una matriz a partir de un vector unidimensional.

Para ello sólo hay que tener en cuenta que se compondrá de un número de elemetos igual a filas x columnas y su acceso será a partir de que [ i ][ j ] == [ i * columnas + j ]:

Código C++:
Ver original
  1. El numero de filas es: 4
  2. El numero de columnas es: 8
  3.  
  4. La matriz es:
  5.   1    2    3    4    5    6    7    8
  6.   9   10   11   12   13   14   15   16
  7.  17   18   19   20   21   22   23   24
  8.  25   26   27   28   29   30   31   32
  9.  
  10. Presione una tecla para continuar . . .

Código C++:
Ver original
  1. #include<iostream>
  2. #include<vector>
  3. #include<cstdlib>
  4.  
  5. using namespace std;
  6.  
  7. void llenarMatriz( vector < int > &matriz, size_t filas, size_t columnas );
  8. void imprimirMatriz( vector < int > matriz, size_t filas, size_t columnas );
  9.  
  10. int main(){
  11.   size_t fil , col ;
  12.   cout << "El numero de filas es: ";
  13.   cin >> fil;
  14.   cout << "El numero de columnas es: ";
  15.   cin >> col;
  16.  
  17.   vector < int > mat ( fil * col ) ;
  18.  
  19.   llenarMatriz( mat , fil , col );
  20.   cout <<  endl;
  21.  
  22.   imprimirMatriz( mat , fil , col );
  23.   cout<<endl;
  24.  
  25.   system("pause");
  26.   return 0;
  27. }
  28. void llenarMatriz( vector < int > &matriz, size_t filas, size_t columnas ){
  29.   ///cout <<"Ingrese los elementos de la matriz \"Matriz\": "<< endl;
  30.   size_t k = 1;
  31.   for( size_t i = 0; i < filas; i++ )
  32.     for( size_t j = 0; j < columnas; j++, k++ ){
  33.       ///cout << "matriz[" << i << "][" << j << "] = " ;
  34.       ///cin >> matriz[ i * columnas  + j ];
  35. /// Si quieres entrar a mano desactiva lo que sigue y activa lo anterior
  36.         matriz[ i * columnas + j ] = k;
  37.     }
  38. }
  39.  
  40. void imprimirMatriz( vector < int > matriz, size_t filas, size_t columnas ){
  41.   cout << "La matriz es: " << endl;
  42.   for( size_t i = 0; i < filas ; i++){
  43.     for( size_t j = 0; j < columnas; j++ )
  44.       cout.width(3),cout << matriz[ i * columnas + j ] << "  ";
  45.     cout <<  endl;
  46.   }
  47. }

Y observa la sutil diferencia con el siguiente en la declaración del vector y donde hago uso de push_back para introducir, y hacer que el vector crezca, los valores del vector:

Código C++:
Ver original
  1. #include<iostream>
  2. #include<vector>
  3. #include<cstdlib>
  4.  
  5. using namespace std;
  6.  
  7. void llenarMatriz( vector < int > &matriz, size_t filas, size_t columnas );
  8. void imprimirMatriz( vector < int > matriz, size_t filas, size_t columnas );
  9.  
  10. int main(){
  11.   size_t fil , col ;
  12.   cout << "El numero de filas es: ";
  13.   cin >> fil;
  14.   cout << "El numero de columnas es: ";
  15.   cin >> col;
  16.  
  17.   vector < int > mat  ;
  18.  
  19.   llenarMatriz( mat , fil , col );
  20.   cout <<  endl;
  21.  
  22.   imprimirMatriz( mat , fil , col );
  23.   cout<<endl;
  24.  
  25.   system("pause");
  26.   return 0;
  27. }
  28. void llenarMatriz( vector < int > &matriz, size_t filas, size_t columnas ){
  29.   cout <<"Ingrese los elementos de la matriz \"Matriz\": "<< endl;
  30.   size_t k = 1 , dato;
  31.   for( size_t i = 0; i < filas; i++ )
  32.     for( size_t j = 0; j < columnas; j++, k++ ){
  33.       ///cout << "matriz[" << i << "][" << j << "] = " ;
  34.       ///cin >> dato,matriz.push_back( dato );
  35. /// Si quieres entrar a mano desactiva lo que sigue y activa lo anterior
  36.         matriz.push_back(k);
  37.     }
  38. }
  39.  
  40. void imprimirMatriz( vector < int > matriz, size_t filas, size_t columnas ){
  41.   cout << "La matriz es: " << endl;
  42.   for( size_t i = 0; i < filas ; i++){
  43.     for( size_t j = 0; j < columnas; j++ )
  44.       cout.width(3),cout << matriz[ i * columnas + j ] << "  ";
  45.     cout <<  endl;
  46.   }
  47. }

También podría usar:

Código C++:
Ver original
  1. void llenarMatriz( vector < int > &matriz, size_t filas, size_t columnas ){
  2.   ///cout <<"Ingrese los elementos de la matriz \"Matriz\": "<< endl;
  3.   size_t k = 1 , dato;
  4.   for( size_t i = 0; i < filas * columnas; i++ ,k++ ){
  5.     ///cout << "matriz[" << i / filas << "][" << i % filas << "] = " ;
  6.     ///cin >> dato,matriz.push_back( dato );
  7. /// Si quieres entrar a mano desactiva lo que sigue y activa lo anterior
  8.     matriz.push_back(k);
  9.   }
  10. }


Última edición por leosansan; 07/07/2014 a las 07:24