AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Logischer Schaltungsgenerator
Thema durchsuchen
Ansicht
Themen-Optionen

Logischer Schaltungsgenerator

Ein Thema von mr-unbekannt · begonnen am 2. Aug 2006 · letzter Beitrag vom 2. Aug 2006
Antwort Antwort
mr-unbekannt

Registriert seit: 29. Okt 2005
Ort: tirol
104 Beiträge
 
Delphi 7 Personal
 
#1

Logischer Schaltungsgenerator

  Alt 2. Aug 2006, 12:47
hallo...

also, ich arbeite an einem projekt, das wahrheitstabellen generiert und auswertet ( siehe BoolGen)

nun, alles schön und gut, jetzt würde ich gerne ein tool dazu machen, das mir die KNF und DNF in eine grafische version übersetzt--> das heißt in eine logische schaltung.
da dies mithilfe grafiken passieren muss, und ich keine ahnung von grafikprogrammierung habe, wollte ich mal fragen, wie man sowas machen könnte.

ich kenne ein programm(applett), das in JAVA geschrieben wurde und das diese aufgabe hervorragend löst. ( KVD )
falls jemand die java datein braucht, ich schick sie weiter.

wie könnte man denn das machen?


hier der code der drawPLA.jad:
Code:
import java.awt.Color;
import java.awt.Graphics;

class DrawPLA extends PLA
{

    DrawPLA(int i, int j, String as[], String as1[])
    {
        super(i, j, as, as1);
    }

    DrawPLA(int i, int j, String as[], String as1[], boolean flag)
    {
        super(i, j, as, as1);
        klein = flag;
    }

    public void drawpla(Graphics g, int i, int j)
    {
        x0 = i;
        y0 = j;
        drawInputs(g);
        drawInputLabels(g);
        drawOutputLabels(g);
    }

    public void drawSolderDot(Graphics g, int i, int j)
    {
        g.fillRect(i - 1, j - 1, 3, 3);
    }

    public void drawInputLabels(Graphics g)
    {
        boolean flag = false;
        byte byte0 = 15;
        for(int j = 0; j < super.ni; j++)
        {
            int i = x0 + (j + 1) * 40 + 5;
            g.setColor(Color.black);
            g.drawString(super.innames[super.ni - j - 1], i, y0 + byte0);
        }

    }

    public void drawOneInput(Graphics g, int i, int j)
    {
        if(!klein)
        {
            g.setColor(Color.black);
            drawSolderDot(g, i + 10, j + 1);
            g.drawLine(i + 10, j, i + 10, j + 40);
            g.drawLine(i + 10, j + 10, i + 25, j + 10);
            drawSolderDot(g, i + 10, j + 10);
            g.drawLine(i + 25, j + 10, i + 25, j + 20);
            g.setColor(Color.blue);
            g.drawLine(i + 16, j + 20, i + 34, j + 20);
            g.drawLine(i + 16, j + 20, i + 25, j + 32);
            g.drawLine(i + 34, j + 20, i + 25, j + 32);
            g.fillRect(i + 23, j + 34, 5, 3);
            g.fillRect(i + 24, j + 33, 3, 5);
            g.drawLine(i + 25, j + 33, i + 25, j + 39);
            g.setColor(Color.black);
            return;
        } else
        {
            g.setColor(Color.black);
            drawSolderDot(g, i + 10, j + 1);
            g.drawLine(i + 10, j, i + 10, j + 40);
            g.drawLine(i + 10, j + 10, i + 20, j + 10);
            drawSolderDot(g, i + 10, j + 10);
            g.drawLine(i + 20, j + 10, i + 20, j + 20);
            g.setColor(Color.blue);
            g.drawLine(i + 13, j + 20, i + 28, j + 20);
            g.drawLine(i + 13, j + 20, i + 20, j + 32);
            g.drawLine(i + 28, j + 20, i + 20, j + 32);
            g.fillOval(i + 18, j + 30, 5, 5);
            g.drawLine(i + 20, j + 33, i + 20, j + 39);
            g.setColor(Color.black);
            return;
        }
    }

    public void drawconns(Graphics g)
    {
        int i1 = (x0 + (super.ni + 1) * 40 + 20) - 2;
        g.setColor(Color.black);
        int l1;
        if(!klein)
            l1 = y0 + 60 + super.np * 30;
        else
            l1 = y0 + 60 + super.np * 10;
        for(int i2 = 0; i2 < super.ni; i2++)
        {
            int j = x0 + 10 + (super.ni - i2) * 40;
            g.drawLine(j, y0 + 60, j, l1);
            if(!klein)
                j += 15;
            else
                j += 10;
            g.drawLine(j, y0 + 60, j, l1);
        }

        int i = 0;
        for(Cube cube = super.root.next; cube != super.root; cube = cube.next)
        {
            for(int j2 = 0; j2 < super.ni; j2++)
                if(cube.getInput(j2) == 0)
                {
                    int k = x0 + 25 + (super.ni - j2) * 40;
                    int j1;
                    if(!klein)
                        j1 = y0 + 60 + i * 30 + 7 + j2 * 3;
                    else
                        j1 = y0 + 65 + i * 10;
                    if(klein)
                    {
                        g.setColor(Color.red);
                        drawSolderDot(g, k - 5, j1);
                    } else
                    {
                        drawSolderDot(g, k, j1);
                    }
                    if(klein)
                    {
                        g.setColor(Color.black);
                        g.drawLine(k - 3, j1, i1, j1);
                    } else
                    {
                        g.drawLine(k, j1, i1, j1);
                    }
                } else
                if(cube.getInput(j2) == 1)
                {
                    int l = x0 + 10 + (super.ni - j2) * 40;
                    int k1;
                    if(!klein)
                        k1 = y0 + 60 + i * 30 + 7 + j2 * 3;
                    else
                        k1 = y0 + 65 + i * 10;
                    drawSolderDot(g, l, k1);
                    g.drawLine(l, k1, i1, k1);
                }

            i++;
        }

    }

    public void drawInputs(Graphics g)
    {
        int j = y0 + 20;
        for(int k = 0; k < super.ni; k++)
        {
            int i = x0 + (super.ni - k) * 40;
            drawOneInput(g, i, j);
        }

    }

    public void drawOutputLabels(Graphics g)
    {
        g.setColor(Color.black);
        for(int k = 0; k < super.no; k++)
        {
            int j = y0 + 15;
            int i = xpos_OutputGate[k] + 5;
            g.drawString(super.outnames[k], i, j);
        }

    }

    protected int x0;
    protected int y0;
    protected int xpos_OutputGate[];
    protected int xsize_OutputGate[];
    protected int conns_OutputGate[];
    public boolean klein;
}
bitte um hilfe

danke
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Logischer Schaltungsgenerator

  Alt 2. Aug 2006, 13:09
Du brauchst also nur die Befehle um die Zeichnung zu machen?

Wenn du auf einem Canvas malen willst, brauchst du einen pen. Per canvas.pen.color:=clblack; setzt du die Farbe. Per Moveto(x,y) setzt du in an den Anfang einer linie und per Lineto(x,y) malst du eine Linie zum Zielpunkt.
fillrect gibts in Delpi unter gleichem Namen und wird mit einem Pinsel (brush) gemalt, dessen farbe du per brush.color:=clmarron; setzen kannst und damit das rect auch ausgefüllt ist, noch brush.style auf bssolid setzen.
Und Drawstring nennt sich textout.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
mr-unbekannt

Registriert seit: 29. Okt 2005
Ort: tirol
104 Beiträge
 
Delphi 7 Personal
 
#3

Re: Logischer Schaltungsgenerator

  Alt 2. Aug 2006, 13:25
hmm..

eingentlich bräuchte ich das wissen, wie man eine schaltung aus KNF und DNF zeichnet
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz