|
|
Регистрация | << Правила форума >> | 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; |
#7
|
|||
|
|||
спасибо))))надеюсь подойдет)
|
#8
|
|||
|
|||
помогите еще с одной задачей.
пусть парашютист прыгает с высоты h.определить радиус парашюта, т.е. подобрать коэффициент сопротивления k2 при котором приземление будет безопасным.скорость безопасного приземления 8-10 м\с |
#9
|
||||
|
||||
Напишите формулу как вычеслить k2, я в физике не силён.
If end Then begin; |
#10
|
|||
|
|||
процесс
1. t0=0 x0=0 a0=g u0=0 2.добавим к t0 малое значение t1=t0+дельта t x1=x0+u0t1+(a0*t1*t1)/2 u1=u0+a0*дельтаt a1=(mg-k1u1-k2u2)/2 3. продолжаем этот процесс пока xi не будет равно h тело массой m падает с высоты h с начальной скоростью u0 натело действует сила тяжести F=m/g направляющая вниз и сила сопротивления среды Fc=k1*u+k2*u*u u-скорость падение тела описывает 2 законом ньютона ma=mg-Fc надеюсь поможет) |
#11
|
||||
|
||||
Переписал выше написанный алгоритм на Delphi.
Осталось только исправить формулы в цикле и вывести переменную которую искали. Код:
procedure TForm1.Button1Click(Sender: TObject); Const h = 500; m = 65; g = 9.8; dt = 0.1; Var ti, xi, ai, ui: Real; begin ti:= 0; xi:= 0; ai:= g; ui:= 0; Repeat ti:= ti + dt; xi:= xi + ui*ti + (ai*ti*ti)/2; ui:= ui + ai*dt; //ai:=(m*g - k1*u1 - k2*u2)/2; //Непонял тут ничё. Until xi >= h; end; If end Then begin; |
#12
|
|||
|
|||
блин спасибо огромное за помощь тупым студентам)
|
#13
|
||||
|
||||
Вы отнюдь не тупая студентка. Вы достаточно грамотно умеете ставить задачу, а это ой как не часто встречается. Так-что респект и удачи.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#14
|
|||
|
|||
проверила.кое что доделала получилось
Код:
uses crt; Const //h = 500; // m = 65; g = 9.8; dt = 0.1; Var ti, xi, ai, ui,k2,k1: Real; m,h:integer; begin clrscr; write ('vvedite m='); readln (m); write('vvedite h='); readln (h); ti:= 0; xi:= 0; ai:= g; ui:= 0; Repeat ti:= ti + dt; xi:= xi + ui*ti + (ai*ti*ti)/2; ui:= ui + ai*dt; ai:=(m*g - k1*ui - k2*ui*ui)/2; Until xi >= h; writeln('k2 =',k2); readln; end. но он не считает к2 Последний раз редактировалось Admin, 24.05.2011 в 21:09. |
#15
|
||||
|
||||
Наверное ещё надо выразить из этой формулы K2 или К1
ai:=(m*g - k1*ui - k2*ui*ui)/2; и посчитать её после цикла подставив значения аi и ui. If end Then begin; |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|