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

leer una matriz desde fichero en C

Estas en el tema de leer una matriz desde fichero en C en el foro de C/C++ en Foros del Web. Hola, la tipica funcion para leer un fichero Código: #include <stdio.h> void main() { FILE *fopen(), *fp; int c; fp = fopen("prog.c","r"); c = getc(fp) ...
  #1 (permalink)  
Antiguo 15/12/2010, 01:45
 
Fecha de Ingreso: octubre-2008
Mensajes: 91
Antigüedad: 16 años, 1 mes
Puntos: 0
leer una matriz desde fichero en C

Hola, la tipica funcion para leer un fichero
Código:
#include <stdio.h>
void main()
{
   FILE *fopen(), *fp;
   int c;
   fp = fopen("prog.c","r");
   c = getc(fp) ;
   while (c!= EOF)
   {
   		putchar(c);
		c = getc(fp);
   }
   fclose(fp);
}
no me vale para mi proposito...el cual es, a partir de un fichero, por ejemplo...
1111110110110110
0110110110110110
1101101011010011

tengo un fichero con el contenido anterior, y yo lo que quiero hacer es leerlo, y meterlo en una matriz, el caso es que el codigo anterior, me muestra bien el fichero, pero cuando meto la variable c en una matriz de INT, y la muestro, siempre me muestra 49 :S
porque es eso?

es decir el resultado de mostrar la matriz seria:
49494949494949494949494949494949494949
49494949494949494949494949494949494949
49494949494949494949494949494949494949


gracias!!!!
  #2 (permalink)  
Antiguo 15/12/2010, 09:59
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: leer una matriz desde fichero en C

Cita:
tengo un fichero con el contenido anterior, y yo lo que quiero hacer es leerlo, y meterlo en una matriz, el caso es que el codigo anterior, me muestra bien el fichero, pero cuando meto la variable c en una matriz de INT, y la muestro, siempre me muestra 49 :S
porque es eso?
no entiendo muy bien que quieres decir por que en el codigo no tienes ninguna matriz.

supongo que te pasara eso por que la variable c sera 1, pero 1 como caracter, no como numero entonces al imprimir c en formato entero ( int ) te imprime el numero que corresponde a ese caracter en la tabla ascii

en la siguiente tabla se puede ver como 49 en decimal corresponde al caracter 1:


  #3 (permalink)  
Antiguo 15/12/2010, 10:01
 
Fecha de Ingreso: octubre-2008
Mensajes: 91
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: leer una matriz desde fichero en C

entonces, lo k deberia hacer es un casting de C a int???
si ese es el caso, como puedo hacerlo?

gracias

un saludo
  #4 (permalink)  
Antiguo 15/12/2010, 10:05
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: leer una matriz desde fichero en C

vos queres transformar el caracter en el numero correspondiente???
  #5 (permalink)  
Antiguo 15/12/2010, 10:05
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: leer una matriz desde fichero en C

pero que es lo que quieres hacer? y como lo vas a hacer? imprimir por pantalla?
  #6 (permalink)  
Antiguo 15/12/2010, 15:20
 
Fecha de Ingreso: octubre-2008
Mensajes: 91
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: leer una matriz desde fichero en C

no, yo lo k kiero hacer es coger un fichero de texto o lo que sea, k tenga el contenido que puse antes, es decir llenos de 0 y 1, como si el texto fuese una matriz, ok?
entonces, quiero leer linea a linea y meterlo en una matriz de enteros por ejemplo...
es decir, no kiero mostrarlo en pantalla ni nada, solo meter los datos de un fichero en una matriz...
no se si m he explicado bien
  #7 (permalink)  
Antiguo 15/12/2010, 15:45
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: leer una matriz desde fichero en C

ok, es que el programa que has puesto es para imprimir segun va leyendo.

lo que tienes que hacer es en vez de imprimir por pantalla el caracter que lees:

putchar(c);

lo almacenas en un array o matriz:

matriz[i][j] = c;

las "i" y las "j" se tienen que ir incrementando para escribir en toda la matriz, por que si no escribirias siempre en el mismo elemento.
  #8 (permalink)  
Antiguo 16/12/2010, 01:15
 
Fecha de Ingreso: octubre-2008
Mensajes: 91
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: leer una matriz desde fichero en C

Cita:
Iniciado por Munire Ver Mensaje
ok, es que el programa que has puesto es para imprimir segun va leyendo.

lo que tienes que hacer es en vez de imprimir por pantalla el caracter que lees:

putchar(c);

lo almacenas en un array o matriz:

matriz[i][j] = c;

las "i" y las "j" se tienen que ir incrementando para escribir en toda la matriz, por que si no escribirias siempre en el mismo elemento.
pero claro, el problema esta ahi, yo hacia eso, pero al mostrar la matriz, me mostraba los codigo ascii, porque salian 49, no se como hacerlo y es una tonteria :S
  #9 (permalink)  
Antiguo 16/12/2010, 06:25
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: leer una matriz desde fichero en C

Cita:
Iniciado por nitsuga1986 Ver Mensaje
pero claro, el problema esta ahi, yo hacia eso, pero al mostrar la matriz, me mostraba los codigo ascii, porque salian 49, no se como hacerlo y es una tonteria :S
Código:
char car = 'c';     declaramos un caracter que es la letra "c"

printf("%c", car);     imprimimos car como caracter   => formato: %c
deberia imprimir:  c

printf("%d", car);    imprimimos  car como numero   => formato %d
deberia imprimir: 99   (numero que corresponde al caracter "c")
  #10 (permalink)  
Antiguo 16/12/2010, 06:26
 
Fecha de Ingreso: octubre-2008
Mensajes: 91
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: leer una matriz desde fichero en C

supongo que lo que tendre que hacer es una conversion manual, cuando sea 48 lo que me devuelva, meto un 0, y si es 49, meto un 1, no?
porque he intentado hacerlo asi:
matriz[i][j]=atoi(c) pero me da un fallo
  #11 (permalink)  
Antiguo 16/12/2010, 07:21
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: leer una matriz desde fichero en C

el problema es que estas cogiendo los numeros del archivo como caracteres., por eso se transforman en 48 o 49.

c = getc(fp)

en vez de eso coge los numeros como numeros

fscanf(fp, "%d", matriz[][]);

siendo matriz de tipo entero (int)


Cita:
supongo que lo que tendre que hacer es una conversion manual, cuando sea 48 lo que me devuelva, meto un 0, y si es 49, meto un 1, no?
porque he intentado hacerlo asi:
matriz[i][j]=atoi(c) pero me da un fallo
escribe el codigo entero
  #12 (permalink)  
Antiguo 16/12/2010, 09:57
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: leer una matriz desde fichero en C

lo que puedes hacer si estas seguro que solo digitos vienen es restar el codigo ascii del cero al caracter:
matriz[i][j] = c - '0';
De esta forma como los digitos son consecutivos para el caracter numero cero vas a conseguire l numero cero y asi sucesivamente.
  #13 (permalink)  
Antiguo 16/12/2010, 11:14
 
Fecha de Ingreso: octubre-2008
Mensajes: 91
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: leer una matriz desde fichero en C

Este es mi codigo:
fp = fopen("ejemplo1.dat","r");
c = getc(fp) ;
for(i=0;i<17;i++){
for(j=0;j<19;j++){
while (c!= EOF)
{
fscanf(fp, "%d", escenario[i][j]);

}
}
}
fclose(fp);

el ejemplo1.dat contiene esto:
1111111111111111111
1000000001000000001
1011011101011101101
1000000000000000001
1011010111110101101
1000010001000100001
1111011101011101111
1111010000000101111
1111000111110001111
1111010000000101111
1111011101011101111
1000010001000100001
1011010111110101101
1000000000000000001
1011011101011101101
1000000001000000001
1111111111111111111

cuando lo compilo me da este fallo:

warning: format ‘%d’ expects type ‘int *’, but argument 3 has type ‘int’
es en la linea donde hago el fscanf
y luego al ejecutarlo me da un fallo de segmentacion :S
  #14 (permalink)  
Antiguo 16/12/2010, 13:44
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: leer una matriz desde fichero en C

te falta &

fscanf(fp, "%d", &escenario[i][j]);
  #15 (permalink)  
Antiguo 16/12/2010, 13:48
 
Fecha de Ingreso: octubre-2008
Mensajes: 91
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: leer una matriz desde fichero en C

k raro, ahora no m da el segmetation fault, pero se queda como esperando algo :S
  #16 (permalink)  
Antiguo 16/12/2010, 14:19
 
Fecha de Ingreso: diciembre-2010
Mensajes: 2
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: leer una matriz desde fichero en C

Hola!! Yo estaba con el mismo problema, y buscando la solución en internet encontré tus dudas.
Te escribo el pedacito de programa que con tus dudas logré modificar y me funciona:

char AAA;
FILE *lec;
lec = fopen("mat.dat","r");

for(i=0;i<M;i++)
{
for(j=0;j<L;j++){
AAA = getc(lec);
if (AAA!= EOF){
fscanf(lec, " %d" ,&Matriz[i][j]);
}
}
}
fclose (lec );

Creo que el problema que tenés es que se queda en el loop del while, yo lo cambié por un if y me funciona...
Igualmente recién empiezo a programar y no se si el programa está escrito eficientemente...

Me inscribí en el foro para contestarte porque yo perdí más de 2 hs con este problema, y esta bueno cuando te dan una mano, es la primera vez que puedo aportar algo.
Espero que te funcione...
Saludos!!
  #17 (permalink)  
Antiguo 16/12/2010, 14:36
 
Fecha de Ingreso: diciembre-2010
Mensajes: 2
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: leer una matriz desde fichero en C

Me acabo de dar cuenta que además a los números que están en mi archivo les tuve que poner un espacio entre ellos.

Es decir el tuyo es:

1110001
1100000

y el mio lo acomodé a:

1 1 1 0 0 0 1
1 1 0 0 0 0 0

Si está todo junto no se que es lo que lee, pq me escribe otros números.
Quizás no te sirva, pq si no podés tener el archivo con los núm. separados a mi no me funcionó...

Perdón, pero no puedo aportar más, ya comenté que soy nueva en esto...
Saludos!
  #18 (permalink)  
Antiguo 16/12/2010, 16:41
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: leer una matriz desde fichero en C

Primero que todo en el fscanf tenes que decirle quye lea un caracter y no un numero.... porque te estaba tomando toda la linea si no,
fscanf(fp, "%c", escenario[i][j]);

El primer codigo con los dos for y erl while no andaba porque en el while se consumia todo el archivo y cuando pasas a una nuevca iteracion ya se termino el archivo....asi que no va eso.

Por eso con el if estra bien si ya sabes cuantos caracteres tiene cada linea y tene cuidado porque el caracter de fin de linea tambien cuenta.... deberias leerlo cuando termina el segundo for.
  #19 (permalink)  
Antiguo 17/12/2010, 11:34
 
Fecha de Ingreso: marzo-2009
Mensajes: 74
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: leer una matriz desde fichero en C

men no se muy bien pero tengo yo esto no se si te sirva checalo es escritura y lectura fijate como salen como si fuera una matriz nada mas falta que vos los metas a un arreglo.
Recuerda en en C/C++ los archivos se leen por campo y regitro en este codigo tengo nada mas 4 campos y registros los que quieras

Código C++:
Ver original
  1. #include <iostream.h>
  2. #include <stdio.h>
  3. #include <fstream.h>
  4. #include <cstdlib>
  5. #include<conio.h>
  6. int main()
  7. {
  8.     ofstream Leer("Matriz.txt",ios::out);
  9.     if (!Leer)
  10.     {
  11.                               cerr<<"No se pudo abrir el archivo"<<endl;
  12.                               exit(1);
  13.                               }
  14.                              
  15. cout<<"Esribir datos ?:"<<endl;
  16. int a,b,c,d,contador=0;
  17.      while (cin>> a >> b >> c >> d)
  18.     {
  19.            contador=contador+1;
  20.           Leer<<a<<' '<<b<<' '<<c<<' '<<d<<endl;
  21.     }
  22. getch ();
  23. return 0;
  24. }



Código C++:
Ver original
  1. #include <iostream.h>
  2. #include <conio.h>
  3. #include <stdio.h>
  4. #include <fstream.h>
  5. #include <iomanip.h>
  6. #include <string.h>
  7. #include <cstdlib>
  8. void imprimirLinea(int,int,int,int);
  9. #include "stdlib.h"
  10. int main ()
  11. {
  12.     ifstream Leer("Matriz.txt",ios::in);
  13.     if (!Leer)
  14.     {
  15.                                  cerr<<"No se pudo abrir el archivo"<< endl;
  16.                                  exit(1);
  17.     }
  18.     int a,b,c,d;
  19.      while (Leer>>a >> b >> c >> d)
  20.     imprimirLinea(a,b,c,d);
  21.     getch ();
  22.     return 0;
  23. }
  24. void imprimirLinea(int a,int b,int c,int d)      
  25. {
  26.      cout<<left<<setw(10)<<a<<setw(10)<<b<<setw(10)<<c<<setprecision(10)<<right<<d<<endl;
  27.    
  28.  
  29. }
  #20 (permalink)  
Antiguo 17/12/2010, 12:17
 
Fecha de Ingreso: octubre-2008
Mensajes: 91
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: leer una matriz desde fichero en C

Esto es una locura!!! como algo tan simple en otros lenguajes, en C me esta dando tantisimo problema...mi codigo final es este:
Código C:
Ver original
  1. int c;
  2.  
  3.     FILE *archivo;
  4.     char caracter;
  5.  
  6.  
  7.     FILE *fopen(), *fp;
  8.  
  9.    fp = fopen("ejemplo2.dat","r");
  10.    c = getc(fp) ;
  11.         for(i=0;i<17;i++){
  12.             for(j=0;j<19;j++){
  13.                 caracter=getc(fp);
  14.                 if(caracter!=EOF){
  15.                     fscanf(fp, "%c", &escenario[i][j]);
  16.                 }
  17.              }
  18.         }
  19.    fclose(fp);
pues cuando muestro la matriz me muestra esto:
49 49 49 49 49 49 49 49 49 49 48 48 48 48 48 48 48 48 49
49 49 48 49 48 48 49 48 49 49 49 48 48 48 48 48 48 48 48
49 49 49 48 48 49 49 48 48 49 49 49 48 48 48 48 48 48 48
48 49 49 49 48 49 48 48 49 48 49 49 49 49 48 48 48 48 48
48 49 49 49 49 48 48 49 49 48 48 49 49 49 49 48 48 48 48
48 48 49 49 49 49 48 49 48 48 49 48 49 49 49 48 48 48 48
48 48 48 48 49 49 49 48 48 49 49 48 48 49 49 49 48 48 48
48 48 48 48 48 49 49 49 48 49 48 48 49 48 49 49 49 48 48
48 48 48 48 48 48 49 49 49 49 49 49 49 49 49 49 49 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

en el fscanf lo que estoy leyendo ya es un numero, y la cosa es que me lee la mitad de la matriz o que?

que paranoia!!!
  #21 (permalink)  
Antiguo 17/12/2010, 13:34
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: leer una matriz desde fichero en C

como la estas imprimiendo en pantalla?
  #22 (permalink)  
Antiguo 18/12/2010, 01:46
 
Fecha de Ingreso: junio-2010
Ubicación: Charlotte, NC
Mensajes: 611
Antigüedad: 14 años, 5 meses
Puntos: 95
Respuesta: leer una matriz desde fichero en C

No te lo compliques demasiado, utiliza asignacion dinamica de memoria, con el concepto de row major order.

Row major order, es como el compilador guarda las matrices en memoria. Veras, la memoria es secuencial, por lo que la computadora no es capaz de ver una matriz como matriz, sino como un arreglo lineal.

Los lenguajes de programacion tienen diferentes formas de lidiar con esto, y la que usa C/C++ es el row major order.
Eso quiere decir, que el compilador, toma los arrays, renglon por renglon y los guarda secuencialmente en la memoria.

La formula del row major order es la siguiente:

offset = renglon*NUMCOLUMNAS + columna

donde offset es el indice en un array unidimensional, en donde se encuentra el valor que quieres accesar.
renglon, es el renglon en donde se encuentra el elemento.
columna, es la columna donde se encuentra el elemento
NUMCOLUMNAS, es el numero TOTAL de columnas que tiene tu matriz.


Por ejemplo si quieres acceder al elemento de la matriz [0][0];
el equivalente en row major order seria.

Código C:
Ver original
  1. const int MAX = 100;
  2. const int NUMCOLUMNAS = 14;
  3.  
  4. int array[100];
  5. offset = 0*NUMCOLUMNAS + 0;
  6. printf("%d",array[offset]);;

O si quieres acceder al elemento matriz[2][3] entonces seria de la siguiente manera:
Código C:
Ver original
  1. const int MAX = 100;
  2. const int NUMCOLUMNAS = 14;
  3.  
  4. int array[MAX];
  5. offset = 2*NUMCOLUMNAS + 3;
  6. printf("%d",array[offset]);;

Si quieres leer la "matriz" completa, quedaria algo parecido a:

Código C:
Ver original
  1. const int MAX = 100;
  2. const int NUMRENGLONES = 16;
  3. const int NUMCOLUMNAS = 14;
  4.  
  5. int array[MAX];
  6. for(renglon=0;renglon<=NUMRENGLONES;renglon++)
  7. {
  8.  for(columna=0;columna<=NUMCOLUMNAS;columna++)
  9.   {
  10.     offset = renglon*NUMCOLUMNAS + columna;
  11.     printf("%d",array[offset]);
  12.    }
  13.   printf("\n");
  14. }


Finalmente, este codigo debe solucionar tu problema, solo cambia los parametros y si no quieres utilizar una constante MAX = 100, utiliza asignacion dinamica.
Utilizando el concepto de row major order, tambien puedes tener una matriz dinamica, desde mi punto de vista, es mas facil de implementar que un array de punteros ;)


Código C:
Ver original
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     const int MAX = 100;
  5.     const int NUMCOLUMNAS = 4;
  6.     const int NUMRENGLONES = 4;
  7.  
  8.    FILE *fp;
  9.    int c,i,offset,renglon,columna;
  10.    char array[MAX];
  11.    fp = fopen("data.txt","r");
  12.    i=0;
  13.    offset=0;
  14.    while (c!= EOF)
  15.    {
  16.        c = fgetc(fp);
  17.        array[i] = putchar(c);
  18.        i++;
  19.    }
  20.    printf("\n\n\n");
  21.    fclose(fp);
  22.    for(renglon=0;renglon<=NUMRENGLONES;renglon++)
  23.    {
  24.        for(columna=0;columna<=NUMCOLUMNAS;columna++)
  25.        {
  26.            offset = renglon*NUMCOLUMNAS + columna;
  27.            printf("%c",array[offset]);
  28.        }
  29.        printf("\n");
  30.    }
  31.    return 0;
  32. }


Por otra parte, tienes razon, hay algunas cosas que en C requieren cientos de lineas de codigo, cuando en otros lenguajes se pueden implementar facilmente. Es por eso que se tiene que tener bien claro cual es el proposito final de la aplicacion, para poder encontrar un lenguaje de programacion que nos facilite la implementacion de la solucion.
  #23 (permalink)  
Antiguo 18/12/2010, 03:50
 
Fecha de Ingreso: octubre-2008
Mensajes: 91
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: leer una matriz desde fichero en C

Cita:
Iniciado por AlanChavez Ver Mensaje
No te lo compliques demasiado, utiliza asignacion dinamica de memoria, con el concepto de row major order.

Row major order, es como el compilador guarda las matrices en memoria. Veras, la memoria es secuencial, por lo que la computadora no es capaz de ver una matriz como matriz, sino como un arreglo lineal.

Los lenguajes de programacion tienen diferentes formas de lidiar con esto, y la que usa C/C++ es el row major order.
Eso quiere decir, que el compilador, toma los arrays, renglon por renglon y los guarda secuencialmente en la memoria.

La formula del row major order es la siguiente:

offset = renglon*NUMCOLUMNAS + columna

donde offset es el indice en un array unidimensional, en donde se encuentra el valor que quieres accesar.
renglon, es el renglon en donde se encuentra el elemento.
columna, es la columna donde se encuentra el elemento
NUMCOLUMNAS, es el numero TOTAL de columnas que tiene tu matriz.


Por ejemplo si quieres acceder al elemento de la matriz [0][0];
el equivalente en row major order seria.

Código C:
Ver original
  1. const int MAX = 100;
  2. const int NUMCOLUMNAS = 14;
  3.  
  4. int array[100];
  5. offset = 0*NUMCOLUMNAS + 0;
  6. printf("%d",array[offset]);;

O si quieres acceder al elemento matriz[2][3] entonces seria de la siguiente manera:
Código C:
Ver original
  1. const int MAX = 100;
  2. const int NUMCOLUMNAS = 14;
  3.  
  4. int array[MAX];
  5. offset = 2*NUMCOLUMNAS + 3;
  6. printf("%d",array[offset]);;

Si quieres leer la "matriz" completa, quedaria algo parecido a:

Código C:
Ver original
  1. const int MAX = 100;
  2. const int NUMRENGLONES = 16;
  3. const int NUMCOLUMNAS = 14;
  4.  
  5. int array[MAX];
  6. for(renglon=0;renglon<=NUMRENGLONES;renglon++)
  7. {
  8.  for(columna=0;columna<=NUMCOLUMNAS;columna++)
  9.   {
  10.     offset = renglon*NUMCOLUMNAS + columna;
  11.     printf("%d",array[offset]);
  12.    }
  13.   printf("\n");
  14. }


Finalmente, este codigo debe solucionar tu problema, solo cambia los parametros y si no quieres utilizar una constante MAX = 100, utiliza asignacion dinamica.
Utilizando el concepto de row major order, tambien puedes tener una matriz dinamica, desde mi punto de vista, es mas facil de implementar que un array de punteros ;)


Código C:
Ver original
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     const int MAX = 100;
  5.     const int NUMCOLUMNAS = 4;
  6.     const int NUMRENGLONES = 4;
  7.  
  8.    FILE *fp;
  9.    int c,i,offset,renglon,columna;
  10.    char array[MAX];
  11.    fp = fopen("data.txt","r");
  12.    i=0;
  13.    offset=0;
  14.    while (c!= EOF)
  15.    {
  16.        c = fgetc(fp);
  17.        array[i] = putchar(c);
  18.        i++;
  19.    }
  20.    printf("\n\n\n");
  21.    fclose(fp);
  22.    for(renglon=0;renglon<=NUMRENGLONES;renglon++)
  23.    {
  24.        for(columna=0;columna<=NUMCOLUMNAS;columna++)
  25.        {
  26.            offset = renglon*NUMCOLUMNAS + columna;
  27.            printf("%c",array[offset]);
  28.        }
  29.        printf("\n");
  30.    }
  31.    return 0;
  32. }


Por otra parte, tienes razon, hay algunas cosas que en C requieren cientos de lineas de codigo, cuando en otros lenguajes se pueden implementar facilmente. Es por eso que se tiene que tener bien claro cual es el proposito final de la aplicacion, para poder encontrar un lenguaje de programacion que nos facilite la implementacion de la solucion.
gracias por todo, pero ni con esas, me da en todas las lineas el siguiente fallo:

error: stray ‘\240’ in program


error: stray ‘\302’ in program

en cuanto a como lo imprimo....
Código C:
Ver original
  1. for (int i=0;i<17;i++)
  2.   for(int j=0;j<19;j++)
  3.     printf("%i",escenario[i][j]);
  #24 (permalink)  
Antiguo 18/12/2010, 06:56
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: leer una matriz desde fichero en C

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.     int i, j;
  7.     int escenario[50][50];        
  8.     FILE *fp;
  9.  
  10.     fp = fopen("ejemplo1.txt","r");
  11.     if(fp==NULL)
  12.         printf("error");
  13.  
  14.     for(i=0;i<17;i++)
  15.     {
  16.         for(j=0;j<19;j++)
  17.         {
  18.             fscanf(fp, "%1d", &escenario[i][j]);     se guarda en un array
  19.             printf("%d", escenario[i][j]);               y se imprime a la vez (aprovechamos por que el bucle es el mismo)
  20.         }
  21.         printf("\n");      //cada vez que se termina una fila hay que pasar a la siguiente linea
  22.     }
  23.  
  24.     fclose(fp);
  25.  
  26.  
  27.     system("pause");
  28.     return 0;
  29.  
  30. }



tengo esto en el archivo ejemplo1.txt
Código:
1111111111111111111
1000000001000000001
1011011101011101101
1000000000000000001
1011010111110101101
1000010001000100001
1111011101011101111
1111010000000101111
1111000111110001111
1111010000000101111
1111011101011101111
1000010001000100001
1011010111110101101
1000000000000000001
1011011101011101101
1000000001000000001
1111111111111111111
esta es la salida:

Código:
1111111111111111111
1000000001000000001
1011011101011101101
1000000000000000001
1011010111110101101
1000010001000100001
1111011101011101111
1111010000000101111
1111000111110001111
1111010000000101111
1111011101011101111
1000010001000100001
1011010111110101101
1000000000000000001
1011011101011101101
1000000001000000001
1111111111111111111
Presione una tecla para continuar . . .



esto es lo que quieres???
  #25 (permalink)  
Antiguo 18/12/2010, 07:08
 
Fecha de Ingreso: octubre-2008
Mensajes: 91
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: leer una matriz desde fichero en C

Cita:
Iniciado por Munire Ver Mensaje
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.     int i, j;
  7.     int escenario[50][50];        
  8.     FILE *fp;
  9.  
  10.     fp = fopen("ejemplo1.txt","r");
  11.     if(fp==NULL)
  12.         printf("error");
  13.  
  14.     for(i=0;i<17;i++)
  15.     {
  16.         for(j=0;j<19;j++)
  17.         {
  18.             fscanf(fp, "%1d", &escenario[i][j]);     se guarda en un array
  19.             printf("%d", escenario[i][j]);               y se imprime a la vez (aprovechamos por que el bucle es el mismo)
  20.         }
  21.         printf("\n");      //cada vez que se termina una fila hay que pasar a la siguiente linea
  22.     }
  23.  
  24.     fclose(fp);
  25.  
  26.  
  27.     system("pause");
  28.     return 0;
  29.  
  30. }



tengo esto en el archivo ejemplo1.txt
Código:
1111111111111111111
1000000001000000001
1011011101011101101
1000000000000000001
1011010111110101101
1000010001000100001
1111011101011101111
1111010000000101111
1111000111110001111
1111010000000101111
1111011101011101111
1000010001000100001
1011010111110101101
1000000000000000001
1011011101011101101
1000000001000000001
1111111111111111111
esta es la salida:

Código:
1111111111111111111
1000000001000000001
1011011101011101101
1000000000000000001
1011010111110101101
1000010001000100001
1111011101011101111
1111010000000101111
1111000111110001111
1111010000000101111
1111011101011101111
1000010001000100001
1011010111110101101
1000000000000000001
1011011101011101101
1000000001000000001
1111111111111111111
Presione una tecla para continuar . . .



esto es lo que quieres???
POR FIN!!! eso es justo lo que queria....llevaba atascado dias...
muchisimas gracias

Etiquetas: fichero, matriz
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 22:58.