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

