Нужно вывести произведение чисел <50, не используя условие if для проверки значения pr в выводе :
{
//
string noelem = "Элементов не найдено";
int[] mas = new int[Mass_TB.Lines.Length];
//
for (int i = 0; i < mas.Length; i++)
mas[i] = Convert.ToInt32(Mass_TB.Lines[i]);
//
int sum = 0;
int pr = 1;
for (int i = 0; i < mas.Length; i++)
{
if (mas[i] < 50)
pr *= mas[i];
}
for (int i = 0; i < mas.Length; i++)
{
if (mas[i] > 100)
sum += mas[i];
}
//
TB2.Clear();
TB2.AppendText((pr == 1) ? ((pr >= 1) ? pr.ToString() : noelem) : ((pr <= 0) ? pr.ToString() : noelem));
}
Однако, при вводе числа > 50 должно выводится "Элементов не найдено", вместо этого в выводе всегда пишет единицу. В чём дело и как это исправить?
Вот вариант поиска произведения и суммы без условного оператора.
Формально тернарный оператор это тоже условие, но организовать вывод без него будет очень проблематично.
int sum = 0;
int pr = 1;
for (int i = 1; i < mas.Length; i++)
{
pr=pr*(Convert.ToInt32(mas[i] < 50)*mas[i]+Convert.ToInt32(mas[i] >= 50));
sum = sum+Convert.ToInt32(mas[i] > 100)*mas[i];
}
string output=(pr > 1) ? Convert.ToString(pr): noelem;
TB2.Clear();
TB2.AppendText(output);
Пояснение
Convert.ToInt32(mas[i] < 50)
1 если меньше и 0 если больше
Convert.ToInt32(mas[i] >= 50)
0 если меньше и 1 если больше
Выражение
Convert.ToInt32(mas[i] < 50)*mas[i]+Convert.ToInt32(mas[i] >= 50)
Если mas[i]<50, то Convert.ToInt32(mas[i] < 50)=1
, а Convert.ToInt32(mas[i] >= 50)=0
, получаем 1*mas[i]+0=mas[i].
Если mas[i]>=50, то Convert.ToInt32(mas[i] < 50)=0
, а Convert.ToInt32(mas[i] >= 50)=1
, получаем 0*mas[i]+1=1.
Нельзя проверить значение переменной pr через значение этой самой pr, так как при вводе любого числа >50 будет выведена единица, то есть программа "думает", что значение pr изменялось. Это, конечно, неправильно. Вместо этого надо использовать счётчик :
{
int[] mas = new int[Mass_TB.Lines.Length];
for (int i = 0; i < mas.Length; i++)
mas[i] = Convert.ToInt32(Mass_TB.Lines[i]);
int sum = 0; string noelem = "Элементов не найдено";
int pr = 1;
int d = 0;
for (int i = 0; i < mas.Length; i++)
{
if (mas[i] > 50)
{
pr *= mas[i];
d++;
}
if (d > 0)
TB2.Text = pr.ToString();
else
TB2.Text = noelem;
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть компонент, который принимает один параметр для отображенияВозникла необходимость отрендерить его не в шаблоне, а в методе (для последующей...
Есть класс, который отвечает за установку двунаправленного соединения между процессами(через pipe), ввод в stdin дочернего процесса и вывод через...
Необходимо нарисовать линию со сложным паттерном в виде символа при помощи QPainterКак в примере ниже
Недавно начал изучать C++Написал простенький скрипт, дабы проверить свои знания, в итоге вместо ожидаемого 255, консоль выводит -1(тоже самое,...