Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Idmus en 11 Noviembre 2013, 16:31 pm



Título: Enviar un archivo a una funcion "leer matriz" en c
Publicado por: Idmus en 11 Noviembre 2013, 16:31 pm
Hola, tengo una duda, el el caso de que quisiera leer una matriz dentro de un archivo ".txt" desde una funcion... ¿como seria posible? , es decir tengo mi funcion


"int main()"

y dentro de esta funcion llamo a una funcion que se llama "leer matriz()"

pero nose como enviar ese archivo "matriz.txt" con la matriz a la funcion para que me lo lea desde adentro de la funcion "leermatriz()"


agradeceria una ayuda de antemano muchas gracias


PD: lo que estaria adentro del archivo "matriz.txt"
seria algo asi:



1 3 4  7
2 4 8  8
5 8 10 9


Título: Re: Enviar un archivo a una funcion "leer matriz" en c
Publicado por: rir3760 en 12 Noviembre 2013, 02:54 am
tengo una duda, el el caso de que quisiera leer una matriz dentro de un archivo ".txt" desde una funcion... ¿como seria posible? , es decir tengo mi funcion

"int main()"

y dentro de esta funcion llamo a una funcion que se llama "leer matriz()"

pero nose como enviar ese archivo "matriz.txt" con la matriz a la funcion para que me lo lea desde adentro de la funcion "leermatriz()"
El escenario mas simple es aquel donde conoces el numero de filas y columnas. En ese caso solo debes pasar a la función el nombre del archivo y la dirección base del array. Dentro de la función abres el archivo, lo procesas y finalmente lo cierras.

Mas o menos así:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define NUM_FILAS  3
  5. #define NUM_COLS   4
  6.  
  7. int leer_matriz(char const *nom_entrada, int mat[][NUM_COLS]);
  8.  
  9. int main(void)
  10. {
  11.   int mat[NUM_FILAS][NUM_COLS];
  12.   char const *nombre = "Entrada.txt";
  13.  
  14.   /* ... */
  15.  
  16.   leer_matriz(nombre, mat);
  17.  
  18.   /* ... */
  19.  
  20.   return EXIT_SUCCESS;
  21. }
  22.  
  23. int leer_matriz(char const *nom_entrada, int mat[][NUM_COLS])
  24. {
  25.   FILE *entrada;
  26.   int rv;
  27.  
  28.   if ((entrada = fopen(nom_entrada, "rt")) == NULL){
  29.      /* Manejo de error */
  30.   }else {
  31.      /* Procesar el contenido del archivo */
  32.   }
  33.   fclose(entrada);
  34.  
  35.   return rv;
  36. }

Un saludo


Título: Re: Enviar un archivo a una funcion "leer matriz" en c
Publicado por: Idmus en 12 Noviembre 2013, 20:19 pm
Muchas gracias, aunque el problema esta en que no puedo hacer uso de variables globales. ademas debe calcular la matriz (sist.de ecuaciones) por el metodo de gauss jordan)


Título: Re: Enviar un archivo a una funcion "leer matriz" en c
Publicado por: Idmus en 12 Noviembre 2013, 20:44 pm
#include <stdio.h>
#include <stdlib.h>


void LlenarMatriz (float s[50][50], int *t)
{
     int i, j, c;
     char a[20];
     
     FILE *arch;
     gets(a);
     arch = fopen("matriz.txt","r");
     fscanf (arch, "%i", c);
      *t=c;
     
     while (!feof(arch))
     
   
     
     for (i=0; i<c; i++)
         for (j=0; j<c; j++)
             fscanf (arch, "%f", &s[j]);
     
     fclose (arch);
}

void EscribirMatriz (float s[50][50], int t)
{
     int i, j, c;
     t=c;
     
     for (i=0; i<c; i++)
         for (j=0; j<c; j++)
             printf ("%d", s[j]);
}


void GaussJordan (float s[50][50], int t)
{
     float piv, x, y;
     int i, ii, j, m;
         for (i=0; i<t; i++)
         {
             for (ii=0; ii<t; ii++)
             {
                 if (ii != i)
                 {
                        x = -s[ii];
                        y = s[ii];
                        for (j=0; j<t+1; j++)
                            s[ii][j] = -s[ii][j]/y*x+s[j];
                 }
             }
         }
}


int main()
{
    int n;
    float a[50][50];
   
    printf("Trabajo realizado por los Alumnos por miMIKASA EREN \n\n");
    printf("Ingrese el tamaño de la Matriz: \n");
    scanf ("%d", &n);
         
    LlenarMatriz(a,&n);
    EscribirMatriz(a,n);
    GaussJordan(a,n);
    EscribirMatriz(a,n);
   
    return 0;
}




el codigo compila , pero se cierra cuando ingreso el tamaño de la matriz, por ejemplo, colo que la matriz tendra un tamaño 3, pero se cierra la consola luego de eso... quisiera saber cual es el problema


Título: Re: Enviar un archivo a una funcion "leer matriz" en c
Publicado por: rir3760 en 13 Noviembre 2013, 01:09 am
Cuando publiques código fuente por favor utiliza las etiquetas de código. Estas se agregan mediante el cuadro desplegable con el texto "GeSHi" en la pagina de composición de mensajes, solo tienes que seleccionar ahí el lenguaje (C, C++, etc.).

----

En el programa no tiene caso pedir el numero de filas y columnas en la función main porque ese valor se ignora (lo primero que haces en la función "LlenarMatriz" es destruir ese valor sobrescribiendolo con otro).

El error se encuentra en esa función (me refiero a "LlenarMatriz"), cuando lees el numero de filas con esta linea:
Código
  1. fscanf(arch, "%i", c);
Falta utilizar el operador "dirección de" (el '&'), debería ser:
Código
  1. fscanf(arch, "%i", &c);

Un saludo


Título: Re: Enviar un archivo a una funcion "leer matriz" en c
Publicado por: Idmus en 13 Noviembre 2013, 18:15 pm
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. FILE *Leer(){
  6. FILE *superfacil;
  7. superfacil=fopen("datos.txt", "r" );
  8. return (superfacil);
  9. }  
  10.  
  11. int TotalLines(){
  12. FILE *arch;
  13. arch=fopen("datos.txt","r");
  14.   int ch,num_lineas = 0;
  15.   while ((ch = fgetc(arch)) != EOF)
  16.      if (ch == '\n')
  17.         num_lineas++;
  18.    return(num_lineas+1);
  19. }
  20.  
  21. int main() {
  22. int a[10][10],b[10],n,i,j,k,l;
  23. float t;
  24.  
  25. FILE *azucar;
  26. azucar=Leer();
  27. n=TotalLines();
  28.  
  29. for(i=0;i<n;i++){
  30. for(j=0;j<n;j++){
  31. fscanf(azucar,"%d",&a[i][j]);
  32. }
  33. fscanf(azucar,"%d",&b[i]);
  34. }
  35. for(i=0;i<n;i++){
  36. for(j=0;j<n;j++)
  37. printf("%d\t",a[i][j]);
  38.  
  39. printf("%d\n",b[i]);
  40. }
  41.  
  42. system("pause");
  43. return 0;
  44.  
  45. }
  46.  





de esta forma puedo leer una matriz, sin embargo hallar el codigo de c para solucionarlo por gauss jordan me ha sido complicado, tira errores cuando intento loss que estan ya hecho o cuando intento modificar esos archivos para qu funcionen en mi codigo.... ¡que codigo me servivria para aplicar gauss gordan a la matriz que leo adentro del archivo?