elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  C:Calcular montañas en los datos almacenados en una matriz
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: C:Calcular montañas en los datos almacenados en una matriz  (Leído 7,111 veces)
Xandrete

Desconectado Desconectado

Mensajes: 210



Ver Perfil
Re: C:Calcular montañas en los datos almacenados en una matriz
« Respuesta #10 en: 18 Enero 2012, 23:03 pm »

Código
  1. fscanf(f1,"%f", matriz[j]);

Supongo que en todo caso sería

Código
  1. fscanf(f1,"%f", matriz[i][j]);

La función Muestra_montanas la tienes plagada de errores de este tipo. Recuerda que para acceder a un elemento de una matriz hacen falta dos índices.

Saludos


« Última modificación: 18 Enero 2012, 23:05 pm por Xandrete » En línea

deifk

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: C:Calcular montañas en los datos almacenados en una matriz
« Respuesta #11 en: 18 Enero 2012, 23:06 pm »

el caso es que al pegar el codigo todos los "i" de la matriz se han borrado ponen como que estan y luego no salen, asi que nose que podra ser


En línea

Xandrete

Desconectado Desconectado

Mensajes: 210



Ver Perfil
Re: C:Calcular montañas en los datos almacenados en una matriz
« Respuesta #12 en: 18 Enero 2012, 23:12 pm »

Ah, claro. Eso es porque no utilizas las etiquetas para adjuntar código ([ code=c ] [ /code ]). La etiqueta [ i ] [ /i ] sirve para escribir en cursiva. Ya que estamos, a partir de ahora usa [ code ] para pegar código. Será más fácil de leer. Si puedes, hazlo ahora (no me gustaría tener que intuir cosas allá donde no las hay).
En línea

deifk

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: C:Calcular montañas en los datos almacenados en una matriz
« Respuesta #13 en: 18 Enero 2012, 23:19 pm »

Disculpas, he posteado escasas veces y no era consciente de estas herramientas, a ver si asi alguien me puede decir el porque del "error de segmentacion"
Gracias!

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. #define M 5
  6. #define N 5
  7.  
  8. void Lee_Fichero(char [], float[][M]);
  9. void Muestra_montanas(float [][M]);
  10.  
  11.  
  12. main()
  13. {
  14.  float m1[N][M];
  15.  
  16.  Lee_Fichero("cartografia.dat",m1);
  17.  Muestra_montanas(m1);
  18. }
  19.  
  20. void Lee_Fichero(char nombre[],float matriz[N][M])
  21. {
  22.  
  23.  FILE *f1;
  24.  int i,j;
  25.  
  26.  f1=fopen(nombre,"r");
  27.  
  28.  if(f1!=NULL)
  29.  {
  30.    for(i=0; i<N;i++)
  31.    {
  32.     for(j=0;j<M;j++)
  33.      {
  34.  
  35.      fscanf(f1,"%f", matriz[i][j]);
  36.      }
  37.    }
  38.    fclose(f1);
  39.  }  
  40.  else
  41.  {
  42.    printf("Error en la apertura del fichero %s\n",nombre);
  43.    exit(-1);
  44.  }
  45. }
  46. void Muestra_montanas(float m[N][M])
  47. {
  48.  float max_altura;
  49.  int i,j;
  50.  
  51.  max_altura=m[i][j];
  52.  for(i=1;i<N-1;i++)
  53.  {
  54.    for(j=1; j<M-1;j++)
  55.    {
  56.    if(m[i][j]>m[i][j-1] && m[i][j]>m[i][j+1] &&m[i][j]>m[i-1][j-1] && m[i][j]>m[i+1][j-1] && m[i][j]>m[i-1][j] && m[i][j]>m[i+1][j] && m[i][j]>m[i-1][j+1] && m[i][j]>m[i+1][j+1
  57.       {
  58.        max_altura=m[i][j];
  59.        printf("Las coordenadas de la montaña son %d y %d y su altura %f", i, j, max_altura);
  60.        }
  61.    }
  62.  }
  63.  
  64.  
En línea

Xandrete

Desconectado Desconectado

Mensajes: 210



Ver Perfil
Re: C:Calcular montañas en los datos almacenados en una matriz
« Respuesta #14 en: 18 Enero 2012, 23:26 pm »

Tranqui, no pasa nada.

Ya había visto el error antes de que postearas. Mira:

Código
  1.  float max_altura;
  2.  int i,j;
  3.  
  4.  max_altura=m[i][j];

Ni i ni j están inicializadas, por tanto el valor que tienen es impredecible (o, dicho de otra manera, es basura). Por tanto, seguramente la violación de segmento se produce cuando accedes a m[  i][j] sin haberles dado un valor previo a j,i.

Joder, he tenido que reeditar el post 100 veces porque esta vez fui yo quien se hizo la picha un lío con lo de las cursivas.
« Última modificación: 18 Enero 2012, 23:29 pm por Xandrete » En línea

deifk

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: C:Calcular montañas en los datos almacenados en una matriz
« Respuesta #15 en: 18 Enero 2012, 23:37 pm »

Código
  1. max_altura=m[i][j];

esta sentencia creo que me sobraba, nose porque estaba ahí aun asi sigo teniendo error de segmentacion, ¿que es lo que que dices que es necesario inicializar?
no se supone que i y j adquieren el valor -1 al ejecutarse el for?
En línea

Xandrete

Desconectado Desconectado

Mensajes: 210



Ver Perfil
Re: C:Calcular montañas en los datos almacenados en una matriz
« Respuesta #16 en: 18 Enero 2012, 23:55 pm »

Oh, vaya. Antes copié la misma línea de código y no me di cuenta.

Aquí tienes un error:

Código
  1. fscanf(f1,"%f", matriz[i][j]);

Se te pasó poner el & antes de matriz[ i ][j]. El argumento de scanf tiene que ser el puntero al dato, no el dato.

Y otra cosa. Es recomendable que el main devuelva un entero. Deberías poner int main() en la cabecera y no main() a secas. Y al final del main, pon return 0;

Te aconsejo que compiles con -Wall y -Werror. Deberías considerar todos los warning como errores, y corregirlos convenientemente (y tu código da un par de warnings si los compilas con -Wall)

Código
  1. max_altura=m[i][j];

esta sentencia creo que me sobraba, nose porque estaba ahí aun asi sigo teniendo error de segmentacion, ¿que es lo que que dices que es necesario inicializar?
no se supone que i y j adquieren el valor -1 al ejecutarse el for?

Me refería a que si querías acceder a m[ i ][j] antes del for, tenías que darle un valor concreto a i, j (inicializarlos).

Saludos.
« Última modificación: 18 Enero 2012, 23:58 pm por Xandrete » En línea

deifk

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: C:Calcular montañas en los datos almacenados en una matriz
« Respuesta #17 en: 19 Enero 2012, 00:04 am »

Cierto,todo solucionado, muchas gracias de verdad, me han sido de gran ayuda, habia olvidado cosas como esas, llevaba unas semanas sin trabajar con matrices y se me olvido el ampersant.

Un saludo!
En línea

Xandrete

Desconectado Desconectado

Mensajes: 210



Ver Perfil
Re: C:Calcular montañas en los datos almacenados en una matriz
« Respuesta #18 en: 19 Enero 2012, 00:07 am »

¡De nada!

Una última recomendación.

Cuando escribas código, intenta que quede lo más legible posible. Conviene evitar sentencias if con megacondiciones (poniendo la evaluación de la expresión en una función aparte, por ejemplo). O, si aun así prefieres poner una megacondición, al menos distribúyela a lo largo de varias líneas, así:

Código
  1. if( m[i][j] > m[i][j-1] &&
  2. m[i][j] > m[i][j+1] &&
  3. m[i][j] > m[i-1][j-1] &&
  4. m[i][j] > m[i-1][j] &&
  5. m[i][j] > m[i-1][j+1] &&
  6. m[i][j] > m[i+1][j-1] &&
  7. m[i][j] > m[i+1][j] &&
  8. m[i][j] > m[i+1][j+1] )
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[C] Calcular determinante de una matriz de orden 'n'
Programación C/C++
Kasswed 9 39,334 Último mensaje 24 Enero 2013, 15:37 pm
por flony
No se imprimen los datos almacenados en un archivo
Programación C/C++
BJM 1 1,705 Último mensaje 23 Noviembre 2012, 04:03 am
por durasno
Calcular determinante de una matriz NxN
Programación C/C++
amchacon 1 15,076 Último mensaje 13 Febrero 2013, 20:35 pm
por leosansan
Calcular máximo de matriz, error
Programación C/C++
Puntoinfinito 7 4,575 Último mensaje 18 Julio 2013, 11:58 am
por Puntoinfinito
[Python] - calcular el max y el min de una matriz de 4x4
Scripting
jhonnymn3 1 5,488 Último mensaje 18 Noviembre 2014, 15:18 pm
por daryo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines