示例#1
0
        private void button1_Click(object sender, EventArgs e)
        {
            Random r = new Random();
            int    brojac_za_crtanje = 1;
            int    brcvorova         = (int)numericUpDown1.Value;
            int    crt = 0;

            if (brcvorova == 1)
            {
                crt = 1;
            }
            if (brcvorova == 2 || brcvorova == 3)
            {
                crt = 2;
            }
            if (brcvorova == 4)
            {
                crt = 3;
            }
            int y = 7;

            for (int i = 0; i < 2; i++)
            {
                int x = 12;
                for (int j = 0; j < crt + 1; j++)
                {
                    Cvor c = new Cvor(idBrojac++, x, y);
                    sema.cvorovi.Add(c);
                    c.zaCrtanje = brojac_za_crtanje++;
                    x          += 10;
                }
                y += 13;
            }
            int numNodes = sema.cvorovi.Count;

            for (int i = 0; i < numNodes / 2; i++)
            {
                Grana g = null;
                if (i != (numNodes / 2 - 1))
                {
                    g = new Grana(idGra++, sema.cvorovi[i], sema.cvorovi[i + 1], 0);
                    sema.cvorovi[i].grane.Add(g);
                    sema.grane.Add(g);
                }
            }
            for (int i = numNodes / 2; i < numNodes; i++)
            {
                Grana g = null;
                if (i != (numNodes - 1))
                {
                    g = new Grana(idGra++, sema.cvorovi[i], sema.cvorovi[i + 1], 0);
                    sema.cvorovi[i].grane.Add(g);
                    sema.grane.Add(g);
                }
            }
            for (int i = 0; i < numNodes / 2; i++)
            {
                Grana g = new Grana(idGra++, sema.cvorovi[i], sema.cvorovi[i + numNodes / 2], 0);
                sema.cvorovi[i].grane.Add(g);
                sema.grane.Add(g);
            }
            int rand = r.Next(10);

            if (brcvorova == 3)
            {
                int iz  = 0;
                int odr = 4;
                if (rand < 2)
                {
                    iz  = 0;
                    odr = 4;
                }
                else if (rand < 4)
                {
                    iz  = 1;
                    odr = 3;
                }
                else if (rand < 6)
                {
                    iz  = 1;
                    odr = 5;
                }
                else
                {
                    iz  = 2;
                    odr = 4;
                }
                Grana g = new Grana(idGra++, sema.cvorovi[iz], sema.cvorovi[odr], 0);
                sema.cvorovi[iz].grane.Add(g);
                sema.grane.Add(g);
            }
            if (brcvorova == 4)
            {
                int iz  = 0;
                int odr = 4;
                if (rand < 3)
                {
                    iz  = 1;
                    odr = 6;
                }
                else if (rand < 6)
                {
                    iz  = 2;
                    odr = 5;
                }
                else
                {
                    iz  = -1;
                    odr = -1;
                }
                if (iz != -1 && odr != -1)
                {
                    Grana g = new Grana(idGra++, sema.cvorovi[iz], sema.cvorovi[odr], 0);
                    sema.cvorovi[iz].grane.Add(g);
                    sema.grane.Add(g);
                }
            }
            foreach (Grana g in sema.grane)
            {
                g.obradjena = false;
                g.struja    = 0;
            }
            foreach (Cvor c in sema.cvorovi)
            {
                c.bot     = true;
                c.indexer = -2;
                c.napon   = 0;
            }
            sema.izbaciPipkeIOstrva(new ListBox());
            List <Poteg> potezi = new List <Poteg>();

            potezi = sema.pot;
            int brojacOtp = 1, brojacStrujni = 1, brojacNapon = 1;

            if (potezi.Count == 1)
            {
                if (r.Next(8) == 0)
                {
                    Komponenta k = new StrujniGenerator(r.Next(6) + 1, "J" + brojacStrujni.ToString(), true);
                    brojacStrujni++;
                    if (r.Next(2) == 0)
                    {
                        k.polaritet      = potezi[0].superGrana[0].izvor;
                        k.frontPolaritet = potezi[0].superGrana[0].izvor;
                    }
                    else
                    {
                        k.polaritet      = potezi[0].superGrana[0].odrediste;
                        k.frontPolaritet = potezi[0].superGrana[0].odrediste;
                    }
                    k.namestiSliku(potezi[0].superGrana[0].izvor, potezi[0].superGrana[0].odrediste);
                    potezi[0].superGrana[0].komponente.Add(k);
                    potezi[0].superGrana[0].brojkom++;
                }
                foreach (Grana g in potezi[0].superGrana)
                {
                    if (r.Next(10) != 0)
                    {
                        int koliko = r.Next(10);
                        if (koliko < 7)
                        {
                            koliko = 1;
                        }
                        else
                        {
                            koliko = 2;
                        }
                        for (int i = 0; i < koliko; i++)
                        {
                            int ran = r.Next(100);
                            if (ran < 62)
                            {
                                Komponenta k = new Otpornik(r.Next(10) + 1, "R" + brojacOtp.ToString());
                                k.namestiSliku(g.izvor, g.odrediste);
                                brojacOtp++;
                                g.komponente.Add(k);
                                g.brojkom++;
                            }
                            else
                            {
                                Komponenta k = new NaponskiGenerator(r.Next(10) + 1, "E" + brojacNapon.ToString(), true);
                                brojacNapon++;
                                if (r.Next(2) == 0)
                                {
                                    k.polaritet      = g.izvor;
                                    k.frontPolaritet = g.izvor;
                                }
                                else
                                {
                                    k.polaritet      = g.odrediste;
                                    k.frontPolaritet = g.odrediste;
                                }
                                k.namestiSliku(g.izvor, g.odrediste);
                                g.komponente.Add(k);
                                g.brojkom++;
                            }
                        }
                    }
                }
                this.p.godina = idBrojac;
                this.p.tezina = idGra;
                this.Close();
                return;
            }
            foreach (Poteg p in potezi)
            {
                if (p.superGrana.Count == 1)
                {
                    int koliko = r.Next(10);
                    if (koliko < 7)
                    {
                        koliko = 1;
                    }
                    else
                    {
                        koliko = 2;
                    }
                    for (int i = 0; i < koliko; i++)
                    {
                        int ran = r.Next(100);
                        if (ran < 50)
                        {
                            Komponenta k = new Otpornik(r.Next(10) + 1, "R" + brojacOtp.ToString());
                            k.namestiSliku(p.superGrana[0].izvor, p.superGrana[0].odrediste);
                            brojacOtp++;
                            p.superGrana[0].komponente.Add(k);
                            p.superGrana[0].brojkom++;
                        }
                        else if (ran < 84)
                        {
                            Komponenta k = new NaponskiGenerator(r.Next(10) + 1, "E" + brojacNapon.ToString(), true);
                            brojacNapon++;
                            if (r.Next(2) == 0)
                            {
                                k.polaritet      = p.superGrana[0].izvor;
                                k.frontPolaritet = p.superGrana[0].izvor;
                            }
                            else
                            {
                                k.polaritet      = p.superGrana[0].odrediste;
                                k.frontPolaritet = p.superGrana[0].odrediste;
                            }
                            k.namestiSliku(p.superGrana[0].izvor, p.superGrana[0].odrediste);
                            p.superGrana[0].komponente.Add(k);
                            p.superGrana[0].brojkom++;
                        }
                        else if (p.superGrana[0].isStrujni() == false)
                        {
                            Komponenta k = new StrujniGenerator(r.Next(6) + 1, "J" + brojacStrujni.ToString(), true);
                            brojacStrujni++;
                            if (r.Next(2) == 0)
                            {
                                k.polaritet      = p.superGrana[0].izvor;
                                k.frontPolaritet = p.superGrana[0].izvor;
                            }
                            else
                            {
                                k.polaritet      = p.superGrana[0].odrediste;
                                k.frontPolaritet = p.superGrana[0].odrediste;
                            }
                            k.namestiSliku(p.superGrana[0].izvor, p.superGrana[0].odrediste);
                            p.superGrana[0].komponente.Add(k);
                            p.superGrana[0].brojkom++;
                        }
                    }
                }
                else
                {
                    for (int ee = 0; ee < p.superGrana.Count; ee++)
                    {
                        if (ee == 1)
                        {
                            int koliko = r.Next(10);
                            if (koliko < 7)
                            {
                                koliko = 1;
                            }
                            else
                            {
                                koliko = 2;
                            }
                            for (int i = 0; i < koliko; i++)
                            {
                                int ran = r.Next(100);
                                if (ran < 50)
                                {
                                    Komponenta k = new Otpornik(r.Next(10) + 1, "R" + brojacOtp.ToString());
                                    k.namestiSliku(p.superGrana[1].izvor, p.superGrana[1].odrediste);
                                    brojacOtp++;
                                    p.superGrana[1].komponente.Add(k);
                                    p.superGrana[1].brojkom++;
                                }
                                else if (ran < 84)
                                {
                                    Komponenta k = new NaponskiGenerator(r.Next(10) + 1, "E" + brojacNapon.ToString(), true);
                                    brojacNapon++;
                                    if (r.Next(2) == 0)
                                    {
                                        k.polaritet      = p.superGrana[1].izvor;
                                        k.frontPolaritet = p.superGrana[1].izvor;
                                    }
                                    else
                                    {
                                        k.polaritet      = p.superGrana[1].odrediste;
                                        k.frontPolaritet = p.superGrana[1].odrediste;
                                    }
                                    k.namestiSliku(p.superGrana[1].izvor, p.superGrana[1].odrediste);
                                    p.superGrana[1].komponente.Add(k);
                                    p.superGrana[1].brojkom++;
                                }
                                else if (p.superGrana[1].isStrujni() == false)
                                {
                                    Komponenta k = new StrujniGenerator(r.Next(6) + 1, "J" + brojacStrujni.ToString(), true);
                                    brojacStrujni++;
                                    if (r.Next(2) == 0)
                                    {
                                        k.polaritet      = p.superGrana[1].izvor;
                                        k.frontPolaritet = p.superGrana[1].izvor;
                                    }
                                    else
                                    {
                                        k.polaritet      = p.superGrana[1].odrediste;
                                        k.frontPolaritet = p.superGrana[1].odrediste;
                                    }
                                    k.namestiSliku(p.superGrana[1].izvor, p.superGrana[1].odrediste);
                                    p.superGrana[1].komponente.Add(k);
                                    p.superGrana[1].brojkom++;
                                }
                            }
                        }
                        else
                        {
                            if (r.Next(3) == 0)
                            {
                                Komponenta k = new Otpornik(r.Next(10) + 1, "R" + brojacOtp.ToString());
                                k.namestiSliku(p.superGrana[ee].izvor, p.superGrana[ee].odrediste);
                                brojacOtp++;
                                p.superGrana[ee].komponente.Add(k);
                                p.superGrana[ee].brojkom++;
                            }
                        }
                    }
                }
            }
            this.p.godina = idBrojac;
            this.p.tezina = idGra;
            this.Close();
        }
示例#2
0
        private void odrediZBusMatricu()
        {
            int brojac = 1;

            sema.izbaciPipkeIOstrva(new ListBox());
            foreach (Cvor c1 in praviCvorovi)
            {
                if (c1 == Izvor)
                {
                    c1.TevenenIndexer = -1;
                }
                else if (c1 == Odrediste)
                {
                    c1.TevenenIndexer = 0;
                }
                else
                {
                    c1.TevenenIndexer = brojac++;
                }
            }
            List <Cvor> tCvorovi = new List <Cvor>();

            foreach (Cvor c1 in praviCvorovi)
            {
                if (c1 == Izvor)
                {
                    tCvorovi.Add(c1);
                }
            }
            foreach (Cvor c1 in praviCvorovi)
            {
                if (c1 == Odrediste)
                {
                    tCvorovi.Add(c1);
                }
            }
            foreach (Cvor c1 in praviCvorovi)
            {
                if (c1 != Izvor && c1 != Odrediste)
                {
                    tCvorovi.Add(c1);
                }
            }
            //IZMENA
            int dimenzija = praviCvorovi.Count - 1;

            decimal[,] matricaAdmitansi = new decimal[dimenzija, dimenzija];
            for (int i = 0; i < dimenzija; i++)
            {
                for (int j = 0; j < dimenzija; j++)
                {
                    matricaAdmitansi[i, j] = 0;
                }
            }
            for (int i = 1; i <= dimenzija; i++)
            {
                foreach (Poteg p in sema.pot)
                {
                    if (p.izvor == tCvorovi[i] || p.odrediste == tCvorovi[i])
                    {
                        matricaAdmitansi[tCvorovi[i].TevenenIndexer, tCvorovi[i].TevenenIndexer] += p.izracunajAdmitansu();
                        if (p.izvor == tCvorovi[i] && p.odrediste.TevenenIndexer != -1)
                        {
                            matricaAdmitansi[tCvorovi[i].TevenenIndexer, p.odrediste.TevenenIndexer] += (-1 * p.izracunajAdmitansu());
                        }
                        if (p.odrediste == tCvorovi[i] && p.izvor.TevenenIndexer != -1)
                        {
                            matricaAdmitansi[tCvorovi[i].TevenenIndexer, p.izvor.TevenenIndexer] += (-1 * p.izracunajAdmitansu());
                        }
                    }
                }
            }
            //IZMENA
            int     n = dimenzija;
            decimal c, h;

            decimal[,] prosirenaMatrica = new decimal[dimenzija + 1, dimenzija + 1];
            decimal[,] pocetnoJedinicna = new decimal[dimenzija + 1, dimenzija + 1];
            for (int i = 0; i <= dimenzija; i++)
            {
                for (int j = 0; j <= dimenzija; j++)
                {
                    if (i == 0 || j == 0)
                    {
                        prosirenaMatrica[i, j] = 0;
                        pocetnoJedinicna[i, j] = 0;
                    }
                    else
                    {
                        prosirenaMatrica[i, j] = matricaAdmitansi[i - 1, j - 1];
                        if (i == j)
                        {
                            pocetnoJedinicna[i, j] = 1;
                        }
                        else
                        {
                            pocetnoJedinicna[i, j] = 0;
                        }
                    }
                }
            }
            for (int k = 1; k <= n; k++)//POCETAK ALGORITMA.
            {
                h = prosirenaMatrica[k, k];
                for (int i = 1; i <= n; i++)
                {
                    pocetnoJedinicna[k, i] = pocetnoJedinicna[k, i] / h;
                    prosirenaMatrica[k, i] = prosirenaMatrica[k, i] / h;
                }

                for (int p = k + 1; p <= n; p++)
                {
                    c = prosirenaMatrica[p, k];
                    for (int j = 1; j <= n; j++)
                    {
                        pocetnoJedinicna[p, j] = pocetnoJedinicna[p, j] - c * pocetnoJedinicna[k, j];
                        prosirenaMatrica[p, j] = prosirenaMatrica[p, j] - c * prosirenaMatrica[k, j];
                    }
                }
            }
            for (int z = 1; z <= n; z++)
            {
                pocetnoJedinicna[n, z] = pocetnoJedinicna[n, z] / prosirenaMatrica[n, n];
            }
            prosirenaMatrica[n, n] = 1;
            for (int k = 0; k <= n - 2; k++)
            {
                for (int s = k + 1; s <= n - 1; s++)
                {
                    c = prosirenaMatrica[n - s, n - k];
                    for (int t = 1; t <= n; t++)
                    {
                        pocetnoJedinicna[n - s, t] = pocetnoJedinicna[n - s, t] - pocetnoJedinicna[n - k, t] * c;
                        prosirenaMatrica[n - s, t] = prosirenaMatrica[n - s, t] - prosirenaMatrica[n - k, t] * c;
                    }
                }//KRAJ ALGORITMA.
            }
            decimal napon = Odrediste.napon - Izvor.napon;

            f.osveziListBoxove();
            Cvor prvi = new Cvor(Odrediste.id, 8, 1);

            prvi.zaCrtanje = Odrediste.zaCrtanje;
            Cvor drugi = new Cvor(Izvor.id, 8, 11);

            drugi.zaCrtanje = Izvor.zaCrtanje;
            mali.cvorovi.Add(prvi);
            mali.cvorovi.Add(drugi);
            Grana      g  = new Grana(66, drugi, prvi, 100);
            Komponenta k2 = new Otpornik(100, "Rt");
            Komponenta k1 = new NaponskiGenerator(100, "Et", true);

            k1.polaritet      = prvi;
            k1.frontPolaritet = prvi;
            k1.namestiSliku(drugi, prvi);
            k2.namestiSliku(drugi, prvi);
            g.komponente.Add(k2);
            g.komponente.Add(k1);
            g.brojkom = 2;
            mali.grane.Add(g);
            Rt = pocetnoJedinicna[1, 1];
            Et = napon;
            pictureBox1.Invalidate();
        }