тема 20
unknown
pascal
3 years ago
1.9 kB
14
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...