Karnaugh-kartta

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 :(
4830
Äänestä

Muut lukivat myös

Vastaukset 4

Vanhimmat
  • 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.

    Äänestä

  • yksi vain kirjoitti:

    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.

    Äänestä

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.

Äänestä

Kommentoi aloitusta


logic fail kirjoitti:

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 :(

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu