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(); }
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(); }