На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Название темы должно быть информативным !
Прежде чем задать вопрос, воспользуйтесь Поиском. и проверьте в FAQ (ЧАВО) Паскаля
Чтобы получить вразумительный ответ, подробно опишите проблему: что надо сделать, что не получается и номер ошибки (если есть), которую выводит компилятор.
Для вставки кода ваших программ используйте, пожалуйста, кнопку СODE=pas или выпадающий список СODE для других языков (подсветка синтаксиса).
[!] Как правильно задавать вопросы | Руководство по языку B.Pascal 7 & Objects/LR | Borland Pascal. Руководство пользователя
Модераторы: volvo877
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> построение графиков
    Ну вот в принципе она. Вот как бы добавить сетку оцифрованную для строяшегося графика?
    ExpandedWrap disabled
      {$N+}
       
      Uses Graph,Crt;
       
      Type type_mayat=record {tip mayatnika}
       
            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; {Maytnik}
       
         dT,fT,g,b:real;{Shag po vremeni, Polnoe vremya, g, koef triniya}
       
         tmp_1:integer; {svobodnie peremennie}
       
         tmp_2,tmp_3,tmp_4,tmp_5:real;{svobodnie peremennie}
       
         Key:char;
       
         graphtmp2,graphtmp3:integer; {graficheskie peremenie}
       
       
       
      Procedure GraphOn; {vklyuchenie graphiki}
       
      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;{Otklu4enie graphiki}
       
      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);
       
                {vi4islenie sobstvennoi 4astoti}
       
           end;
       
      End;
       
       
       
      Procedure dvizh_mayat; {phizika mayatnika}
       
      Var
       
         costmp:double;
       
      Begin
       
           with main_mayat do
       
           begin
       
            a_old:=a_new;
       
            a_new:=a_begin*cos(w0*fT);{novii ugol mayatnika}
       
            if a_begin>0 then
       
            begin
       
                  costmp:=cos(a_begin)+(b*DlinaNiti*sqr(a_new-a_old))/(dT*MassaSharika*g);
       
                  {vi4islenie novogo cos ugla amplitudi}
       
                  if (costmp<>0) then
       
                    a_begin:=arctan(sqrt(1-sqr(costmp))/costmp);
       
                    {vi4islenie novoi amplitudi}
       
            end
       
            else a_begin:=0;
       
            fT:=fT+dT;
       
           end;
       
      End;
       
       
       
      Procedure ris_mayat; {risovanie mayatnika}
       
      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;
       
       
       
      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);
       
           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);
       
          repeat
       
              if(main_mayat.a_begin<>0)then
       
              begin
       
                dvizh_mayat;
       
                ris_mayat;
       
                delay(500);
       
       
                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.
      Arslan, вот так, например (см. аттач)

      Кроме этого (для удобства использования твоей программы) я бы тебе посоветовал сделать еще кое-что... Напиши маленькую функцию, которая будет запрашивать у пользователя число, и заносить его в переменную, но если он сразу нажмет Enter - то значение переменной не изменится... А сами tmp_1, tmp_2, ... опиши не как переменные, а как типизированные константы, и задай им некоторое значение по умолчанию...
      Прикреплённый файлПрикреплённый файлm_01.zip (1.69 Кбайт, скачиваний: 93)
        Спасибо volvo877. Я попытаюсь сделать так как ты сказал. Но по ходу могут возникнуть проблемы. Преподователь требует, чтобы на середине нити был якобы забитый гвоздь и когда нить доходит до "гвоздя", то траектория движения шарика естественно меняется относительно гвоздя... Вот это буде самым проблематичным вопросом в программе
        1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0697 ]   [ 14 queries used ]   [ Generated: 18.07.25, 00:51 GMT ]