Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

26/12/2012 #1

Avatar de LaElectronicaMeOdia

Algoritmo para matriz en Lenguaje C (CCS)
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.
26/12/2012 #2

Avatar de cosmefulanito04

¿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:

Código PHP:
...
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:

Código PHP:
...
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
... 
26/12/2012 #3

Avatar de LaElectronicaMeOdia

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:

Código:
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
26/12/2012 #4

Avatar de cosmefulanito04

No.

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

Código PHP:
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?
26/12/2012 #5

Avatar de LaElectronicaMeOdia

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:



---------- Actualizado después de 15 minutos ----------

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.

Código:
  for(p=0;p>=7;++p){
   For (j=0;j>=7;++j)
    b[j].p=bit_test(a[p],j); 
   }
Imágenes Adjuntas
Tipo de Archivo: jpg Dibujo1.JPG (37,7 KB (Kilobytes), 176 visitas)
26/12/2012 #6


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.


Código:
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.ccsinfo.com/downloads/ccs_c_manual.pdf
26/12/2012 #7

Avatar de LaElectronicaMeOdia

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

Asi quedo:
Código:
 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.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.