Дан одномерный массив целых чисел. Поменять местами первый элемент с ненулевым значением и последний элемент с нечетным значением — Pascal(Паскаль)

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;

Leave a Comment

− 8 = 2