Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2023, 07:08   #1
AndreiBychkov
Новичок
Джуниор
 
Регистрация: 26.01.2023
Сообщений: 1
По умолчанию Как создать список по нескольким условиям if в цикле for

Коллеги,

Я начинающий программист и у многих мой вопрос вызовет улыбку.
В ниже приведенном фрагменте кода я считываю и обрабатываю в цикле for значения ранее полученных списков.
Верхняя часть кода работает без проблем, но когда понадобилось в зависимости от значений одного из параметров производить расчеты и по их результатам формировать выходные списки значений CRT и l_du сразу возникла проблема - как создать список по нескольким условиям if в цикле for?
Как только выносишь формирование списка выходных значений из конструкции if, сразу пропадает возможность его формирования , т.к. C# перестает видеть этот параметр. А если оставить формирования списка в конструкции if то списки формируются только по первым значениям.
Как решить эту задачу?
[CODE]
for (int i = 0; i <= (qif - 1); ++i)
{

var o_vlt = l_vlt[i].Trim(new char[] { 'V', 'v' });
int d_vlt = Int32.Parse(o_vlt);
string t_vlt = Convert.ToString(d_vlt);
VLT.Add(t_vlt);

double d_pf = Math.Round(Double.Parse(l_pf[i]), 2);
string t_pf = Convert.ToString(d_pf);
PF.Add(t_pf);

double d_acos = Math.Acos(d_pf);
double d_sin = Math.Sin(d_acos);
var Rc = Double.Parse(l_Rc[i]);
var Xc = Double.Parse(l_Xc[i]);


var o_pwr = l_pwr[i].Trim(new char[] { 'W', 'w' });
double d_pwr = Math.Round((Double.Parse(o_pwr) / 1000), 2);
string t_pwr = Convert.ToString(d_pwr);
PWR.Add(t_pwr);

var o_lnth = l_lnth[i].Trim(new char[] { 'M', 'm' });
double d_lnth = Math.Round((Double.Parse(o_lnth) / 1000), 2);
string t_lnth = Convert.ToString(d_lnth);
LNTH.Add(t_lnth);

if (d_vlt == 230)
{
double d_curt = Math.Round(((d_pwr * 1000) / (d_vlt * d_pf)), 1);
string t_curt = Convert.ToString(d_curt);
double d_du = Math.Round((2 * d_curt * d_lnth * (Rc * d_pf + d_sin * Xc) / (10 * d_vlt)), 2);
string t_du = Convert.ToString(d_du);
CRT.Add(t_curt);
l_dU.Add(t_du);

}

if (d_vlt == 400)
{
double d_curt = Math.Round(((d_pwr * 1000) / (Math.Sqrt(3) * d_vlt * d_pf)), 1);
string t_curt = Convert.ToString(d_curt);
double d_du = Math.Round((Math.Sqrt(3) * d_curt * d_lnth * (Rc * d_pf + d_sin * Xc) / (10 * d_vlt)), 2);
string t_du = Convert.ToString(d_du);
CRT.Add(t_curt);
l_dU.Add(t_du);

}

}

С уважением,
Андрей.
AndreiBychkov вне форума Ответить с цитированием
Старый 26.01.2023, 08:49   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Так вы объявляете переменную в блоке if. Естественно, что она будет существовать только в этом блоке. Если хотите сделать так, чтобы переменная существовала вне блока if, тогда объявите ее заранее. А еще лучше объявляйте переменные заранее (в начале функции) и инициализируйте их по возможности.
Код:
 /* Объявляем переменные */
var o_vlt, Rc, Xc, o_pwr, o_lnth;
int d_vlt, i;
string t_vlt, t_pf, t_pwr, t_lnth, t_curt, t_du;
double d_pf, d_acos, d_sin, d_pwr, d_lnth, d_curt, d_du;

/* Используем переменные */
for (i = 0; i <= (qif - 1); ++i) {
  o_vlt = l_vlt[i].Trim(new char[] { 'V', 'v' });
  d_vlt = Int32.Parse(o_vlt);
  t_vlt = Convert.ToString(d_vlt);
  VLT.Add(t_vlt);

  d_pf = Math.Round(Double.Parse(l_pf[i]), 2);
  t_pf = Convert.ToString(d_pf);
  PF.Add(t_pf);

  d_acos = Math.Acos(d_pf);
  d_sin = Math.Sin(d_acos);
  Rc = Double.Parse(l_Rc[i]);
  Xc = Double.Parse(l_Xc[i]);

  o_pwr = l_pwr[i].Trim(new char[] { 'W', 'w' });
  d_pwr = Math.Round((Double.Parse(o_pwr) / 1000), 2);
  t_pwr = Convert.ToString(d_pwr);
  PWR.Add(t_pwr);

  o_lnth = l_lnth[i].Trim(new char[] { 'M', 'm' });
  d_lnth = Math.Round((Double.Parse(o_lnth) / 1000), 2);
  t_lnth = Convert.ToString(d_lnth);
  LNTH.Add(t_lnth);

  if (d_vlt == 230) {
    d_curt = Math.Round(((d_pwr * 1000) / (d_vlt * d_pf)), 1);
    t_curt = Convert.ToString(d_curt);
    d_du = Math.Round((2 * d_curt * d_lnth * (Rc * d_pf + d_sin * Xc) / (10 * d_vlt)), 2);
    t_du = Convert.ToString(d_du);
    CRT.Add(t_curt);
    l_dU.Add(t_du);
  }
  if (d_vlt == 400) {
    d_curt = Math.Round(((d_pwr * 1000) / (Math.Sqrt(3) * d_vlt * d_pf)), 1);
    t_curt = Convert.ToString(d_curt);
    d_du = Math.Round((Math.Sqrt(3) * d_curt * d_lnth * (Rc * d_pf + d_sin * Xc) / (10 * d_vlt)), 2);
    t_du = Convert.ToString(d_du);
    CRT.Add(t_curt);
    l_dU.Add(t_du);
  }
}

Последний раз редактировалось macomics; 26.01.2023 в 09:04.
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++. Создать линейный однонаправленный список из символов по следующим условиям Енот-Ктулху Помощь студентам 2 27.11.2022 22:57
Подсчет по нескольким условиям amki6 Microsoft Office Excel 4 20.02.2015 11:01
Счетесли по нескольким условиям Neo007 Microsoft Office Excel 4 23.09.2008 16:23
СУММЕСЛИ по нескольким условиям 2 Levchik Microsoft Office Excel 8 27.05.2008 09:15
СУММЕСЛИ по нескольким условиям Gadar Microsoft Office Excel 6 26.05.2008 10:07