Надо построить модель полета снаряда с исходными данными скорость и угол стрельбы. Начальная высота нулевая. Графиков может быть несколько, причем ввод очередной двойки (скорость, угол) производится уже при нарисованых предыдущих графиках.
Заранее благодарна
Надо бы вспомнить формулы...
Случайно не знаете? ;)
Vila
http://forum.pascal.net.ru/index.php?showtopic=2931 была решена похожая задачка - только без графики... Формулы можно взять оттуда.
Я тут еще нашел:
http://www.examens.ru/otvet/11/9/814.html
Vila
Посмотрите вот эту программку... Для значений Vo до 100 она работает...
Если нужно, попробуйте поиграть с выводом точек...
uses
Crt, Graph;
const
G = 9.8;
n = 2;
function getint(x, y: integer; s: string): integer;
var
st: string;
err, a: integer;
ch: char;
begin
setcolor(white);
outtextxy(x, y, s);
st := '';
repeat
ch := readkey;
if ch in [#8, '0'..'9'] then
begin
setcolor(black);
outtextxy(x + textwidth(s), y, st);
setcolor(white);
if ch = #8 then
begin
if st <> '' then delete(st, length(st), 1)
end
else
st := st + ch;
outtextxy(x + textwidth(s), y, st);
end
until ch = #13;
val(st, a, err);
getint := a
end;
var
grDriver, grMode, ErrCode: integer;
v0, a, x, y: real;
t: real;
i: integer;
currcolor, px, py: integer;
begin
grDriver := Detect;
initgraph( grDriver, grMode, '' );
ErrCode := GraphResult;
if ErrCode <> grOk then
begin
writeln('Graphics error:', grapherrormsg(ErrCode));
halt(100)
end;
currcolor := 0;
while true do
begin
setviewport(0, 0, getmaxx, 40, false);
clearviewport;
setviewport(0, 0, getmaxx, getmaxy, false);
v0 := getint(5, 5, 'enter Vo ');
a := getint(5, 20, 'enter A ');
if v0 = 0 then break;
inc(currcolor);
currcolor := (currcolor mod 10) + 1;
t := 0;
repeat
x := v0 * cos(a / (180/Pi)) * t;
y := v0 * sin(a / (180/Pi)) * t - (G * sqr(t)/2);
px := trunc(x); py := trunc(y);
putpixel(px, (getmaxy div 2) - py, currcolor);
if (t > 0.01) and (y <= 0) then break;
t := t + 0.01;
until false;
end;
closegraph;
end.
В программке меня беспокоят две вещи:
1) while true
2) until false
А товарищу APAL, дабы усложнить задачу поиска всяких ссылок, советую попробовать ввести в задачу ветер переменного направления и силы (во время полёта снаряда).
Кстати, есть отличный образчик программки со снарядами, визуализация отличная. Scorched Earth называется. Ходят слухи, что на паскале написана.
Кто-то, типа, даже исходники видел.
Я думаю, ноги этой задачки лежат в бурном Scorch-детстве препода.
Спасибо Всем, сейчас координатные оси дорисую, и попробуем сдать...
Просто эстетствую .
Неявное окончание условного цикла сродни GOTO.
Вообще-то, в данной задачке достаточно условий для того, чтобы построить квадратное уравнение.
t=2*(Vy/G)
x1=0
x2=t*Vx при y=0
ymax=t/2*Vy
Конструкция "repeat until false" абсолютно равнозначна "label: goto label", только код ещё осложнён ненужным сравнением. Выход из условного цикла при помощи иной конструкции (ex.: "if ... then break", "goto") называется неявным, и, на мой взляд, выглядит несимпатично.
Я, по работе, имею дело с большим количеством бумаги. Но даже мне становится жутко от трассировки, если t достигнет 100 и более. :D
Мне Pascal нравиться за то, что при соблюдении определённых правил написания, исходный текст программы имеет чёткую структуру и легко читается(на С быстрее писать, но читать хуже). При работе в команде это очень важно.
При решении задачи тоже.
Пора открывать новую тему - про "GOTO".