private void GenerateResitorSeries(int decade, ResitorListGenerator.Series serie) { if (!_loaded) { return; } ValuesList.Clear(); double multiply = 1; switch (decade) { case 1: multiply = 0.01; break; case 10: multiply = 0.1; break; case 1000: multiply = 10; break; case 10000: multiply = 100; break; case 100000: multiply = 1000; break; case 1000000: multiply = 10000; break; case 100: default: multiply = 1; break; } StringBuilder sb = new StringBuilder(); var list = ResitorListGenerator.GenerateList(serie, multiply); foreach (var i in list) { sb.AppendFormat("{0}\r\n", i); } ValuesList.Text = sb.ToString(); sb.Clear(); sb = null; }
public static string Solve(double desiredvalue, ResitorListGenerator.Series serie) { StringBuilder sb = new StringBuilder(); sb.AppendLine("--------------------------------------------------------------------"); sb.AppendLine("Serial configuration:"); sb.AppendLine("--------------------------------------------------------------------"); double remain = desiredvalue; double sum = 0; var list = ResitorListGenerator.GenerateList(serie); int i, j; for (i = 0; i < 3; i++) { var q = (from item in list where item <= remain orderby item descending select item).FirstOrDefault(); if (q != 0) { remain -= q; sum += q; sb.AppendLine(q.ToString() + " Ω"); } } sb.AppendLine("--------------------------------------------------------------------"); sb.AppendFormat("Sum value: {0} Ω\r\n", sum); sb.AppendFormat("Error: {0} Ω\r\n", remain); sb.AppendFormat("Error(%): {0} %\r\n", Math.Round(remain / sum, 4) * 100); sb.Append("\r\n\r\n\r\n"); sb.AppendLine("--------------------------------------------------------------------"); sb.AppendLine("Parallel configuration:"); sb.AppendLine("--------------------------------------------------------------------"); list = (from item in ResitorListGenerator.GenerateList(serie) where item > (desiredvalue / 2) select item).ToList(); Dictionary <double, double[]> _results = new Dictionary <double, double[]>(); double marginp = desiredvalue + (desiredvalue * ResitorListGenerator.GetTolerance(serie)); double marginn = desiredvalue - (desiredvalue * ResitorListGenerator.GetTolerance(serie)); for (i = 0; i < list.Count; i++) { for (j = 0; j < list.Count; j++) { double value = (list[i] * list[j]) / (list[i] + list[j]); if ((value > marginn) && (value < marginp)) { if (_results.ContainsKey(value)) { _results[value] = new double[] { list[i], list[j] } } ; else { _results.Add(value, new double[] { list[i], list[j] }); } } } } var best = (from result in _results where result.Key <= desiredvalue orderby(desiredvalue - result.Key) ascending select result).FirstOrDefault(); if (best.Value != null) { sb.AppendLine(best.Value[0].ToString() + " Ω"); sb.AppendLine(best.Value[1].ToString() + " Ω"); } sb.AppendLine("--------------------------------------------------------------------"); sb.AppendFormat("Paralell value: {0} Ω\r\n", best.Key); sb.AppendFormat("Error: {0} Ω\r\n", desiredvalue - best.Key); sb.AppendFormat("Error(%): {0} %\r\n", Math.Round((desiredvalue - best.Key) / desiredvalue, 4) * 100); return(sb.ToString()); }
private void BtnSolve_Click(object sender, RoutedEventArgs e) { ResitorListGenerator.Series serie = (ResitorListGenerator.Series)SeriesSelector.SelectedIndex; TbResult.Text = ResistorValueSolver.Solve(TargetValue.Value, serie); }