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ś? :)
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ć.
1'nka binarna to zamalowany kwadracik, a 0 to pusty :)
Dla "ab" mamy już zlepek kodu z a oraz b i wychodzi coś takiego
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.
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:
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.
prosta sprawa, dostajesz stringa np "ala ma kota", a w rezultacie zwracasz kod braila w postaci binarnej, to jest treść zadania ;p
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ć?
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
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.