Программа поиска элемента в произвольном массиве: const n=10; var a:array[1..n+1] of integer; p,i:integer; begin Randomize; writeln('Исходный массив:'); for i:=1 to n do begin a[i]:=random(21); write(a[i]:4); end; writeln; write('p = '); readln(p); a[n+1]:=p; i:=1; while a[i]<>p do i:=i+1; if i<=n then writeln('Искомый элемент найден, его номер = ',i) else writeln('Искомый элемент не найден'); end.
Пример 1: Исходный массив: 7 17 16 13 0 1 19 20 12 5 p = 13 Искомый элемент найден, его номер = 4
Пример 2: Исходный массив: 20 4 5 12 14 10 11 16 18 20 p = 15 Искомый элемент не найден
m & 1 - это битовая конъюнкция. Результатом будет 1, если m нечетное, и 0, если m - четное (то есть, содержит или не содержит соответствующий разряд)
Выражение вида T ? X : Y, где T - логическое высказывание, принимает значение X, если T истинно, и Y, если T ложно.
Соответственно, i = (m & 1) == 1 ? m : m + 1 означает, что
если m нечетное, то i = m
если четное, i = m+1 (то есть, первое нечетное число после m)
i += 2 означает, что цикл идет с шагом, соответственно, рассматриваются только нечетные числа.