Пользователь вводит десять целых чисел представляющих собой последовательность.
Требуется ее оценить:
В переменных flag_inc, flag_same, flag_alt хранятся единицы, если последовательность соответственно возрастающая, содержит хотя бы одну пару одинаковых элементов и знакочередующаяся.
Последовательность является возрастающей, если каждый следующий элемент больше предыдущего.
Чтобы определить, содержит ли последовательность одинаковые элементы, можно сравнить очередной элемент со всеми элементами, стоящими после него. Как только одинаковые элементы будут найдены, цикл завершается с помощью break.
Последовательность является знакочередующейся, если знак очередного элемента противоположен знакам его соседей. Т.е. если элемент больше нуля, то соседние должны быть меньше, или наоборот. Как только подобное условие нарушается, то это означает, что последовательность не знакочередующаяся.
const N = 10; var arr: array[1..N] of integer; i, j: byte; flag_inc, flag_same, flag_alt: byte; begin writeln('Enter ten numbers:'); for i:=1 to N do read(arr[i]); readln; flag_inc := 1; for i:=1 to N-1 do if arr[i] > arr[i+1] then flag_inc := 0; if flag_inc = 1 then writeln('Increasing sequence') else writeln('Nonincreasing sequence'); flag_same := 0; for i:=1 to N-1 do begin for j:=i+1 to N do if arr[i] = arr[j] then begin flag_same := 1; break; end; if flag_same = 1 then break; end; if flag_same = 1 then writeln('There are similar items') else writeln('No similar items'); flag_alt := 1; for i:=2 to N-1 do if (arr[i] ) and (arr[i-1] > 0) and (arr[i+1] > 0) then continue else if (arr[i] > 0) and (arr[i-1] ) and (arr[i+1] ) then continue else begin flag_alt := 0; break; end; if flag_alt = 1 then writeln('Alternating sequence') else writeln('Nonalternating sequence'); readln; end.
Комментарии
Задача об оценке последовательности
Проверку, является ли последовательность знакочередующейся, можно выполнить проще: если произведение соседних элементов массива отрицательное, то последовательность является знакопеременной.