Другие языки программирования и технологии

Turbo Pascal. Определить, является ли массив унимодальным, (т.е. содержит ли он элементы только одного знака).

program N69557052;
const n = 10;
a:array[ 1 .. n ] of real = (0,0,0,0,0,0,0,0,0,0);
{ a:array[ 1 .. n ] of real = (-1,-2,-3,-4,-5,-6,-7,-8,-9,-10);}
{ a:array[ 1 .. n ] of real = (1,2,3,4,5,6,7,8,9,10);}
{ a:array[ 1 .. n ] of real = (1,2,3,4,5,0,7,8,9,10);}
{ a:array[ 1 .. n ] of real = (1,2,-3,4,5,6,7,8,9,10);}
var f:boolean;
i:byte;
begin
i := 2;
repeat
f := (a[ i ] = 0) and (a[ i - 1 ] = 0) or (a[ i ] * a[ i - 1 ] > 0);
inc(i) {или i := i + 1}
until not f or (i > n);
if f then
writeln('Унимодальный')
else
writeln('Не унимодальный');
readln
end.

P.S. Закомментированы различные массивы, на которых тестировалась программа.
Нулевые значения проверяются отдельно, так как ноль - это не положительное и не отрицательное число, а по его поводу в вашем задании ничего не сказано.
Максим Арсламов
Максим Арсламов
51 590
Лучший ответ
массив - в arr дополнительные переменные i, negative, positive - integer

positive := 0;
negative := 0;
for i := 0 to High(arr) do
if arr[ i] >= 0 then Inc(positive)
else Inc(negative);

if ((positive = 0) and (negative >0)) or ((negative = 0) and (positive>0) then // Унимодальный
else // не унимодальный.
На почту.