Дан одномерный массив Y. Найти второй элемент, значение которого по модулю >5. Сделать инверсию исходного массива(первый с последним, второй с предпоследним и т.д.). — Pascal(Паскаль)

uses
  Crt;
const
  N = 9;
var
  a: array [1..N] of integer;
  i,j,Nmax,res,tmp: integer;
  f: boolean;
begin
  ClrScr;
  Randomize;
  WriteLn('Array:');
  for i := 1 to N do
  begin
    a[i] := Random(80 - 40);
    Write(a[i], ' ');
  end;
  { part 1}
  f := false;
  res := -1;
  for i := 1 to N do
    if (abs(a[i]) > 5) then
      if not f then
        f := true
      else
      begin
        res := i;
        break;
      end;
  if res > 0 then
    WriteLn(#10, 'Part 1: a[', res, '] = ', a[res])
  else
    WriteLn('Part 1: No!');
  { part 2 }
  for i := 1 to N div 2 do
  begin
    tmp := a[i];
    a[i] := a[N - i + 1];
    a[N - i + 1] := tmp;
  end;
  WriteLn('Part 2:');
  for i := 1 to N do
    Write(a[i], ' ');
  { part 3 }
  WriteLn(#10, 'Part 3:');
  Nmax := N;
  for i := 2 to N div 2 + 1 do
  begin
    for j := i to N - 1 do
      a[j] := a[j + 1];
    Dec(Nmax);
  end;
  for i := 1 to Nmax do
    Write(a[i], ' ');
  ReadLn;
end.

Следующий вариант

Модуль

unit unit1;
interface
 const nmax=100;
 type mas=array[1..nmax] of integer;
 procedure Vvod(var a:mas; var n:byte);{ввод массива}
 procedure More(a:mas;n:byte);{второе число по модулю больше 5}
 procedure Invers(var a:mas;n:byte);{инверсия}
 procedure Compress(var a:mas;var n:byte);{сжатие-удаление с нечетными индексами}
implementation
procedure Vvod;
var i:byte;
begin
repeat
write('Размер массива до ',nmax,' n=');
readln(n);
until n in [1..nmax];
for i:=1 to n do
 begin
  a[i]:=random(20)-9;
  write(a[i]:4);
 end;
writeln;
writeln;
end;
 
procedure More;
var i,k:byte;
begin
k:=0;
for i:=1 to n do
 begin
  if abs(a[i])>5 then k:=k+1;{если модуль больше 5, считаем}
  if k=2 then{если 2}
   begin
    writeln('Второй элемент по модулю > 5=',a[i]);{выводим}
    break;{выходим из цикла}
   end;
 end;
if k<2 then writeln('В массиве нет двух элементов по модулю > 5!');
writeln;
end;
 
procedure Invers;
var i:byte;
    x:integer;
begin
for i:=1 to n div 2 do{до середины массива}
 begin
  x:=a[i];
  a[i]:=a[n-i+1];{симметрично от концов обмениваем элементы местами}
  a[n-i+1]:=x;
 end;
writeln('Инверсия массива:');
for i:=1 to n do
write(a[i]:4);
writeln;
writeln;
end;
 
procedure Compress;
var i,j:byte;
begin
if odd(n) then n:=n-1;{если размер нечетный, отбросим последний элемент}
n:=n div 2;{новый размер массива}
for i:=1 to n do
a[i]:=a[2*i];{присваиваем значения только элементов с четными индексами}
writeln('Удаление с нечетными индексами:');
for i:=1 to n do
write(a[i]:4);
end;
end.

Программа

uses crt,unit1;
var y:mas;
    n:byte;
begin
clrscr;
randomize;
Vvod(y,n);
More(y,n);
Invers(y,n);
Compress(y,n);
readln
end.

Leave a Comment

4 + 3 =