Объяснение поведения логических операторов - C#
Формулировка задачи:
Итак, уважаемый читатель, прошу Тебя помощи в этой головомойке. Начнем:
Дан общий код программы (он короткий, прочитай, не поленись):
Теперь разложу проблему по полочкам.
В данном примере я буду вводить данные: 1 и 5 (iA = 1; iB = 5).
1 Часть:
В кратце объясню - это код я сделал для проверки ближайших членов одного элемента в двумерном массиве. XC - это строка, YC это столбец, т.е. соответствующие координаты члена в двумернике.
Смысл этого кода в том, чтобы проверить 8 элементов, которые находятся рядом с текущим:
там, где Х;У это точка, которую проверять не нужно. Все остальные нужно. Понятно, объяснил надеюсь?
Догадайся, как работает этот оператор ЕСЛИ?
Я, по крайней мере, с первого раза бы точно не угадал.
Он работает не так "Если ХС ИЛИ УС не равны нулю, то..."
Неееет, он работает вот так!
"Если ХС И(!) УС не равны нулю, то..."
Где логика? как....Как это объяснить?!
Заранее спасибо, Если объяснишь!
public static void Main(string[] args) { pos1: Console.Clear(); int iA,iB; iA=Convert.ToInt32(Console.ReadLine()); iB=Convert.ToInt32(Console.ReadLine()); if((iA!=1) | (iB!=1)) { Console.WriteLine("iA!=1 | iB!=1"); } if((iA==1) | (iB==1)) { Console.WriteLine("iA=1 | iB=1"); } for(int XC=-1; XC<2; XC++) { for(int YC=-1; YC<2;YC++) { if((XC!=0) | (YC!=0)) { Console.WriteLine("("+(iA+XC)+";"+(iB+YC)+") (XC, YC)=("+XC+";"+YC+")"); } } } Console.ReadLine(); goto pos1; }
if((iA!=1) | (iB!=1)) { Console.WriteLine("iA!=1 | iB!=1"); }
Если iA или iB не равно 1, то выполняется код внутри оператора
Все логично, все верно, при введении 1 и 5, код выполняется. Идем дальше 2 Часть:if((iA==1) | (iB==1)) { Console.WriteLine("iA=1 | iB=1"); }
Если iA или iB равно 1, то выполняется код внутри оператора
Все логично, все верно, при введении 1 и 5, код выполняется. Никакого подвоха? Тогда вот это! Часть 3:for(int XC=-1; XC<2; XC++) { for(int YC=-1; YC<2;YC++) { if((XC!=0) | (YC!=0)) { Console.WriteLine("("+(iA+XC)+";"+(iB+YC)+") (XC, YC)=("+XC+";"+YC+")"); } } }
X-1; Y-1 X; Y-1 X+1; Y-1 X-1; Y X;Y X+1; Y X-1; Y+1 X; Y+1 X+1; Y+1
Так вот, сама суть проблемы:
if((XC!=0) | (YC!=0))
p.s. замена | на || разницы не даст.
p.p.s. Выводит вот это:1 5 iA!=1 | iB!=1 iA=1 | iB=1 (0;4) (XC, YC)=(-1;-1) (0;5) (XC, YC)=(-1;0) (0;6) (XC, YC)=(-1;1) (1;4) (XC, YC)=(0;-1) (1;6) (XC, YC)=(0;1) (2;4) (XC, YC)=(1;-1) (2;5) (XC, YC)=(1;0) (2;6) (XC, YC)=(1;1)
Решение задачи: «Объяснение поведения логических операторов»
textual
Листинг программы
bool checkX = (XC!=0); bool checkY = (YC!=0); if (checkX | checkY)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д