Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Matriz dinamica (https://www.clubdelphi.com/foros/showthread.php?t=52959)

BC++ 05-02-2008 23:03:33

Matriz dinamica
 
hola amigos del foro, nuevamente preguntando y agradeciendo su colaboracion, tema del dia.
matrices dinamicas

lo unico q estuve haciendo hasta el momento fueron array dinamicos
del tipo
const int SIZE=4;
int * A;
A=new int[SIZE];

delete []A;

me preguntaba como seria el codigo para trabajar con una matriz dinamica, las estaticas las manejo

int Matriz[][];

pero las dinamicas no tngo idea

si alguien me facilitaria un codigo pequeño, como definir una int matiz de 2 x2
dinamicamente, cargarla .y borrarla.

muchisimas gracias
:D
BC++

escafandra 05-02-2008 23:54:42

Por ejemplo:
Crear matriz de nombres (tipo char)

Código:

int N = 10; //Numero de nombres   
char** Nombres = new char*[N];
for(int n=0; n<N; n++)
    Nombres[n] = strnewdup(Nom[n]); //carga cada elemento...

Borrar matriz:
Código:

for(int n=0; n<NNombres; n++) delete Nombres[n]; // Libera de uno en uno...
delete Nombres;

Otra forma de borrar matriz:
Código:

delete [] Nombres; // Libera toda la matriz...
Saludos.

M@R!N@ 11-02-2008 23:20:51

Bueno, no se que tan tarde llegué, pero va, tal vez a alguien le sirva ^_^

**Para declarar una matriz dinámica pues haces lo siguiente...

//suponiendo que sea de 2x2 como dices...

int **valor;

valor=new int *[2];
for(int i=0;i<2;i++)
{
valor[i]=new int[2];
}

y ya queda lista tu variable para usarla, ahora para liberarla podríamos decir que es lo mismo, pero al revés, jajaja...

for(int i=0;i<2;i++)
{
delete[] valor[i];
}
delete[] valor;

eso es todo, espero que sea de ayuda...

juanelo 11-02-2008 23:29:36

Que tal,
Yo en lugar de usar estos metodos de creacion de "matrices" dinamicas, usaría una lista de objetos TList que a asu vez puede una lista de listas, asi no importa cuanto crezca la matriz, ni la dimension, solo basta con ObjLista->Add(x) y listo.

Saludos

escafandra 20-02-2008 11:23:11

Ya... Eso es seguramente lo más práctico, pero no es C++ sino un buen uso de las VCL.

Las matrices dinámicas, y en general el uso de punteros es programación de bajo nivel. Esto da gran potencia y velocidad al código, a cambio de tener que estar pendiente del "control" y asignación de memoria.

Según la tarea a realizar, puede ser mas interesante una u otra forma de afrontar el problema.


Saludos.

Robert01 20-02-2008 14:39:54

Hola

Hace mucho hice una dll a la cual le pasaba una matriz dinámica por referencia

Esta es una parte del código de la dll

Código Delphi [-]
#include 
#include 
#include 
#include "util1.h"

void __stdcall tred2( double *a_, int n, int np, double *d_, double *e_);

BOOL WINAPI DllMain( HINSTANCE hinstDLL ,DWORD dwReason ,LPVOID lpReserved )
{
   // Perform actions based on the reason for calling.
   switch( dwReason )
   {
   case DLL_PROCESS_ATTACH:
       // Initialize once for each new process.
       // Return FALSE to fail DLL load.
       break;

   case DLL_THREAD_ATTACH:
       // Do thread-specific initialization.
       break;

   case DLL_THREAD_DETACH:
       // Do thread-specific cleanup.
       break;

   case DLL_PROCESS_DETACH:
       // Perform any necessary cleanup.
       break;
   }
       return TRUE;
}

void __stdcall tred2( double *a_, int n, int np, double *d_, double *e_)
{
/* Local variables */
  double *a=(double *)a_ /* [np*np] elements  */;
  double *d=(double *)d_ /* [np] elements  */;
  double *e=(double *)e_ /* [np] elements  */;
  static double f,g,h,hh,scale;
  static int i,j,k,l;


#define aind(i1,i2) (((i2)-1)*np+(i1)-1)

        if (n > 1)
        {
          i=n;
          while(((i<2) && (i>n))||((i>=2) && (i<=n)))
          {
            l=i-1;
            h=0.0;
            scale=0.0;
            if (l > 1)
            {
             for (k=1;k<=l;k++) 
              {
                scale=scale+fabs(a[aind(i,k)]);
              }
lo que estaba tratando de hacer era calcular autovectores,e tc

Salu2

BC++ 21-02-2008 23:17:44

gracias!
 
muchas gracias a todos =)

omarodalis 24-10-2011 19:04:29

Yo hice esto
 
mm.. bueno yo necesitaba una matriz igual que fuera dinamica la asignacion de su tamaño... bueno... esto fué lo que hice esto ........

double* datosObtenidos = new double[ListBox1->GetCount()];
for (int i = 0; i <sizeof(datosObtenidos); i++)
{
datosObtenidos[i] = ListBox1->Items->Strings[i].ToDouble();
}
Variant Excel,Libro,Hoja,Celda;
Excel = CreateOleObject("Excel.Application");



y funciona... bueno... es todo saludossss :p


La franja horaria es GMT +2. Ahora son las 07:34:40.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi