Оценка последовательности

Задача: 

Пользователь вводит десять целых чисел представляющих собой последовательность.
Требуется ее оценить:

  • является ли последовательность возрастающей;
  • есть ли в ней одинаковые элементы;
  • является ли она знакочередующейся (положительные и отрицательные числа чередуются).
Описание переменных: 

В переменных 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] < 0) and (arr[i-1] > 0) and (arr[i+1] > 0) then
            continue
        else
            if (arr[i] > 0) and (arr[i-1] < 0) and (arr[i+1] < 0) then
                continue
            else begin
                flag_alt := 0;
                break;
            end;
    if flag_alt = 1 then
        writeln('Alternating sequence')
    else
        writeln('Nonalternating sequence');
 
readln;
end.

Комментарии

Задача об оценке последовательности

Проверку, является ли последовательность знакочередующейся, можно выполнить проще: если произведение соседних элементов массива отрицательное, то последовательность является знакопеременной.

 flag_alt := 1;
 for i:=1 to N-1 do    if arr[i] * arr[i+1] >= 0 then flag_inc := 0;
 if flag_alt = 1 then writeln('Alternating sequence')
    else writeln('Nonalternating sequence');