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


Страницы: (5) « Первая ... 2 3 [4] 5  все  ( Перейти к последнему сообщению )  
> Помогите построить график
    Цитата
    Error: Duplicate identifier "I"
    Компилятор сообщает где ошибки и что они означают. Следуй его указаниям. Читай документацию, справочники.

    РеГисТР бУКв в Паскале не имеет значения. I и i - одинаковые идентификаторы.

    ExpandedWrap disabled
          Var I:   LongInt;
              i,t:   real;
    Здесь 2 ошибки. Одна: повторение имён идентификаторов переменных. Вторая: повторение имён идентификаторов с именем функции I(t). Кроме i можно и нужно использовать другие имена. ;)

    Приведёнными мною набросками построения функции так и не воспользовалась. Ну и ладно. Помучаешься со своим (если свой) кодом, может, поймёшь разницу. 8-)

    Добавлено
    Вдобавок:
    не пользуйся чужими наработками, если в них ничего не понимаешь. Больше времени потратишь впустую, чем пользы получишь от самостоятельного обучения.
      Цитата Romtek @
      Приведёнными мною набросками построения функции так и не воспользовалась.

      так Вы мне скажите, в ТУРБО паскале они будут действовать???
        Если изменить
        Result :=
        на
        FunctionName :=
        то да. Изменения, как видишь, минимальные.
          Цитата Prutvel @
          в ТУРБО паскале они будут действовать???

          Большая часть из того, что здесь написана будет работать и в Турбо Паскале (когда исправишь ошибки, на которые тебе уже указали и на которые указывает компилятор, разумеется). Но если тебе надо Турбо - ты так и говори, а то мечешься, как... <самоцензура>, то ей Лазарус, потом FPC, теперь TP подавай... На кой черт в Лазарусе, скажем, рисовать это все в ручную, кто-нибудь объяснит мне? Компонента Chart что, не существует? Добавить несколько линий с определенным периодом - вот тебе и график функции. Ты для себя сначала реши, что тебе надо, запутать всех постоянным изменением компиляторов, или выбрать что-то дно, и написать, наконец, работоспособный код... А то развели флуда на 50 сообщений. "Это правильно? А это - правильно?" Программа может быть признана правильной только тогда, когда она компилируется, запускается и делает то, что от нее требуется. Твоя программа не прошла ни один из этапов.

          А если прошла - то покажи в нормальном виде : заархивируй и прикрепи архив к сообщению (специально добавили кнопку "Обзор" прямо в форму быстрого ответа) тот код, который у тебя компилируется, а не тот бред, который ты пишешь постоянно - то лишние буквы, то повторяющиеся идентификаторы, то вообще запрещенные символы в исходнике. Чтоб БЕЗ ИЗМЕНЕНИЙ (открыл присоединенный файл, нажал F9. Я больше ничего делать не хочу. Это твое задание, ты его и решай, я могу только посмотреть, правильно ли оно работает) он прошел хотя бы этап компиляции и программа хоть как-то запустилась. Потом будем продолжать. Не скомпилировался? Извини, здесь не онлайн Pascal Compiler, тебе программа пишет где ошибка - будь добра разобраться, что не так, и исправить. А пока нет такого кода - говорить больше не о чем.
            вот этот компилируется в турбо:

            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;

            begin

            end.
              вот программа. Она почти работает. Но компиллятор выводит сразу 4 ошибки на одно выражение - function PixelCoordT(t: Double): Integer; что делать?)
              Прикреплённый файлПрикреплённый файлплавл_вариант.rar (0.7 Кбайт, скачиваний: 167)
                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;
                var k,N:integer;DataTmax,DataTmin, DataImax,DataImin: real;
                t,i1: array[0..300] of real;
                begin
                DataTmax:=t[0];
                DataTmin:=t[0];
                for k:=1 to N do
                begin
                if t[k]>DataTmax then DataTmax:=t[k];
                if t[k]<DataTmin then DataTmin:=t[k];
                end;
                DataImax:=i1[0];
                DataImin:=i1[0];
                for k:=1 to N do
                begin
                if i1[k]>DataImax then DataImax:=i1[k];
                if i1[k]<DataImin then DataImin:=i1[k];
                end;

                function PixelCoordT(t:double): Integer;
                begin
                (* прибавляем половину ширины холста, чтобы центр осей был в центре экрана *)
                i := Round( CanvasWidth / 2.0 + t * Kt)
                end;
                function PixelCoordI (i: Double): Integer;
                begin
                (* вычитаем из половины высоты холста, иначе график будет перевёрнутым*)
                i := Round( CanvasHeight / 2.0 - f(t) * Ki)
                end;
                begin
                end
                  Prutvel
                  Извините, но Вы совершенно НЕ читаете того, что Вам пишут. Еще раз перечитайте посты Romtek'a и volvo877.
                  Внимательно!
                  Ну, не будет работать Ваш код, "отрисовывающий графику". Нигде. Ни в Лазарусе, ни в FP, ни в TP.
                    Цитата Prutvel @
                    Она почти работает.


                    хоть немного код структурируйте
                    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;
                       
                       
                      var
                        k,
                        N:integer;
                        DataTmax,
                        DataTmin,
                        DataImax,
                        DataImin: real;
                        t,
                        i1: array[0..300] of real;
                       
                      begin
                       
                        DataTmax:=t[0];
                        DataTmin:=t[0];
                       
                        for k:=1 to N do
                          begin
                            if t[k]>DataTmax then DataTmax:=t[k];
                            if t[k]<DataTmin then DataTmin:=t[k];
                          end;
                       
                       
                        DataImax:=i1[0];
                        DataImin:=i1[0];
                        for k:=1 to N do
                          begin
                            if i1[k]>DataImax then DataImax:=i1[k];
                            if i1[k]<DataImin then DataImin:=i1[k];
                          end;
                       
                       
                       function PixelCoordT(t: Double): Integer;
                       begin
                            (*  ЇаЁЎ ў«пҐ¬ Ї®«®ўЁ­г иЁаЁ­л е®«бв , зв®Ўл 業ва ®бҐ© Ўл« ў 業вॠнЄа ­  *)
                            i := Round( CanvasWidth / 2.0 + t * Kt)
                       end;
                       
                      function PixelCoordI (i: Double): Integer;
                      begin
                          (*  ўлзЁв Ґ¬ Ё§ Ї®«®ўЁ­л ўлб®вл е®«бв , Ё­ зҐ Ја дЁЄ Ўг¤Ґв ЇҐаҐўса­гвл¬*)
                          i := Round( CanvasHeight / 2.0 - f(t) * Ki)
                      end;
                       
                      begin
                       
                      end.

                    почему PixelCoordT и PixelCoordI оказались внутри основного блока программы и зачем последний begin?

                    Вас уже просили привести полный код - этот обрезок

                    Цитата Оззя @
                    не будет работать
                      ну помогите!!! пожалуйста, кто-нибудь, напишите работоспособный код. Я уже третью неделю и днем и ночью сижу :'( уже всю тетрадь исписала. помогите, пожалуйста!!!!! :'(
                        Прочти заново предыдущую страницу темы и попытайся написать сама, добавляя функциональность по малу.
                        Суп ведь также варится, поочерёдно добавляя продукты.
                          вы мне сказали, что через trunc надо функцию задавать. Паскаль не строит такой график - выводит координатную ось, и фиолетовый экран :wall: :wall: ПОМОГИТЕ!!!!!
                            Цитата
                            выводит координатную ось, и фиолетовый экран

                            Кто выводит? Где выводит?
                            :blink:
                            Предыдущая Ваша программа не должна НИЧЕГО выводить. В принципе. А новой версии Вы не предоставляете. <_<
                            А уроки телепатии я в школе прогуливал. :blink:
                              Спасибо большое ВСЕМ, кто принял участие в моем вопросе! График тока вроде бы получился. Не могли бы вы подсказать, как точки этого графика перекинуть в эксель?
                                Да и еще - если не затруднит, подскажите, пожалуйста, как лучше дифференцирование в паскале сделать: надо напряжение через ток найти:

                                U=L*(dI/dt)

                                я вот думала по точкам, а как их задавать-то - то есть прямо массив делать типа
                                for k:=1 to N do

                                U(k):=L*I(t(k)-I(t(k)-dt)/dt)

                                как это правильно сделать?)
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:




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