• Viernes 8 de Noviembre de 2024, 19:09

Autor Tema:  Matrices C++ !!  (Leído 3707 veces)

fernandovallecordoba

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Matrices C++ !!
« en: Domingo 19 de Octubre de 2008, 21:42 »
0
Hola,

tengo que hacer un programa en C++ y la verdad es que ando perdido con el tema de las matrices. Tengo que pasar un programa hecho en matlab a C++, y claro este último el tema de las matrices y arrays parece que es bastante chungo.

Os dejo aqui mi consulta por si alguien pudiera ayudarme. Muchisimas gracias.

Basicamente el problema es que quiero declarar una variable global que sea una matriz de double, pero no se el tamaño ni el contenido de la misma, pues se calcula cuando llamo a una funcion. La idea seria algo asi:


#include <math.h>
#include "matrix.h"
#include "mex.h"
...

double K[][];
void etapsvmSMO();
..


void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
...
...
}

void etapsvmSMO(){

K = gaussiankernel(...);

}


Y esa es la historia, no se como hacer para no tener que indicar el tamaño del array al declararlo, ya que no lo sé, depende de cuando llame a gaussiankernel(...)... alguna idea?

graciassss,fer.

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Matrices C++ !!
« Respuesta #1 en: Domingo 19 de Octubre de 2008, 23:30 »
0
Utiliza matrices dinamicas, busca en google y encontraras...

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

eternity

  • Miembro activo
  • **
  • Mensajes: 78
  • Nacionalidad: ar
    • Ver Perfil
    • http://lameriendadejuan.blogspot.com/
Re: Matrices C++ !!
« Respuesta #2 en: Lunes 20 de Octubre de 2008, 06:06 »
0
debes utilizar matrices dinñamicas

te paso las dos funciones básicas:

Código: C
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct{
  5.     int **mat;              // doble puntero, o arreglo de arreglos
  6.     unsigned int filas;     // cantidad de filas que tiene la matriz
  7.     unsigned int columnas;  // cantidad de columnas que tiene la matriz
  8. }matrizDin;                 // tipo matriz dinamica
  9.  
  10. void crearMatrizDin(matrizDin *m, unsigned int f, unsigned int c){
  11.     unsigned int i;
  12.  
  13.     m->filas=f;
  14.     m->columnas=c;
  15.  
  16.     m->mat=(int **)malloc(sizeof(int *)*f);
  17.     for (i=0; i<f; i++)
  18.         m->mat[i]=(int *)malloc(sizeof(int)*c); 
  19. }
  20.  
  21. void destruirMatrizDin(matrizDin *m){
  22.     unsigned int i;
  23.  
  24.     for (i=0; i<m->filas; i++)
  25.         free(m->mat[i]);
  26.     free(m->mat);
  27.    
  28.     m->filas=0;
  29.     m->columnas=0;
  30. }
  31.  
  32. void main(){
  33.     matrizDin m;
  34.  
  35.     crearMatrizDin(&m, 3, 5);
  36.     destruirMatrizDin(&m);
  37. }
  38.  

en fin, si te sirve decime, y si no tambien

 :good:


fernandovallecordoba

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Matrices C++ !!
« Respuesta #3 en: Lunes 27 de Octubre de 2008, 17:48 »
0
Gracias por el código!

Pero... la verdad es que no me entero muy bien de lo que haces en el código. Esperaba algo mas simple. En el codigo que tengo que hacer tengo que trabajar con 5 ó 6 matrices ala vez  haciendo operaciones con ellas...

No sabia que tenia que crearme funciones específicas para crear las matrices, bucles, destructores y demas...

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Matrices C++ !!
« Respuesta #4 en: Lunes 27 de Octubre de 2008, 19:54 »
0
Cita de: "fernandovallecordoba"
no me entero muy bien de lo que haces en el código

Si te esfuerzas un poco seguro que sí te enteras. Si quieres trabajar con matrices y pasarlas a funciones, hay que aprender a usar los punteros. De todas formas, aclara qué es lo que no entiendes para que te puedan ayudar, hombre. Que somos vagos hasta para pulsar las teclas...  :bad:

Por cierto, eternity, ha dicho C++, no C.

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Matrices C++ !!
« Respuesta #5 en: Miércoles 29 de Octubre de 2008, 05:45 »
0
Fernando, busca un libro o algún tutorial en la red sobre manejo dinámico de la memoria, leyendo y practicando seguro pronto "agarras el hilo" ;).

Cita de: "m0skit0"
Por cierto, eternity, ha dicho C++, no C.
¿Y no sirve también ese código en C++?
La imaginación es el límite.
Hardware & Software | Mexchip

Rombus

  • Miembro MUY activo
  • ***
  • Mensajes: 105
  • Nacionalidad: ar
    • Ver Perfil
    • http://myspace.com/punkrecycle
Re: Matrices C++ !!
« Respuesta #6 en: Miércoles 29 de Octubre de 2008, 06:24 »
0
Cita de: "Geo"
Cita de: "m0skit0"
Por cierto, eternity, ha dicho C++, no C.
¿Y no sirve también ese código en C++?


calculo q si

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Matrices C++ !!
« Respuesta #7 en: Miércoles 29 de Octubre de 2008, 08:17 »
0
Sirve pero en C++ se puede hacer uso de otros paradigmas (Programacion Orientada a Objetos y Programacion Generica) y aprovechar las plantillas de la STL (ademas de declarar variables al vuelo  :good:) .

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Matrices C++ !!
« Respuesta #8 en: Miércoles 29 de Octubre de 2008, 08:48 »
0
Cita de: "Geo"
¿Y no sirve también ese código en C++?

Cualquier código C sirve en C++, pero como bien dice Eternal Idol, C++ es POO y por tanto crearMatrizDin() y destruirMatrizDin() encajan a la perfección como constructor y destructor de una clase que defina tu tipo de datos. Sino, es C puro y no C++. Sólo era un apunte.

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Matrices C++ !!
« Respuesta #9 en: Jueves 30 de Octubre de 2008, 06:19 »
0
Fernando, el tamaño de los arrays que recibes los tienes en los parámetros nlhs y nrhs de la función mexFunction, con eso puedes entonces reservar la memoria que necesites para tus variables.

Puedes hacerlo con la función mallocde C, por ejemplo, hice un programa en el que enviaba bytes desde MATLAB, los pasé a una variable datos de tipo unsigned char de esta forma:
Código: Text
  1.  
  2.     // Convierte los parámetros recibidos
  3.     datos = (unsigned char*)malloc( sizeof( byte ) * nrhs );
  4.     for ( int i = 0; i < nrhs; i++ ) {
  5.         datos[ i ] = mxGetScalar( prhs[ i ] );
  6.     }
  7.  
  8.  
La imaginación es el límite.
Hardware & Software | Mexchip

fernandovallecordoba

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Matrices C++ !!
« Respuesta #10 en: Sábado 1 de Noviembre de 2008, 13:47 »
0
Muchas gracias por las respuestas.

Quiza lo que sea más facil (no tengo mucha idea de C++ y huyo de los punteros) sea utilizar la clase Vector.

Una pregunta, cuando desde la funcion mexFunction llamo a otra funcion escrita en C y le paso una matriz... dentro de esta funcion en C, como puedo empezar a trabajar con la matriz¿¿ Tengo que meter elemento a elemento en un objeto de la clase vector?

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Matrices C++ !!
« Respuesta #11 en: Sábado 1 de Noviembre de 2008, 16:14 »
0
De MATLAB recibes un tipo mxArray, debes convertirlo al tipo de variable que requieras, por ejemplo, yo lo hice con la función mxGetScalar como el ejemplo que puse antes, busca en la documentación de MATLAB, vienen algunos ejemplos que pueden servirte.

(Son esas dudas que o se dividen en dos posts, o no sabría uno en qué foro colocarlas :P).
La imaginación es el límite.
Hardware & Software | Mexchip