unsigned char test;
void setup() {
// NO MODIFICAR este código!
Serial.begin(115200);
presentacion();
}
void loop() {
// Ejemplo de salida del primer punto
Serial.println("Ejemplo de salida esperada punto 1:");
test = par (12);
if(test == 0) Serial.println("El valor es impar");
if(test == 1) Serial.println("El valor es par");
test = par(5);
if(test == 0) Serial.println("El valor es impar");
if(test == 1) Serial.println("El valor es par");
// Ejemplo de salida del segundo punto
Serial.println("Ejemplo de salida esperada punto 2:");
test = mul_9(2);
Serial.print("Salida calculada = "); Serial.print(test, BIN);
if(test == 18){
Serial.println(" correcta!!");
} else {
Serial.println(" incorrecta!!");
}
// Ejemplo de salida del tercer punto
Serial.println("Ejemplo de salida esperada punto 3:");
test = frankie(0b10100110, 0b00001111);
Serial.print("Salida calculada = "); Serial.print(test, BIN);
if(test == 0b010101111){
Serial.println(" correcta!!");
} else {
Serial.println(" incorrecta!!");
}
// Ejemplo de salida del cuarto punto
Serial.println("Ejemplo de salida esperada punto 4:");
test = swapBits(0b00100111, 0, 3);
Serial.print("Salida calculada = "); Serial.print(test, BIN);
if(test == 0b00101110){
Serial.println(" correcta!!");
} else {
Serial.println(" incorrecta!!");
}
// Ejemplo de salida del quinto punto
Serial.println("Ejemplo de salida esperada punto 5:");
test = bitsIguales(0b00100101, 0b11100011, 5);
Serial.print("Salida calculada = "); Serial.print(test, BIN);
if(test == 1){
Serial.println(" correcta!!");
} else {
Serial.println(" incorrecta!!");
}
while(1);
}
/*
Punto 1.
Diseñar una función que identifique si un numero es par o impar
sin usar condicionales IF.
Entradas a la función:
valor: entero con signo
Salidas de la función:
retorna 1- el valor de entrada es par
retorna 0- el valor de entrada es impar
*/
unsigned char par(int valor){
return -1; // <----------- Cambie este valor de salida para que la funcion opere correctamente
}
/*
Punto 2.
Diseñar una función que calcule el producto de un valor por 9
con solo dos (2) operaciones.
(No puede usarse la multiplicación, solo operaciones lógicas o suma convencional)
Entradas a la función:
valor: char sin signo
Salidas de la función:
retorna el valor multiplicado por 9
*/
unsigned char mul_9(unsigned char valor){
mul_9 = (valor << 3 ) | valor;
return mul_9; // <----------- Cambie este valor de salida para que la funcion opere correctamente
}
/*
Punto 3.
Diseñar una función que toma dos numeros de 8 bits y crea uno nuevo con
las mitades de cada una de las entradas.
Entradas a la función:
valorA: char sin signo
valorB: char sin signo
Salidas de la función:
retorna un valor cuyo nibble más significativo es el nibble menos significativo de valorA
y el nibble menos significativo de la salida es el nibble más significativo de valorB
*/
unsigned char nibbleAltoA;
unsigned char nibbleBajoA;
unsigned char nibbleAltoB;
unsigned char nibbleBajoB;
unsigned char frankie(unsigned char valorA, unsigned char valorB){
int mayor_Nib;
int menor_Nib;
nibbleALtoA = valorA >> 4;
nibbleAltoB = valorB >> 4;
nibbleBajoA = valorA & 0x0F;
nibbleBajoB = valorB & 0x0F;
if (nibbleAltoB > nibbleBajoB){ //Decide cual de los dos nibble del valor B es el mayor
mayor_Nib = nibbleAltoB:
}
else{
mayor_Nib = nibbleBajoB;
}
if (nibble_1_A < nibble_2_A){ //Decide cual de los dos nibble del valor A es el menor
mayor_Nib = nibble_1_A;
}
else{
mayor_Nib = nibble_2_A;
}
frankie = menor_Nib << 4 | mayor_Nib; //Une los dos nibble usando operadores de bitwise
return frankie; // <----------- Cambie este valor de salida para que la funcion opere correctamente
}
/*
Punto 4.
Diseñar una función que intercambie dos bits de un numero de 8 bits
Entradas a la función:
valor: char sin signo
numeroBit1: primera posicion de bit que se intercambiara
numeroBit2: segunda posicion de bit que se intercambiara
Salidas de la función:
retorna el valor con los bits intercambiados
*/
unsigned char swapBits(unsigned char valor, char numeroBit1, char numeroBit2){
return -1; // <----------- Cambie este valor de salida para que la funcion opere correctamente
}
/*
Punto 5.
Diseñar una función que indique si un bit especifico es igual en dos numeros distintos
Entradas a la función:
valorA: char sin signo
valorB: char sin signo
numeroBit: el numero de bit que se desea comparar
Salidas de la función:
retorna 1 si los bits son iguales
retorna 0 si los bits son distintos
*/
unsigned char bitsIguales(unsigned char valorA, unsigned char valorB, char numeroBit){
return -1; // <----------- Cambie este valor de salida para que la funcion opere correctamente
}
/*
Punto extra.
Diseñar una función que intercambie el valor de dos variables
sin usar ninguna otra variable y empleando la función XOR
Entradas a la función:
valorA: char sin signo
valorB: char sin signo
Salidas de la función:
presenta el valor de las variables intercambiadas
*/
unsigned char intercambiar(unsigned char valorA, unsigned char valorB){
// NO MODIFICAR este código!
String a = "el valor de la variable A es: " + String(valorA);
String b = "el valor de la variable B es: " + String(valorB);
Serial.println(a);
Serial.println(b);
// Escriba su código a partir de este punto!
// NO MODIFICAR este código!
a = "el valor de la variable A es: " + String(valorA);
b = "el valor de la variable B es: " + String(valorB);
Serial.println();
}
// -----------------------------------------------------------------------------------------
// NO ALTERAR NINGUNA PARTE DE ESTE CODIGO!!
// -----------------------------------------------------------------------------------------
void presentacion(){
String a = "Actividad de Bitwising\n\n";
a += "Escribir el codigo necesario para que cada funcion haga la tarea que se define en cada\n";
a += "comentario encabezando cada una de las funciones presentadas\n\n";
a += "En la funcion loop encuentra pruebas del uso de cada funcion como guia para prueba de cada funcion";
Serial.println(a);
}