Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2017, 23:36   #1
Екатерина70995
Новичок
Джуниор
 
Регистрация: 24.04.2017
Сообщений: 1
Смущение вычисление длительности фазы во временной реализации.

Добрый вечер! Помогите,пожалуйста,с программой.
Суть в том,что мне надо посчитать длительности фаз(в нижней и верхней полуплоскостях) и записать эти длительности в файлы (один для нижней полуплоскости,второй-для верхней).
Прикрепляю составленную программу.
Изначально у меня есть текстовый файл (textfile2.txt ) -результат работы другой моей программы. В этом файле записана временная реализация-зависимость x(t) (первый столбец-время, второй-значtние X) . Там видны фазы,но присутстсвуют и короткие-ненужные фазы.
Мне по заданию надо от них избавиться. Было решено это сделать последовательным усреднением. Как раз-таки начало прикрепленной программы-запись в массив a[]-отвечает за усреднение.
Результат усреднения я записываю в массив b[] и в файл textfile3.txt.(первый столбец-время,второй-значение X,как и прежде) Таким образом,ненужные фазы благополучно сгладились.На этом этапе работает всё нормально-проверяла отдельно.
И далее заново открываю файл textfile3.txt и начинаю перебирать значения одно за другим,сравнивая,смотрю произошло ли переключение и какое оно(верхнее или нижнее)и записываю начало,конец переключения и длительность его.
НО выводит какую-то ерунду. Длительность моих переключений явно больше единицы (я наглядно отслеживаю и могу измерить длительность, строя в гнуплоте данные из textfile3.txt) .а в файлы и в мемо выводится маленькое число. Не могу понять ,почему. В ЧЕМ ОШИБКА В ВЫДЕЛЕНИИ ФАЗ ИЛИ РАСЧЕТЕ ДЛИТЕЛЬНОСТИ?
Помогите,пожалуйста.
кажется,что какая-то маленькая ошибка,но не могу додуматься,какая.

вот код тела программы
Код:
begin
memo1.lines.clear ;
memo2.lines.clear ;
memo3.lines.clear ;
series2.clear;
t:=0;
tn:=0;        //будет начало переключения
tk:=0;         //будет конец переключения
L:=0;
R:=0;         //длительность переключения


AssignFile(rtxt, 'textfileR.txt'); //нижняя полуплоскость
rewrite(rtxt);

AssignFile(ltxt, 'textfileL.txt');   //верхняя полуплоскость
rewrite(ltxt);
 SetLength(a,2);
SetLength(a[0],1000000);
SetLength(a[1],1000000);
SetLength(b,2);
SetLength(b[0],1000000);
SetLength(b[1],1000000);
AssignFile(f, 'textfile2.txt');
reset(f);
AssignFile(ff, 'textfile3.txt');
Rewrite(ff);
i:=1;
 While not eof(f) do
 begin
 Read(f,a[0,i]) ;
    ReadLn(f,a[1,i]);
   Form1.chart2.serieslist[0].addxy(a[0,i],a[1,i],'',clblack);

 
  i:=i+1;
  end;

        closefile(f);
  j:=0;
  t:=0;
  

 for i:=500 to 103014 do begin
  k:=500;

    Srt:=a[0,i];
    Srx:=a[1,i];

    for jj:=1 to k do begin
      Srt:=Srt+a[0,i-jj]+a[0,i+jj];
      Srx:=Srx+a[1,i-jj]+a[1,i+jj];
    end;
    Srt:=Srt/(2*k+1);
    Srx:=Srx/(2*k+1);
    
  b[0,j]:= Srt;
  b[1,j]:= Srx;
  If  Srt>1025.13000000000 then break       ;
  Form1.chart2.serieslist[0].addxy(Srt,Srx,'',clred);
       Write(ff, Srt);
        Write(ff,' ');
        Writeln(ff,Srx);
        j:=j+1;
  end;
  memo1.lines.add ('end');
         closefile(ff);


reset(ff);

 Read(ff,b[0,1]) ;      //t
    ReadLn(ff,b[1,1]);   //x
Read(ff,b[0,2]) ;         //t
    ReadLn(ff,b[1,2]);   //x
    t:=b[0,1];
    t2:=b[0,2];
    x2:=b[1,1];
    x3:=b[1,2];
 j:=3;
 While not eof(ff) do  begin
   If  tk>1025.13000000000 then break;
   Read(ff,b[0,j]) ;   //t
    ReadLn(ff,b[1,j]);    //x
           x2:=x3;
         x3:=b[1,j];
         j:=j+1;
          If (x3>0) and (x2<0) then begin //произошло переключение НА нижнюю полуплоскость
        Read(ff,b[0,j]) ;   //t
    ReadLn(ff,b[1,j]);    //x
        tn:=b[0,j-1];
         x2:=x3;
           if (x3>0) and (x2>0) then begin
          x2:=x3;
             x3:=b[1,j];
            tk:=b[0,j];

             j:=j+1;
           end;
            L:=abs(tk-tn);

        append(ltxt);
        Write(ltxt, L);
        Writeln(ltxt,' ');
        memo2.lines.add (floattostr(L));

        end;
       
 If (x3<0) and (x2>0) then begin      //произошло переключение НА нихнюю полуплоскость
        Read(ff,b[0,j]) ;   //t
    ReadLn(ff,b[1,j]);    //x
        tn:=b[0,j-1];
         x2:=x3;
            If (x3<0) and (x2<0) then begin
             x2:=x3;
             x3:=b[1,j];
            tk:=b[0,j];


            j:=j+1;
            end;
             R:=abs(tk-tn);
           append(rtxt);
        Write(rtxt, R);
        Writeln(rtxt,' ');
        memo3.lines.add (floattostr(R));
                       end;
       


        end;

        closefile(rtxt) ;
        closefile(ltxt);
        end;
Вложения
Тип файла: rar Новая папка.rar (2.41 Мб, 8 просмотров)
Екатерина70995 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поднять VPN соединение, как в Cisco, 2 фазы Micher C# (си шарп) 3 22.08.2016 13:20
Смоделировать временной ряд railya2015 Помощь студентам 3 18.04.2015 22:01
программа временной задержки Natalie023 Помощь студентам 1 25.11.2013 21:16
Измерение длительности операции Hunter557 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 28.02.2011 09:00
Временной интервал MaRKer.nsk Общие вопросы C/C++ 2 03.11.2010 10:04