void CikanSatir() { gecicists = double.MaxValue; if (gecici > 0) { for (int i = 1; i < denklemler.Count; i++) { for (int j = 0; j < denklemler[i].degiskenler.Count; j++) { if (denklemler[i].degiskenler[j].adi == degisken.adi) { if ((denklemler[i].sts / denklemler[i].degiskenler[j].katsayi) > 0 && (denklemler[i].sts / denklemler[i].degiskenler[j].katsayi) <= gecicists) { gecicists = (denklemler[i].sts / denklemler[i].degiskenler[j].katsayi); row = denklemler[i]; degisken = denklemler[i].degiskenler[j]; x = j; } } } } // GirenEkle(degisken.adi, 2); Console.WriteLine("cikan degisken {0} {1} ", row.rows, row.sts); } }
}//giren degişkeni listeye atıp cıkan degişkeni listeden sildim void IlkAsama()// Min r oluşturuldu { r.rows = "r"; r.esitlik = "N"; r.sts = 0; foreach (var item in denklemler[0].degiskenler) { degisken = item; if (degisken.adi.Contains("R")) { degisken.katsayi = -1; } else { degisken.katsayi = 0; } r.degiskenler.Add(degisken); } for (int i = 0; i < r.degiskenler.Count; i++) { if (r.degiskenler[i].adi.Contains("R")) { s++; } } if (s != 0) { RSıfırla(); foreach (var item in r.degiskenler) { Console.Write(item.adi + " " + item.katsayi + "\n"); } Console.WriteLine(r.sts); Console.WriteLine("r yazıldı"); BirinciAsamaGaussJordan(); Console.WriteLine("birinci asama bitti"); foreach (object item in girencikanD) { Console.WriteLine(item.ToString()); } RYokSay(); ZSatiriDonusum(); Console.Write("İstenilen iterasyon sayisini girin= "); iter = Convert.ToInt32(Console.ReadLine()); IkinciAsamaGaussJordan(); } else { Console.Write("İstenilen iterasyon sayisini girin= "); iter = Convert.ToInt32(Console.ReadLine()); IkinciAsamaGaussJordan(); foreach (object item in girencikanD) { Console.WriteLine(item.ToString()); } } }
void AralikDuzen()//gelen degişkenlerin minlerini ve maxlarını düzenler { for (int i = 0; i < denklemler.Count; i++) { for (int j = 0; j < denklemler[i].degiskenler.Count; j++) { if (denklemler[i].degiskenler[j].min < 0) { degisken = denklemler[i].degiskenler[j]; denklemler[i].sts -= (degisken.katsayi) * (degisken.min * -1); // Console.WriteLine(degisken.adi+" "+degisken.katsayi * (degisken.min * -1)); string sifirla = degisken.adi; aralikDegiskeniK.Add(sifirla); degisken.max += (degisken.min * -1); mindegri.Add((degisken.min)); degisken.min = 0; denklemler[i].degiskenler[j] = degisken; } else { if (denklemler[i].degiskenler[j].min > 0) { degisken = denklemler[i].degiskenler[j]; denklemler[i].sts -= degisken.katsayi * (degisken.min); string sifirla = degisken.adi; aralikDegiskeniB.Add(sifirla); degisken.max -= (degisken.min); mindegri1.Add(degisken.min); degisken.min = 0; denklemler[i].degiskenler[j] = degisken; } } } } foreach (var item in denklemler) { Console.WriteLine(item.rows + " " + item.sts); foreach (var item2 in item.degiskenler) { Console.Write(item2.adi + " " + item2.katsayi + " " + "Min=" + item2.min + " " + "Max=" + item2.max + "\n"); } } Console.WriteLine("Degişken aralıkları normalleştirilerek yazıldı "); }
void ZSatiriDonusum() { for (int i = 1; i < denklemler.Count; i++) { for (int j = 0; j < denklemler[i].degiskenler.Count; j++) { if (!denklemler[i].degiskenler[j].adi.Contains("S")) { if (denklemler[i].degiskenler[j].katsayi == 1) { denklemler[i].sts *= (denklemler[0].degiskenler[j].katsayi * -1); denklemler[0].sts += denklemler[i].sts; degisken = denklemler[i].degiskenler[j]; degisken.katsayi = degisken.katsayi * (denklemler[0].degiskenler[j].katsayi * -1); denklemler[i].degiskenler[j] = degisken; degisken2 = denklemler[0].degiskenler[j]; degisken2.katsayi += degisken.katsayi; denklemler[0].degiskenler[j] = degisken2; for (int k = 0; k < denklemler[i].degiskenler.Count; k++) { if (degisken.adi != denklemler[i].degiskenler[k].adi) { degisken2 = denklemler[i].degiskenler[k]; degisken2.katsayi *= degisken.katsayi; denklemler[i].degiskenler[k] = degisken2; degisken3 = denklemler[0].degiskenler[k]; degisken3.katsayi += degisken2.katsayi; denklemler[0].degiskenler[k] = degisken3; } } } } } } foreach (var item in denklemler) { Console.WriteLine("{0} {1}", item.rows, item.sts); foreach (var item2 in item.degiskenler) { Console.WriteLine("{0} {1} ", item2.adi, item2.katsayi); } } }
}//Dolgu ve artık ve yapay degişken eklendi void Free() { for (int i = 0; i < denklemler.Count; i++) { for (int j = 0; j < denklemler[i].degiskenler.Count; j++) { if (denklemler[i].degiskenler[j].free == true) { degisken = denklemler[i].degiskenler[j]; degisken.adi += "+"; denklemler[i].degiskenler[j] = degisken; degisken.adi = degisken.adi.Remove(degisken.adi.Length - 1); degisken.adi += "-"; denklemler[i].degiskenler.Insert(j + 1, degisken); j++; } } } }//sınırlandırılmamış degişken iki parcayla denkleme yazıldı
void RsizGirenSutun() { gecici = 0; if (tur == "MIN") { for (int i = 0; i < denklemler[0].degiskenler.Count; i++) { if (denklemler[0].degiskenler[i].katsayi > 0) { if (denklemler[0].degiskenler[i].katsayi > gecici) { gecici = denklemler[0].degiskenler[i].katsayi; degisken = denklemler[0].degiskenler[i]; } } } } else { for (int i = 0; i < denklemler[0].degiskenler.Count; i++) { if (denklemler[0].degiskenler[i].katsayi < 0) { if (Math.Abs(denklemler[0].degiskenler[i].katsayi) > gecici) { gecici = Math.Abs(denklemler[0].degiskenler[i].katsayi); degisken = denklemler[0].degiskenler[i]; } } } } // GirenEkle(degisken.adi, 1); if (degisken.katsayi == 0) { Console.WriteLine("Problemin uygun cözümü yok"); } else { Console.WriteLine("giren degisken " + degisken.adi + " " + degisken.katsayi); } }
void RSıfırla()//oluşturulan r nin R degerleri sıfırlandı { for (int i = 1; i < denklemler.Count; i++) { for (int j = 0; j < denklemler[i].degiskenler.Count; j++) { if (denklemler[i].degiskenler[j].adi.Contains("R")) { if (denklemler[i].degiskenler[j].katsayi == 1) { r.sts += denklemler[i].sts; for (int k = 0; k < r.degiskenler.Count; k++) { degisken = r.degiskenler[k]; degisken.katsayi += denklemler[i].degiskenler[k].katsayi; r.degiskenler[k] = degisken; } } } } } }
void RliGirenSutun() { gecici = 0; for (int i = 0; i < r.degiskenler.Count; i++) { if (r.degiskenler[i].katsayi > 0) { if (r.degiskenler[i].katsayi > gecici) { gecici = r.degiskenler[i].katsayi; degisken = r.degiskenler[i]; } } } GirenEkle(degisken.adi, 1); if (degisken.katsayi == 0) { Console.WriteLine("Problemin uygun cözümü yok"); } else { Console.WriteLine("giren degisken " + degisken.adi + " " + degisken.katsayi); } }
void COLUMNS(StreamReader O) { while ((tut = O.ReadLine().Trim()) != "RHS") { tut = tut.Replace('.', ','); string[] satir = tut.Split(bosluk, StringSplitOptions.RemoveEmptyEntries); if (satir.Length == 3) { foreach (var item in denklemler) { if (item.rows == satir[1]) { degisken.adi = satir[0]; degisken.katsayi = Convert.ToDouble(satir[2]); item.degiskenler.Add(degisken); } } } else if (satir.Length == 5) { foreach (var item in denklemler) { if (item.rows == satir[1]) { degisken.adi = satir[0]; degisken.katsayi = Convert.ToDouble(satir[2]); item.degiskenler.Add(degisken); } if (item.rows == satir[3]) { degisken.adi = satir[0]; degisken.katsayi = Convert.ToDouble(satir[4]); item.degiskenler.Add(degisken); } } } } foreach (var item in denklemler) { if (item.esitlik == "N") { for (int i = 0; i < item.degiskenler.Count; i++) { degisken = item.degiskenler[i]; degisken.katsayi *= -1; item.degiskenler[i] = degisken; foreach (var item2 in denklemler) { if (i < item2.degiskenler.Count) { if (item.degiskenler[i].adi != item2.degiskenler[i].adi) { degisken.adi = item.degiskenler[i].adi; degisken.katsayi = 0; item2.degiskenler.Insert(i, degisken); } } if (i >= item2.degiskenler.Count) { degisken.adi = item.degiskenler[i].adi; degisken.katsayi = 0; item2.degiskenler.Add(degisken); } } } } } }
void BOUNDS(StreamReader O) { int sayac = 0; while ((tut = O.ReadLine().Trim()) != "ENDATA") { sayac++; tut = tut.Replace('.', ','); string[] satir = tut.Split(bosluk, StringSplitOptions.RemoveEmptyEntries); if (satir[0] == "FR") { for (int i = 0; i < denklemler.Count; i++) { for (int j = 0; j < denklemler[i].degiskenler.Count; j++) { if (denklemler[i].degiskenler[j].adi == satir[2]) { degisken = denklemler[i].degiskenler[j]; degisken.free = true; denklemler[i].degiskenler[j] = degisken; } } } } else { for (int i = 0; i < denklemler.Count; i++) { for (int j = 0; j < denklemler[i].degiskenler.Count; j++) { if (satir[0] == "UP") { if (denklemler[i].degiskenler[j].adi == satir[2]) { degisken = denklemler[i].degiskenler[j]; degisken.max = Convert.ToDouble(satir[3]); denklemler[i].degiskenler[j] = degisken; } else// Eger adi yok ise max en yuksek olsun { if (denklemler[i].degiskenler[j].max == 0)//ama önceden bir deger atıldıysa degişmesin { degisken = denklemler[i].degiskenler[j]; degisken.max = double.MaxValue; denklemler[i].degiskenler[j] = degisken; } } } if (satir[0] == "LO") { if (denklemler[i].degiskenler[j].adi == satir[2]) { degisken = denklemler[i].degiskenler[j]; degisken.min = Convert.ToDouble(satir[3]); denklemler[i].degiskenler[j] = degisken; } else { if (degisken.min == 0)//eger daha once bir deger atıldıysa degiştirilmesin diye { degisken = denklemler[i].degiskenler[j]; degisken.min = 0; denklemler[i].degiskenler[j] = degisken; } } } } } } } if (sayac == 0)//BOUNDS bölümüne birşey yazılmamış ise while çalışmaz sayaç sıfır isedegişkenlerin hepsine min ve max degeri atılır { if (tut != "FR" || tut != "UP" || tut != "LO") { foreach (var item in denklemler) { for (int i = 0; i < item.degiskenler.Count; i++) { degisken = item.degiskenler[i]; degisken.min = 0; degisken.max = double.MaxValue; item.degiskenler[i] = degisken; } } } } }