Форум » Массивы, сортировка, работа с файлами » [C2] Задача с пробного ЕГЭ » Ответить

[C2] Задача с пробного ЕГЭ

malk: Дан массив из 20 целых чисел. Элементы массива могут принимать целые значения от -1000 до 1000. Опишите на русском языке или на одном из языков программирования алгоритм, который позволяет найти и вывести максимальное значение среди положительных элементов массива, кратных пяти. Гарантируется, что в исходном массиве есть хотя бы один элемент, значение которого положительно и делится на пять. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные не описанные ниже, но разрешается не использовать часть из них. const N=20; var a:array[1..N]of integer; i,j,max: integer; begin for i:=1 to N do readln(a); ... end. Решение: Вопрос: в чем ошибка?

Ответов - 8

Поляков: malk пишет: Вопрос: в чем ошибка? Не вижу. Могу только предположить, что для проверяющий не совсем (совсем не) понял оператор "max:=5;".

natalja: 1.почему на выводе writeln(a[imax]), если нужно вывести номер элемента? 2. не нужно ли присваивать переменной kmax в начале программы значение?if (i = 1) or (k > kmax) then ......с чем будет сравниваться k?

Поляков: natalja пишет: 1.почему на выводе writeln(a[imax]), если нужно вывести номер элемента? Это опечатка, спасибо. не нужно ли присваивать переменной kmax в начале программы значение?if (i = 1) or (k > kmax) then ......с чем будет сравниваться k? Не обязательно. Дело в том, что на первом шаге цикла условие (i=1) истинно, поэтому вторая часть сложного условия с or не вычисляется (полное условие истинно независимо от него). А на втором шаге в kmax уже будет что-то записано. Кроме того, во всех известных мне Паскаль-средах глобальные переменные инициализируются нулями.


mama: А зачем в цикле for begin b end? Ведь после do всего один оператор - if. И после него, кстати, разве не должна бы следовать ; ? Возможно, из-за этого - и 0 баллов?

Поляков: mama пишет: А зачем в цикле for begin - end? Ведь после do всего один оператор - if. В любом случае, это нельзя считать ошибкой. И после него, кстати, разве не должна бы следовать ; ? Нет, перед end точку с запятой ставить не нужно (но можно).

mama: Нет, она, конечно, работает. Но если написать так "const n=20; var a: array[1..n] of integer; i,max: integer; begin for i:=1 to n do readln(a); max:=5; for i:=1 to n do if (a>max) and (a mod 5=0) then max:=a; writeln(max); end.", то вроде понятнее... Похоже, проверяющий просто недопонял или (max:=5;), или всё-таки begin-end в цикле?

Поляков: mama пишет: то вроде понятнее... Такого нет в критериях оценивания.

Viken: max:=-1000 for i:=1 to N do if (A >=0) and (A mod 5=0) and (A>max) then begin max:=A; end; writeln(max); end. Не так правильней будет?



полная версия страницы