Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> комментарии к программе 
:(
    Опции темы
Murderer
Дата 14.5.2007, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 14.5.2007

Репутация: нет
Всего: нет



Помогите пожалуйста написать комменарии к программе, которая моделирует движение математического маятника
Код

{$N+}

Uses Graph,Crt;

Type type_mayat=record

      DlinaNiti:real;

      MassaNiti:real;

      MassaSharika:real;

      RadiusSharika:real;

      a_begin,a_new,a_old:real;

      J,w0:real;

     end;

Var

   p_menu:pointer;

   Var T, curr_t: Integer;

   main_mayat:type_mayat; 

   dT,fT,g,b:real;

   tmp_1:integer;

   tmp_2,tmp_3,tmp_4,tmp_5:real;

   Key:char;

   graphtmp2,graphtmp3:integer;



Procedure GraphOn; 

Var

   Gd,Gm,ErrorCode:integer;

Begin

     Gd:=detect;

     initgraph(Gd,Gm,'d:\pascal\bgi');


     ErrorCode:=GraphResult;

     if ErrorCode <> grOk then

     begin

      WriteLn('oshibka:');

      WriteLn(GraphErrorMsg(ErrorCode));

      Halt(1);

     end;

End;



Procedure GraphOff;

Begin

     CloseGraph;

End;



Procedure mayatnik(DlinaNiti_:integer;

  MassaNiti_,MassaSharika_,RadiusSharika_,a_begin_:real);

Begin

     with main_mayat do

     begin

      DlinaNiti:=DlinaNiti_;

      MassaNiti:=MassaNiti_;

      MassaSharika:=MassaSharika_;

      RadiusSharika:=RadiusSharika_;

      a_begin:=a_begin_;

      a_new:=a_begin_;

      J:=(1/3)*MassaNiti*sqr(DlinaNiti)+MassaSharika*(2/5*sqr(RadiusSharika)+

  sqr(DlinaNiti));

      w0:=sqrt(g*(MassaSharika*DlinaNiti+MassaNiti*DlinaNiti/2)/J);


     end;

End;



Procedure dvizh_mayat; 

Var

   costmp:double;

Begin

     with main_mayat do

     begin

      a_old:=a_new;

      a_new:=a_begin*cos(w0*fT);

      if a_begin>0 then

      begin

            costmp:=cos(a_begin)+(b*DlinaNiti*sqr(a_new-a_old))/(dT*MassaSharika*g);


            if (costmp<>0) then

              a_begin:=arctan(sqrt(1-sqr(costmp))/costmp);
              

      end

      else a_begin:=0;

      fT:=fT+dT;

     end;

End;



Procedure ris_mayat; 

Var

   xNow,yNow:real;

Begin

     with main_mayat do

     begin

      xNow:=graphtmp2+DlinaNiti*cos(a_new-pi/2);

      yNow:=21-DlinaNiti*sin(a_new-pi/2);

      setfillstyle(0,0);

      bar(graphtmp2-round(DlinaNiti+RadiusSharika),21,

  graphtmp2+round(DlinaNiti+RadiusSharika),21+round(DlinaNiti+RadiusSharika));

      setcolor(7);

      setlinestyle(0,0,3);

      line(graphtmp2,21,round(xNow),round(yNow));

      setlinestyle(0,0,1);

      setcolor(1);

      setfillstyle(1,1);

      fillellipse(round(xNow),round(yNow),

  round(RadiusSharika),round(RadiusSharika));

     end;

End;



var
  i: integer;
  s: string;
Begin

     GraphOFF;

     writeln('vvedite dlinu niti (recom. 250)');

     readln(tmp_1);

     writeln('vvedite massu niti (recom. 20)');

     readln(tmp_2);

     writeln('vvedite massu sharika (recom. 30)');

     readln(tmp_3);

     writeln('vvedite radis sharika (recom. 15)');

     readln(tmp_4);

     writeln('vvedite ugol otklonenia (recom. 0.5)');

     readln(tmp_5);

     writeln('vvedite shag po vremeni (recom. 0.1)');

     readln(dT);
     (*
     tmp_1 := 250;
     tmp_2 := 20;
     tmp_3 := 30;
     tmp_4 := 15;
     tmp_5 := 0.5;
     dT := 0.1;
     *)

     GraphOn;

     b:=0.1;

     fT:=0;

     Key:=#0;

     g:=9.8;

     GraphOn;

     graphtmp2:=round(getmaxx/2);

     graphtmp3:=round(getmaxx/3);

     cleardevice;

     mayatnik(tmp_1,tmp_2,tmp_3,tmp_4,tmp_5);

setcolor(15);

      setfillstyle(3,15);

      bar(graphtmp3,0,2*graphtmp3,20);

      line(graphtmp3,20,2*graphtmp3,20);

      settextstyle(smallfont, horizdir, 1);
      settextjustify(centertext, centertext);
      for i := 5 to 10 do begin
        setcolor(red);
        line(0, getmaxy - i*12,
             getmaxx - textwidth('000000'), getmaxy - i*12);
        str(((i - 5)*45):3, s);
        setcolor(white);
        outtextxy(getmaxx - textwidth(s) div 2, getmaxy - i*12, s);
      end;

      for i := 1 to 19 do begin
        setcolor(red);
        line(i*(getmaxx div 21), getmaxy - 48, i*(getmaxx div 21), getmaxy - 120);
        str(i*(getmaxx div 21), s);
        setcolor(white);
        outtextxy(i*(getmaxx div 21), getmaxy - 36, s);
      end;

    repeat

        if(main_mayat.a_begin<>0)then

        begin

          dvizh_mayat;

          ris_mayat;

          delay(500);
          { delay(25); }


          inc(T); if T = 5 then begin

            T := 0; inc(curr_t);

            putpixel(curr_t,

              (getmaxy - 240) + trunc(180 * cos(main_mayat.a_new)),

              white );

          end;


        end;

         if keypressed then key:=readkey;

     until (key=#27);

    GraphOff;

End.


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0564 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.