Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-02-2008
BC++ BC++ is offline
Miembro
 
Registrado: ene 2008
Posts: 44
Poder: 0
BC++ Va por buen camino
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

BC++
Responder Con Cita
  #2  
Antiguo 05-02-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.
Responder Con Cita
  #3  
Antiguo 11-02-2008
M@R!N@ M@R!N@ is offline
Miembro
 
Registrado: feb 2008
Posts: 21
Poder: 0
M@R!N@ Va por buen camino
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...
Responder Con Cita
  #4  
Antiguo 11-02-2008
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: sep 2007
Posts: 1.084
Poder: 18
juanelo Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 20-02-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.

Última edición por escafandra fecha: 20-02-2008 a las 18:10:33.
Responder Con Cita
  #6  
Antiguo 20-02-2008
Robert01 Robert01 is offline
Miembro
 
Registrado: feb 2006
Ubicación: Córdoba, Argentina
Posts: 895
Poder: 19
Robert01 Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
determinante de una matriz baby Varios 1 31-05-2007 14:22:28
matriz de controles santiago14 Varios 14 01-05-2007 06:00:58
matriz de 4ª dimension? (MAJ) La Taberna 7 30-04-2007 21:26:53
matriz dinámica de string triniti OOP 4 20-07-2004 13:31:52
Guardar matriz? danytorres Varios 1 27-10-2003 04:10:23


La franja horaria es GMT +2. Ahora son las 16:13:18.


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