Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2011, 05:17   #1
Zarrok
Новичок
Джуниор
 
Регистрация: 21.12.2011
Сообщений: 1
Печаль Посадка на луну

Задача: посадить АЛС "Луна - 9" на... НА ЛУНУ!!! внезапно...))
Исходные данные:
масса аппарата - 300 кг.
горючего - 1500 кг(твёрдое)).
высота с которой начинается спуск - 7000м.
Начальная скорость - 20км\ч.
что хочу сделать:
Посадить посудину на поверхность луны. Критическая скорость снижения на высоте 10м = 20км\ч. И чтобы при скорости больше 20 км\ч врубались тормозные движки (которые жрут топливо), а при скорости меньше 20 - вырубались.
НЕ ПОЛУЧАЕТСЯ:
Пробовал присвоить h тип word - послало нахрен.
Пробовал вбить предусловие (цикл for h:=7000 downto 0 do: ) - пишет, что h могёт быть только real.
Не получается показать зависимость лунного притяжения от высоты (формула - детская, но... немогу никак в степень возвести. Пробовал писать 22 нуля после запятой, тобишь 27Е22, не проконало.)
Вот конечный результат ночных мучений:

Код:
 Program SsykaLyna;
var
v,m,z,h,a:real;
 begin
     writeln('Тяга? (0 - 100)');
      read(z);
v:=20; m:=1500; z:=0; h:=7000;   -исходные данные
while h>10 do

       writeln('Горючее  ',m:5:1,' кг, ','высота  ',h:5:1,' м, ','скорость  ',v:5:1,' м/сек');
       if v<20 then
       begin
       a:=1.62-z*0.045; m:=m-z*0.15; h:=h-(a*a)/2;    это режим свободного падения, если скорость меншье нужной
       end
       else 
       begin      а это вклучение тормозных движков
       a:=1.62-z*0.045; m:=m-z*0.15; h:=h-(v-a/2); v:=v+a;
       end;

       if v<=20 then
        writeln('Мягкая посадка!')  это условие, при котором посадка считается мягкой. Написал 20 км\ч.
            else
 begin
      writeln;
      writeln('Вы разбились!');
      end;
      end.
z-тяга двигателя (меняется в пределах 1-100, проценты от максимальной тяги).
h-высота
a-ускорение
1.6-g луны. На поверхности. f=g*((mЛуныmАЛС)/h+rЛуны^2)) - эту формулу не получается вбить из-за больших чисел m1m2 и r^2 и мать его g=const=6.67Е-11.


Изначально брал программу для пошаговой посадки.
Текаст:
Код:
Program ssykalynagame;
 uses crt;
var
  v,m,z,h,a:real;
  n:integer;

begin
  ClrScr;
  v:=8;m:=90;z:=0;h:=50;n:=0;
  writeln('Мягкая посадка':40);
  writeln(' Вы управляете Лунным модулем, ваша задача -');
  writeln(' тормозя, посадить модуль на поверхность Луны без аварии.');
  writeln(' Запас горючего ограничен');
  writeln('Поехали!':40);
repeat
   writeln;
   write('Горючее  ',m:5:1,' кг, ','высота  ',h:5:1,' м, ');
   write('скорость  ',v:5:1,' м/сек');
   if m>0 then   
   begin  writeln;
   writeln('Тяга? (0 - 100)');read(z);end
   else begin m:=0; z:=0; end;
   a:=1.62-z*0.045; m:=m-z*0.15; h:=h-v-a/2; v:=v+a; n:=n+1;
until h <1;
  readln;
  if v<=2 then
  writeln('Мягкая посадка!')
   else begin writeln;writeln('Вы разбились!');end;
 readln;
end.
Выручайте, спасибо.




___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 29.12.2011 в 08:52.
Zarrok вне форума Ответить с цитированием
Старый 29.12.2011, 08:51   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

оффтоп
ностальжи... вспоминается программируемый калькулятор MK-52, журнал "Техника-Молодёжи" и программа/статьи из этого журнала - "Посадка на Луну"

теперь по сути.
1) не понимаю, в чём у Вас сложность возникает..
2) так без понимания, просто "пальцем в небо" - попробуйте заменить тип real на тип Extended. Ну и мат.сопроцессор в опциях подключите, не помешает...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.12.2011, 10:00   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Код:
v:=20; m:=1500; z:=0; h:=7000;   -исходные данные
while h>10 do  begin 
  writeln('Горючее  ',m:5:1,' кг, ','высота  ',h:5:1,' м, ','скорость  ',v:5:1,' м/сек');
  if v<20 then begin//   это режим свободного падения, если скорость меншье нужной
    a:=1.62-z*0.045; 
    m:=m-z*0.15; 
    h:=h-(a*a)/2; 
    v:=v+a; //а то так и долетите до луны в свободном падении с малой скоростью
  end
  else begin   //   а это вклучение тормозных движков
z:=0; //c нулевым расходом топлива? 
    a:=1.62-z*0.045; 
    m:=m-z*0.15; 
    h:=h-(v-a/2); 
    v:=v+a;
  end;
end;
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц