Тип Д25 C2 № 2903 

Алгоритмы обработки массивов. Другие алгоритмы
i
Опишите на языке программирования алгоритм подсчета максимального количества подряд идущих элементов, каждый из которых больше предыдущего, в целочисленном массиве длины 30.
Спрятать решениеРешение. Решение на Паскале.
const N = 30;
var
a: array [1..N] of integer;
MaxIncr, NumIncr, i: integer;
begin
for i := 1 to N do readln(a[i]);
MaxIncr: =1;
NumIncr: =1;
for i: =1 to N-1 do
if (a[i] < a [i+1]) then NumIncr: =NumIncr+1 else
begin
if (NumIncr > MaxIncr) then MaxIncr: =NumIncr;
NumIncr: =1;
end;
if (NumIncr > MaxIncr) then MaxIncr:=NumIncr;
writeln (MaxIncr);
end.
Спрятать критерииКритерии проверки:| Критерии оценивания выполнения задания | Баллы |
|---|
| Предложен правильный алгоритм, выдающий верное значение. Допускается запись алгоритма на другом языке, использующая аналогичные переменные. В случае, если язык программирования использует типизированные переменные, описания переменных должны быть аналогичны описаниям переменных на естественном языке. Использование нетипизированных или необъявленных переменных возможно только в случае, если это допускается языком программирования, при этом количество переменных и их идентификаторы должны соответствовать условию задачи. В алгоритме, записанном на языке программирования, допускается наличие отдельных синтаксических ошибок, не искажающих замысла автора программы. | 2 |
| В любом варианте решения может присутствовать не более одной ошибки из числа следующих: 1) не инициализируется или неверно инициализируется переменная; 2) при выводе ответа не учитывается, что требуемого числа в массиве может не быть; 3) отсутствует вывод ответа; 4) в сравнении перепутан знак; 5) неверно осуществляется проверка делимости; 6) на делимость проверяется не значение элемента, а его индекс; 7) в сложном условии вместо логической операции «И» используется логическая операция «ИЛИ»; 8) используется переменная, не объявленная в разделе описания переменных; 9) не указано или неверно указано условие завершения цикла; 10) индексная переменная в цикле не меняется (например, в цикле while) или меняется неверно; 11) неверно расставлены операторные скобки | 1 |
| Ошибок, перечисленных в п. 1–11, две или больше, или алгоритм сформулирован неверно | 0 |
| Максимальный балл | 2 |
Решение на Си.
#include <stdio.h>
#define N 30
int main() {
int arr[N];
int max, num,i;
max = 0;
num = 1;
for (i=0; i<N; i++) {
scanf("%d", &arr[i]); }
for (i = 1; i < N+1; i++) {
if ((arr[i]-arr[i-1]) == 1) num++;
else if (num > max) {max = num; num = 1;}
}
printf("\n%d", max);
return 0;
}
У Вас указано неточное решение, следующее число может быть больше предыдущего не обязательно на 1.
Предлагаю свой вариант.
const
n=30;
var
a:array[1..n] of integer;
i,b,max : integer;
BEGIN
for i:=1 to n do
begin
a[i]:=random(20);
write(a[i],' ')
end;
max:=1;
b:=1;
for i:=1 to n-1 do
begin
if a[i] < a[i+1] then inc(b) else b:=1;
if b > max then max:=b;
end;
writeln(max)
END.