¿Convertir las declaraciones IF en bucle? [cerrado
Pregunta
He escrito una función en Mikroc que escanean la tecla presionada en un teclado 4x4
void scan_key()
{
PORTB = 0B11111110;
if ( PORTB == 0b11101110){
Row = 1;
Column = 1;
return;
}
if ( PORTB == 0b11011110){
Row = 2;
Column = 1;
return;
}
if ( PORTB == 0b10111110){
Row = 3;
Column = 1;
return;
}
if ( PORTB == 0b01111110){
Row = 4;
Column = 1;
return;
}
PORTB = 0B11111101;
if ( PORTB == 0b11101101){
Row = 1;
Column = 2;
return;
}
if ( PORTB == 0b11011101){
Row = 2;
Column = 2;
return;
}
if ( PORTB == 0b10111101){
Row = 3;
Column = 2;
return;
}
if ( PORTB == 0b01111101){
Row = 4;
Column = 2;
return;
}
PORTB = 0B11111011;
if ( PORTB == 0b11101011){
Row = 1;
Column = 3;
return;
}
if ( PORTB == 0b11011011){
Row = 2;
Column = 3;
return;
}
if ( PORTB == 0b10111011){
Row = 3;
Column = 3;
return;
}
if ( PORTB == 0b01111011){
Row = 4;
Column = 3;
return;
}
PORTB = 0B11110111;
if ( PORTB == 0b11100111){
Row = 1;
Column = 4;
return;
}
if ( PORTB == 0b11010111){
Row = 2;
Column = 4;
return;
}
if ( PORTB == 0b10110111){
Row = 3;
Column = 4;
return;
}
if ( PORTB == 0b01110111){
Row = 4;
Column = 4;
return;
}
PORTB = 0B11110000;
}
¿Hay alguna manera de convertir este algoritmo en un bucle?
Solución
Sí. (Al menos suponiendo que en realidad no quiera tener esas tareas antes de cada bloque de if
s. ¿Asumo que estaban allí para probar? de lo contrario, su código no tiene sentido).
Por lo menos, puede poner cada uno de los valores binarios en una matriz y construir un bucle como este:
int portValue[4][4] = {{0b11101110, 0b11011110, 0b10111110, 0b01111110}, {//...Rest of values here }}
int loop_col = 0;
int loop_row = 0;
for (loop_col = 0; loop_col < 4; loop_col++){
for (loop_row = 0; loop_row < 4; loop_row++){
if ( PORTB == portValue[loop_col][loop_row]){
Row = loop_row + 1;
Column = loop_col + 1;
return;
}
}
}
Otros consejos
Sí, por supuesto.
Primero haz un poco de matriz con tus valores. Lo llamaremos t [] y el segundo es d [] [] // matriz bidimensional
y hagamos doble bucle
for(i=1;i<=4;i++)
{
cur_value=t[i]; // our value
for(j=1;j<=4;j++)
{
right_side_value=d[i][j];
if(cur_value==right_side_value)
{
rows=i;
columns=j;
return;
}
}
}
Espero que ayude.
No sé si una matriz 1 dimensional solo se necesita para valores D, no verificó cada número
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow