![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Добрый день.помогите пожалуйста с задачей.уже несколько пар мучаюсь не могу решить.знаю как смоделировать а описать в программе не получается.
задача: Построить модель определения вероятности поражения цели одиночным ракетным ударом.оценить точность и количество реализации модели при определении вероятности исходной. Моделирование 1. Имитируем удар, то есть мысленно нанесем удар по объекту путем определения координат взрыва. В силу идентичности закона рассеивания и его характеристик с законами распределения случайных чисел такими координатами могут быть x1 и y1 , взятые из последовательностей случайных чисел. 2. Вычислим расстояние r1 от места взрыва ракеты до цели: r1=корень из (x1 в квадрате + у1 в квадрате) 3. Оценим результаты имитации удара, то есть установим факт поражения или непоражения объекта: если r1<=R , то объект поражен; если r1>R, то объект непоражен. 4. Если объект поражен, запомним этот факт M увеличением на единицу, то есть M=M+1 (в начале M=0 ). 5. Для нахождения вероятности поражения объекта повторим имитацию нанесения удара N раз. 6. Оценим вероятность через частость поражения объекта:P(r<=R)=M/N |
|
#2
|
||||
|
||||
|
Прикольная задачка
Код:
Var
M: Integer = 0;
N: Integer = 0;
procedure TForm1.Button1Click(Sender: TObject);
const
x = 50; // координаты цели
y = 50;
r = 30; // растояние
var
x1, y1: Integer;
r1: Real;
begin
Randomize;
Form1.Canvas.Brush.Color:= clBtnFace;
Form1.Canvas.Rectangle(0,0,105,105);
Form1.Canvas.Brush.Color:= clBlue;
Form1.Canvas.Ellipse(x-r,y-r,x+r,y+r);
x1:= Random(100);
y1:= Random(100);
Form1.Canvas.Brush.Color:= clRed;
Form1.Canvas.Ellipse(x1-3,y1-3,x1+3,y1+3);
r1:= Sqrt(Sqr(x1 - x) + Sqr(y1 - x));
if r1 <= r Then
begin
ShowMessage('Попали!');
Inc(M);
end
Else ShowMessage('Промазали!');
Inc(N);
Label1.Caption:= 'Вероятность = '+FloatToStr(M/N);
end; |
|
#3
|
|||
|
|||
|
спасибо за помощь!)
подскажите как можно изменить программу так чтобы она зациклилась.несколько раз попадание или нет а потом уже высчитывает вероятность |
|
#4
|
||||
|
||||
|
Код:
repeat until ... |
|
#5
|
|||
|
|||
|
а куда????ну затупок я в программировании
|
|
#6
|
||||
|
||||
|
Так вроде бы работает, тестируйте:
Код:
Var
M: Integer = 0;
N: Integer = 0;
procedure TForm1.Button1Click(Sender: TObject);
const
x = 50; // координаты цели
y = 50;
r = 30; // растояние
var
x1, y1, i: Integer;
r1: Real;
begin
For i:= 1 To 1000000000 Do // Несколько раз выстрелим
begin
Randomize;
Form1.Canvas.Brush.Color:= clBtnFace;
Form1.Canvas.Rectangle(0,0,105,105);
Form1.Canvas.Brush.Color:= clBlue;
Form1.Canvas.Ellipse(x-r,y-r,x+r,y+r);
x1:= Random(100);
y1:= Random(100);
Form1.Canvas.Brush.Color:= clRed;
Form1.Canvas.Ellipse(x1-3,y1-3,x1+3,y1+3);
r1:= Sqrt(Sqr(x1 - x) + Sqr(y1 - x));
if r1 <= r Then
begin
Label1.Caption:= 'Попали!';
Inc(M);
end
Else Label1.Caption:= 'Промазали!';
Inc(N);
end;
Label1.Caption:= 'Вероятность = '+FloatToStr(M/N);
end; |