Земля планета              Об авторе сайта                                                             Статистика, картография и ГИС!


             Комментарии
         
Главная
           Кларки
           
НормаИБаллы


Программа
*Процедура altpdrnk для программы ГЕОКЛАСС. Предназначена для расчета
*рангов по записям, в полях которых имеются какие-либо коэффициенты.
*у полей коэффициентов окончания названий "_K"
*Создается дополнительный файл c дополнением полей имеющих
*окончания названий "_R" и поля "T_tau"
*с заменой последних двух букв в названии файла  на Rn.
*KLARKY - передается в подпрограммы RAC_RN4k и rac_rn3k для
*ранжирования с округлением соседних коэффициентов, typus = 0 Ранги по КК
*typus # 0 Ранги по нормировке и баллам
*Автор алгоритмов и программы В.Д.Брусницын

PROCEDURE altpdrnk
PARAMETER KLARKY, typus
CLEAR
IF ALLTRIM(DBF(1))==""
DEFINE POPUP obj_fil PROMPT FILES LIKE *.DBF;
   MESSAGE "ВЫБРАТЬ ФАЙЛ ДЛЯ РАСЧЕТА РАНГОВ";
   TITLE "ВЫБРАТЬ ФАЙЛ ДЛЯ РАСЧЕТА РАНГОВ"
ON SELECTION POPUP obj_fil DEACTIVATE POPUP obj_fil
ACTIVATE POPUP obj_fil
SELECT 1
USE PROMPT() NOUPDATE
ENDIF
SELECT 1
vorname = DBF(1)
vorname = SUBSTR(vorname,1,LEN(vorname)-6)
imia = "Rn"
viv_file =vorname+ALLTRIM(imia)+'.dbf'
COPY TO &viv_file AS 1251
USE &viv_file
BEG = FST_EL("_K")
N_EL = N_EL("_K")
konec = BEG+N_EL-1
FOR i = BEG TO konec
   pii = FIELD(i)
   pii1 = STRTRAN(UPPER(pii),"_K","_R")
   ALTER TABLE &viv_file ADD COLUMN &pii1 N(6,2)
ENDFOR
ALTER TABLE &viv_file ADD COLUMN "T_tau" N(10,2)
IF typus = 0
   =RAC_RN4k(KLARKY)
ELSE
   =rac_rn3k(KLARKY)
ENDIF
CLOSE ALL

*Процедура rac_rn3k для программы ГЕОКЛАСС. Предназначена для расчета
*рангов по записям для расчета коэффициента Кендала и Спирмена.
*Ранги по нормировке и баллам, в полях которых имеются
*коэффициенты у полей коэффициентов окончания названий "_K"
*KLARKY - передается из подпрограммы altpdrnk для
*ранжирования с округлением соседних коэффициентов
*Автор алгоритмов и программы В.Д.Брусницын

PROCEDURE rac_rn3k
PARAMETER klarkys
SET TALK OFF
SET ECHO OFF
beg = fst_el("_K")
nn_el = n_el("_K")
n1 = ((nn_el^3 - nn_el)/6)
DIMENSION aa(nn_el, 2)
DIMENSION bb(nn_el, 1)
GO TOP
DO WHILE ! EOF()
   FOR j=1 TO nn_el
      aa(j,1)=EVAL(FIELD(beg+j-1))
      aa(j,2)=FIELD(beg+j-1)
   ENDFOR
   =ASORT(aa, 1, nn_el, 1)
   T = 0
   FOR ii = 1 TO nn_el - 1
      IF aa(ii,1)-aa(ii+1,1) >  klarkys
         bb(ii,1) = ii
      ELSE
         jj=ii
         kk=ii
         FIRST = aa(ii,1)
         DO WHILE (FIRST-aa(ii+1,1)<=  klarkys ) AND ii < nn_el - 1
            kk = kk + 1
            ii = ii + 1
         ENDDO
         ll = ( jj + kk )/2
         FOR one = jj TO kk
            bb(one,1) = ll
         ENDFOR
         t1 = ((kk-jj+1)*(kk-jj))
         T = T + t1
      ENDIF
   ENDFOR
   IF aa(nn_el - 1, 1) - aa(nn_el,1)  >  klarkys
      bb(nn_el,1) = nn_el
   ELSE
      kk = kk + 1
      T = T - t1
      t1 = ((kk-jj+1)*(kk-jj))
      ll = ( jj + kk )/2
      T = T + t1
      FOR one = jj TO kk
         bb(one,1) = ll
      ENDFOR
   ENDIF
   FOR one = 1 TO nn_el
      bukvas = STRTRAN(aa(one, 2),"_K",UPPER("_R"))
      REPLACE &bukvas WITH bb(one, 1)
   ENDFOR
   REPLACE T_tau WITH T/2
   SKIP
ENDDO
CLOSE ALL

*Процедура rac_rn4k для программы ГЕОКЛАСС. Предназначена для расчета
*рангов по записям для расчета коэффициента Кендала и Спирмена.
*Ранги по кларкам концентраций, в полях которых имеются
*коэффициенты у полей коэффициентов окончания названий "_K"
*KLARKY - передается из подпрограммы altpdrnk для
*ранжирования с округлением соседних коэффициентов по логарифмам
*Автор алгоритмов и программы В.Д.Брусницын

PROCEDURE rac_rn4k
PARAMETER klarkys
SET TALK OFF
SET ECHO OFF
beg = fst_el("_K")
nn_el = n_el("_K")
n1 = ((nn_el^3 - nn_el)/6)
DIMENSION aa(nn_el, 2)
DIMENSION bb(nn_el, 1)
GO TOP
DO WHILE ! EOF()
   FOR j=1 TO nn_el
      aa(j,1)=EVAL(FIELD(beg+j-1))
      aa(j,2)=FIELD(beg+j-1)
   ENDFOR
   =ASORT(aa, 1, nn_el, 1)
   mm=0
   FOR ii = 1 TO nn_el
      IF aa(ii,1)=0
         mm = ii
         EXIT
      ENDIF
   ENDFOR
   DO CASE
   CASE mm = 0
      T = 0
      FOR ii = 1 TO nn_el - 1
         IF LOG10(aa(ii,1))-LOG10(aa(ii+1,1)) >  klarkys
            bb(ii,1) = ii
         ELSE
            jj=ii
            kk=ii
            FIRST = LOG10(aa(ii,1))
            DO WHILE (FIRST-LOG10(aa(ii+1,1))<=  klarkys ) AND ii < nn_el - 1
               kk = kk + 1
               ii = ii + 1
            ENDDO
            ll = ( jj + kk )/2
            FOR one = jj TO kk
               bb(one,1) = ll
            ENDFOR
            t1 = (kk-jj+1)*(kk-jj)
            T = T + t1
         ENDIF
      ENDFOR
      IF LOG10(aa(nn_el - 1, 1)) - LOG10(aa(nn_el,1))  >  klarkys
         bb(nn_el,1) = nn_el
      ELSE
         kk = kk + 1
         T = T - t1
         t1 = (kk-jj+1)*(kk-jj)
         ll = ( jj + kk )/2
         T = T + t1
         FOR one = jj TO kk
            bb(one,1) = ll
         ENDFOR
      ENDIF
   CASE mm=1
      ll = (1 + nn_el)/2
      FOR one = 1 TO nn_el
         bb(one,1) = ll
      ENDFOR
      T =nn_el*(nn_el-1)
   CASE mm=2
      bb(1,1) = 1
      T=0
      ll = (2 + nn_el)/2
      FOR one = 1 TO nn_el
         bb(one,1) = ll
      ENDFOR
      T = (nn_el-1)*(nn_el-2)
   CASE mm>=3
      T = 0
      FOR ii = 1 TO mm - 2
         IF LOG10(aa(ii,1))-LOG10(aa(ii+1,1)) >  klarkys
            bb(ii,1) = ii
         ELSE
            jj=ii
            kk=ii
            FIRST = LOG10(aa(ii,1))
            DO WHILE (FIRST-LOG10(aa(ii+1,1))<=  klarkys ) AND ii < mm - 2
               kk = kk + 1
               ii = ii + 1
            ENDDO
            ll = ( jj + kk )/2
            FOR one = jj TO kk
               bb(one,1) = ll
            ENDFOR
            t1 = (kk-jj+1)*(kk-jj)
            T = T + t1
         ENDIF
      ENDFOR
      IF LOG10(aa(mm-2,1)) - LOG10(aa(mm - 1, 1))  >  klarkys
         bb(mm-1,1) = mm-1
      ELSE
         kk = kk + 1
         T = T - t1
         t1 = (kk-jj+1)*(kk-jj)
         ll = ( jj + kk )/2
         T = T + t1
         FOR one = jj TO kk
            bb(one,1) = ll
         ENDFOR
      ENDIF
      ll = ( mm + nn_el )/2
      FOR one = mm TO nn_el
         bb(one,1) = ll
      ENDFOR
      t1 = (nn_el-mm+1)*(nn_el-mm)
      T = T + t1
   ENDCASE
   FOR one = 1 TO nn_el
      bukvas = STRTRAN(aa(one, 2),"_K",UPPER("_R"))
      REPLACE &bukvas WITH bb(one, 1)
   ENDFOR
   REPLACE T_tau WITH T/2
   SKIP
ENDDO
CLOSE ALL

На главную страницу
        brusmann@mail.ru   AbacusComp@yandex.ru                                           © Василий Брусницын. Ивдель-Екатеринбург, 2010 г.     Св. обл. Мотив +79045490809                                     

Сайт управляется системой uCoz