![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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; |
|
#7
|
|||
|
|||
|
спасибо))))надеюсь подойдет)
|
|
#8
|
|||
|
|||
|
помогите еще с одной задачей.
пусть парашютист прыгает с высоты h.определить радиус парашюта, т.е. подобрать коэффициент сопротивления k2 при котором приземление будет безопасным.скорость безопасного приземления 8-10 м\с |
|
#9
|
||||
|
||||
|
Напишите формулу как вычеслить k2, я в физике не силён.
|
|
#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; |
|
#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. |
![]() |
|
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|
|