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

type
  mass = array[1..3000] of integer;
 
 
procedure sortpusvosr(a: mass; n: integer);//sortirovka pusirkom po vosrastaniu
var
  i, j, x, nx, l, r, c: integer;
begin
  for i := 1 to n - 1 do 
  begin
    for j := n - 1 downto 1 do
      if a[j] > a[j + 1] then begin
        x := a[j];
        a[j] := a[j + 1];
        a[j + 1] := x;
      end;
  end;
  writeln('массив осторитированный пузырьком по возрастанию');
  for i := 1 to n do 
  begin
    write(a[i], ' ');
  end;
end;
 
procedure sortpusubiv(a: mass; n: integer);//sortirovka pusirom po ubivaniu
var
  i, j, x, nx, l, r, c: integer;
begin
  for i := 1 to n - 1 do 
  begin
    for j := n - 1 downto 1 do
      if a[j] < a[j + 1] then begin
        x := a[j];
        a[j] := a[j + 1];
        a[j + 1] := x;
      end;
  end;
  writeln('массив осторитированный пузырьком по убыванию');
  for i := 1 to n do 
  begin
    write(a[i], ' ');
  end;
end;
 
procedure MyRandom(n: integer; var a: mass);//generator sluchainix chisel bez povtorenii
var
  m, i, j, x: integer;
  f: Boolean;
begin
  m := 2;
  Randomize;
  for i := 1 to n do
  begin
    repeat
      f := false;
      x := Random(100 + 1);
      for j := 1 to m do
        if a[j] = x then f := true;
    until f = false;
    a[i] := x;
    m := m + 1;
  end;
end;
 
procedure poisk(a: mass; n: integer; k: integer);//binarnii poisk
var
  nk, r, l, c: integer;
begin
  nk := 0; 
  L := 1; R := N;
  while R >= L do 
  begin
    c := (R + L) div 2;
    if k = A[c] then begin
      nk := c;
      R := L - 1; { break; } 
    end; 
    if k < A[c] then R := c - 1; 
    if k > A[c] then L := c + 1; 
  end;
  if nk < 1 then writeln('Не нашли...')     
  else           writeln('A[', nk, ']=', k);
end;
 
procedure poisk_1(a: mass; n: integer; k: integer);//poisk pereborom
var
  i, i1: integer;
 
begin
  i1 := 0;
  for i := 1 to n do 
  begin
    if a[i] = k then begin
      i1 := i;
      break
    end;
  end;
  write(i1);
end;
 
var
  i, n, k: integer;
  o,b, c, d: mass;
 
begin
  randomize;
  repeat
    writeln('рамер массива');
    readln(n);
  until n in [2..2999];
  writeln('исходный массив');
  MyRandom(n, o);
  for i := 1 to n do 
  begin
    write(o[i], ' ');
  end;
  for i := 1 to n do 
  begin//zapisivaem pervonachalnii massiv icho v 3 t.k. nam pridetsia ispolsovat ego 3 raza
    b[i] := o[i];
  end;
  for i := 1 to n do 
  begin
    c[i] := o[i];
  end;
  for i := 1 to n do 
  begin
    d[i] := o[i];
  end;
  writeln;
  writeln('введите число к для поиска');
  readln(k);
  readln;
  sortpusvosr(c, n);//sortiruem pervonachalnii massiv po vosrastaniu zapissanii v C
  readln;
  sortpusubiv(d, n);//sortiruem pervonachalnii massiv po ubivaniu zapisanii v D
  readln;
  poisk_1(o, n, k);//isem v neotsortirovannom massive
  readln;
  poisk_1(c, n, k);//v otsortirovannom po vosrastaniu
  readln;
  poisk_1(d, n, k);//v otsortirovannom po ubivaniu
  readln;
  poisk(c, n, k);//isem binarnim poiskom
  readln;
  poisk(d, n, k);
  readln;
end.

Leave a Comment

92 − = 91