Дан массив, состоящий из целых чисел. Напишите программу, которая определяет, есть ли в массиве пара соседних элементов с одинаковыми знаками. Входные данные Сначала задано число N — количество элементов в массиве (1N10000). Далее через пробел записаны N чисел — элементы массива. Массив состоит из целых чисел. Выходные данные Необходимо вывести слово YES, если существует пара соседних элементов с одинаковыми знаками. В противном случае следует вывести слово NO. Примеры Входные данные 5 1 -3 4 -2 1 Выходные данные NO
Const n=10000; var a:array[1..n]of integer; i,n1, flag:integer; begin readln(n1); for i:=1 to n1 do read(a[i]); for i:=1 to n1-1 do if ((a[i]<0)and(a[i+1]<0))or<br> ((a[i]>0)and(a[i+1]>0))then flag:=1; if flag=1 then writeln('YES') else writeln('NO'); end.
"Крутую" конструкцию ((a[i]<0)and(a[i+1]<0)) or ((a[i]>0)and(a[i+1]>0)) обычно пишут в виде (a[i]*a[i+1])>0. Поскольку еще в начальной школе изучают, что произведение двух чисел, отличных от нуля и имеющих одинаковые знаки есть число положительное.
А вообще алгоритм крайне неэффективный, потому что после того, как найдена искомая пара элементов, компьютер будет вынужден продолжать бесцельно перелопачивать остальную часть массива. что мешало организовать выход из цикла по условию - ума не приложу. Можно было использовать ненавистный канонам структурного программирования (привет Эдгару Дейкстре!) break, или применить цикл c пред/постусловием.