|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
моделирование в Delрhi
Добрый день.помогите пожалуйста с задачей.уже несколько пар мучаюсь не могу решить.знаю как смоделировать а описать в программе не получается.
задача: Построить модель определения вероятности поражения цели одиночным ракетным ударом.оценить точность и количество реализации модели при определении вероятности исходной. Моделирование 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; If end Then begin; |
#3
|
|||
|
|||
спасибо за помощь!)
подскажите как можно изменить программу так чтобы она зациклилась.несколько раз попадание или нет а потом уже высчитывает вероятность |
#4
|
||||
|
||||
Код:
repeat until ... — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#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; If end Then begin; |