Опишите на русском языке или одном из языков программирования алгоритм вычисления разности максимального среди элементов, имеющих четные значения, и максимального среди элементов, имеющих нечетные значения, в заданном целочисленном массиве из 30 положительных элементов (в предположении, что в массиве есть и четные, и нечетные элементы).
Решение. Введем целочисленные переменные MaxEv и MaxOdd, в которые будем заносить соответственно значения максимального четного и максимального нечетного элемента в просмотренной части массива и присвоим им начальное значение 0. В цикле до конца массива: проверяем, является ли очередной элемент четным. Если да, то сравниваем его с MaxEv, если он больше, заносим его значение в переменную MaxEv. Если же элемент нечетен, то сравниваем его с MaxOdd, если он больше, заносим его значение в переменную MaxOdd. По окончании цикла выводим разность MaxEv-MaxOdd. Для определения четности значения элемента массива можно воспользоваться либо стандартной функцией (if not odd (a[I]) then...), либо операцией определения остатка от деления Ha 2(if а [ I ] mod 2 = 0 then...), либо, как приведено в программе ниже, операцией целочисленного деления. Пример правильной и эффективной программы (на основе алгоритма, использующего однократный проход по массиву):
| ПРОГРАММА НА ПАСКАЛЕ | ПРОГРАММА НА БЕЙСИКЕ |
| Const N = 30; Var a:array [1..N] of integer; MaxEv, MaxOdd, I: integer; begin MaxEv :=0; MaxOdd :=0; for I := 1 to N do readln(a[I]); for I := 1 to N do begin if (a[I] div 2)*2 = a[I] then begin if a[I] > MaxEv then MaxEv := a [ I] ; end else if a[I] > MaxOdd then MaxOdd := a[I]; end; writeln (MaxEv- MaxOdd); end. | N = 30 DIM I, MaxEv, MaxOdd, A(N) AS INTEGER MaxEv = 0 MaxOdd = 0 FOR I = 1 TO N INPUT A(I) FOR I = 1 TO N IF (A(I)\2)*2 = A(I) THEN IF A(I) > MaxEv THEN MaxEv = A(I) ENDIF ELSE IF A(I) > MaxOdd THEN MaxOdd = A(I) ENDIF ENDIF NEXT I PRINT MaxEv- MaxOdd END |
| Критерии оценивания выполнения задания | Баллы |
|---|---|
| Предложен правильный алгоритм, выдающий верное значение. Допускается запись алгоритма на другом языке, использующая аналогичные переменные. В случае, если язык программирования использует типизированные переменные, описания переменных должны быть аналогичны описаниям переменных на естественном языке. Использование нетипизированных или необъявленных переменных возможно только в случае, если это допускается языком программирования, при этом количество переменных и их идентификаторы должны соответствовать условию задачи. В алгоритме, записанном на языке программирования, допускается наличие отдельных синтаксических ошибок, не искажающих замысла автора программы. | 2 |
| В любом варианте решения может присутствовать не более одной ошибки из числа следующих: 1) не инициализируется или неверно инициализируется переменная; 2) при выводе ответа не учитывается, что требуемого числа в массиве может не быть; 3) отсутствует вывод ответа; 4) в сравнении перепутан знак; 5) неверно осуществляется проверка делимости; 6) на делимость проверяется не значение элемента, а его индекс; 7) в сложном условии вместо логической операции «И» используется логическая операция «ИЛИ»; 8) используется переменная, не объявленная в разделе описания переменных; 9) не указано или неверно указано условие завершения цикла; 10) индексная переменная в цикле не меняется (например, в цикле while) или меняется неверно; 11) неверно расставлены операторные скобки | 1 |
| Ошибок, перечисленных в п. 1–11, две или больше, или алгоритм сформулирован неверно | 0 |
| Максимальный балл | 2 |
PDF-версии: 