Дубль 2 =) Всем привет) Пожалуйста, помогите с такой проблемкой: У меня есть самоучитель по Паскалю (автор - С.Н. Лукин), там есть такая задачка: "Задание 95 (сложное): Сделайте игру: Пушка на экране стреляет в цель ядрами. С какого выстрела она поразит противника? Между пушкой и целью расположена небольшая гора. Перед началом игры случайно задается горизонтальная координата цели. Затем рисуется картинка. Перед каждым выстрелом компьютер отображает на экране номер выстрела и запрашивает у человека старто-вую скорость ядра v и угол ? наклона ствола пушки к земле. Затем летит ядро. Полет ядра подчиняется двум уравнениям: s=v*t*cos? и h=v*t*sin? – 9.81*t2/2. Считается, что цель поражена, если ядро «отгрызло» от нее хоть маленький кусочек. " Вот моя програмка (неполная):
USES CRT, GRAPH; LABEL 1; VAR s, h, t: real; x, a, v, i, Device, Mode: integer; PROCEDURE yadro; begin SetColor (White); Circle (Round(s),Round(h),2); Delay (1000); SetColor (Black); Circle (Round(s),Round(h),2); PutPixel (Round(s),Round(h), Green); Delay (1000); end; PROCEDURE vzriv; begin for i:=1 TO 10 do begin SetColor (Red); SetLineStyle (0, 0, ThickWidth); Circle (Round(s), Round(h), i); SetColor (Black); Circle (Round(s), Round(h), i); SetLineStyle (0, 0, NormWidth); end; end; BEGIN {RISUNOK} Device:=0; InitGraph (Device, Mode, 'C:\Pascal\EGAVGA.BGI'); {ZEMLYA} Line (0,320,640,320); {GORA} Line (260,320, 320, 260); Line (320,260, 380,320); {PUSHKA} Circle (50, 315, 5); SetLineStyle (0,0, ThickWidth); Line (45,318, 60,310); SetLineStyle (0,0, NormWidth); {TCELY} Randomize; x:=390+Random(620-390); Rectangle (x-5,315, x+5,320); {VVOD DANNIH} WriteLn; SetColor (White); Write ('speed: v='); Readln (v); Write ('angel: a='); ReadLn (a); {VISTREL} t:=0; repeat yadro; t:=t+0.2; s:=60+v*t*cos(a); h:=310-v*t*sin(a)-9.8*sqr(t)/2; if (h>=260) and (s>=260) and (s<=380) then goto 1; until h>315; 1: vzriv; ReadLn; CloseGraph; END.
Так вот это дело работает только при угле в 45*, а при остальных ядро летит либо в другую сторону, либо сразу вниз. Возможно, дело в формулах (мне кажется, цикл вполне правильный)... Подскажите, пожалуйста) Спасибо)
Всем привет) Пожалуйста, помогите с такой проблемкой:
У меня есть самоучитель по Паскалю (автор - С.Н. Лукин), там есть такая задачка:
"Задание 95 (сложное): Сделайте игру: Пушка на экране стреляет в цель ядрами. С какого выстрела она поразит противника? Между пушкой и целью расположена небольшая гора. Перед началом игры случайно задается горизонтальная координата цели. Затем рисуется картинка.
Перед каждым выстрелом компьютер отображает на экране номер выстрела и запрашивает у человека старто-вую скорость ядра v и угол ? наклона ствола пушки к земле. Затем летит ядро. Полет ядра подчиняется двум уравнениям: s=v*t*cos? и h=v*t*sin? – 9.81*t2/2. Считается, что цель поражена, если ядро «отгрызло» от нее хоть маленький кусочек. "
Вот моя програмка (неполная):
USES CRT, GRAPH;
LABEL 1;
VAR s, h, t: real; x, a, v, i, Device, Mode: integer;
PROCEDURE yadro;
begin
SetColor (White);
Circle (Round(s),Round(h),2);
Delay (1000);
SetColor (Black);
Circle (Round(s),Round(h),2);
PutPixel (Round(s),Round(h), Green);
Delay (1000);
end;
PROCEDURE vzriv;
begin
for i:=1 TO 10 do
begin
SetColor (Red);
SetLineStyle (0, 0, ThickWidth);
Circle (Round(s), Round(h), i);
SetColor (Black);
Circle (Round(s), Round(h), i);
SetLineStyle (0, 0, NormWidth);
end;
end;
BEGIN
{RISUNOK}
Device:=0;
InitGraph (Device, Mode, 'C:\Pascal\EGAVGA.BGI');
{ZEMLYA}
Line (0,320,640,320);
{GORA}
Line (260,320, 320, 260);
Line (320,260, 380,320);
{PUSHKA}
Circle (50, 315, 5);
SetLineStyle (0,0, ThickWidth);
Line (45,318, 60,310);
SetLineStyle (0,0, NormWidth);
{TCELY}
Randomize;
x:=390+Random(620-390);
Rectangle (x-5,315, x+5,320);
{VVOD DANNIH}
WriteLn;
SetColor (White);
Write ('speed: v=');
Readln (v);
Write ('angel: a=');
ReadLn (a);
{VISTREL}
t:=0;
repeat
yadro;
t:=t+0.2;
s:=60+v*t*cos(a);
h:=310-v*t*sin(a)-9.8*sqr(t)/2;
if (h>=260) and (s>=260) and (s<=380) then goto 1;
until h>315;
1: vzriv;
ReadLn;
CloseGraph;
END.
Так вот это дело работает только при угле в 45*, а при остальных ядро летит либо в другую сторону, либо сразу вниз. Возможно, дело в формулах (мне кажется, цикл вполне правильный)... Подскажите, пожалуйста) Спасибо)