Duda con arreglo bidimensional dinámico en IDE DevC++

Iniciado por finger10, 1 Septiembre 2011, 18:26 PM

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

finger10

Buen día amigos del foro, estamos trabajando actualmente en donde estudio con arreglos y matrices y la duda que tengo es como declarar arreglos bidimensionales dinámicos. Los arreglos los he podido implementar de la siguiente manera y me funciona bien:

#include<iostream>
using namespace std;

main()
{  
  int n;
  cout<<"Ingrese el numero de elementos del arreglo : ";
  cin>>n;
  cout<<endl;
   
  int *A=(int*)malloc(n*sizeof(int));
 
  for(int i=0;i<n;i++)
  {  
     cout<<"A["<<i<<"] = ";
     cin>>A[i];
  }
    
  cout<<endl;
  system("PAUSE");
}
 

Lo que me falta es poder implementar las matrices. Espero puedan absolver mi duda, muchas gracias XD

LearningSpanishProgrammer

#1
Conozco dos soluciones, cual es mejor para tu problema no sei

La primera es mas rapida pero es muy arduo de utilizar, lo segundo necesita de dos lecturas en la memoria para cada 'read' or 'write' en el vector

Citar
   /**
    * Forma uno:
    **/
   int i = 0, j = 0;
   int lineas = 5, columnas = 5;
   int * matrix = (int *) malloc(sizeof(int) * lineas * columnas);
   /* matrix[j] */
   matrix[i * columnas + j] = 15;

   /*
    * Forma dos:
    */
   int ** m2 = (int **) malloc(sizeof(int *) * lineas);
   for (int i = 0; i < lineas; ++i)
      m2 = (int *) malloc(sizeof(int) * columnas);

   m2[j] = 15;
Estoy aprendiendo español, y tu estas aprendiendo programación

rir3760

Para la forma dos que indica LearningSpanishProgrammer debes utilizar la forma usual:
m2[i][j] = 69; // Solo por poner un ejemplo
Donde el indice "i" debe estar en el rango 0 .. lineas-1 y el indice "j" en el rango 0 .. columnas-1.

Pero si estas utilizando C++ tal vez sea mejor utilizar la clase "vector" a menos que, por ejemplo, sea un ejercicio de clase. Deberías explicar en detalle exactamente la intencion del programa.

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

finger10

Muchas gracias por sus respuestas, estamos empezando a programar, hemos visto arreglos unidimensionales y bidimensionales, como escuche que se podía hacer un mejor uso de la memoria, de alli mi interés por hacer mis códigos algo mejor.

Con respecto a la pregunta de rir3760 aún no estoy trabajando con clases.

Voy a ver como me va con los códigos, les vuelvo a agradecer es la primera vez que realizo una consulta en este foro y en verdad me han ayudado, saludos desde Perú