Buenas, espero que estén bien. Antes que nada quería agradecer por tomarse la molestia de contestar varias de nuestras dudas. Entiendo que son un montón en poco tiempo.
Mi duda está en la solución del ejercicio 2. Creo que no toma en cuenta el caso base en el que la tira comienza con 1 y hace que al inicializar bit_transmitido en 0 no se cuente el primer 1.
Adjunto una imagen de la solución:
Lo que se me ocurrió fue hacer lo siguiente pero me queda bastante más compleja:
void procedimiento(){
int cantCeros, cantUnos = 0;
enum ultimo_bit { -1, 0, 1 } // -1 si es el primero que llega
ultimo_bit = -1;
while(true){
char entrada = in(ENTRADA_BITS);
if(ENTRADA_BITS & 0x02){ // hay bit para leer
if(ENTRADA_BITS mod 2){ // hay un cero para contar
if(ultimo_bit == -1){ // primer bit es 0
ultimo_bit = 0;
}elsif(ultimo_bit == 1){
char salida = 1 << 7;
salida = (salida + cantUnos) mod 128;
out(SALIDA_RLE, salida)
cantUnos = 0;
}
cantCeros ++;
}else{ // hay un uno
if(ultimo_bit == -1){ // primer bit
ultimo_bit = 1;
}elsif(ultimo_bit == 0){
char salida = 0 << 7;
salida = (salida + cantCeros) mod 128;
out(SALIDA_RLE, salida)
cantCeros = 0;
}
cantUnos ++;
}
}
}
}
¡Desde ya muchas gracias por cualqueir aclaración!