Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.05.2011, 13:50
Ксюха Ксюха вне форума
Прохожий
 
Регистрация: 22.05.2011
Сообщения: 28
Репутация: 10
По умолчанию моделирование в 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  
Старый 22.05.2011, 15:25
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Прикольная задачка
Код:
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  
Старый 23.05.2011, 17:05
Ксюха Ксюха вне форума
Прохожий
 
Регистрация: 22.05.2011
Сообщения: 28
Репутация: 10
По умолчанию

спасибо за помощь!)
подскажите как можно изменить программу так чтобы она зациклилась.несколько раз попадание или нет а потом уже высчитывает вероятность
Ответить с цитированием
  #4  
Старый 23.05.2011, 18:11
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Код:
repeat

until ...
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 23.05.2011, 18:42
Ксюха Ксюха вне форума
Прохожий
 
Регистрация: 22.05.2011
Сообщения: 28
Репутация: 10
По умолчанию

а куда????ну затупок я в программировании
Ответить с цитированием
  #6  
Старый 23.05.2011, 19:01
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Так вроде бы работает, тестируйте:
Код:
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  
Старый 23.05.2011, 19:29
Ксюха Ксюха вне форума
Прохожий
 
Регистрация: 22.05.2011
Сообщения: 28
Репутация: 10
По умолчанию

спасибо))))надеюсь подойдет)
Ответить с цитированием
  #8  
Старый 24.05.2011, 13:49
Ксюха Ксюха вне форума
Прохожий
 
Регистрация: 22.05.2011
Сообщения: 28
Репутация: 10
По умолчанию

помогите еще с одной задачей.
пусть парашютист прыгает с высоты h.определить радиус парашюта, т.е. подобрать коэффициент сопротивления k2 при котором приземление будет безопасным.скорость безопасного приземления 8-10 м\с
Ответить с цитированием
  #9  
Старый 24.05.2011, 14:25
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Напишите формулу как вычеслить k2, я в физике не силён.
__________________
If end Then begin;
Ответить с цитированием
  #10  
Старый 24.05.2011, 18:34
Ксюха Ксюха вне форума
Прохожий
 
Регистрация: 22.05.2011
Сообщения: 28
Репутация: 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  
Старый 24.05.2011, 19:31
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Переписал выше написанный алгоритм на 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  
Старый 24.05.2011, 20:49
Ксюха Ксюха вне форума
Прохожий
 
Регистрация: 22.05.2011
Сообщения: 28
Репутация: 10
По умолчанию

блин спасибо огромное за помощь тупым студентам)
Ответить с цитированием
  #13  
Старый 24.05.2011, 20:56
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Вы отнюдь не тупая студентка. Вы достаточно грамотно умеете ставить задачу, а это ой как не часто встречается. Так-что респект и удачи.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #14  
Старый 24.05.2011, 21:05
Ксюха Ксюха вне форума
Прохожий
 
Регистрация: 22.05.2011
Сообщения: 28
Репутация: 10
По умолчанию

проверила.кое что доделала получилось
Код:
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  
Старый 24.05.2011, 21:39
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Наверное ещё надо выразить из этой формулы K2 или К1
ai:=(m*g - k1*ui - k2*ui*ui)/2; и посчитать её после цикла подставив значения аi и ui.
__________________
If end Then begin;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:48.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter