тема 20

 avatar
unknown
pascal
2 years ago
1.9 kB
6
Indexable
Program Circles;
Uses GraphABC;

Const N = 10; //количество кругов
      MinR = 5; //минимальный радиус

Var R : Array [1 .. N] Of Integer; //массив с радиусами
    WW, //ширина графического окна
    WH, //высота графического окна
    MaxR, //максимальный радиус
    X, Y, // координаты текущего круга
    i, k, j, temp, m, left, right, mid, search : Integer;

Begin
  CenterWindow;
  WW := WindowWidth;
  WH := WindowHeight;
  MaxR := WW div N div 2;
  
  //Заполняем массив случайными радиусами
  For i := 1 To N Do
    R[i] := Random(MaxR - MinR + 1) + MinR;

  //печатаем массив
  For i := 1 To N Do
    Write(R[i], ' ');
  Writeln;
  
  //рисуем круги
  Y := WH div 2;
  X := MaxR;
  SetPenColor(clWhite);
  SetBrushColor(clRed);
  For i := 1 To N Do 
  begin
    Circle(X, Y, R[i]);
    X := X + 2 * MaxR;
  end;
  
  //сортировка простым выбором
  For i := 1 To N - 1 Do
  begin
    //ищем минимальный эл-т среди R[i]..R[N]
    k := i;
    For j := i To N Do
    begin
      If R[j] < R[k] Then
        k := j;
    end;
    //переставляем i-ый и k-ый
    temp := R[k];
    R[k] := R[i];
    R[i] := temp;
    //печатаем массив
    For m := 1 To N Do
    Write(R[m], ' ');
    Writeln;
  end;
  
  //бинарный поиск
  Readln(search);
  left := 1;
  right := N;
  mid := (left + right) div 2;
  While (left <= right) And (R[mid] <> search) Do
  begin
    mid := (left + right) div 2;
    If R[mid] > search Then
      right := mid - 1
    Else If R[mid] < search Then
      left := mid + 1;
  end;
  
  If R[mid] = search Then
    Writeln(mid)
  Else
    Writeln('Нет');
end.
Editor is loading...