Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите новичку: Паскаль \8(

NN Знаток (300), на голосовании 13 лет назад
Дубль 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*, а при остальных ядро летит либо в другую сторону, либо сразу вниз. Возможно, дело в формулах (мне кажется, цикл вполне правильный)... Подскажите, пожалуйста) Спасибо)
Голосование за лучший ответ
Йа НяшкО XD Гуру (4938) 13 лет назад
Подозреваю, что угол надо переводить в радианы из градусов =)

аргумент тригонометрических функций должен быть в радианах.
Похожие вопросы