Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 22.02.2012, 01:44   #1 (permalink)
ZEKE
Member
 
Регистрация: 15.02.2011
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Exclamation Задачка в Делфи

Здравствуйте, нужна помощь по написанию программы в среде Делфи. К Вам уже обращался за помощью, очень выручили. Надеюсь поможете еще разок, преподаватель все тот же...и проблемы все те же! Тема: Расчет траектории полета снаряда выпущенного пушкой, с указанием исходных данных: Начальный угол полета, начальная скорость полета и т.д.
Вывод должен производиться на компонент Image.
ZEKE вне форума   Ответить с цитированием

Старый 22.02.2012, 01:44
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Не отчаивайтесь, если ответа так и не нашлось, вы можете просмотреть схожие темы

Задачка в C# по матрице
Вот задачка
Задачка на ассемблере

Старый 22.02.2012, 12:30   #2 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Здравствуйте.

В учебнике "Информатика и ИКТ. 11 класс" для профильных классов под авторством Н.Д. Угриновича подобная задача разобрана детально, можете смело брать решение оттуда.
AlexZir вне форума   Ответить с цитированием
Старый 25.02.2012, 19:23   #3 (permalink)
ZEKE
Member
 
Регистрация: 15.02.2011
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Спасибо огромное! Буду читать)
ZEKE вне форума   Ответить с цитированием
Старый 25.02.2012, 23:24   #4 (permalink)
ZEKE
Member
 
Регистрация: 15.02.2011
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Написал по примеру, как в учебнике! Но тут возник вопрос сразу. В учебнике выстрел производится в один шаг, нажал кнопку и вот тебе уже результат. Подскажите пожалуйста, как сделать выстрел поэтапным. Т.е. чтобы можно было наблюдать за полетом снаряда. Наверное нужно использовать таймер, но что и как не могу понять...

Код программы:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls,Math;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Image1: TImage;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  V0,A,S,H,L:real;
  Const
  G=9.81;
  Pi=3.14;
implementation
{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
var
x,y,n:integer;
t:real;
begin
V0:=StrToFloat(Edit1.Text);
A:=StrToFloat(Edit2.Text);
S:=StrToFloat(Edit3.Text);
H:=StrToFloat(Edit4.Text);
L:=S*Tan(A*Pi/180)-G*Sqr(S)/(2*Sqr(v0*Cos(A*Pi/180)));
Label9.Caption:=FloatToStr(L);
if L<0 then
Label9.Caption:='Недолет'
else if L>H then
     Label9.Caption:='Перелет'
     else
     Label9.Caption:='Попадание';
with Image1.Canvas do
begin
  while T<5 Do
  begin
    T:=T+0.005;
    Y:=180-Round(10*(V0*Sin(A*Pi/180)*T-G*T*T/2));
    X:=5+Round(10*(V0*Cos(A*Pi/180)*T));
    Pixels[X,Y]:=clBlack;
  end;
  MoveTo(0,180);
  LineTo(400,180);

  MoveTo(5,0);
  LineTo(5,400);

  MoveTo(Round(5+10*S),Round(180));
  LineTo(Round(5+10*S),180-Round(10*H));
  N:=0;
  while N<400 do
  begin
    N:=N+50;
    MoveTo(5+N,180);
    LineTo(5+N,200);
    TextOut(7+N,180,IntToStr(Round(N/10)));
  end;
  N:=0;
  while N<200 do
  begin
    N:=N+50;
    MoveTo(0,180-N);
    LineTo(10,180-N);
    TextOut(0,180-N,IntToStr(Round(N/10)));
  end;
end;
end;

end.
ZEKE вне форума   Ответить с цитированием
Старый 25.02.2012, 23:52   #5 (permalink)
ZEKE
Member
 
Регистрация: 15.02.2011
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

С комментариями из книги!
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls,Math;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Image1: TImage;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  V0,A,S,H,L:real; начальная скорость, угол бросания, расстояние до стенки, высота стенки, высота мячика в момент попадания в стенку
  Const
  G=9.81;
  Pi=3.14;
implementation
{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
var
x,y,n:integer; координаты х и у, счетчик
t:real; время
begin
V0:=StrToFloat(Edit1.Text);
A:=StrToFloat(Edit2.Text); преобразуем соответственно
S:=StrToFloat(Edit3.Text);
H:=StrToFloat(Edit4.Text);
L:=S*Tan(A*Pi/180)-G*Sqr(S)/(2*Sqr(v0*Cos(A*Pi/180)));
Label9.Caption:=FloatToStr(L);
if L<0 then
Label9.Caption:='Недолет'
else if L>H then
     Label9.Caption:='Перелет'
     else
     Label9.Caption:='Попадание';
with Image1.Canvas do
begin
  while T<5 Do рисование траектории
  begin
    T:=T+0.005;
    Y:=180-Round(10*(V0*Sin(A*Pi/180)*T-G*T*T/2));
    X:=5+Round(10*(V0*Cos(A*Pi/180)*T));
    Pixels[X,Y]:=clBlack;
  end;
  MoveTo(0,180); ось х
  LineTo(400,180);

  MoveTo(5,0); ось у
  LineTo(5,400);

  MoveTo(Round(5+10*S),Round(180)); стенка
  LineTo(Round(5+10*S),180-Round(10*H));
  N:=0;
  while N<400 do шкала оси х
  begin
    N:=N+50;
    MoveTo(5+N,180);
    LineTo(5+N,200);
    TextOut(7+N,180,IntToStr(Round(N/10)));
  end;
  N:=0;
  while N<200 do шкала оси у
  begin
    N:=N+50;
    MoveTo(0,180-N);
    LineTo(10,180-N);
    TextOut(0,180-N,IntToStr(Round(N/10)));
  end;
end;
end;

end.
ZEKE вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 00:44.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.