A ver, si el problema se limita a mover un valor a una determinada posición en un array bidimensional... pués es bastante obvio:
Sea z el valor a colocar en la cordenada x,y:
Si el array es unidimensional no es mucho más complejo, sabiendo el 'ancho' de la diemsnión...
La letra P, tiene dos bits a 1, el 64 y el 16, porque 64+16=80, el resto son 0.
Luego quiere decir que necesitas un bucle de 8 ciclos (porque 8 bits tiene un byte), alojado dentro de otro bucle cuya cantidad de ciclos sean los caracteres.
Así que en pseudocodigo sería algo como:
entero i, j, k
byte letra
Bucle j por cada letra en Palabra
i=1
Bucle para k de 0 a 7
bit= (letra and i) //entiendo que si el bit está a 0, se consigna un 0.
letra /=2
llamada a funcion Posicionar(k, bit)
i +=i // así va tomando valores 1,2,4,8,16...
Fin bucle
Fin bucle
Tu problema luego se resume en que no hay una única forma d eposicionar en el array... "x" e "y", se modifican de forma diferente a cada caso... luego necesitas una función para cada caso, y posiblemente eso suponga que el bucle externo, no pueda ser un bucle y deba ser código lineal...
letra= palabra.char(0)
i=1
bucle para k de 0 a 7
bit= (letra and i) //entiendo que si el bit está a 0, se consigna un 0.
letra /=2
llamada a función x001(k,bit)
i +=i // así va tomando valores 1,2,4,8,16...
fin bucle
letra= palabra.char(1)
i=1
bucle para k de 0 a 7
bit= (letra and i) //entiendo que si el bit está a 0, se consigna un 0.
letra /=2
llamada a función x002(k,bit)
i +=i // así va tomando valores 1,2,4,8,16...
fin bucle
letra= palabra.char(2)
i=1
bucle para k de 0 a 7
bit= (letra and i) //entiendo que si el bit está a 0, se consigna un 0.
letra /=2
llamada a función x003(k,bit)
i +=i // así va tomando valores 1,2,4,8,16...
fin bucle
...etc...
Y dichas funciones, como puedes apreciar reciben dos parámetros, el valor del bit y el índice del bit... el índice es necesario para reposicionar el par de cordenadas X e Y, al punto correcto...
Ejemplo para una de ellas:
entero x, y //declaradas al nivel del módulo, no dentro de una función, pues sus valores deben permanecer inalteradas tras salir de la función.
Funcion PosicionarCuadrante1119(entero indice, entero bit)
Si (indice=0) luego //Reset X e Y al inicio del cuadrante
x= 19
y= 11
Sino
Si (x=20) luego
x= 19
y +=1
Sino
x +=1 // x= 20
Fin si
Fin si
Array(x,y) = bit
Fin funcion
Como hay diferentes cuadrantes, y cada uno tiene sus propias cordenadas, las diferencias entre cada función se limitan a señalar correctamente los valores X e Y a cada caso...
...resumiendo, nada de otro mundo... nada que con un mínimo de atención pueda conseguir cualquiera...
queda a tu esfuerzo el resto de funciones, la llamada como: "PosicionarCuadrante1119", se aplica al cuadrante que apuntas en la inagen con una llave, más exactamente al cuadrante que comienza en Y=11 y x=19... (de ahí el nombre). Puede haber más cuadrantes que se 'rellenen' del mismo modo, por lo que también queda a tu esfuerzo simplificar el código (esto es, reunir todas las que se rellenan igual en una sola)... y así tendrías solo una función por cada forma distinta de llenar un cuadrante y para todos los cuadrantes que se rellenan igual, se diferenciarían sólo en los valores iniciales de sus cordenadas. Ya está todo dicho...