uses crt;
const max=100;
var a:array[1..max] of integer;
n,i,i1,ip:byte;
x:integer;
begin
clrscr;
repeat
write('Размер массива n=');
readln(n);
until n in [1..max];
writeln('Введите ',n,' целых чисел:');
for i:=1 to n do
begin
write('a[',i,']=');
readln(a[i]);
end;
clrscr;
writeln('Исходный массив:');
for i:=1 to n do
write(a[i],' ');
writeln;
writeln;
i1:=0;
for i:=n downto 1 do
if a[i]<>0 then i1:=i;
if i1=0 then
begin
write('В массиве все элементы=0');
readln;
exit;
end;
ip:=0;
for i:=1 to n do
if odd(a[i]) then ip:=i;
if ip=0 then
begin
write('В массиве все элементы четные');
readln;
exit;
end;
x:=a[i1]; a[i1]:=a[ip]; a[ip]:=x;
writeln('Обмен первого не нулевого с последним нечетным:');
for i:=1 to n do
write(a[i],' ');
readln
end.
Следующий вариант
var
Arr[1..100] of word;
i: word;
FirstNotNull, LastOdd : word;
FoundFirstNotNull : boolean;
t: word;
begin
Randomize;
//Заполнить случайнными от 0 до 100
for i := 1 to 100 do
Arr[i] := Random(100);
//Поиск первого ненулевого и последнего нечетного
for i := 1 to 100 do
begin
if (Arr[i] <> 0) and (FoundFirstNotNull) = false then
begin
FirstNotNull := i;
FoundFirstNotNull := true;
end;
if Arr[i] mod 2 = 0 then
LastOdd := i;
end;
//Меняем местами
t := Arr[FirstNotNull];
Arr[FirstNotNull] := Arr[LastOdd];
Arr[FirstNotNull] := t;
end;