Algorytm konwersji znaku char na string w postaci kodu binarnego

0

W jaki sposób można zaimplementować algorytm konwersji pojedynczego znaku char na string w postaci np 100000. Chodzi o alfabet braila. Rozumiem, że można zrobić globalną tablicę (cały alfabet) to wtedy łatwo idzie, ale chodzi o algorytm wyliczania takiego kodu dla znaku a nie korzystanie z tablicy, mapy czy innego dziadostwa. Wie ktoś coś? :)

0

Ale co ma alfabet braila do kodu binarnego? Bo jedno z drugim nie ma nic wspólnego o_O Podaj kilka przykładów tego co masz dane i co chcesz uzyskać.

0

a_binarnie.pnga_braile.png

1'nka binarna to zamalowany kwadracik, a 0 to pusty :)

0

ab_braile.pngDla "ab" mamy już zlepek kodu z a oraz b i wychodzi coś takiego

ab_binar.png

4

Ok teraz rozumiem. Odpowiedź brzmi: nie da się. Mapowanie alfabetu braila nie ma żadnej matematycznej formuły którą można by wykorzystać. To jest po prostu pewne arbitralne przypisanie i tyle. Musisz je sobie zmapować.

To trochę jakby pytać jak matematyczne zapisać słownik polsko-angielski. Nie da się. Dane słowo odpowiada innemu słowu i tyle.

0
Shalom napisał(a):

Ok teraz rozumiem. Odpowiedź brzmi: nie da się. Mapowanie alfabetu braila nie ma żadnej matematycznej formuły którą można by wykorzystać. To jest po prrostu pewne arbitralne przypisanie i tyle. Musisz je sobie zmapować i tyle.

Zrobiłem już tak, ale otrzymałem to:

aaaaa.png

3

No dobra, to teraz zacznijmy jeszcze raz bo mamy tu klasyczny http://xyproblem.info/ Napisz konkretnie JAKIE MASZ ZADANIE. Ale nie własnymi słowami, bo jak widać sam nie rozumiesz co robisz. Pokaż konkretnie jakie masz polecenie w tej swojej pracy domowej, bo się nie dogadamy.

0

prosta sprawa, dostajesz stringa np "ala ma kota", a w rezultacie zwracasz kod braila w postaci binarnej, to jest treść zadania ;p

0

robienie mapy typu

mapa.put('a', "100000"); put('b', "110000"); ... itd aż to Z

iterowanie po stringu

for(char t : stringVal) binaryResult += mapa.get(t);

odpada bo jest BLACKLISTED. Da się to inaczej zrobić?

0

Hmm, chcesz się bawić... To może tak:

Masz układ logiczny, który ma 4 linie wejściowe (4 bity wystarczą do opisania podstawowych liter alfabetu, jak chcesz mieć też cyfry to dorzuć jeszcze jeden bit).
Układ ma 6 wyjść odpowiadających polom alfabetu Brailla.

Teraz dla każdego wyjścia wyznaczasz tablicę prawdy (czyli dla jakich stanów na wejściach będzie prawdą). Następnie minimalizujesz te tablice z wykorzystanim np. metody Karnaugh.

O, tu masz nawet to samo zadanie ;)
https://www.chegg.com/homework-help/questions-and-answers/14-letter-keypad-produces-4-bit-code-shown-table-want-design-logic-circuit-converts-4-bit--q23757759

1

Można na 100% zrobić lepiej, ale mi się nie chce ;)

Zaczynasz od przygotowania tablic prawdy - ja zrobiłem tylko dla pierwszej kropki:

       EDCBA  Q0  Q1 Q2 Q3 Q4 Q5 Q6
a  97  00000  1
b  98  00001  1
c  99  00010  1
d 100  00011  1
e 101  00100  1
f 102  00101  1
g 103  00110  1
h 104  00111  1
i 105  01000  0
j 106  01001  0
k 107  01010  1
l 108  01011  1
m 109  01100  1
n 110  01101  1
o 111  01110  1
p 112  01111  1
q 113  10000  1
r 114  10001  1
s 115  10010  0
t 116  10011  0
u 117  10100  1
v 118  10101  1
w 119  10110  0
x 120  10111  1
y 121  11000  1
z 122  11001  1

Jak to czytać ? Pierwsze pole (lewy górny róg) oznaczone u mnie jako Q0, powinno zapalić się dla wszystkich liter z wyjątkiem "i, j, s, t, w"

Teraz tą tablicę prawdy wklepujesz sobie np. tu: http://www.32x8.com/var5.html (czasem wygodniej ją zanegować) i dostajesz coś takiego:
http://www.32x8.com/circuits5_____A-B-C-D-E_____m_8-9-18-19-22_____d_26-27-28-29-30-31_____option-8_____898788863871950392654

Szukasz interesującego Cię wzorku:
y = AC'D + ADE' + A'BC'D'

I ten wzorek zamieniasz na kod:

bool q0(int A, int B, int C, int D, int E)
{
        return !((A && !C && D) || (A && D && !E) | (!A && B && !C && !D));
}

Dodatkowa negacja wyniku, bo ja akurat wklepałem zanegowane wartości wyjść.

Potem używasz tego np. w takimprogramie:

#include <iostream>
#include <cassert>

void convert(char c, int & A, int & B, int & C, int & D, int & E)
{
        int x = toupper(c)-'A'; // a --> 0, b --> 1 itd
        assert ( x >= 0 );
        assert ( x < 32 );

        E = x & 1;
        D = (x >> 1) & 1;
        C = (x >> 2) & 1;
        B = (x >> 3) & 1;
        A = (x >> 4) & 1;
}


int main()
{
        int A,B,C,D,E;

        for (int i='a'; i<='z'; ++i)
        {
                convert(i, A, B, C, D, E);
                std::cout << char(i) << " " << i << "\t" << A << B<<C<<D<<E<< "  " << q0(A, B, C, D, E) << std::endl;
        }
}

Teraz musisz tylko powtórzyć procedurę dla pozostałych wyjść (q1,...q5) i poprawić maina żeby konwertował dowolny napis a nie cały alfabet.

1 użytkowników online, w tym zalogowanych: 0, gości: 1