Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - david_BS

#101
Programación C/C++ / processar matrices
14 Marzo 2012, 18:59 PM
ak muestro como se puede procesar una matríz de int's de 6 formas diferentes, si se les ocurre otras formas pueden mostrarlas..

se da una matríz de 2x5 inicializada y se trata de listar los 10 números de la misma, de formas diferentes usando también notación de punteros.


void procesar_mat1(int **m){

for(int i=0;i<10;i++){

cout << "m: " << (int)m[i] << endl;
}
}

void procesar_mat2(int (*m)[5]){

for(int i=0;i<2;i++){

for(int j=0; j<5; j++){


cout << "m: " << m[i][j] << endl;
}
}
}

void procesar_mat3(int m[2][5]){

for(int i=0;i<2;i++){

for(int j=0; j<5; j++){

cout << "m: " << m[i][j] << endl;
}
}
}

void procesar_mat4(int **m){

int *p=(int*)&m[0];

for(int i=0;i<10;i++){

cout << "p: " << p[i] << endl;
}
}

void procesar_mat5(int *m){

for(int i=0;i<10;i++){

cout << "m: " << m[i] << endl;
}
}

void procesar_mat6(int (*m)[]){

int *p=(int*)m;

for(int i=0;i<10;i++){

cout << "p: " << p[i] << endl;
}
}


int main()
{
int mat[2][5] = { { 1,2,3,4,5 },{ 1,2,3,4,5 } };

//procesar_mat1((int**)mat);
//procesar_mat2(mat);
//procesar_mat3(mat);
//procesar_mat4((int**)mat);
//procesar_mat5((int*)mat);
//procesar_mat5(*mat);

procesar_mat6((int (*)[])mat);

PAU

return 0;
}


Hasta luego

#102
Cita de: armizh en 20 Febrero 2012, 19:36 PM
Voy a aportar en este post con mis funciones para trabajar con char** en C, las hice hace un bueno tiempo pero funcionan perfectamente. Se pueden adaptar para funcionar en cualquier situacion. No las he probado extensamente, cualquier duda o correccion me avisan xd
..................

generalmente tratan de resolver este problema usando memoria dinámica, osea malloc y free, pero yo también quería resolverlo sin tener que usarla

en este post muestran como resolverlo mediante memoria dinámica

http://www.rohitab.com/discuss/topic/38806-char-double-pointer-with-matrix/

#103
En este código muestro como leer una matríz global de tipo char por medio de una función de tipo char**. una matriz y un array de cadenas son cosas diferentes pero pueden arreglarse para usarse como si fueran lo mismo.

El código básicamente trae dos formas de hacer esto, en la primera hay dos funciones, una que carga elementos en la matríz y la otra hace un arreglo para poder leerla luego en el 'main'

No tiene mucho sentido usar una matríz global pero para hacer una demostración sirve. yo estaba tratando de usar algo como esto para una matríz de char que es miembro de una clase...

En el main así como está puede leerse sólo el primer elemento, se puede modificar para leer todos automáticamente, pero eso no es parte del tema

El título tampoco parece ser la mejor explicación de esto igualmente..


//---------------------------------------------

char MATRIX[6][6];//global

//---------------------------------------------------

char** CargarItems1(){

for(int i=0; i<6;i++){

strcpy(MATRIX[i], "12345");
}

return (char**)&MATRIX[0][0];
}

char* LeerItems1(int pos_vec){

DWORD* vecofvectors = (DWORD*)CargarItems1();
return *(char**)vecofvectors+(pos_vec*6);
}

//-----------------------------------

DWORD* CargarItems2(){

for(int i=0; i<6;i++){

strcpy(MATRIX[i], "12345");
}
return (DWORD*)&MATRIX[0][0];
}

char* LeerItems2(int pos_vec){

DWORD* vecofvectors = CargarItems2();
       return (char*)vecofvectors+(pos_vec*6);
}

//---------------------------------------------------------

int main()
{
        int pos=0; // de 0 a 5
        char* vec_de_matrix = LeerItems(pos);
        //char* vec_de_matrix = LeerItems2(pos);

        MessageBox(0,vec_de_matrix,"ASD",0);

system("pause");
return 0;
}


Saludos