Viernes 15 de Noviembre de 2024, 19:43
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Matrices Multidimensionales Dinamicas
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Matrices Multidimensionales Dinamicas (Leído 1653 veces)
mido_666
Nuevo Miembro
Mensajes: 13
Matrices Multidimensionales Dinamicas
«
en:
Domingo 14 de Diciembre de 2003, 01:40 »
0
Saludos y gracias por adelantado por su tiempo.
Trato de aprender un poco por mi cuenta C y en este caso trataba de hacer una aplicación
de prueba que lea numero de filas y de columnas y que despues pida datos y rellene la matriz de dos elementos pMatriz[filas][columnas] para, por último, decir cual es el valor menor y su posición en la matriz.
No debería ser demasiado complicado pero me he encontrado con un problema:
Hasta el momento me he apañado para escribir el codigo que les adjunto, pero la gran mayoría de las veces que ejecuto el programa (compila sin problemas con gcc), me parece que casi siempre al tratar de manejar los datos de la ultima variable, pero n estoy seguro, salta error de violación de segmento.
Les estaría muy agradecido (y mi autodidactismo asistido) si me comunicaran donde se ubica(n) el(los) fallo(s).
Código: Text
#include <stdio.h>
/*Escriba un programa que lea una matriz de FxC enteros e indique la posición del elemento mínimo*/
void leer_elementos (int filas, int columnas, int **matriz);
void posicion_minimo (int filas, int columnas, int **matriz,
int *direccion_matriz_posiciones);
int main (void)
{
int F, C;
int i, j;
int *almacen;
int **pMatriz;
printf ("Introduzca F: ");
scanf ("%d", &F);
printf ("Introduzca C: ");
scanf ("%d", &C);
pMatriz = (int **) malloc ( sizeof (int *) * F);
almacen = (int *) malloc (sizeof (int) * 2); /*numero dimensiones array principal = 2*/
leer_elementos(F, C, pMatriz);
posicion_minimo(F, C, pMatriz, almacen);
printf ("El valor mínimo en la Matriz reside en pMatriz[%d][%d] y tiene el valor %d.\n",
almacen[0],almacen[1],pMatriz[almacen[0]][almacen[1]]);
}
void leer_elementos(int F,int C, int **pMatriz)
{
int i, j;
int valor;
for (i=0;i<F;i++)
{
pMatriz[i] = (int *) malloc (sizeof(int) * C);
}
for (i=0;i<F;i++)
{
for (j=0;j<C;j++)
{
printf ("Si es tan amable, introduzca usted el valor de pMatriz[%d][%d]: ", i, j);
scanf ("%d", &pMatriz[i][j]);
}
}
}
void posicion_minimo(int F, int C, int **pMatriz, int *almacen)
{
int f_minimo, c_minimo, v_minimo;
int i, j;
v_minimo = pMatriz[0][0];
for (i=0;i<F;i++)
for(j=0;j<C;j++)
{
if (pMatriz[i][j] < v_minimo)
{
f_minimo=i;
c_minimo=j;
v_minimo=pMatriz[i][j];
}
}
almacen[0] = f_minimo;
almacen[1] = c_minimo;
}
Tweet
-
Miguel
- On ne voit bien qu'avec le coeur
albany
Nuevo Miembro
Mensajes: 3
Re: Matrices Multidimensionales Dinamicas
«
Respuesta #1 en:
Domingo 14 de Diciembre de 2003, 08:34 »
0
Hola!!!
Estuve chusmeando y arreglé las cosas que tienen comentarios, espero te sirva de algo.
Flor Castagnino
[CODE]
#include <stdio.h>
#include <stdlib.h>
/*Escriba un programa que lea una matriz de FxC enteros e indique la posición del elemento mínimo*/
void leer_elementos (int filas, int columnas, int **matriz);
void posicion_minimo (int filas, int columnas, int **matriz,
int *direccion_matriz_posiciones , int *almacen2);
int main (void)
{
int F, C;
int i, j;
/*El problema lo encontré en la variable almacen así que la dividí en
dos variables distintas*/
int *almacen;
int *almacen2;
int **pMatriz;
printf ("Introduzca F: ");
scanf ("%d", &F);
printf ("Introduzca C: ");
scanf ("%d", &C);
pMatriz = (int **) malloc ( sizeof (int *) * F);
almacen = (int *) malloc (sizeof (int)/* * 2*/); /*numero dimensiones array principal = 2*/
almacen2 = (int *) malloc (sizeof (int));
leer_elementos(F, C, pMatriz);
posicion_minimo(F, C, pMatriz, almacen , almacen2);
printf ("El valor mínimo en la Matriz reside en pMatriz[%d][%d] y tiene el valor %d.\n",
*almacen,*almacen2,pMatriz[*almacen][*almacen2]);
/*No se libera la memoria alocada*/
}
void leer_elementos(int F,int C, int **pMatriz)
{
int i, j;
int valor;
for (i=0;i<F;i++)
{
pMatriz
= (int *) malloc (sizeof(int) * C);
}
for (i=0;i<F;i++)
{
for (j=0;j<C;j++)
{
printf ("Si es tan amable, introduzca usted el valor de pMatriz[%d][%d]: ", i, j);
scanf ("%d", &pMatriz
[j]);
}
}
}
/*Ahora paso las dos variables almacen a la función*/
void posicion_minimo(int F, int C, int **pMatriz, int *almacen , int *almacen2)
{
int f_minimo, c_minimo, v_minimo;
int i, j;
v_minimo = pMatriz[0][0];
f_minimo = 0;
c_minimo = 0;
*almacen = 0;
*almacen2 = 0;
for (i=0;i<F;i++)
for(j=0;j<C;j++)
{
if (pMatriz
[j] < v_minimo)
{
f_minimo=i;
c_minimo=j;
v_minimo=pMatriz
[j];
}
}
*almacen = f_minimo;
*almacen2 = c_minimo;
}
mido_666
Nuevo Miembro
Mensajes: 13
Re: Matrices Multidimensionales Dinamicas
«
Respuesta #2 en:
Domingo 14 de Diciembre de 2003, 16:24 »
0
Gracias, albany, en verdad solucionaste mi problema diciendome donde estaba el problema. Te agradezco enormemente tu tiempo. Lo único, si no es mucho abusar, quisiera tirar un poco del hilo y preguntar qué es lo que estaba mal, qué soluciones se os ocurren para utilizar esa variable int *almacen como una matriz?
Gracias a todos.
-
Miguel
- On ne voit bien qu'avec le coeur
albany
Nuevo Miembro
Mensajes: 3
Re: Matrices Multidimensionales Dinamicas
«
Respuesta #3 en:
Lunes 15 de Diciembre de 2003, 03:17 »
0
La primer cosa que hice fue inicializar las variables f_minimo y almacen (la original de dos componentes), porque si no encontraba nada dentro no almacenaban valor.
Debugeando me di cuenta que utilizando el malloc con tamaño de dos variables int, me parece que en realidad estás alocando la cantidad correspondiente pero no tener distinción, me refiero a que en el fondo vos alocaste n bytes pero sin separación alguna, si almacenás en el primero pisás lo otro y viceversa. Supongo que eso es lo que sucedía porque los valores que tenía la variable antes de la impresión por pantalla eran basura.
En conclusión, lo que hice fue alocar por separado para poder referirme sin problemas a la parte de memoria que yo quería.
Espero te haya servido
Flor Castagnino
mido_666
Nuevo Miembro
Mensajes: 13
Re: Matrices Multidimensionales Dinamicas
«
Respuesta #4 en:
Lunes 15 de Diciembre de 2003, 14:46 »
0
Aha! Comprendido: me parece muy lógico lo que dices, lo tendré en cuenta para la siguiente vez.
Muchas gracias por todo y hasta la próxima!
-
Miguel
- On ne voit bien qu'avec le coeur
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Matrices Multidimensionales Dinamicas