# Algoritmo para matriz en Lenguaje C (CCS)



## LaElectronicaMeOdia (Dic 26, 2012)

Antes de iniciar con mi problema quisiera mencionar que conozco la programacion en leguaje C mas no lo domino, mencionado eso quisiera reguntar si alguien conoce una forma de cambiar el orden de una matriz de 8x8, es decir, tengo inicialmente un arreglo A con longitud de 8 bytes, y quisiera pasarlo a un arreglo B tambien de 8 bytes, pongo como ejemlo la siguiente imagen.



en el ejemplo tengo el arreglo inicial que contiene los siguientes valores:
a[0]=0xfe;
a[1]=0x10;
a[2]=0x10;
a[3]=0x10;
a[4]=0xfe;
a[5]=0x00;
a[6]=0x7c;
a[7]=0x82;

lo que busco es que con cierto algoritmo me quede un segundo arreglo asi:
b[0]=0x89;
b[1]=0x8a;
b[2]=0x8a;
b[3]=0xfa;
b[4]=0x8a;
b[5]=0x8a;
b[6]=0x89;
b[7]=0x00;

cualquier duda o cosa que no quede claro intentare explicarlo.

Gracias por su ayuda e interes en el tema.


----------



## cosmefulanito04 (Dic 26, 2012)

¿Pero eso sería dentro de la misma matriz (*cuadrada*) o serían vectores a y b distintos?

De ser la misma matriz, es solo hacer esto:


```
...
unsigned char cont;
for(cont=0;cont<largo_columnas;cont++)
   matriz[cont][0]=matriz[0][cont]; //Paso todo lo que hay en la fila 1 a la columna 1 de la matriz
...
```

De ser 2 vectores, es solo hacer esto:


```
...
unsigned char cont;
for(cont=0;cont<largo_vector;cont++)
   b[cont]=a[cont]; //Paso todo lo que hay en el vector A al vector B
...
```


----------



## LaElectronicaMeOdia (Dic 26, 2012)

Hola Cosmefulanito04

Me parece que no es ningina de las dos o no se pero me gusta mas la primera opcion, mezclando un poco de Basic para pic con C de CCS entiendo que seria algo como esto:


```
int A[8];
int b[8];
int j;
int k;
int P;
a[0]=0xfe;a[1]=0x10;a[2]=0x10;a[3]=0x10;a[4]=0xfe;a[5]=0x00;a[6]=0x7c;a[7]=0x82;

for(p=0;p>=7;++p){
 For (j=0;j>=7;++j)
  b[j].p=a[p].j; //J  son el bit de cada arreglo pero no se como se hace :(
}
```

pero no se si sea correcto asignar o extraer un bit de esa manera: *  b[j].p=a[p].j*


----------



## cosmefulanito04 (Dic 26, 2012)

No.

En C las matrices se manejan como puse arriba, incluso en Java y en C++ se hacen de esa forma.


```
unsigned char matriz[2][2]={{1,2},{3,4}};
....
```

Eso sería la inicialización de una matriz.

*Editado:*

A ver, me parece que entendí lo que estas buscando, ¿vos querés trabajar a nivel de bit y no de byte a partir de 2 vectores?


----------



## LaElectronicaMeOdia (Dic 26, 2012)

Ok, si estoy de acuerdo con lo que dices, quizas es esa la forma pero yo creo que el resultado de esas dos formas es nada mas "cambiarla", el resultado no se modifica del segundo arreglo es decir si no me equivoco quedaria asi:



donde el resultado de B es el mismo de A. o me equivoco?

y lo que busco es que sea asi:

Ver el archivo adjunto 85694



ya supe como sacar el bit con el bit_test, solo me faltaria asignarlo a la B[j] seria algo como el ^ (bitwise) pero no se cual  todavia.


```
for(p=0;p>=7;++p){
   For (j=0;j>=7;++j)
    b[j][B].p[/B]=bit_test(a[p],j); 
   }
```


----------



## MVB (Dic 26, 2012)

No entendí casi nada de lo que estas haciendo. Pero en todo caso, creo que la función de asignación de bits que necesitas es bit_set.

Los vectores B deben ser inicializados en 0x00 antes del procedimiento.
Modifique la condicion de parada de los ciclos for, habia un pequeño error.



```
for(p=0;p<8;++p){    
for (j=0;j<8;++j)    
    if(bit_test(a[p],j))
        bit_set(b[j],p)
 }
```
Espero te sea de utilidad, saludos.

PD: Te recomiendo descargar el manual de CCS donde se incluyen todas las funciones de este. www.*ccs*info.com/downloads/*ccs*_c_*manual*.pdf


----------



## LaElectronicaMeOdia (Dic 26, 2012)

Por FIn.... eso es lo que buscaba Gracias.

Asi quedo:

```
for (p=0;p<=7;++p)
  {for (j=0;j<=7;++j)
   {if(bit_test(a[p],j+1))
        bit_set(b[j],7-p);
    lcd_gotoxy(1,1);
    printf(lcd_putc,"%3u,%X",n,b[n]);
    delay_ms(100);
   }
  }
```
tienes razon con el error del signo ">" del for era "<" .

en realidad el algoritmo lo necesito para dar un efecto de giro de letras en un panel de matrices que estoy realizando.

Problema resuelto muchas gracias a ambos por su ayuda.


----------

