Foros del Web » Programación para mayores de 30 ;) » Programación General »

Ayuda con C

Estas en el tema de Ayuda con C en el foro de Programación General en Foros del Web. Hola a tod@s. Estoy haciendo un programa en C y el compilador que utilizo es Microsoft Visual C++ (Dentro del paquete de Visual Estudio 6.0). ...
  #1 (permalink)  
Antiguo 30/05/2004, 14:38
 
Fecha de Ingreso: mayo-2004
Ubicación: Valladolid (Spain)
Mensajes: 81
Antigüedad: 20 años
Puntos: 0
Pregunta Ayuda con C

Hola a tod@s.
Estoy haciendo un programa en C y el compilador que utilizo es Microsoft Visual C++ (Dentro del paquete de Visual Estudio 6.0).

El problema es que necesito crear una matriz, pero la dimensión de ésta sólo la conozco cuando el programa está en ejecución, ya que depende del número de nodos que haya en una lista doblemente enlazada que se crea en función del número de registros de un determinado fichero. Lo que hago es contar el número de nodos de la lista y así obtengo la dimensión de la matriz, pero no sé cómo definirla en ejecución (si es posible).
Había pensado también definirla dentro de una función que recogiera como parámetro la dimensión de la matriz, pero no sé si una función puede devolver una matriz, ya que creo que únicamente puede devolver un valor.

Puede alguien ayudarme???
Muchas gracias de antemano.

Saludos a tod@s
  #2 (permalink)  
Antiguo 30/05/2004, 15:31
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Si te referis al tamaño (y no a la cantidad de dimensiones) podes hacer esto:

int numero = 30;
POINT *xgy = (POINT*)malloc(sizeof(POINT) * numero);
xgy[0].x = 2;
xgy[1].y = 3;
free(xgy);

Una funcion devuelve un numero entero (un DWORD,cuatro bytes), por lo que podrias devolver el puntero al primer elemento del array (matriz).

Si queres saber como funciona la devolucion de valores de una funcion te recomiendo este tutorial que escribi : http://www.c0d3rz.com.ar/foro/viewtopic.php?t=53
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO

Última edición por Eternal Idol; 30/05/2004 a las 15:34
  #3 (permalink)  
Antiguo 30/05/2004, 20:10
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Si quieres que el tamaño sea "indefinido" pues usa punteros y despues con la funcion malloc o calloc reserva la memoria que necesites en la ejecucion.

char *matrix;

//Quiero que ahora en esa matriz se almacenen 55 objetos.

matrix=(char *)malloc(sizeof(char)*15);


Y si lo quieres hacer con nodos pues usa el de Eternal Idol


saludos
  #4 (permalink)  
Antiguo 30/05/2004, 23:57
 
Fecha de Ingreso: mayo-2004
Ubicación: Valladolid (Spain)
Mensajes: 81
Antigüedad: 20 años
Puntos: 0
Muchas gracias Eternal Idol e Instru.
Creo que lo haré cómo dices tú, Instru (que lo entiendo mejor). Pero la matriz ha de ser de dos dimensiones y cómo tú dices (con malloc)no veo claro cómo puedo hacerlo, ya que me da la sensación de que tú reservas espacio para 55 objetos, pero no como una matriz, sino como un array.
Lo siento, pero no lo entiendo muy bien.
Podrías explicármelo?? (soy un poco nueva en esto)
Gracias
  #5 (permalink)  
Antiguo 31/05/2004, 02:02
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
En realidad el codigo de Instru da espacio para 15 BYTES.

El mio te da espacio para 30 estructuras POINT pero es solo un ejemplo, el 30 puede ser reemplazado por un calculo o una funcion y no necesitas usar la estructura POINT que es es de Windows, podes usar la que quieras.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #6 (permalink)  
Antiguo 31/05/2004, 11:08
 
Fecha de Ingreso: mayo-2004
Ubicación: Valladolid (Spain)
Mensajes: 81
Antigüedad: 20 años
Puntos: 0
muchas gracias a todos. Lo he solucionado con vuestra ayuda.
Gracias otra vez
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:19.