22.02.2012, 01:44 | #1 (permalink) |
Member
Регистрация: 15.02.2011
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Задачка в Делфи
Вывод должен производиться на компонент Image. |
22.02.2012, 01:44 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Не отчаивайтесь, если ответа так и не нашлось, вы можете просмотреть схожие темы Задачка в C# по матрице Вот задачка Задачка на ассемблере |
22.02.2012, 12:30 | #2 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
Здравствуйте.
В учебнике "Информатика и ИКТ. 11 класс" для профильных классов под авторством Н.Д. Угриновича подобная задача разобрана детально, можете смело брать решение оттуда. |
25.02.2012, 23:24 | #4 (permalink) |
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. |
25.02.2012, 23:52 | #5 (permalink) |
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. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|