Pitääkö ÄO:n olla 150 tai yli, jotta pystyisi tajuamaan mistä helevatista tuossa on oikein kyse? Opettaja jauhaa ja vääntää rautalankaa, mutta kun ei tajua niin ei tajua :(
Karnaugh-kartta
logic fail
4830
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 4
Vanhimmat
http://fi.wikipedia.org/wiki/Karnaugh’n_kartta
http://www.tkt.cs.tut.fi/kurssit/1100/luennot/DigipkLuento3_3s05.pdf
http://fi.wikibooks.org/wiki/Digitaalipiirit/Karnaugh'n_kartta
Ei tästä ole kahtakaankymmentä vuotta, kun tietokoneita (ainakin isompia sellaisia) vielä ohjelmoitiin Assemblyllä ja koodia optimoitiin käsin. Useammasta muuttujasta riippuvat loogiset testit kannatti yrittää optimoida jo ihan siksi, ettei koodia tulisi turhaan tolkutonta määrää. Tuollainen kartta oli hyvä apuväline (vaikken tuota nimeä koskaan ollut kuullutkaan, ja yleensä homma hoitui päässä ilman paperille piirtelyä).
Ja ihan vielä nykyäänkin, aivan turha kirjoittaa 16 eri ehtoa johonkin if-lauseeseen jos kolmellakin pärjää.
Ihan perus ohjelmointiteknisiä taitoja sinulle siis opetetaan.
Piti siis vastata tuohon avaukseen.
Tavoitteena on ensinnäkin seuraava: On joukko tulomuuttujia ja lähtömuuttuja ja tiedetään mikä lähdön pitää olla kullakin tulomuuttujien arvoyhdistelmällä. Pitäisi selvittää miten se lähtömuuttuja saadaan tulomuuttujista esim. vähimmillä komponenteilla jos ollaan suunnittelemassa sähköistä logiikkakytkentää tai vähimmillä if -lauseilla jos tehdään ohjelmaa. Karnaugh-kartta on graafinen apuneuvo tuollaiseen ongelmaan silloin kun tulomuuttujia ei ole kovin paljon.
Esimerkki: Kaksi tulomuuttujaa A ja B ja lähtö C. Näin pitäisi olla:
A=1 ja B=1 => C = 1
A=1 ja B=0 => C = 1
A=0 ja B=1 => C = 1
A=0 ja B=0 => C = 0
Piirretään 2x2 ruudukko ja sovitaan että ensimmäisellä pystysarakkeella A=1 ja toisella A=0. Ja vastaavasti ensimmäisellä vaakarivillä B=1 ja toisella B=0. Sitten merkitään ruutuihin mikä C:n pitää olla kussakin kohdassa, saadaan tällainen:
1 1
1 0
Nyt etsitään mahdollisimman suuria alueita, joissa C:n arvo on 1 niin että alue on suorakaiteen muotoinen ja sisältää tasan 1, 2, 4, 8... ruutua. Alueet saavat mennä päällekäin ja ruudukko pitää ajatella sylinterin muotoiseksi niin että vastakkasilla reunoilla olevat ruudut voidaan laskea kuuluvaksi samaan alueeseen. Tässä tapauksessa alueita löytyy kaksi (merkattu x:llä):
x x
1 0
ja
x 1
x 0
Nuo alueet vastaavat tilanteita joissa B=1 (ensimmäinen) ja A=1 (toinen). Lähtömuuttuja saadaan siis lasketuksi lausekkeella A B.
Ykkösen sijasta olisi yhtä hyvin voitu yrittää muodostaa alueita nollista ja silloin löytyy vain yksi:
1 1
1 x
Se tarkoittaa että lähtömuuttuja on nolla silloin kun A=0 ja B=0 ja ykkönen tietysti silloin kun pätee täsmälleen vastakkainen eli lausekkeeksi tulisi silloin !(!A&!B) (tuossa "!" tarkoittaa loogista negaatiota ja "&" loogista kertolaskua eli AND operaatiota)
Jos oltaisiin ohjelman teossa, valinta olisi luultavasti ensin mainittu eli
if (A | B)
Jos taas olisi jokin logiikkakytkentä kyseessä, valinta saattaisi riippua enemmän siitä mitä portteja on käytettävissä. Ensimmäinen vaatisi yhden kaksituloisen OR-portin mutta saattaa olla että on käytettävissä vain invertoivia portteja, jälkimmäinen toteutuisi pelkillä NAND-porteilla, joita kyllä menisi kolme.
Tuohon malliin. Kahdella muuttujalla tulee tosin vähän kökkö esimerkki kun lopputulos on nähtävissä helposti jo etukäteenkin. Mutta netistä kyllä löytyy esimerkkejä kiinnostavammistakin tapauksista.