Copiar matrices en C

Iniciado por chrisuxx, 17 Diciembre 2013, 15:06 PM

0 Miembros y 1 Visitante están viendo este tema.

chrisuxx

Buenas tardes.

Estoy intentando hacer un programa (aún de principiante, ya que estoy aprendiendo) que me imprima ciertas matrices con valor de 0 y 1 a partir de una secuencia de estos números que le pasas desde el terminal, en un fichero de texto.
El problema me surge a la hora de copiar una matriz bidimensional a otra. La cosa es que no busco la función de strcpy(), ya que no quiero que ambas matrices queden iguales, sino que la primera matriz se coloque al principio de la segunda, pero que después pueda meter en la segunda matriz(debajo de los valores de la primera) más matrices.
Busco algo equivalente a (referido al código de más abajo):
strcpy(tabla[(*filasVariable)][(*columnasVariable)],matriz1[f][c]);
Es decir, que pueda copiar elemento a elemento de una matriz a otra.

La función en la que me aparece el problema es la siguiente:


void rellenarTabla(char tabla[MAX_TABLA][MAX_TABLA], int contador, int *filasVariable, int *columnasVariable, const char codigo[], char matriz0[FILA][COLUMNA], char matriz1[FILA][COLUMNA], int longitudCad){
int f;
int c;
int i; /*Variable para recorrer 'codigo[i]'*/

f=0;
while((*filasVariable)<(FILA*contador)){
for(i=0;i<longitudCad;i++){
if(codigo[i]=='1'){
c=0;
while((*columnasVariable)<COLUMNA){
tabla[(*filasVariable)][(*columnasVariable)]=matriz1[f][c];
(*columnasVariable)++;
c++;
} /*Del for que recorre las columnas de la matriz de '0'*/
} /*Del if*/
if(codigo[i]=='0'){
c=0;
while((*columnasVariable)<COLUMNA){
tabla[(*filasVariable)][(*columnasVariable)]=matriz0[f][c];
(*columnasVariable)++;
c++;
} /*Del for que recorre las columnas de la matriz de '1'*/
} /*Del segundo if*/
} /*Del for que recorre los caracteres de la secuencia introducida*/
(*filasVariable)++;
f++;
} /*Del for que recorre las filas*/

}


Muchas gracias a cualquiera que ayude! Admito cualquier aportación :)

ivancea96

Explica el código. Además de la función, pon el código con un "main" donde te falle. Así sin más, no tengo ni idea de que hace cada variable.

Si tu idea es copiar una matriz a otra, a la función serviría con que le mandases las dos matrices asecas, y no todas esas variables que se le envían. Incluso, si quieres, mandarle también el número de filas y columnas.

En definitiva, revisa el código. Son demasiadas variables. Si no das arreglado, please, envía el código completo, así para saber donde falla, y testearlo con mayor celeridad.

chrisuxx

#2
El código completo sería el siguiente (no quería ponerlo porque resultaba muy largo):


No disponible.



En el terminal el programa recibiría 2 parámetros (a parte del codificador), en el primero la secuencia de 0 y 1 (correspondientes a las matrices con valor 0 y 1) y en el segundo una letra de la A a la Z (menos la Ñ), donde cada una tiene una matriz de 0 y 1 diferente.
El programa debería crear un archivo .pbm donde se escriban todas esas matrices dependiendo de los parámetros dados, creando algo así al indicar 01100 BMAF



Luego como alternativa tengo este otro código, pero me da los siguientes errores:
Unused declaration of funtion 'numeroFactorial'
Unused declaration of function 'numeroPotencia'
aviso: 'main' generalmente es una función que no es static [-Wmain]
y en el último corchete de cierre de todos (el de la función escribirPBM):
Multiple markers at this line
   - Syntax error
   - expected declaration or statement at end of input

Lo que me parece raro es que ahora me aparezcan esos errores cuando en el anterior código no.


No disponible.


¡Muchas gracias por todo!

ivancea96

Okay. Viendo que el código completo no nos interesa, veré para mejorar ese copiar matriz.

Haré para copiar la matriz asecas. El problema viene cuando la matriz donde se copia, es más pequeña. Eso ya te lo dejo a ti jaja

ivancea96

void rellenarTabla(char **a, char **b, int filas, int columnas){
    for(int i=0;i<filas;i++)
        for(int j=0;j<columnas;j++)
            b[i][j] = a[i][j];
}


Qué me dices? Quizás no sea lo que buscas. Si le falta algo, dilo.