Автор | Сообщение |
|
Отправлено: 26.03.12 10:05. Заголовок: [C2] Задача с пробного ЕГЭ
Дан массив из 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
[только новые]
|
|
|
| Администратор
|
Сообщение: 220
|
|
Отправлено: 26.03.12 12:39. Заголовок: malk пишет: Вопрос: ..
malk пишет: Не вижу. Могу только предположить, что для проверяющий не совсем (совсем не) понял оператор "max:=5;".
|
|
|
|
Отправлено: 27.03.12 21:02. Заголовок: вопрос с2-26
1.почему на выводе writeln(a[imax]), если нужно вывести номер элемента? 2. не нужно ли присваивать переменной kmax в начале программы значение?if (i = 1) or (k > kmax) then ......с чем будет сравниваться k?
|
|
|
|
| Администратор
|
Сообщение: 225
|
|
Отправлено: 27.03.12 21:12. Заголовок: natalja пишет: 1.поч..
natalja пишет: цитата: | 1.почему на выводе writeln(a[imax]), если нужно вывести номер элемента? |
|
Это опечатка, спасибо. цитата: | не нужно ли присваивать переменной kmax в начале программы значение?if (i = 1) or (k > kmax) then ......с чем будет сравниваться k? |
|
Не обязательно. Дело в том, что на первом шаге цикла условие (i=1) истинно, поэтому вторая часть сложного условия с or не вычисляется (полное условие истинно независимо от него). А на втором шаге в kmax уже будет что-то записано. Кроме того, во всех известных мне Паскаль-средах глобальные переменные инициализируются нулями.
|
|
|
|
Отправлено: 29.03.12 05:33. Заголовок: А зачем в цикле for ..
А зачем в цикле for begin b end? Ведь после do всего один оператор - if. И после него, кстати, разве не должна бы следовать ; ? Возможно, из-за этого - и 0 баллов?
|
|
|
|
| Администратор
|
Сообщение: 232
|
|
Отправлено: 29.03.12 06:13. Заголовок: mama пишет: А зачем ..
mama пишет: цитата: | А зачем в цикле for begin - end? Ведь после do всего один оператор - if. |
|
В любом случае, это нельзя считать ошибкой. цитата: | И после него, кстати, разве не должна бы следовать ; ? |
|
Нет, перед end точку с запятой ставить не нужно (но можно).
|
|
|
|
Отправлено: 29.03.12 06:59. Заголовок: Нет, она, конечно, р..
Нет, она, конечно, работает. Но если написать так "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 в цикле?
|
|
|
|
| Администратор
|
Сообщение: 235
|
|
Отправлено: 29.03.12 07:05. Заголовок: mama пишет: то вроде..
mama пишет: Такого нет в критериях оценивания.
|
|
|
|
Отправлено: 25.05.12 23:34. Заголовок: max:=-1000; {метод п..
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. Не так правильней будет?
|
|
|
|