Zdravim, mam problem s realizaci dekoderu, při realizaci mi fungují prvni tri funkce ale zbytek ne...
Vše mam dobře, tabulky, minimalizace...
Poradte prosim :(
Fa -B+cD+Cd+a
Fb - b+b+A
Fc - B+D+c
Fd - AB+Cd+aC+ad+AcD
Fe - AB+Cd+ad
Ff - cd+aC
Fg - bd+bc+aC+ad
velka pismena znamenaji NEGACE
cele vyrazy dvakrat zneguju a zapojim pres nandy....
funguji pouze prvni tri funkce
abcd ABCD a b c
3 1100 0011 1 1 1
4 0010 1101 1 1 1
5 1010 0101 1 1 1
6 0110 1001 1 1 1
7 1110 0001 1 1 1
8 0001 1110 1 1 1
9 1001 0110 1 0 1
10 0101 1010 1 1 0
11 1101 0010 1 1 0
12 0011 1100 1 1 1
no a ja mam zatim toto:
abcd ABCD a b c d e f g
3 1100 0011 1 1 1 1
4 0010 1101 0 1 1 0
5 1010 0101 1 1 0 1
6 0110 1001 1 1 1 1
7 1110 0001 0 1 1 0
8 0001 1110 1 0 1 1
9 1001 0110 1 0 1 1
10 0101 1010 1 1 1 0
11 1101 0010 1 1 1 1
12 0011 1100 1 1 1 1
#include <iostream>
using namespace std;
int main() {
cout << " abcd ABCD a b c d e f g\n";
for (int i=3; i<13; i++) {
bool a= i&1, b= i&2, c= i&4, d= i&8;
bool A= !a, B= !b, C= !c, D= !d;
if ( i < 10 ) { cout << " "; }
cout << i << " ";
cout << a << b << c << d << " " << A << B << C << D << " ";
cout << (C || d || (a&&B) || (A&&b)) << " ";
cout << (b || c ) << " ";
cout << (d || b || A) << " ";
cout << ((C&&D) || (a&&B) || (A&&b&&c) || (a&&d) || (B&&d)) << " ";
// cout << () << " ";
// cout << () << " ";
// cout << () << " ";
cout << endl;
}
}
vsimni si, ze je to zatracene napadne podobne tomu co ma byt...
mimochodem u vsech dekoderu je A nejmene platny bit (tj hodnota 1)... a D je MSB (8) - ty to mas presne naopak
abcd ABCD a b c d e f g
3 1100 0011 1 1 1 1 1 1 0
4 0010 1101 0 1 1 0 0 0 0
5 1010 0101 1 1 0 1 1 0 1
6 0110 1001 1 1 1 1 0 0 1
7 1110 0001 0 1 1 0 0 1 1
8 0001 1110 1 0 1 1 0 1 1
9 1001 0110 1 0 1 1 1 1 1
10 0101 1010 1 1 1 0 0 0 0
11 1101 0010 1 1 1 1 0 1 1
12 0011 1100 1 1 1 1 0 1 1
segA = (C || d || (a&&B) || (A&&b))
segB = (b || c )
segC = (d || b || A)
segD = ((C&&D) || (a&&B) || (A&&b&&c) || (a&&d) || (B&&d))
segE = ((a&&B) || (C&&D))
segF = ((a&&b) || (B&&d))
segG = ((a&&B) || (b&&c) || (a&&d) || (B&&d))
akorat u tebe jsou proste prohozeny pismena
#include <iostream>
using namespace std;
int main() {
cout << " abcd ABCD a b c d e f g\n";
for (int i=3; i<13; i++) {
bool a= i&8, b= i&4, c= i&2, d= i&1;
bool A= !a, B= !b, C= !c, D= !d;
if ( i < 10 ) { cout << " "; }
cout << i << " ";
cout << a << b << c << d << " " << A << B << C << D << " ";
// segA
cout << (B || a || (d&&C) || (D&&c)) << " ";
// segB
cout << (c || b ) << " ";
// segC
cout << (a || c || D) << " ";
// segD
cout << ((A&&B) || (d&&C) || (D&&c&&b) || (a&&d) || (C&&a)) << " ";
// segE
cout << ((d&&C) || (A&&B)) << " ";
// segF
cout << ((d&&c) || (C&&a)) << " ";
// segG
cout << ((d&&C) || (b&&c) || (a&&d) || (C&&a)) << " ";
cout << endl;
}
}
prohazeny promenny...
radek 12 je v poradku.. to je 9
radek 11 je blbe...
jen se tam prida pro segment e || ( a&&d )
a segment D je urcite dobre... ty tabulky mam vyjety skrz funkce... ne jen rozepsany jak to ma vypadat
jo zase preklik :D vsechny fce fungujou....na to decko se podivam jeste jednou.....jinak moc dekuju...
jeste mam dotaz...proc se nam lisej pravdivostni tabulky ale vysledek je stejnej?...
A jaky zpusobem to resite?
Děkuji
no lisi se jen v tom ze ja mam A=1 B=2 C=4 a D=8 ... u tebe je to presne naopak...
jinak segmenty sou presne ekvivalentni ... jinak by mohla byt jina 6 a 9 a 4... nekdy se koduje 6 bez segmentu A, 9 bez segD a 4 bez segB
jinak sem to resil normalne karnaughovou mapou... zapsat 3-12 a zbytek X (ze se to muze a nemusi groupovat) a pak udelat co nejvetsi skupiny
#23 Jakub
todle nechapu... jen sem si tam pomahal a abcd je neinvertovane, ABCD invertovane... (dodrzeni konvence kterou si zavedl na zacatku...) aby se s tim dalo snadno doplnovat do rovnic (proste toho druheho ctyrsloupku si nevsimej)
ne.. u kazdy funkce musis pro velky pismena pouzit hodnotu z praveho sloupce a pro maly pismena hodnotu z leve casti
(proste pouzit negovanou hodnotu tam, kde ma byt negovana hodnota)
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku