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


Страницы: (5) 1 2 [3] 4 5  все  ( Перейти к последнему сообщению )  
> Помогите построить график
    Диспетчер задач -> ctrl alt delete
      нет, что-то он все равно эту ошибку выводит :unsure:

      ...
      ну ладно, спасибо вам все равно большое... Ну предположим, ошибки нет и программа компилируется. Что делать дальше, как строить графики?
        Цитата Prutvel @
        Ну предположим,
        А дальше, предположим, что графики ты сама умеешь строить.
        Продвигаться дальше будем?
          ;) ладно. Начинать надо с этого?

          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
            Перенёс сообщение в Wiki: Построение графика функции.
            Сообщение отредактировано: Romtek -
              спасибо, сейчас попробую...

              Добавлено
              Цитата Romtek @
              Набросок порядка действий такой:

              Пусть график вида y = f(x) должен размещаться на поверхности холста с размерами CanvasWidth на CanvasHeight.

              Тогда перед его построением надо:

              1. Определить граничные значения входных параметров (ось X): DataXmax, DataXmin.

              2. Определить граничные значения выходных параметров (ось Y): DataYmax, DataYmin.

              3. Найти коэффициент масштабирования данных для оси X
              по формуле: Kx = CanvasWidth / (DataXmax - DataXmin)

              4. Найти коэффициент масштабирования данных для оси Y
              по формуле: Ky = CanvasHeight / (DataYmax - DataYmin)


              WHILE x < DataXmax DO
              BEGIN
              y := f(x);

              px := PixelCoordX(x);
              py := PixelCoordX(y);

              LineTo(px, py); (* проводим линию до заданной точки от установленного ранее курсора (процедурами MoveTo/LineTo) *)

              x := x + deltaX
              END;[/CODE]

              а как их найти? :unsure:
                а так полагаю

                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;
                  Цитата Prutvel @
                  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;

                  только границы надо соблюдать. Или от 1 до N, или от 0 до N-1. Иначе будет ошибка.
                    Function i(t:Double): Double;
                    скажите пожалуйста, так правильно?

                    Const
                    Im=0.57; L=0.1; tau=62; f1=5.37; f2=8.06; T1=186;T2=124; T3=310;

                    var t,I:array[0..1000] of real;

                    begin

                    if fmod(t,T3)<tau then
                    i:=Im;
                    if (fmod(t,T3)>=tau) and (fmod(t,T3)<T1) then
                    I:=-Im;
                    if (fmod(t,T3)>=T1) and (fmod(t,T3)<(T1+tau)) then
                    I:=Im;
                    if (fmod(t,T3)>=T1+tau) and (fmod(t,T3)<T3) then
                    I:=-Im;
                    end;

                    max:=i[0]; min:=i[0];
                    for k:=1 to N do
                    begin
                    if i[k]>max then max:=y[k];
                    if i[k]<min then min:=y[k];
                    end;
                      Не стоит спрашивать по каждой мелочи.
                      Компилятор сам подсказывает где верно, а где нет.

                      Нужно на бумаге сначала свои мысли привести в порядок, тогда и на экране всё будет работать.

                      Удачи!
                        вы же обещали мне помочь с графикой...пожалуйста, помогите...
                          Я и помогаю. Или мне за тебя сделать задание?
                          С чем не справляешься - спрашивай.
                          Тут больше геометрии с математикой, чем программирования.
                            Спасибо Вам большое! А не подскажете, Вы в каком паскале загружали программу Free или Turbo: почему-то у меня на компьютере не запускаются программы вообще - пишет ошибку error while linking, причем даже на правильно написанную программу. Я так подумала, он ведь ни одну программу мне вообще не запустил с того времени, как я его (Free Pascal) установила. В чем дело, не подскажете?
                              Цитата Prutvel @
                              В чем дело, не подскажете?
                              Подскажем. Только для начала ты зайди в Options -> Compiler -> Verbose, поставь там крестики на Warnings, Notes, Hints и General Info, нажми Ok, пересобери программу (Compile -> Build или Compile -> Make), и если опять не слинкуется - то нажми на F12 и покажи нам все те сообщения, которые тебе выдал компилятор. Иногда в них содержится подсказка, почему не линкуется.

                              Кстати, какой компилятор у тебя? Версия, в смысле, какая?
                                я написала программу. Пожалуйста, помогите ее довести до ума, чтобы паскаль не выводил ошибок:

                                program r6;
                                Uses graph;
                                Const GlColor=5; MtCount=5; MiCount=5; Dl:real=-2; Dr:Real=2;
                                function FMod (a, b: real): real;
                                begin
                                FMOD:= a - b * Trunc(a / b);
                                end;
                                function i(t:real): real;
                                Const Im=0.57; L=0.1; tau=62; f1=5.37; f2=8.06; T1=186;T2=124; T3=310;
                                begin
                                if fmod(t,T3)<tau then
                                i:=Im;
                                if (fmod(t,T3)>=tau) and (fmod(t,T3)<T1) then
                                I:=-Im;
                                if (fmod(t,T3)>=T1) and (fmod(t,T3)<(T1+tau)) then
                                I:=Im;
                                if (fmod(t,T3)>=T1+tau) and (fmod(t,T3)<T3) then
                                I:=-Im;
                                end;
                                Var D,R:integer;
                                iU,iD:real;
                                begin
                                Procedure CalciRange;
                                Var I:LongInt;
                                i,t:real;
                                Begin
                                iU:=f(Dl);
                                iD:=iU;
                                for k:=1 to GetMaxt
                                begin
                                t:=k*(Dr-Dl)/GetMaxt+Dl;
                                i:=f(t);
                                if iU<i then
                                iU:=i;
                                if iD>i then
                                iD:=i;
                                end;
                                end;
                                Procedure DrawKoord;
                                var I:integer;
                                t,i:integer;
                                temp:string;
                                Maxt,Maxi:integer;
                                begin
                                Maxt:=MtCount-1;
                                Maxi:=MiCount-1;
                                if (iU>0) and (iD<0) then
                                begin
                                i:=round(GetMaxi-GetMaxi*(-iD)/(iU-iD));
                                Line (0,i,GetMaxt,i);
                                Line (GetMaxt-5,i-5,GetMaxt,i);
                                Line (GetMaxt-5,i+5,GetMaxt,i);
                                OutTextti(GetMaxt-10,i+10,'t');
                                i:=i+TextHeight('t');
                                end else
                                if (iU>0) then i:=GetMaxi-TextHeight('1')
                                else i:=0;
                                for k:=0 to Maxt do
                                begin
                                str((k*(Dr-Dl)/Maxt+Dl):5:2,Temp);
                                t:=Round (k*GetMaxt/Maxt);
                                if (t+TextWidth(Temp)>GetMaxt) then
                                x:=GetMaxt-TextWidth(Temp);
                                OutTextti(t,i,Temp);
                                end;
                                if (Dl<=0) and (Dr>0) then
                                begin
                                t:=Round(GetMaxt*(-Dl/(Dr-Dl)));
                                Line(t,0,t,GetMaxi);
                                Line(t-5,5,t,0);
                                Line(t+5,5,t,0);
                                OutTextti(t+10,10,'i');
                                end else
                                if (Dl<0) then
                                begin
                                if (Abs(iU)>Abs(iD)) then
                                str(iU:5:2,Temp) else str (iD:5:2,Temp);
                                t:=GetMaxt-TextWidth(Temp);
                                end else
                                t:=0;
                                for k:=0 to Maxi do
                                begin
                                str((k*(iU-iD)/Maxi+iD):5:2,Temp);
                                i:=GetMaxi-Round(k*GetMaxi/Maxi);
                                if (i+TextHeight(Temp)>GetMaxi) then
                                i:=GetMaxi-TextHeight(Temp);
                                OutTextti(t,i,Temp);
                                end;
                                end;
                                Procedure DrawGr;
                                var I,i:LongInt;
                                Temp:Real;
                                Ot,Oi:Integeer;
                                begin
                                Ot:=1;
                                Temp:=func((Dr-Dl)/GetMaxt+Dl)-iD;
                                i:=Round(Temp*GetMaxi/(iU-iD));
                                Oi:=GetMaxi-i;
                                SetColor(GlColor);
                                for k:=1 to GetMaxt do
                                begin
                                Temp:=Func(k*(Dr-Dl)/GetMaxt+Dl)-iD;
                                i:=Round(Temp*GetMaxi/(iU-iD));
                                i:=GetMaxi-i;
                                Line(Ot,Oi,k,i);
                                Ot:=k;
                                Oi:=i;
                                end;
                                end;
                                begin
                                D:=Detect;
                                InitGraph(D,R,'D:\BP\BGI');
                                CalciRange;
                                DrawKoord;
                                DrawGr;
                                Readln;
                                CloseGraph;
                                end.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (5) 1 2 [3] 4 5  все




                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0337 ]   [ 15 queries used ]   [ Generated: 18.07.25, 01:17 GMT ]