Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Definir una matriz sin saber el rango (https://www.clubdelphi.com/foros/showthread.php?t=78931)

kirios 26-05-2012 21:30:04

Definir una matriz sin saber el rango
 
Hola! pregunta sencilla pero no le veo la vuelta.

Tengo un programa en C, y tengo dos variables x e y que se generan cuando el programa esta corriendo. Quiero definir una matriz con esas variables, por ejemplo

int mat[x][y];

no me deja el compilador, hay alguna manera?

graciaas

ecfisa 26-05-2012 22:11:18

Hola kirios.

Si, te pongo un ejemplo:
Código:

...
int **mat, col, row;

  col = StrToInt(Edit1->Text);
  row = StrToInt(Edit2->Text);

  mat = new int *[row];
  for (int i= 0; i < row; i++) mat[i] = new int[col];

  ...

  for(i=0; i < col; i++) delete [] mat[i];
  delete [] mat;

Saludos.

ecfisa 27-05-2012 04:06:41

Hola.

Me olvidé de comentarte... Otra forma en que podes implementarlo, es utilizando el método de órden de mayor fila (row major order) que es como almacenan la matriz en memoria C y C++. Para obtener el offset de un elemento, hay que realizar: fila * numero_columnas + columna.

Un ejemplo:
Código:

#include<stdlib.h>
#include<stdio.h>
#include<conio.h>

int main(int argc, char* argv[])
{
char *mat;
int maxrow, maxcol, row, col;

  /* Ingresar dimensión */
  printf("Filas: ");  scanf("%2d", &maxrow);
  printf("\nColumnas: "); scanf("%2d", &maxcol);

  /* Crear */
  mat = new char[maxrow * maxcol];

  /* Cargar la matriz */
  randomize();
  for(int f=0; f < maxrow; f++)
    for(int c=0; c < maxcol; c++)
      mat[f * maxcol + c] = random(27)+65;

  /* Mostrar la matriz */
  for(int f=0; f < maxrow; f++) {
    for(int c=0; c < maxcol; c++)
      printf("%3c", mat[f * maxcol + c]);
    printf("\n");
  }

  /* Posicionar y mostrar el elemento  */
  printf("Fila: "); scanf("%2d", &row);
  printf("\nColumna: "); scanf("%2d", &col);
  printf("%c",mat[row * maxcol + col]);

  getch();

  /* liberar */
  delete [] mat;
  return 0;
}

Tomá en cuenta que en el ejemplo las cotas inferiores son cero y las superiores maxrow-1/maxcol-1.

Saludos.


La franja horaria es GMT +2. Ahora son las 13:03:47.

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