Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] tablas bidimensionales

Estas en el tema de tablas bidimensionales en el foro de C/C++ en Foros del Web. // Asigna x al elemento (i,j) de la matriz v. // 1 <= i <= MatrizFilas(v) // 1 <= j <= MatrizColumnas(v) void MatrizAsigna(Matriz v, ...
  #1 (permalink)  
Antiguo 11/04/2015, 12:36
 
Fecha de Ingreso: abril-2015
Mensajes: 9
Antigüedad: 9 años
Puntos: 0
tablas bidimensionales

// Asigna x al elemento (i,j) de la matriz v.
// 1 <= i <= MatrizFilas(v)
// 1 <= j <= MatrizColumnas(v)
void MatrizAsigna(Matriz v, int i, int j, float x);
// Devuelve el elemento (i,j) de la matriz v.
// 1 <= i <= MatrizFila
s(v)
// 1 <= j <= MatrizColumnas(v)
float MatrizRecupera
(Matriz v, int i, int j
)
;

tengo un problema ; No puedo configurar una matriz a partir de una funciòn o estructura ¿Me podriais ayudad?, Gracias

typedef struct Matriz * Matriz;
// Devuelve una matriz con n filas y m columnas (n >0, m >0).
Matriz MatrizCrea(int n, int m);
  #2 (permalink)  
Antiguo 11/04/2015, 12:58
 
Fecha de Ingreso: abril-2015
Mensajes: 9
Antigüedad: 9 años
Puntos: 0
tablas bidimensionales

// Módulo para definir matrices bidimensionales de números reales.
typedef struct Matriz * Matriz;
// Devuelve una matriz con n filas y m columnas (n >0, m >0).
Matriz MatrizCrea(int n, int m);
// Libera la matriz v.
void MatrizLibera(Matriz v);
// Devuelve el número de filas de la matriz v.
int MatrizFilas(Matriz v);
// Devuelve el número de columnas de la matriz v.int MatrizColumnas(Matriz v);
// Asigna x al elemento (i,j) de la matriz v.
// 1 <= i <= MatrizFilas(v)
// 1 <= j <= MatrizColumnas(v)
void MatrizAsigna(Matriz v, int i, int j, float x);
// Devuelve el elemento (i,j) de la matriz v.
// 1 <= i <= MatrizFilas(v)
// 1 <= j <= MatrizColumnas(v)
float MatrizRecupera(Matriz v, int i, int j);
// Devuelve la matriz resultado de sumar las matrices v1 y v2
// MatrizFilas(v1) = MatrizFilas(v2)
// MatrizColumnas(v1) = MatrizColumnas(v2)
Matriz MatrizSuma(Matriz v1, Matriz v2);
// Imprime en pantalla la matriz v con el formato siguiente.
// Ejemplo 2 x 3:
// 3.6 2.1 -3.8
// 0.2 -12.0 2.1
void MatrizImprime(Matriz v);
#endif //

tengo que construir una tabla bidimensional con estas funciones y no se como empezar si
alguien me puede dar una idea al respecto me haria un gran favor, y si puedo le mando un jamon , un saludo, gracias
  #3 (permalink)  
Antiguo 11/04/2015, 15:35
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Respuesta: tablas bidimensionales

Además del jamón, deberías enseñar lo que tienes hecho y la parte que no funciona.
Si no va a ser difícil que alguien te pueda orientar.
__________________
Mi calculadora en Qt
  #4 (permalink)  
Antiguo 12/04/2015, 10:11
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Respuesta: tablas bidimensionales

Debes incluir todos los mensajes relacionados con tu duda en este post, si no obligarás a los moderadores a borrar o a mover cada mensaje nuevo que estás abriendo con la misma consulta.

Viendo tu código, te adelanto algunos fallos:

Has de tener siempre presente el tipo de retorno de las funciones:

Así, la función
Código C++:
Ver original
  1. Matriz MatrizCrea(int n, int m);
espera que se retorne una variable del tipo Matriz, que es una redefinición de tipo, y que es Matriz*.

Además no puedes redefinir un tipo y ponerle el original, porque eso origina conflicto de nombres. Y además, por tema de legibilidad, uno espera encontrar un tipo redefinido con algún identiifcador que rápidamente le haga ver que es un tipo nuevo (Esto no es nada obligatorio, pero se puede considerar una buena práctica)

Así, que habría que empezar con algo como:
Código C++:
Ver original
  1. typedef struct Matriz* tMatriz;

Ahora, volviendo a la función MatrizCrea(), habría que dejarla así:
Código C++:
Ver original
  1. tMatriz MatrizCrea(int n, int m)
  2. {
  3.     tMatriz aux = (tMatriz)malloc(sizeof(Matriz)*n*m);
  4.     aux->filas = n;
  5.     aux->columnas = m;
  6.     aux->sig=NULL;
  7.     return aux;
  8. }

Atento a varias cosas:
1.-La función espera que se retorne un tipo tMatriz, por lo que aux deberá ser de ese tipo.
2.- Defines a aux como un puntero para poder hacer reserva de memoria. En esta misma página hay una duda similar y queda bien explicada por vangodp

Por otro lado, en la función:
Código C++:
Ver original
  1. void MatrizLibera(Matriz v)

tienes problemas similares al tener la redefinición de tipos mal hecha, y mezclar punteros con objetos.
En todo caso, el error mas claro es este:
Código C++:
Ver original
  1. while(v!=NULL)
Ya que "v" es un objeto de tipo Matriz. Y seguramente tu quieras comprobar que
Código C++:
Ver original
  1. while(v->sig!=NULL)

Puedes probar a sobrecargar el operador != para que tenga el comportamiento que quieres que tenga y hacer el código más legible, pero seguro que no es necesario.

Y ya no he visto mas del código. Arregla esas cosas y no postees en varios sitios, porque el moderador te va a tirar de las orejas!!
__________________
Mi calculadora en Qt
  #5 (permalink)  
Antiguo 12/04/2015, 14:30
 
Fecha de Ingreso: abril-2015
Mensajes: 9
Antigüedad: 9 años
Puntos: 0
Respuesta: tablas bidimensionales

gracias dehn, pero lo tengo que resolver en C, y con contenedor de pila,Si puedes darme
alguna idea al respecto, te lo agradecerè
  #6 (permalink)  
Antiguo 13/04/2015, 00:27
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: tablas bidimensionales

Cita:
Iniciado por pacojosemolina Ver Mensaje
gracias dehn, pero lo tengo que resolver en C, y con contenedor de pila,Si puedes darme
alguna idea al respecto, te lo agradecerè
El código de dehn compila perfectamente en C. Otra cosa es que no te hayas molestado en probarlo.

Contenedor de pila? Sabes qué es eso? No se si te has dado cuenta, pero con un contenedor de pila tendrías complicado construir una matriz... básicamente porque para acceder a un elemento tendrías que sacar de la pila todos los valores que estuviesen antes(LIFO) o después (FIFO), luego su programación sería rara con ganas.

Para tu práctica tienes que usar la estructura Matrix y es lo único que ha de preocuparte. Entiendo que las funciones para usar la matriz te vienen dadas... ¿cual es el problema entonces?

Lo primero que tienes que hacer es crear la matriz, para eso tienes la función MatrizCrea. Después tienes que rellenar la matriz, usa la función MatrizAsigna. Para leer los valores de la matriz usa la función MatrizRecupera. y, finalmente, para liberar la memoria dinámica, usa MatrizLibera.

Si el problema es que no sabes cómo usar esas funciones... entonces necesitas un manual de C y práctica.

Un saludo
  #7 (permalink)  
Antiguo 14/04/2015, 13:23
 
Fecha de Ingreso: abril-2015
Mensajes: 9
Antigüedad: 9 años
Puntos: 0
Respuesta: tablas bidimensionales

Gracias por todo , ahora lo entiendo mucho mejor lo que me planteas, un saludo y espero algùn dìa poder ayudarte en algo,

Etiquetas: bidimensionales, funcion, int, tablas
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 12:46.