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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Enviar un archivo a una funcion "leer matriz" en c
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Enviar un archivo a una funcion "leer matriz" en c  (Leído 10,057 veces)
Idmus

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Enviar un archivo a una funcion "leer matriz" en c
« 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


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Enviar un archivo a una funcion "leer matriz" en c
« Respuesta #1 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


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Idmus

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Enviar un archivo a una funcion "leer matriz" en c
« Respuesta #2 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)
En línea

Idmus

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Enviar un archivo a una funcion "leer matriz" en c
« Respuesta #3 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
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Enviar un archivo a una funcion "leer matriz" en c
« Respuesta #4 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
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Idmus

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Enviar un archivo a una funcion "leer matriz" en c
« Respuesta #5 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?
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines