private void resiKonturu(List <Grana> backGrane, List <Cvor> backCvorovi) { List <Poteg> lista = new List <Poteg>(); Poteg noviPoteg = new Poteg(); foreach (Grana g in backGrane) { noviPoteg.superGrana.Add(g); } noviPoteg.izvor = backCvorovi[0]; backCvorovi[0].bot = false; noviPoteg.odrediste = backCvorovi[0]; foreach (Grana g in noviPoteg.superGrana) { foreach (Komponenta k in g.komponente) { if (k.vrsta == Tip.strujniGenerator) { noviPoteg.struja = k.velicina; goto dole; } } } decimal eEkv = 0; Cvor pocCvor = backCvorovi[0]; Cvor tmpCvor = pocCvor; Grana pocGrana = null; foreach (Grana g in backGrane) { if (g.izvor == pocCvor || g.odrediste == pocCvor) { pocGrana = g; break; } } bool f = false; Grana tmpGrana = pocGrana; while (f == false) { if (tmpGrana.izvor == tmpCvor) { foreach (Komponenta k in tmpGrana.komponente) { if (k.vrsta == Tip.naponskiGenerator) { if (k.polaritet == tmpCvor) { eEkv += k.velicina; } else { eEkv -= k.velicina; } } } tmpCvor = tmpGrana.odrediste; if (tmpCvor == pocCvor) { f = true; } foreach (Grana g in backGrane) { if ((g.izvor == tmpCvor || g.odrediste == tmpCvor) && g != tmpGrana) { tmpGrana = g; break; } } } if (tmpGrana.odrediste == tmpCvor) { foreach (Komponenta k in tmpGrana.komponente) { if (k.vrsta == Tip.naponskiGenerator) { if (k.polaritet == tmpCvor) { eEkv += k.velicina; } else { eEkv -= k.velicina; } } } tmpCvor = tmpGrana.izvor; if (tmpCvor == pocCvor) { f = true; } foreach (Grana g in backGrane) { if ((g.izvor == tmpCvor || g.odrediste == tmpCvor) && g != tmpGrana) { tmpGrana = g; break; } } } } noviPoteg.struja = eEkv * noviPoteg.izracunajAdmitansu(); dole: foreach (Grana g in noviPoteg.superGrana) { foreach (Komponenta k in g.komponente) { if (k.vrsta == Tip.Otpornik) { k.snaga = noviPoteg.struja * noviPoteg.struja * k.velicina; } } } lista.Add(noviPoteg); pot = lista; }
private void kondenzuj(List <Cvor> cvori, List <Grana> granee) { List <Poteg> potezi = new List <Poteg>(); for (int i = 0; i < granee.Count; i++) { if (granee[i].izvor.bot == false && granee[i].odrediste.bot == false) { Poteg noviPoteg = new Poteg(); noviPoteg.superGrana.Add(granee[i]); potezi.Add(noviPoteg); granee.RemoveAt(i); } } bool flag = true; foreach (Grana g in granee) { flag = true; Poteg noviPoteg = null; if (g.obradjena == false) { noviPoteg = new Poteg(); noviPoteg.superGrana.Add(g); g.obradjena = true; } while (flag && noviPoteg != null) { gore: flag = false; for (int i = 0; i < noviPoteg.superGrana.Count; i++) { foreach (Grana g1 in granee) { if (noviPoteg.superGrana[i] != g1 && imajuZajednickoTeme(noviPoteg.superGrana[i], g1)) { noviPoteg.superGrana.Add(g1); g1.obradjena = true; flag = true; goto gore; } } } } if (noviPoteg != null) { potezi.Add(noviPoteg); } } foreach (Poteg p in potezi) { p.izracunajAdmitansu(); p.namestiIzvorIOdrediste(); } List <Cvor> finalniCvorovi = new List <Cvor>(); int brojac = -1; foreach (Cvor c in cvori) { if (c.bot == false) { c.indexer = brojac++; finalniCvorovi.Add(c); } } napraviMatricuAdmitansi(finalniCvorovi, potezi); }