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


Страницы: (5) 1 [2] 3 4 ... Последняя » все  ( Перейти к последнему сообщению )  
> Помогите построить график
    Воспользуйся такой функцией вместо MOD:
    ExpandedWrap disabled
      function FMod (a, b: Double): Double;
      begin
         Result := a - b * Trunc(a / b)
      end;
    Это аналог функции fmod() на С.
      С этим, кажется, разобралась - недаром ведь по заданию провежуток дан в мс, а не в с, значит, периоды тоже можно в мс делать, тогда они - целые...

      Но он пишет ошибку - когда я пишу присвоить значению функции такое-то значение: I(t):=Im. Почему он это пишет? Как исправить?
        Потому что на Паскале так не пишут. Для этого есть зарезервированное слово Result.
          Цитата Romtek @
          Воспользуйся такой функцией вместо MOD:
          ExpandedWrap disabled
            function FMod (a, b: Double): Double;
            begin
               Result := a - b * Trunc(a / b)
            end;
          Это аналог функции fmod() на С.

          ясно. А что такое a,b и trunc?
            Пардон, пишется имя функции, а не Result.

            Result только в Делфи или в FreePascal в режиме ObjFPC.

            Добавлено
            Цитата Prutvel @
            А что такое a,b и trunc?

            Trunc отсекает мантиссу вещественного числа.
            Trunc(-5.3) = -5
            Trunc(5.3) = 5

            Добавлено
            a, b - входные параметры для функции. Вроде бы как... :wacko:
            В чём, собственно, вопрос?
              Цитата Romtek @
              Пардон, пишется имя функции, а не Result.

              Так вот я и писала I(t):=Im, а он пишет ошибку... :oops:

              И я написала, как Вы сказали - посмотрите, пожалуйста, так?
              Прикреплённый файлПрикреплённый файлглянь.jpg (40.88 Кбайт, скачиваний: 434)
                Prutvel
                Копируйте текст программы из FPC. Edit -> Copy to Windows
                  function FMod (t,T3: double):double;
                  Const Im=0.57; L=0.1; tau=62; f1=5.37; f2=8.06; T1=186;T2=124; T3=310;

                  begin
                  if (t-T3*Trunc(t/T3))<tau then I(t):=Im;
                  if ((t-T3*Trunc(t/T3))>=tau) and ((t-T3*Trunc(t/T3))<T1) then I(t):=-Im;
                  if ((t-T3*Trunc(t/T3))>=T1) and ((t-T3*Trunc(t/T3))<(T1+tau)) then I(t):=Im;
                  if (t-T3*Trunc(t/T3))>=(T1+tau)) and ((t-T3*Trunc(t/T3))<T3) then I(t):=-Im;
                  end.
                    Цитата Prutvel @
                    Так вот я и писала I(t):=Im, а он пишет ошибку...
                    Я написал только про имя. Если передаём и параметр, то получаем рекурсивный вызов функции. Но так как можно только получить результат рекурсии, а не присвоить ему значени, то получаешь ошибку.

                    Убери параметр (t).
                      Так компилируется, насколько верно записано - не знаю.
                      ExpandedWrap disabled
                        function FMod (a, b: Double): Double;
                        begin
                           FMOD:= a - b * Trunc(a / b);
                        end;
                         
                        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;
                         
                        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;
                         
                        begin
                        end.
                        а как же мне тогда задавать интервалы? :blink:
                          Цитата Prutvel @
                          а как же мне тогда задавать интервалы?

                          Я подправил предыдущее сообщ. Проверьте.
                            пишет на последнем end ошибку Error while linking, подставляла readln, writeln - не помогает...
                              Это когда предыдущие скомпилированные и запущенные программы не были закрыты.

                              Если они закрыты, надо завершить их процессы в Task Manager.
                                а где это?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:




                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0711 ]   [ 16 queries used ]   [ Generated: 14.05.24, 01:50 GMT ]