Subversion Repositories wimsdev

Rev

Rev 7692 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
20 reyssat 1
!if $wims_read_parm!=slib_header
13586 bpr 2
  !goto proc
20 reyssat 3
!endif
4161 bpr 4
 
20 reyssat 5
slib_parms=2\
6
 ,[x_1,...,x_n]\
7
 ,[a_1,...,a_m]
4330 bpr 8
slib_author=Adeline, Grelot; Bernadette, PERRIN-RIOU
4161 bpr 9
 
20 reyssat 10
slib_example=[1,1,1,3,4,5,6,2],[1,4,6]\
11
[1,1,1,3,4,5,6,2,7 ,4,7],[2,3,6]\
12
[1,1,1,3,4,5,6,2],[1,4]\
13
[1,1,1,3,4,5,6,2]
14
!exit
15
 
16
:proc
17
slib_out=
18
!readproc slib/stat/dataproc $wims_read_parm
19
 
20
slib_v=!declosing $slib_data
21
slib_w=!declosing $slib_weight
22
 
23
!if $slib_v$slib_w=$empty
13586 bpr 24
  slib_out=0
20 reyssat 25
	!exit
26
!else
27
	slib_v=!sort numeric item  of $slib_v
28
	slib_max=!item -1 of $slib_v
29
	slib_min=!item 1 of $slib_v
30
	slib_cnt= !itemcnt $slib_v
31
	slib_cntw=!itemcnt $slib_w
32
	!if $slib_cntw=2
33
		!distribute item $slib_w into slib_b,slib_p
34
		slib_c=$[ceil(($slib_max-$slib_b)/$slib_p)]
35
		slib_d=$[min(0,floor(($slib_min-($slib_b))/$slib_p))]
36
		slib_w=!values $slib_b+x*$slib_p for x=$slib_d to $slib_c
37
	!endif
38
	slib_w=!sort numeric item  of $slib_w
39
 
40
	!if $slib_w=$empty
41
		slib_N=$[ceil(4*($slib_cnt)^(1/4))]
42
		slib_w=!values $slib_min+x*$slib_N for x=0 to $[ceil(($slib_max-$slib_min)/$slib_N)]
43
	!else
44
		slib_m=!item -1 of $slib_w
45
		slib_max=$[max($slib_max,$slib_m)]
46
		slib_m=!item 1 of $slib_w
47
		slib_min=$[min($slib_min,$slib_m)]
48
		slib_w=$slib_min,$slib_w,$slib_max
49
		slib_w= !listuniq $slib_w
50
	!endif
51
	slib_cpt=0
52
	slib_cntw=!itemcnt $slib_w
53
	slib_wpointer=2
13586 bpr 54
  # end est le point de separation
20 reyssat 55
	slib_end=!item $slib_wpointer of $slib_w
56
	slib_result=
57
	!for slib_i=1 to $slib_cnt
13586 bpr 58
		slib_dat=!item $slib_i of $slib_v
59
		!if $slib_dat<$slib_end or ($slib_dat=$slib_max and $slib_wpointer=$slib_cntw)
60
      # On est toujours dans le meme intervalle
61
 			!advance slib_cpt
20 reyssat 62
 		!else
13586 bpr 63
      # Le point de separation franchi
64
      # creer un nouveau point de separation
65
      :point
66
  		!advance slib_wpointer
20 reyssat 67
 			slib_end=!item $slib_wpointer of $slib_w
68
 			!if $slib_wpointer < $slib_cntw
69
 				slib_end1=!item $[$slib_wpointer+1] of $slib_w
7692 bpr 70
 			!else
13586 bpr 71
				slib_end1=$slib_end+2
72
			!endif
73
			slib_result=!append item $[$slib_cpt/$slib_cnt] to $slib_result
20 reyssat 74
			!if $slib_dat>=$slib_end1
13586 bpr 75
 			  slib_cpt=0
76
			  !goto point
20 reyssat 77
			!else
78
				slib_cpt=1
79
			!endif
80
		!endif
81
	!next slib_i
13586 bpr 82
  #Le dernier intervalle
20 reyssat 83
	slib_result=!append item $[$slib_cpt/$slib_cnt] to $slib_result
84
 
85
	!if $[$slib_wpointer+1] <=$slib_cntw
86
		slib_zero=!values 0 for x=$[$slib_wpointer+1] to $slib_cntw
87
		slib_result=$slib_result,$slib_zero
88
	!endif
89
!endif
90
slib_out=!trim $slib_result
91
slib_out=!line -1 of $slib_out
92
slib_out=[$slib_out],[$slib_w]