Помощь - Поиск - Пользователи - Календарь
Полная версия: Имитация полета снаряда
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Vila
Надо построить модель полета снаряда с исходными данными скорость и угол стрельбы. Начальная высота нулевая. Графиков может быть несколько, причем ввод очередной двойки (скорость, угол) производится уже при нарисованых предыдущих графиках.
Заранее благодарна smile.gif
APAL
Надо бы вспомнить формулы...
Случайно не знаете? ;)
volvo
Vila
Вот тут была решена похожая задачка - только без графики... Формулы можно взять оттуда.
APAL
Я тут еще нашел:
http://www.examens.ru/otvet/11/9/814.html
volvo
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.

Rothmans
В программке меня беспокоят две вещи:
1) while true
2) until false

А товарищу APAL, дабы усложнить задачу поиска всяких ссылок, советую попробовать ввести в задачу ветер переменного направления и силы (во время полёта снаряда).

Кстати, есть отличный образчик программки со снарядами, визуализация отличная. Scorched Earth называется. Ходят слухи, что на паскале написана.
Кто-то, типа, даже исходники видел.

Я думаю, ноги этой задачки лежат в бурном Scorch-детстве препода. smile.gif
volvo
Цитата
В программке меня беспокоят две вещи: 1) while true 2) until false


Таким способом я заставляю программу выполняться до тех пор, пока не будут соблюдены нужные условия для выхода? По-Вашему, я должен эти условия всовывать в while и repeat ?

P.S. Почему, собственно, эти 2 вещи Вас беспокоят? Я вроде goto не использую... Напишите лучше ...
Vila
Спасибо Всем, сейчас координатные оси дорисую, и попробуем сдать...
Rothmans
Просто эстетствую smile.gif.
Неявное окончание условного цикла сродни GOTO.
Вообще-то, в данной задачке достаточно условий для того, чтобы построить квадратное уравнение.
t=2*(Vy/G)
x1=0
x2=t*Vx при y=0
ymax=t/2*Vy
Altair
Цитата
Неявное окончание условного цикла

ЧЕГО????
что значит неявное??
Условие или есть или его нет! Третьего не дано!
Всегда можно сделать трассировку на бумаге и сказать где будет конец цикла! :yes:
Rothmans
Конструкция "repeat until false" абсолютно равнозначна "label: goto label", только код ещё осложнён ненужным сравнением. Выход из условного цикла при помощи иной конструкции (ex.: "if ... then break", "goto") называется неявным, и, на мой взляд, выглядит несимпатично.
Я, по работе, имею дело с большим количеством бумаги. Но даже мне становится жутко от трассировки, если t достигнет 100 и более. :D
Altair
Цитата
и, на мой взляд, выглядит несимпатично.

В любом случае, они, в отличии GOTO разрешены!
Dark
Цитата
В любом случае, они, в отличии GOTO разрешены!


А что, кто то что то вообще запрещает??? =))) хм.... GOTO паскалем не запрещен, и программисту могут тока сказать что не красиво но вот запретить...
Rothmans
Мне Pascal нравиться за то, что при соблюдении определённых правил написания, исходный текст программы имеет чёткую структуру и легко читается(на С быстрее писать, но читать хуже). При работе в команде это очень важно.
При решении задачи тоже.
Пора открывать новую тему - про "GOTO". smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.