Vector i*8+j

Iniciado por JohnMcb, 3 Mayo 2013, 01:28 AM

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

JohnMcb

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;
   
   
}

rir3760

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