Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: JohnMcb en 3 Mayo 2013, 01:28 AM

Título: Vector i*8+j
Publicado por: JohnMcb en 3 Mayo 2013, 01:28 AM
Buen día para todos.
Se me pidió convertir un array de varias dimensiones en un vector unidimensional de dos maneras, uno por medio de apuntadores con doble indireccion y la otra por medio de una formula ; i*8+j, la que aun no entiendo como aplicarla o usarla para pasar el array a vector, aquí está mi código con doble indireccion, alguno podria explicarme como funciona el pasar el arrary a vector con esa formula??? Gracias.

Código (csharp) [Seleccionar]
#include<iostream>

using namespace std;

int main()
{
   int array[2][3];
   int contador = 1;
   int vector[6];
   int **vector_apuntadores[6];
   int *apuntador_arrays[2][3];
   int contador_2=0;
   //Arreglo bidimensional:
   for (int i=0;i<2;i++)
   {
       for(int j=0;j<3;j++)
       {
               array[i][j]= contador;
               cout << "["<<array[i][j]<<"]";
               contador++;
               
       }
       cout<<"\n";
   }
   cout << "\n\n";
   
   //Paso del arreglo bidimensional a un vectorapuntador_arrays[i][j] por medio de doble indireccion:
   for(int i=0;i<2;i++)
   {
                      for(int j=0;j<3;j++)
                     
                      {
                             apuntador_arrays[i][j]=&array[i][j]
;                             vector_apuntadores[contador_2] = &apuntador_arrays[i][j];
                             vector[contador_2] = **vector_apuntadores[contador_2];
                             cout <<  "["<<vector[contador_2]<<"]";
                             contador_2++;
                      }
                      cout<<"\n" ;
   }
                     
   
   
   
   system ("pause");
   return 0;
   
   
}
Título: Re: Vector i*8+j
Publicado por: rir3760 en 3 Mayo 2013, 17:56 PM
Cita de: JohnMcb en  3 Mayo 2013, 01:28 AM
Se me pidió convertir un array de varias dimensiones en un vector unidimensional de dos maneras, uno por medio de apuntadores con doble indireccion y la otra por medio de una formula ; i*8+j, la que aun no entiendo como aplicarla o usarla para pasar el array a vector
Esa formula solo es un ejemplo que te dieron, supongo yo, al usar una matriz con ocho columnas por fila. La expresión que debes utilizar es:
Código (cpp) [Seleccionar]
pos = fila * columnas_x_fila + columna

Y se debe a que, siguiendo el ejemplo de una matriz de 8x8, las filas de la matriz terminan en las posiciones del array de esta forma:
La primera fila en las posiciones  0 ..  7
La segunda fila en las posiciones  8 .. 15
La tercera fila en las posiciones 16 .. 23


Un programa de ejemplo basado en el tuyo:
Código (cpp) [Seleccionar]
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

const int num_filas = 2;
const int num_cols = 3;
int main()
{
   int aa[num_filas][num_cols];
   int a[num_filas * num_cols];
   
   //Array de arrays de ints
   for (int i = 0; i < num_filas; i++)
      for (int j = 0; j < num_cols; j++){
         aa[i][j] = i * num_cols + j; // Para ejemplificarlo mejor
         cout << "aa[" << i << "][" << j << "] == " << aa[i][j] << endl;
         
         int pos = i * num_cols + j;
         a[pos] = aa[i][j];
      }
   cout << endl;
   
   // Array de ints
   for (int i = 0; i < num_filas * num_cols; i++)
      cout << "a[" << i << "] == " << a[i] << endl;
   
   return 0;
}


Un saludo