На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
В этом разделе можно создавать темы, которые относятся к поколению 32-битных компиляторов.
Здесь решаются вопросы портирования кода из старого доброго Турбо Паскаля в FPC, TMT, VP, GPC компиляторы, а также особенностей программирования на них для Windows/Linux и других ОС.
Указывайте тип компилятора, его версию, а также платформу (Windows/Linux/..) компиляции, другими словами, Target.
Модераторы: volvo877


Страницы: (5) [1] 2 3 ... Последняя » все  ( Перейти к последнему сообщению )  
> Помогите построить график
    помогите построить график на любом языке программирования для функции (см. прикрепленный файл - там уже график есть - в маткаде получила, надо такой же на паскале или в др. среде получить):

    то есть даны промежутки и два значения Im=5.3 и Im=-5.37.

    Я пыталась построить - нашла пример для лазуруса и набрала, но он чего-то не хочет работать.

    Ну хоть схемку накидайте или саму программку, плиззз.
    Прикреплённый файлПрикреплённый файлзадание_функции.jpg (26.45 Кбайт, скачиваний: 534)
      Цитата Prutvel @
      Я пыталась построить - нашла пример для лазуруса и набрала, но он чего-то не хочет работать.
      То есть, присоединить сюда проект для Лазаруса, который ты уже набрала - нельзя было, мы должны сделать ту же работу, с нуля набирать, тестировать, вместо того, чтобы (возможно) исправить один символ... Ну-ну... Подождем, может и найдется тот, у кого лишнего времени навалом...
        посмотрите, пожалуйста:


        ExpandedWrap disabled
          unit Unit1;
          interfaceace
          uses Classes,SysUtils,LResources,Forms,Graphics,Dialogs,Extctrls,Stdctrls;
          function I(t:real):real;
          procedure Graphica (a,b:real);
          type
          TForm1=class(TForm);
          Button1: TButton;
          Image1: TImage;
          procedure ButtonClick(Sender:TObject);
          procedure FormCreate(Sender:TObject);
          private
          public
          end;
          const Im=0.57,tau=0.062; L=0.1; f1=5.37; f2=8.06;
          var Form1: TForm1;
              t0,y0,tk,yk,a,b:real;
              t,y:array[0..1000] of real;
              u,v:array [0..1000] of integer;
              N:integer;
              implementation
              functiion I(t:real):real;
              begin
              T1:=1/f1; T2:=1/f2; T:=T1+T2;
              if mod(t,T)<tau then Result:=Im;
              if (mod(t,T)>=tau) and (mod(t,T)<T1) then Result:=-Im;
              if (mod(t,T)>=T1) and (mod(t,T)<(T1+tau)) then Result:=Im;
              if (mod(t,T)>=(T1+tau)
              and (mod(t,T)<T) then Result:=-Im;
              end;
              procedure Graphica(a,b:real);
              const kt=5;ky=5;
              var
              dt,dy,c,d,g,h,max,min:real;
              i,tempt,tempy:integer;
              s:string;
              begin
              h:=(b-a)/(N-1);
              t[0]:=a;y[0]:=I(t[0]);
              for i:=1 to N do
              begin
              t[i]:=t[i-1]+h;
              y[i]:=I(t[i]);
              end;
              max:=y[0]; min:=y[0];
              for i:=1 to N do
              begin
              if y[i]>max then max:=y[i];
              if y[i]<min then min:=y[i];
              end;
              c:=(Form1.Image1.ClientWidth-t0-tk)/(b-a);
              d:=t0-c*t[0];
              g:=(Form1.Image1.ClientHeight-y0-yk)/(min-max);
              h:=yk-g*max;
              for i:=1 to N do
               begin
               u[i]:=trunc(c*x[i]+d);
               v[i]:=trunc(g*y[i]+h);
               end;
               Form1.Image1.Canvas.Color:=clGray;
                Form1.Image1.Canvas.Pen.Mode:=pmNot;
                 Form1.Image1.Canvas.MoveTo(u[0],v[0]);
                 Form1.Image1.Canvas.Pen.Width:=2;
                 Form1.Image1.Canvas.Pen.Color:=clGreen;
              for i:=1 to N do
               Form1.Image1.Canvas.LineTo(u[i],v[i]);
              Form1.Image1.Canvas.Pen.Width:=1;
              Form1.Image1.Canvas.Pen.Color:=clBlack
              Form1.Image1.Canvas.MoveTo(trunc(t0),trunc(h));
              if (trunc(h)>yk) and (trunc(h)<trunc(Form1.Image.ClientHeight-y0)) then
              Form1.Image1.Canvas.LineTo(trunc(Form1.Image1.ClientWidth-tk),trunc(h));
               Form1.Image1.Canvas.MoveTo(trunc(d),trunc(yk));
               if (trunc(d)>0)
               and (trunc (trunc(d),trunc(Form1.Im
               ag1.ClientHeight-y0));
               dt:=(Form1.Im
               age1.ClientWidth-t0-tk)/KT3;
               for i:=0 to KT3 do
               begin
               if (i=0) or (i=KT3) then
               Form1.Image1.‘anvas.Pen.Style:=psSolid else
               Ferm1.Image1.Canvas.Pen.Style:=psDash;
               Form1.Image1.Canvas.MoveTo(trunc(t0+i*dt),trunc(yk));
                Form1.Image1.Canvas.LineTo(trunc(t0+i*dt),trunc(Form1.Image1.ClientHeight-y0));
                end;
                dy:=(Form1.Image1.ClientHeight-y0-yk)/KY;
                for i:=0 to KY do
           
                begin
                if (i=0) or (i=KY) then
                 Form1.Image1.‘anvas.Pen.Style:=psSolid else
                 Form1.Image1.‘anvas.Pen.Style:=psDash;
                  Form1.Image1.‘anvas.MoveTo(trunc(t0),trunc(yk+i*dy));
                  Form1.Image1.‘anvas.LineTo(trunc(Form1.Image1.ClientWidth-tk),trunc(yk+i*dy));end;
                   Form1.Image1.‘anvas.Pen.Style:=psSolid;
                   dt:=(b-a)/KT3;
                   tempy:=trunc(Form1.Image1.ClientHeight-y0+1);
                   for i:=0 to KT3 do
                   begin
                   str(a+i*dt:5:2,s);
                   tmpt:=trunc(t0+i*(Form1.Image1.ClientWidtg-t0-tk)/KT3-1;
                    Form1.Image1.‘anvas.TextOut(trunc(d)-5,tempy,'0');
                    dy:=(max-min)/KY;
                    tempt:=5;
                    for i:=1 to KY do
                    begin
                    str(ma
                    x-i*dy:5:2,s);
                    tempy:=trunc(yk-5+i*( Form1.Image1.ClientHeight-y0-yk)/KY);
                     Form1.Image1.‘anvas.TextOut(tempt,tempy,s);end;
                     if (trunc(h)>yk) and trunc(h)<Form1.Image1.ClientHeight-1) then
                      Form1.Image1.‘anvas.TextOut(tempt+1,trunc(h)-5,'0');
                      tempt:=trunc(t0+i*( Form1.Image1.ClientWidth-t0-tk)/2);
                       Form1.Image1.‘anvas.TextOut(temp1,'График');end;
                       procedure TForm1.FormCreate(Sender:TObject);
                       var s:string;
                       kod:integer;
                       begin
                       N:=300,t0:=40;y0:=40;tk:=40; yk:=40;
                       s:=InputBox('введите левую границу',-1);
                       val(s,a,kod=0;
                       until kod=0 repeat s:=InputBox('Введите правую границу','1')
                       val(s,b,kod)
                       until kod=0; end;
                       procedure TForm1.ButtonClick(Sender:YObject);
                       begin
                       Graphica(a,b);
                       end;
                       Initialization;
                       end.
        Сообщение отредактировано: volvo877 -
          Цитата Prutvel @
          посмотрите, пожалуйста:


          Это не проект. Это один модуль. А вас просили весь проект присоединить.
            В приведённом коде будто нарочно сделаны опечатки, которые видны невооружённым глазом. Проект, скорее всего, чужой.

            Добавлено
            Операция mod действует только на целых числах.
              Цитата Romtek @
              В приведённом коде будто нарочно сделаны опечатки,
              Добавлено

              а не подскажете конкретно - где.
                Цитата Prutvel @
                а не подскажете конкретно - где.

                Начиная со 2-й строки... :wacko:
                Далее смотреть лень.
                И незачем, я думаю... Проект вы не прикладываете, выложив какую-то мешанину. О чем с вами разговаривать? :blink:
                  если Вы знаете, как это делать, написали бы хотя бы алгоритм или примерчик какой-нибудь сбросили бы... пожалуйста :'(
                    Цитата Prutvel @
                    написали бы хотя бы алгоритм

                    Так вот как раз алгоритм хотелось бы от вас увидеть. А помочь с программой можно.
                      Цитата Prutvel @
                      а не подскажете конкретно - где.
                      Да, пожалуйста!

                      1.
                      Цитата Prutvel @
                      interfaceace

                      2.
                      Цитата Prutvel @
                      functiion I(t:real): real;

                      3.
                      Цитата Prutvel @
                      Form1.Image1.anvas.Pen.Style:=psSolid else
                      Ferm1.Image1.Canvas.Pen.Style:=psDash;


                      Добавлено
                      Prutvel, прости, а ты синтаксис Паскаля знаешь? Сложилось впечатление, что вовсе нет.

                      Добавлено
                      Цитата Prutvel @

                      ExpandedWrap disabled
                            functiion I(t:real):real;
                            begin
                            T1:=1/f1; T2:=1/f2; T:=T1+T2;
                            if mod(t,T)<tau then Result:=Im;
                            if (mod(t,T)>=tau) and (mod(t,T)<T1) then Result:=-Im;
                            if (mod(t,T)>=T1) and (mod(t,T)<(T1+tau)) then Result:=Im;
                            if (mod(t,T)>=(T1+tau)
                            and (mod(t,T)<T) then Result:=-Im;
                            end;
                      Такую чушь может написать только человек, ничего не понимающий в Паскале. За Делфи даже и речи нет.
                      Начиная от синтасиса и заканчивая знанием базовых понятий.
                      Цитата Prutvel @

                      ExpandedWrap disabled
                                     N:=300,t0:=40;y0:=40;tk:=40; yk:=40;
                                     s:=InputBox('введите левую границу',-1);
                                     val(s,a,kod=0;
                        Цитата Оззя @
                        Цитата Prutvel @
                        написали бы хотя бы алгоритм

                        Так вот как раз алгоритм хотелось бы от вас увидеть. А помочь с программой можно.

                        Дело в том, что по заданию, надо сделать численный расчет напряжения на катушке идуктивности в цепи переменного тока прямоугольной формы, где L=0.1 Гн - индуктивность, Im=0.57 А - амплитуда тока, tau=62 мс - длительность импульса. Частота на четных периодах f1=5.37 Гц, на нечетных периодах f2=8.06 Гц. Периоды T1 и T2 равны.

                        Я сделала это в маткаде, получилось, что сам график-то задается как система: то есть функция I(t) принимает вообще говоря 2 значения, это Im и
                        -Im, но при разных промежутках времени, то есть получается так:

                        Im if mod(t,T)<tau
                        -Im if (mod(t,T)>=tau) and (mod(t,T)<T1)
                        I(t):= Im if (mod(t,T)>=T1) and (mod(t,T)<T1+tau)
                        -Im if (mod(t,T)>=T1+tau) and (mod(t,T)<T)
                        Так мы задали в маткаде этот ток, а потом приняли, что i:=0..300, dt:=T/100, t1:=i*dt;

                        И, следовательно, получили отсюда график по точкам: написали Ii(ti), то есть получили точки.

                        Так вот, то есть у меня есть точки...А дальше - надо построить такой же график на языке высокого уровня :oops: ... Помогите, пожалуйста..., очень надо :(
                          Напиши функцию I(t), которая на входу получала бы необходимые параметры, а на выходе - некоторое значение. С графикой поможем.
                          Только функция должна быть правильной и компилироваться!
                            Цитата Romtek @
                            Напиши функцию I(t), которая на входу получала бы необходимые параметры, а на выходе - некоторое значение. С графикой поможем.
                            Только функция должна быть правильной и компилироваться!

                            Спасибо, сейчас попробую.
                              У меня, почему-то, пишет ошибки :'(

                              Я с функциями во фри паскале не работала раньше... Подскажите, что не так, пожалуйста.
                              Прикреплённый файлПрикреплённый файлфри_паскаль.jpg (81 Кбайт, скачиваний: 485)
                                Что делает mod в Маткаде?
                                Лучше прикладывайте не скриншот, а текст программы.

                                Добавлено
                                Заметьте, что:
                                Цитата Romtek @
                                Операция mod действует только на целых числах.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:




                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0463 ]   [ 16 queries used ]   [ Generated: 13.05.24, 22:29 GMT ]