СДАМ ГИА: РЕШУ ЕГЭ
Образовательный портал для подготовки к экзаменам
Информатика
≡ информатика
сайты - меню - вход - новости




Задания
Версия для печати и копирования в MS Word
Задание 25 № 3644

Опишите на русском языке или одном из языков программирования алгоритм вычисления разности максимального среди элементов, имеющих четные значения, и максимального среди элементов, имеющих нечетные значения, в заданном целочисленном массиве из 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