Показать сообщение отдельно
Старый 11.03.2016, 22:57   #3
DarkInside
Разработчик
 
Аватар для DarkInside
 
Регистрация: 08.08.2011
Сообщений: 505
Написано 191 полезных сообщений
(для 369 пользователей)
Ответ: Работа в стартапе

Сообщение от RegIon Посмотреть сообщение
Забудь про Блитз, нужно хотя бы на тот же питон переписать.
На питон кстати можно все переписать, досканально, коль уже на нем есть генератор.

Я бы смог на питон переписать блитзовский проект, если он за собой не тянет 3d (Хотя есть же Coccos на этот случай)
Хотя кстати и генератор документации на питон не так сложно переписать с AutoIt.
Если это так востребовано, то можно поднять потом сервер, с питоном это не сложно будет
Я то это понимаю. Но в питоне я слишком слаб, только начал изучать. Просто нашел готовую библиотеку на питоне для экспорта в автокад и разобрался, как генерить описание чертежей для этой библиотеки. Но с ней есть проблемы, отсутствуют типы линий (основная, тонкая, штрих-пунктирная и т.д.), у меня сейчас генерится всё тонкими линиями, нужно разобраться в структуре DXF-файла и добавить основную линию. Хотя, может она и есть уже в этой библиотеке, просто я чего-то не понимаю.
Блиц я знаю очень давно, мне в нем проще по-быстрому изложить всю логику, питон еще учить и учить. В AutoIT там совсем немного кода - функции для работы с вордом скомпилированы в экзешники и вызываются из блица. Вот по поводу перевода кода на питон, там логика довольно сложная...переводить, думаю, куча времени уйдет...вот пример нескольких функций на блице (примерно в таком стиле 20 тыс. строк):
В принципе я только за, если весь код будет на питоне, но как-то это надо организовать...
Function perebor()

For i = 1 To kol_objects_mode
	
	If kat_mode$(i) = "III" And Float(s_p_mode$ (i)) <= 660 Then
		
		If Float(s_p_mode$ (i)) <= 330 Then
			rp_kol = rp_kol + 1
			rp_ini (rp_kol) = i
			p_p_rp$ (rp_kol) = p_p_mode$ (i)
			q_p_rp$ (rp_kol) = q_p_mode$ (i)
			s_p_rp$ (rp_kol) = s_p_mode$ (i)
		Else
			rp_kol = rp_kol + 1
			rp_ini (rp_kol) = i
			p_p_rp$ (rp_kol) = Str(Float (p_p_mode$ (i)) / 2)
			q_p_rp$ (rp_kol) = Str(Float (q_p_mode$ (i)) / 2)
			s_p_rp$ (rp_kol) = Str(Float (s_p_mode$ (i)) / 2)
			
			rp_kol = rp_kol + 1
			rp_ini (rp_kol) = i
			p_p_rp$ (rp_kol) = Str(Float (p_p_mode$ (i)) / 2)
			q_p_rp$ (rp_kol) = Str(Float (q_p_mode$ (i)) / 2)
			s_p_rp$ (rp_kol) = Str(Float (s_p_mode$ (i)) / 2)
		EndIf
	EndIf
	
Next

For tp_1 = 1 To kol_objects_mode
	
	If kat_mode$(tp_1) <> "III" Then
		
		For tp_2 = 0 To kol_objects_mode
			
			If (kat_mode$(tp_2) = "II" And tp_2 <> tp_1) Or tp_2 = 0 Then
				
				n% = rp_kol
				
				end_str$ = ""
				str_t$ = ""
				a_dec = 0
				
				For i = 1 To n%
					end_str$ = end_str$ + "1"
				Next
				
				While str_t$ <> end_str$
					
					str_t$ = Bin$(a_dec)
					
					If Len(str_t$) > n% Then
						str_t$ = Right (str_t$, n%)
					ElseIf Len(str_t$) < n% 
						While Len(str_t$) < n%
							str_t$ = "0" + str_t$
						Wend
					EndIf
					
					rp_str$ = ""
					add_kol = 0
					
					For i = 1 To n%
						add_ini$ = Mid$ (str_t$, i, 1)
						If add_ini$ = 1 Then 
							add_kol = add_kol + 1
							If add_kol > 4 Then 
								Exit
							Else
								rp_str$ = rp_str$ + Str(i) + "+"
							EndIf
						EndIf
						
					Next
					
					If add_kol <= 4 Then
						
						If rp_str$ <> "" Then 
							rp_str$ = Left (rp_str$, Len(rp_str$) - 1)
						EndIf
						
						If Instr(rp_str$, "+") <> 0 Then 
							rp_1 = Int(Left (rp_str$, Instr(rp_str$, "+") - 1))
							rp_str$ = Right (rp_str$, Len(rp_str$) - Instr(rp_str$, "+"))
						Else
							rp_1 = Int(rp_str$)
							rp_str$ = ""
						EndIf
						
						If Instr(rp_str$, "+") <> 0 Then 
							rp_2 = Int(Left (rp_str$, Instr(rp_str$, "+") - 1))
							rp_str$ = Right (rp_str$, Len(rp_str$) - Instr(rp_str$, "+"))
						Else
							rp_2 = Int(rp_str$)
							rp_str$ = ""
						EndIf
						
						If Instr(rp_str$, "+") <> 0 Then 
							rp_3 = Int(Left (rp_str$, Instr(rp_str$, "+") - 1))
							rp_str$ = Right (rp_str$, Len(rp_str$) - Instr(rp_str$, "+"))
						Else
							rp_3 = Int(rp_str$)
							rp_str$ = ""
						EndIf
						
						If Instr(rp_str$, "+") <> 0 Then 
							rp_4 = Int(Left (rp_str$, Instr(rp_str$, "+") - 1))
							rp_str$ = Right (rp_str$, Len(rp_str$) - Instr(rp_str$, "+"))
						Else
							rp_4 = Int(rp_str$)
							rp_str$ = ""
						EndIf
						
						calc_k (tp_1, tp_2, rp_1, rp_2, rp_3, rp_4)
						
						tp_rep_kol = tp_rep_kol + 1
						
					EndIf
					
					a_dec = a_dec + 1
					
				Wend
				
			EndIf
			
		Next
		
	ElseIf kat_mode$(tp_1) = "III" Then
		
		n% = rp_kol
		
		end_str$ = ""
		str_t$ = ""
		a_dec = 0
		
		For i = 1 To n%
			end_str$ = end_str$ + "1"
		Next
		
		While str_t$ <> end_str$
			
			str_t$ = Bin$(a_dec)
			
			If Len(str_t$) > n% Then
				str_t$ = Right (str_t$, n%)
			ElseIf Len(str_t$) < n% 
				While Len(str_t$) < n%
					str_t$ = "0" + str_t$
				Wend
			EndIf
			
			rp_str$ = ""
			add_kol = 0
			
			For i = 1 To n%
				add_ini$ = Mid$ (str_t$, i, 1)
				If add_ini$ = 1 Then 
					add_kol = add_kol + 1
					If add_kol > 4 Then 
						Exit
					Else
						rp_str$ = rp_str$ + Str(i) + "+"
					EndIf
				EndIf
				
			Next
			
			If add_kol <= 4 Then
				
				If rp_str$ <> "" Then 
					rp_str$ = Left (rp_str$, Len(rp_str$) - 1)
				EndIf
				
				If Instr(rp_str$, "+") <> 0 Then 
					rp_1 = Int(Left (rp_str$, Instr(rp_str$, "+") - 1))
					rp_str$ = Right (rp_str$, Len(rp_str$) - Instr(rp_str$, "+"))
				Else
					rp_1 = Int(rp_str$)
					rp_str$ = ""
				EndIf
				
				If Instr(rp_str$, "+") <> 0 Then 
					rp_2 = Int(Left (rp_str$, Instr(rp_str$, "+") - 1))
					rp_str$ = Right (rp_str$, Len(rp_str$) - Instr(rp_str$, "+"))
				Else
					rp_2 = Int(rp_str$)
					rp_str$ = ""
				EndIf
				
				If Instr(rp_str$, "+") <> 0 Then 
					rp_3 = Int(Left (rp_str$, Instr(rp_str$, "+") - 1))
					rp_str$ = Right (rp_str$, Len(rp_str$) - Instr(rp_str$, "+"))
				Else
					rp_3 = Int(rp_str$)
					rp_str$ = ""
				EndIf
				
				If Instr(rp_str$, "+") <> 0 Then 
					rp_4 = Int(Left (rp_str$, Instr(rp_str$, "+") - 1))
					rp_str$ = Right (rp_str$, Len(rp_str$) - Instr(rp_str$, "+"))
				Else
					rp_4 = Int(rp_str$)
					rp_str$ = ""
				EndIf
				
				If rp_ini(rp_1) <> tp_1 And rp_ini(rp_2) <> tp_1 And rp_ini(rp_3) <> tp_1 And rp_ini(rp_4) <> tp_1 Then
					calc_k (tp_1, 0, rp_1, rp_2, rp_3, rp_4)
					
					tp_rep_kol = tp_rep_kol + 1
					
				EndIf
				
			EndIf
			
			a_dec = a_dec + 1
			
		Wend
		
	EndIf
	
Next

End Function

Function calc_k(tp_1, tp_2 = 0, rp_1 = 0, rp_2 = 0, rp_3 = 0, rp_4 = 0) 
	
	; tp_2 ТОЛЬКО II категории
	; К одному цеху I, II или III(с ТП -выше 660 кВА) категории подключаем от 0 до 4 РП и резервируемый цех II категории
	
	If kat_mode$(tp_1) = "I" Then
		For n_tr_1 = 2 To 2; Step 2
			s_nom_tr = kz_TP_ini (tp_1, tp_2, rp_1, rp_2, rp_3, rp_4, n_tr_1, 0.7, 0.75)
			If s_nom_tr > 0 Then
				
				If tp_2 > 0 Then
					
					kol_var_II = kz_TP_2_ini (tp_1, n_tr_1, tp_2, rp_1, rp_2, rp_3, rp_4, 0.75, 0.8)
					
					If kol_var_II > 0 Then
						
						For i = 1 To kol_var_II
							
							rp_1_ini = 1
							rp_2_ini = 1
							rp_3_ini = 1
							rp_4_ini = 1
							
							rp_1_t = 0
							rp_2_t = 0
							rp_3_t = 0
							rp_4_t = 0
							
							If rp_1 > 0 And rp_1 <> rp_1_kz_TP_2_ADD_return (i) And rp_1 <> rp_2_kz_TP_2_ADD_return (i) And rp_1 <> rp_3_kz_TP_2_ADD_return (i) And rp_1 <> rp_4_kz_TP_2_ADD_return (i) And rp_1 <> rp_1_kz_TP_2_ini_return (i) And rp_1 <> rp_2_kz_TP_2_ini_return (i) And rp_1 <> rp_3_kz_TP_2_ini_return (i) And rp_1 <> rp_4_kz_TP_2_ini_return (i) Then rp_1_ini = 0
							If rp_2 > 0 And rp_2 <> rp_1_kz_TP_2_ADD_return (i) And rp_2 <> rp_2_kz_TP_2_ADD_return (i) And rp_2 <> rp_3_kz_TP_2_ADD_return (i) And rp_2 <> rp_4_kz_TP_2_ADD_return (i) And rp_2 <> rp_1_kz_TP_2_ini_return (i) And rp_2 <> rp_2_kz_TP_2_ini_return (i) And rp_2 <> rp_3_kz_TP_2_ini_return (i) And rp_2 <> rp_4_kz_TP_2_ini_return (i) Then rp_2_ini = 0
							If rp_3 > 0 And rp_3 <> rp_1_kz_TP_2_ADD_return (i) And rp_3 <> rp_2_kz_TP_2_ADD_return (i) And rp_3 <> rp_3_kz_TP_2_ADD_return (i) And rp_3 <> rp_4_kz_TP_2_ADD_return (i) And rp_3 <> rp_1_kz_TP_2_ini_return (i) And rp_3 <> rp_2_kz_TP_2_ini_return (i) And rp_3 <> rp_3_kz_TP_2_ini_return (i) And rp_3 <> rp_4_kz_TP_2_ini_return (i) Then rp_3_ini = 0
							If rp_4 > 0 And rp_4 <> rp_1_kz_TP_2_ADD_return (i) And rp_4 <> rp_2_kz_TP_2_ADD_return (i) And rp_4 <> rp_3_kz_TP_2_ADD_return (i) And rp_4 <> rp_4_kz_TP_2_ADD_return (i) And rp_4 <> rp_1_kz_TP_2_ini_return (i) And rp_4 <> rp_2_kz_TP_2_ini_return (i) And rp_4 <> rp_3_kz_TP_2_ini_return (i) And rp_4 <> rp_4_kz_TP_2_ini_return (i) Then rp_4_ini = 0
							
							If rp_1_ini = 0 Then
								If rp_to_TP (tp_1, rp_1, Float(s_p_rp$(rp_1))) = 1 Then 
									rp_1_ini = 1
									rp_1_t = rp_1
								EndIf
							EndIf
							
							If rp_2_ini = 0 Then
								If rp_to_TP (tp_1, rp_2, Float(s_p_rp$(rp_2))) = 1 Then 
									rp_2_ini = 1
									rp_2_t = rp_2
								EndIf
							EndIf
							
							If rp_3_ini = 0 Then
								If rp_to_TP (tp_1, rp_3, Float(s_p_rp$(rp_3))) = 1 Then 
									rp_3_ini = 1
									rp_3_t = rp_3
								EndIf
							EndIf
							
							If rp_4_ini = 0 Then
								If rp_to_TP (tp_1, rp_4, Float(s_p_rp$(rp_4))) = 1 Then 
									rp_4_ini = 1
									rp_4_t = rp_4
								EndIf
							EndIf
							
							If rp_1_ini = 1 And rp_2_ini = 1 And rp_3_ini = 1 And rp_4_ini = 1 Then
								
								w_add  = w_add + 1
								
								tp_1_rep(w_add) = tp_1
								n_tr_rep_1 (w_add) = n_tr_1
								s_tr_rep_1 (w_add) = s_nom_tr
								tp_2_rep(w_add) = tp_2
								
								n = step_over (rp_1_t, rp_2_t, rp_3_t, rp_4_t)
								
								For z = 1 To n
									If z = 1 Then rp_1_rep_1(w_add) = rp_add_hz_III(z)
									If z = 2 Then rp_2_rep_1(w_add) = rp_add_hz_III(z)
									If z = 3 Then rp_3_rep_1(w_add) = rp_add_hz_III(z)
									If z = 4 Then rp_4_rep_1(w_add) = rp_add_hz_III(z)
								Next
								
								n = step_over (rp_1_kz_TP_2_ini_return(i), rp_2_kz_TP_2_ini_return(i), rp_3_kz_TP_2_ini_return(i), rp_4_kz_TP_2_ini_return(i))
								
								For z = 1 To n
									If z = 1 Then rp_1_rep_2(w_add) = rp_add_hz_III(z)
									If z = 2 Then rp_2_rep_2(w_add) = rp_add_hz_III(z)
									If z = 3 Then rp_3_rep_2(w_add) = rp_add_hz_III(z)
									If z = 4 Then rp_4_rep_2(w_add) = rp_add_hz_III(z)
								Next
								
								n = step_over (rp_1_kz_TP_2_ADD_return(i), rp_2_kz_TP_2_ADD_return(i), rp_3_kz_TP_2_ADD_return(i), rp_4_kz_TP_2_ADD_return(i))
								
								For z = 1 To n
									If z = 1 Then rp_1_addable_rep_2(w_add) = rp_add_hz_III(z)
									If z = 2 Then rp_2_added_rep_2(w_add) = rp_add_hz_III(z)
									If z = 3 Then rp_3_added_rep_2(w_add) = rp_add_hz_III(z)
									If z = 4 Then rp_4_added_rep_2(w_add) = rp_add_hz_III(z)
								Next
								
							EndIf
							
							TP_1_over_write (tp_1, n_tr_1, s_nom_tr, rp_1_t, rp_2_t, rp_3_t, rp_4_t, tp_2, rp_1_kz_TP_2_ini_return (i), rp_2_kz_TP_2_ini_return (i), rp_3_kz_TP_2_ini_return (i), rp_4_kz_TP_2_ini_return (i), rp_1_kz_TP_2_ADD_return (i), rp_2_kz_TP_2_ADD_return (i), rp_3_kz_TP_2_ADD_return (i), rp_4_kz_TP_2_ADD_return (i))
							
						Next	
						
					EndIf
					
				ElseIf tp_2 = 0 Then
					
					rp_1_ini = 1
					rp_2_ini = 1
					rp_3_ini = 1
					rp_4_ini = 1
					
					If rp_1 > 0 And rp_to_TP (tp_1, rp_1, Float(s_p_rp$(rp_1))) = 0 Then rp_1_ini = 0
					If rp_2 > 0 And rp_to_TP (tp_1, rp_2, Float(s_p_rp$(rp_2))) = 0 Then rp_2_ini = 0
					If rp_3 > 0 And rp_to_TP (tp_1, rp_3, Float(s_p_rp$(rp_3))) = 0 Then rp_3_ini = 0
					If rp_4 > 0 And rp_to_TP (tp_1, rp_4, Float(s_p_rp$(rp_4))) = 0 Then rp_4_ini = 0
					
					If rp_1_ini = 1 And rp_2_ini = 1 And rp_3_ini = 1 And rp_4_ini = 1 Then
						
						w_add  = w_add + 1
						
						tp_1_rep(w_add) = tp_1
						n_tr_rep_1 (w_add) = n_tr_1
						s_tr_rep_1 (w_add) = s_nom_tr
						
						n = step_over (rp_1, rp_2, rp_3, rp_4)
						
						For z = 1 To n
							If z = 1 Then rp_1_rep_1(w_add) = rp_add_hz_III(z)
							If z = 2 Then rp_2_rep_1(w_add) = rp_add_hz_III(z)
							If z = 3 Then rp_3_rep_1(w_add) = rp_add_hz_III(z)
							If z = 4 Then rp_4_rep_1(w_add) = rp_add_hz_III(z)
						Next
						
					EndIf
					
					TP_1_over_write (tp_1, n_tr_1, s_nom_tr, rp_1, rp_2, rp_3, rp_4)
					
				EndIf
				
			EndIf
		Next
	ElseIf kat_mode$(tp_1) = "II" Then
		If tp_2 > 0 Then
			For n_tr_1 = 1 To 2
				s_nom_tr = kz_TP_ini (tp_1, tp_2, rp_1, rp_2, rp_3, rp_4, n_tr_1, 0.75, 0.8)
				If s_nom_tr > 0 Then
					
					kol_var_II = kz_TP_2_ini (tp_1, n_tr_1, tp_2, rp_1, rp_2, rp_3, rp_4, 0.75, 0.8)
					
					If kol_var_II > 0 Then
						
						For i = 1 To kol_var_II
							
							rp_1_ini = 1
							rp_2_ini = 1
							rp_3_ini = 1
							rp_4_ini = 1
							
							rp_1_t = 0
							rp_2_t = 0
							rp_3_t = 0
							rp_4_t = 0
							
							If rp_1 > 0 And rp_1 <> rp_1_kz_TP_2_ADD_return (i) And rp_1 <> rp_2_kz_TP_2_ADD_return (i) And rp_1 <> rp_3_kz_TP_2_ADD_return (i) And rp_1 <> rp_4_kz_TP_2_ADD_return (i) And rp_1 <> rp_1_kz_TP_2_ini_return (i) And rp_1 <> rp_2_kz_TP_2_ini_return (i) And rp_1 <> rp_3_kz_TP_2_ini_return (i) And rp_1 <> rp_4_kz_TP_2_ini_return (i) Then rp_1_ini = 0
							If rp_2 > 0 And rp_2 <> rp_1_kz_TP_2_ADD_return (i) And rp_2 <> rp_2_kz_TP_2_ADD_return (i) And rp_2 <> rp_3_kz_TP_2_ADD_return (i) And rp_2 <> rp_4_kz_TP_2_ADD_return (i) And rp_2 <> rp_1_kz_TP_2_ini_return (i) And rp_2 <> rp_2_kz_TP_2_ini_return (i) And rp_2 <> rp_3_kz_TP_2_ini_return (i) And rp_2 <> rp_4_kz_TP_2_ini_return (i) Then rp_2_ini = 0
							If rp_3 > 0 And rp_3 <> rp_1_kz_TP_2_ADD_return (i) And rp_3 <> rp_2_kz_TP_2_ADD_return (i) And rp_3 <> rp_3_kz_TP_2_ADD_return (i) And rp_3 <> rp_4_kz_TP_2_ADD_return (i) And rp_3 <> rp_1_kz_TP_2_ini_return (i) And rp_3 <> rp_2_kz_TP_2_ini_return (i) And rp_3 <> rp_3_kz_TP_2_ini_return (i) And rp_3 <> rp_4_kz_TP_2_ini_return (i) Then rp_3_ini = 0
							If rp_4 > 0 And rp_4 <> rp_1_kz_TP_2_ADD_return (i) And rp_4 <> rp_2_kz_TP_2_ADD_return (i) And rp_4 <> rp_3_kz_TP_2_ADD_return (i) And rp_4 <> rp_4_kz_TP_2_ADD_return (i) And rp_4 <> rp_1_kz_TP_2_ini_return (i) And rp_4 <> rp_2_kz_TP_2_ini_return (i) And rp_4 <> rp_3_kz_TP_2_ini_return (i) And rp_4 <> rp_4_kz_TP_2_ini_return (i) Then rp_4_ini = 0
							
							If rp_1_ini = 0 Then
								If rp_to_TP (tp_1, rp_1, Float(s_p_rp$(rp_1))) = 1 Then 
									rp_1_ini = 1
									rp_1_t = rp_1
								EndIf
							EndIf
							
							If rp_2_ini = 0 Then
								If rp_to_TP (tp_1, rp_2, Float(s_p_rp$(rp_2))) = 1 Then 
									rp_2_ini = 1
									rp_2_t = rp_2
								EndIf
							EndIf
							
							If rp_3_ini = 0 Then
								If rp_to_TP (tp_1, rp_3, Float(s_p_rp$(rp_3))) = 1 Then 
									rp_3_ini = 1
									rp_3_t = rp_3
								EndIf
							EndIf
							
							If rp_4_ini = 0 Then
								If rp_to_TP (tp_1, rp_4, Float(s_p_rp$(rp_4))) = 1 Then 
									rp_4_ini = 1
									rp_4_t = rp_4
								EndIf
							EndIf
							
							If rp_1_ini = 1 And rp_2_ini = 1 And rp_3_ini = 1 And rp_4_ini = 1 Then
								
								w_add  = w_add + 1
								
								tp_1_rep(w_add) = tp_1
								n_tr_rep_1 (w_add) = n_tr_1
								s_tr_rep_1 (w_add) = s_nom_tr
								tp_2_rep(w_add) = tp_2
								
								n = step_over (rp_1_t, rp_2_t, rp_3_t, rp_4_t)
								
								For z = 1 To n
									If z = 1 Then rp_1_rep_1(w_add) = rp_add_hz_III(z)
									If z = 2 Then rp_2_rep_1(w_add) = rp_add_hz_III(z)
									If z = 3 Then rp_3_rep_1(w_add) = rp_add_hz_III(z)
									If z = 4 Then rp_4_rep_1(w_add) = rp_add_hz_III(z)
								Next
								
								n = step_over (rp_1_kz_TP_2_ini_return(i), rp_2_kz_TP_2_ini_return(i), rp_3_kz_TP_2_ini_return(i), rp_4_kz_TP_2_ini_return(i))
								
								For z = 1 To n
									If z = 1 Then rp_1_rep_2(w_add) = rp_add_hz_III(z)
									If z = 2 Then rp_2_rep_2(w_add) = rp_add_hz_III(z)
									If z = 3 Then rp_3_rep_2(w_add) = rp_add_hz_III(z)
									If z = 4 Then rp_4_rep_2(w_add) = rp_add_hz_III(z)
								Next
								
								n = step_over (rp_1_kz_TP_2_ADD_return(i), rp_2_kz_TP_2_ADD_return(i), rp_3_kz_TP_2_ADD_return(i), rp_4_kz_TP_2_ADD_return(i))
								
								For z = 1 To n
									If z = 1 Then rp_1_addable_rep_2(w_add) = rp_add_hz_III(z)
									If z = 2 Then rp_2_added_rep_2(w_add) = rp_add_hz_III(z)
									If z = 3 Then rp_3_added_rep_2(w_add) = rp_add_hz_III(z)
									If z = 4 Then rp_4_added_rep_2(w_add) = rp_add_hz_III(z)
								Next
								
							EndIf
							
							TP_1_over_write (tp_1, n_tr_1, s_nom_tr, rp_1_t, rp_2_t, rp_3_t, rp_4_t, tp_2, rp_1_kz_TP_2_ini_return (i), rp_2_kz_TP_2_ini_return (i), rp_3_kz_TP_2_ini_return (i), rp_4_kz_TP_2_ini_return (i), rp_1_kz_TP_2_ADD_return (i), rp_2_kz_TP_2_ADD_return (i), rp_3_kz_TP_2_ADD_return (i), rp_4_kz_TP_2_ADD_return (i))
							
						Next	
						
					EndIf
					
				EndIf
			Next
			
		ElseIf tp_2 = 0 Then
			
			For n_tr_1 = 2 To 2; Step 2
				s_nom_tr = kz_TP_ini (tp_1, tp_2, rp_1, rp_2, rp_3, rp_4, n_tr_1, 0.75, 0.8)
				If s_nom_tr > 0 Then
					
					rp_1_ini = 1
					rp_2_ini = 1
					rp_3_ini = 1
					rp_4_ini = 1
					
					If rp_1 > 0 And rp_to_TP (tp_1, rp_1, Float(s_p_rp$(rp_1))) = 0 Then rp_1_ini = 0
					If rp_2 > 0 And rp_to_TP (tp_1, rp_2, Float(s_p_rp$(rp_2))) = 0 Then rp_2_ini = 0
					If rp_3 > 0 And rp_to_TP (tp_1, rp_3, Float(s_p_rp$(rp_3))) = 0 Then rp_3_ini = 0
					If rp_4 > 0 And rp_to_TP (tp_1, rp_4, Float(s_p_rp$(rp_4))) = 0 Then rp_4_ini = 0
					
					If rp_1_ini = 1 And rp_2_ini = 1 And rp_3_ini = 1 And rp_4_ini = 1 Then
						
						w_add  = w_add + 1
						
						tp_1_rep(w_add) = tp_1
						n_tr_rep_1 (w_add) = n_tr_1
						s_tr_rep_1 (w_add) = s_nom_tr
						
						n = step_over (rp_1, rp_2, rp_3, rp_4)
						
						For z = 1 To n
							If z = 1 Then rp_1_rep_1(w_add) = rp_add_hz_III(z)
							If z = 2 Then rp_2_rep_1(w_add) = rp_add_hz_III(z)
							If z = 3 Then rp_3_rep_1(w_add) = rp_add_hz_III(z)
							If z = 4 Then rp_4_rep_1(w_add) = rp_add_hz_III(z)
						Next
						
					EndIf
					
					TP_1_over_write (tp_1, n_tr_1, s_nom_tr, rp_1, rp_2, rp_3, rp_4)
					
				EndIf
			Next
		EndIf
		
	ElseIf kat_mode$(tp_1) = "III" Then
		
		For n_tr_1 = 1 To 2
			s_nom_tr = kz_TP_ini (tp_1, tp_2, rp_1, rp_2, rp_3, rp_4, n_tr_1, 0.8, 0.9)
			If s_nom_tr > 0 Then
				
				rp_1_ini = 1
				rp_2_ini = 1
				rp_3_ini = 1
				rp_4_ini = 1
				
				If rp_1 > 0 And rp_to_TP (tp_1, rp_1, Float(s_p_rp$(rp_1))) = 0 Then rp_1_ini = 0
				If rp_2 > 0 And rp_to_TP (tp_1, rp_2, Float(s_p_rp$(rp_2))) = 0 Then rp_2_ini = 0
				If rp_3 > 0 And rp_to_TP (tp_1, rp_3, Float(s_p_rp$(rp_3))) = 0 Then rp_3_ini = 0
				If rp_4 > 0 And rp_to_TP (tp_1, rp_4, Float(s_p_rp$(rp_4))) = 0 Then rp_4_ini = 0
				
				If rp_1_ini = 1 And rp_2_ini = 1 And rp_3_ini = 1 And rp_4_ini = 1 Then
					
					w_add  = w_add + 1
					
					tp_1_rep(w_add) = tp_1
					n_tr_rep_1 (w_add) = n_tr_1
					s_tr_rep_1 (w_add) = s_nom_tr
					
					n = step_over (rp_1, rp_2, rp_3, rp_4)
					
					For z = 1 To n
						If z = 1 Then rp_1_rep_1(w_add) = rp_add_hz_III(z)
						If z = 2 Then rp_2_rep_1(w_add) = rp_add_hz_III(z)
						If z = 3 Then rp_3_rep_1(w_add) = rp_add_hz_III(z)
						If z = 4 Then rp_4_rep_1(w_add) = rp_add_hz_III(z)
					Next
					
				EndIf
				
				TP_1_over_write (tp_1, n_tr_1, s_nom_tr, rp_1, rp_2, rp_3, rp_4)
				
			EndIf
		Next
		
	EndIf
	
End Function

Function step_over(rp_1, rp_2, rp_3, rp_4)
	
	Dim rp_add_hz_III (5)
	n = 0
	
	If rp_1 > 0 Then 
		n = n + 1
		rp_add_hz_III (n) = rp_1
	EndIf
	
	If rp_2 > 0 Then 
		n = n + 1
		rp_add_hz_III (n) = rp_2
	EndIf
	
	If rp_3 > 0 Then 
		n = n + 1
		rp_add_hz_III (n) = rp_3
	EndIf
	
	If rp_4 > 0 Then 
		n = n + 1
		rp_add_hz_III (n) = rp_4
	EndIf
	
	Return n
	
End Function

Function TP_1_over_write(tp_1, n_tr_1, s_tr_1, rp_1 = 0, rp_2 = 0, rp_3 = 0, rp_4 = 0, tp_2 = 0, rp_1_II = 0, rp_2_II = 0, rp_3_II = 0, rp_4_II = 0, rp_1_II_addble = 0, rp_2_II_add = 0, rp_3_II_add = 0, rp_4_II_add = 0)
	
	kol_var = rp_add_rp(tp_1, rp_1, rp_2, rp_3, rp_4)
	
	If kol_var > 0 Then
		
		For i = 1 To kol_var
			
			If rp_to_TP(tp_1, rp_add_rp_return_rp_1 (i), Float(s_p_rp$(rp_add_rp_return_rp_1(i))) + Float(s_p_rp$(rp_add_rp_return_rp_2(i))) + Float(s_p_rp$(rp_add_rp_return_rp_3(i))) + Float(s_p_rp$(rp_add_rp_return_rp_4(i)))) > 0 Then
				
				rp_1_ini = 1
				rp_2_ini = 1
				rp_3_ini = 1
				rp_4_ini = 1
				
				rp_1_t = 0
				rp_2_t = 0
				rp_3_t = 0
				rp_4_t = 0
				
				If rp_1 > 0 And rp_add_rp_return_rp_1(i) <> rp_1 And rp_add_rp_return_rp_2(i) <> rp_1 And rp_add_rp_return_rp_3(i) <> rp_1 And rp_add_rp_return_rp_4(i) <> rp_1 Then rp_1_ini = 0
				If rp_2 > 0 And rp_add_rp_return_rp_1(i) <> rp_2 And rp_add_rp_return_rp_2(i) <> rp_2 And rp_add_rp_return_rp_3(i) <> rp_2 And rp_add_rp_return_rp_4(i) <> rp_2 Then rp_2_ini = 0
				If rp_3 > 0 And rp_add_rp_return_rp_1(i) <> rp_3 And rp_add_rp_return_rp_2(i) <> rp_3 And rp_add_rp_return_rp_3(i) <> rp_3 And rp_add_rp_return_rp_4(i) <> rp_3 Then rp_3_ini = 0
				If rp_4 > 0 And rp_add_rp_return_rp_1(i) <> rp_4 And rp_add_rp_return_rp_2(i) <> rp_4 And rp_add_rp_return_rp_3(i) <> rp_4 And rp_add_rp_return_rp_4(i) <> rp_4 Then rp_4_ini = 0
				
				If rp_1_ini = 0 Then
					If rp_to_TP (tp_1, rp_1, Float(s_p_rp$(rp_1))) = 1 Then 
						rp_1_ini = 1
						rp_1_t = rp_1
					EndIf
				EndIf
				
				If rp_2_ini = 0 Then
					If rp_to_TP (tp_1, rp_2, Float(s_p_rp$(rp_2))) = 1 Then 
						rp_2_ini = 1
						rp_2_t = rp_2
					EndIf
				EndIf
				
				If rp_3_ini = 0 Then
					If rp_to_TP (tp_1, rp_3, Float(s_p_rp$(rp_3))) = 1 Then 
						rp_3_ini = 1
						rp_3_t = rp_3
					EndIf
				EndIf
				
				If rp_4_ini = 0 Then
					If rp_to_TP (tp_1, rp_4, Float(s_p_rp$(rp_4))) = 1 Then 
						rp_4_ini = 1
						rp_4_t = rp_4
					EndIf
				EndIf
				
				If rp_1_ini = 1 And rp_2_ini = 1 And rp_3_ini = 1 And rp_4_ini = 1 Then
					
					w_add  = w_add + 1
					
					tp_1_rep(w_add) = tp_1
					n_tr_rep_1 (w_add) = n_tr_1
					s_tr_rep_1 (w_add) = s_tr_1
					tp_2_rep(w_add) = tp_2
					
					n = step_over (rp_1_t, rp_2_t, rp_3_t, rp_4_t)
					
					For z = 1 To n
						If z = 1 Then rp_1_rep_1(w_add) = rp_add_hz_III(z)
						If z = 2 Then rp_2_rep_1(w_add) = rp_add_hz_III(z)
						If z = 3 Then rp_3_rep_1(w_add) = rp_add_hz_III(z)
						If z = 4 Then rp_4_rep_1(w_add) = rp_add_hz_III(z)
					Next
					
					n = step_over (rp_add_rp_return_rp_1(i), rp_add_rp_return_rp_2(i), rp_add_rp_return_rp_3(i), rp_add_rp_return_rp_4(i))
					
					For z = 1 To n
						If z = 1 Then rp_1_addable_rep_1(w_add) = rp_add_hz_III(z)
						If z = 2 Then rp_2_added_rep_1(w_add) = rp_add_hz_III(z)
						If z = 3 Then rp_3_added_rep_1(w_add) = rp_add_hz_III(z)
						If z = 4 Then rp_4_added_rep_1(w_add) = rp_add_hz_III(z)
					Next
					
					n = step_over (rp_1_II, rp_2_II, rp_3_II, rp_4_II)
					
					For z = 1 To n
						If z = 1 Then rp_1_rep_2(w_add) = rp_add_hz_III(z)
						If z = 2 Then rp_2_rep_2(w_add) = rp_add_hz_III(z)
						If z = 3 Then rp_3_rep_2(w_add) = rp_add_hz_III(z)
						If z = 4 Then rp_4_rep_2(w_add) = rp_add_hz_III(z)
					Next
					
					n = step_over (rp_1_II_addble, rp_2_II_add, rp_3_II_add, rp_4_II_add)
					
					For z = 1 To n
						If z = 1 Then rp_1_addable_rep_2(w_add) = rp_add_hz_III(z)
						If z = 2 Then rp_2_added_rep_2(w_add) = rp_add_hz_III(z)
						If z = 3 Then rp_3_added_rep_2(w_add) = rp_add_hz_III(z)
						If z = 4 Then rp_4_added_rep_2(w_add) = rp_add_hz_III(z)
					Next
					
				EndIf
				
			EndIf
			
		Next
		
	EndIf
	
End Function

Function kz_TP_ini(tp_1, tp_2, rp_1, rp_2, rp_3, rp_4, n_tr, k_z_1#, k_z_2#)
	
	ras_nagr# = Float(p_p_mode$(tp_2))
	ras_q# = Float(q_p_mode$(tp_2))
	
	For ku = 1 To 32
		If Int(ku_nom%(ku)) >= ((ras_nagr# * (ras_q#/ras_nagr# - 0.33)) * 0.97) Then 
			q_qu_2 = ku_nom%(ku)
			Exit
		EndIf
		If ku = 32 Then q_qu_2 = ku_nom%(32)
	Next
	
	P_sum# = Float(p_p_mode$(tp_1)) + Float(p_p_mode$(tp_2)) + Float(p_p_rp$(rp_1)) + Float(p_p_rp$(rp_2)) + Float(p_p_rp$(rp_3)) + Float(p_p_rp$(rp_4))
	Q_sum# = Float(q_p_mode$(tp_1)) + Float(q_p_mode$(tp_2)) - q_qu_2 + Float(q_p_rp$(rp_1)) + Float(q_p_rp$(rp_2)) + Float(q_p_rp$(rp_3)) + Float(q_p_rp$(rp_4))
	
	tg# = Q_sum# / P_sum#
	
	Qqu# = P_sum# * (tg# - 0.33)
	
	For ku = 1 To 32
		If Int(ku_nom%(ku)) * n_tr >= (Qqu# * 0.97) Then 
			Qqu_2# = ku_nom%(ku)
			Exit
		EndIf
		If ku = 32 Then Qqu_2# = ku_nom%(32)
	Next
	
	S_sum# = Sqr(P_sum#^2 + (Q_sum# - (Qqu_2# * n_tr))^2)
	
	For e = 1 To 8
		k_z# = S_sum# / (n_tr * trans%(e))
		If k_z# >= (k_z_1# - delta_kz#) And k_z# <= (k_z_2# + delta_kz#) Then 
			Return trans%(e)
			Exit
		EndIf
	Next
	
End Function

Function kz_TP_2_ini(tp_1, n_tr_1, tp_2, rp_1, rp_2, rp_3, rp_4, k_z_1#, k_z_2#); ТП-1 и ТП-2 > 0, РП: 0 - 4
	
	If tp_1 > 0 And tp_2 > 0 And k_z_1# > 0 And k_z_2# > 0 Then
		
		Dim rp_1_kz_TP_2_ini_return (900000)
		Dim rp_2_kz_TP_2_ini_return (900000)
		Dim rp_3_kz_TP_2_ini_return (900000)
		Dim rp_4_kz_TP_2_ini_return (900000)
		
		Dim rp_1_kz_TP_2_ADD_return (900000)
		Dim rp_2_kz_TP_2_ADD_return (900000)
		Dim rp_3_kz_TP_2_ADD_return (900000)
		Dim rp_4_kz_TP_2_ADD_return (900000)
		
		Dim rp_add_hz_II (5)
		
		If rp_1 > 0 Then 
			n = n + 1
			rp_add_hz_II (n) = rp_1
		EndIf
		
		If rp_2 > 0 Then 
			n = n + 1
			rp_add_hz_II (n) = rp_2
		EndIf
		
		If rp_3 > 0 Then 
			n = n + 1
			rp_add_hz_II (n) = rp_3
		EndIf
		
		If rp_4 > 0 Then 
			n = n + 1
			rp_add_hz_II (n) = rp_4
		EndIf
		
		If n = 0 Then
			
			P_sum_II# = Float(p_p_mode$(tp_2))
			Q_sum_II# = Float(q_p_mode$(tp_2))
			
			If n_tr_1 = 1 Then
				P_sum_II# = P_sum_II# + Float(p_p_mode$(tp_1))
				Q_sum_II# = Q_sum_II# + Float(q_p_mode$(tp_1))
			EndIf
			
			tg_II# = Q_sum_II# / P_sum_II#
			Qqu_II# = P_sum_II# * (tg_II# - 0.33)
			
			For ku = 1 To 32
				If Int (ku_nom%(ku)) >= (Qqu_II# * 0.97) Then 
					Qqu_2_II# = ku_nom%(ku)
					Exit
				EndIf
				If ku = 32 Then Qqu_2_II# = ku_nom%(32)
			Next
			
			S_sum_II# = Sqr(P_sum_II#^2 + (Q_sum_II# - Qqu_2_II#)^2)
			
			For e_II = 1 To 8
				k_z_II# = S_sum_II# / trans%(e_II)
				If k_z_II# >= (k_z_1# - delta_kz#) And k_z_II# <= (k_z_2# + delta_kz#) Then	
					
					If TP_to_TP (tp_1, tp_2, k_z_II#, trans%(e_II), 0, 0) > 0 Then i_add = i_add + 1
					
					Exit
					
				EndIf
				
			Next
			
		ElseIf n > 0 Then
			
			For i = 1 To n
				end_str$ = end_str$ + "1"
			Next
			
			While str_t$ <> end_str$
				
				str_t$ = Bin$(a_dec)
				
				If Len(str_t$) > n% Then
					str_t$ = Right (str_t$, n%)
				ElseIf Len(str_t$) < n% 
					While Len(str_t$) < n%
						str_t$ = "0" + str_t$
					Wend
				EndIf
				
				rp_1_II = rp_add_hz_II (1)
				rp_2_II = rp_add_hz_II (2)
				rp_3_II = rp_add_hz_II (3)
				rp_4_II = rp_add_hz_II (4)
				
				For i = 1 To n%
					add_ini$ = Mid$ (str_t$, i, 1)
					If i = 1 And add_ini$ = "0" Then rp_1_II = 0
					If i = 2 And add_ini$ = "0" Then rp_2_II = 0
					If i = 3 And add_ini$ = "0" Then rp_3_II = 0
					If i = 4 And add_ini$ = "0" Then rp_4_II = 0
				Next
				
				p_en_II = 0
				
				If rp_1_II > 0 Then p_en_II = p_en_II + 1
				If rp_2_II > 0 Then p_en_II = p_en_II + 1
				If rp_3_II > 0 Then p_en_II = p_en_II + 1
				If rp_4_II > 0 Then p_en_II = p_en_II + 1
				
				P_sum_II# = Float(p_p_mode$(tp_2)) + Float(p_p_rp$(rp_1_II)) + Float(p_p_rp$(rp_2_II)) + Float(p_p_rp$(rp_3_II)) + Float(p_p_rp$(rp_4_II))
				Q_sum_II# = Float(q_p_mode$(tp_2)) + Float(q_p_rp$(rp_1_II)) + Float(q_p_rp$(rp_2_II)) + Float(q_p_rp$(rp_3_II)) + Float(q_p_rp$(rp_4_II))
				
				If n_tr_1 = 1 Then
					P_sum_II# = P_sum_II# + Float(p_p_mode$(tp_1))
					Q_sum_II# = Q_sum_II# + Float(q_p_mode$(tp_1))
				EndIf
				
				tg_II# = Q_sum_II# / P_sum_II#
				
				Qqu_II# = P_sum_II# * (tg_II# - 0.33)
				
				For ku = 1 To 32
					If Int (ku_nom%(ku)) >= (Qqu_II# * 0.97) Then 
						Qqu_2_II# = ku_nom%(ku)
						Exit
					EndIf
					If ku = 32 Then Qqu_2_II# = ku_nom%(32)
				Next
				
				S_sum_II# = Sqr(P_sum_II#^2 + (Q_sum_II# - Qqu_2_II#)^2)
				
				For e_II = 1 To 8
					k_z_II# = S_sum_II# / trans%(e_II)
					If k_z_II# >= (k_z_1# - delta_kz#) And k_z_II# <= (k_z_2# + delta_kz#) Then	
						
						rp_1_ini = 1
						rp_2_ini = 1
						rp_3_ini = 1
						rp_4_ini = 1
						
						If rp_1_II > 0 And rp_to_TP (tp_2, rp_1_II, Float(s_p_rp$(rp_1_II))) = 0 Then rp_1_ini = 0
						If rp_2_II > 0 And rp_to_TP (tp_2, rp_2_II, Float(s_p_rp$(rp_2_II))) = 0 Then rp_2_ini = 0
						If rp_3_II > 0 And rp_to_TP (tp_2, rp_3_II, Float(s_p_rp$(rp_3_II))) = 0 Then rp_3_ini = 0
						If rp_4_II > 0 And rp_to_TP (tp_2, rp_4_II, Float(s_p_rp$(rp_4_II))) = 0 Then rp_4_ini = 0
						
						If rp_1_ini = 1 And rp_2_ini = 1 And rp_3_ini = 1 And rp_4_ini = 1 Then
							
							P_dop_tp_2# = Float(p_p_rp$(rp_1_II)) + Float(p_p_rp$(rp_2_II)) + Float(p_p_rp$(rp_3_II)) + Float(p_p_rp$(rp_4_II))
							Q_dop_tp_2# = Float(q_p_rp$(rp_1_II)) + Float(q_p_rp$(rp_2_II)) + Float(q_p_rp$(rp_3_II)) + Float(q_p_rp$(rp_4_II))
							
							If TP_to_TP (tp_1, tp_2, k_z_II#, trans%(e_II), P_dop_tp_2#, Q_dop_tp_2#) > 0 Then
								
								i_add = i_add + 1
								rp_1_kz_TP_2_ini_return (i_add) = rp_1_II
								rp_2_kz_TP_2_ini_return (i_add) = rp_2_II
								rp_3_kz_TP_2_ini_return (i_add) = rp_3_II
								rp_4_kz_TP_2_ini_return (i_add) = rp_4_II
								
							EndIf
							
						EndIf
						
						If p_en_II >= 2 Then
							
							kol_var = rp_add_rp (tp_2, rp_1_II, rp_2_II, rp_3_II, rp_4_II)
							
							If kol_var > 0 Then
								
								For i = 1 To kol_var
									
									If rp_to_TP (tp_2, rp_add_rp_return_rp_1 (i), Float(s_p_rp$(rp_1_II))) > 0 Then
										
										rp_1_ini = 1
										rp_2_ini = 1
										rp_3_ini = 1
										rp_4_ini = 1
										
										rp_1_t = 0
										rp_2_t = 0
										rp_3_t = 0
										rp_4_t = 0
										
										If rp_1_II > 0 And rp_add_rp_return_rp_1(i) <> rp_1_II And rp_add_rp_return_rp_2(i) <> rp_1_II And rp_add_rp_return_rp_3(i) <> rp_1_II And rp_add_rp_return_rp_4(i) <> rp_1_II Then rp_1_ini = 0
										If rp_2_II > 0 And rp_add_rp_return_rp_1(i) <> rp_2_II And rp_add_rp_return_rp_2(i) <> rp_2_II And rp_add_rp_return_rp_3(i) <> rp_2_II And rp_add_rp_return_rp_4(i) <> rp_2_II Then rp_2_ini = 0
										If rp_3_II > 0 And rp_add_rp_return_rp_1(i) <> rp_3_II And rp_add_rp_return_rp_2(i) <> rp_3_II And rp_add_rp_return_rp_3(i) <> rp_3_II And rp_add_rp_return_rp_4(i) <> rp_3_II Then rp_3_ini = 0
										If rp_4_II > 0 And rp_add_rp_return_rp_1(i) <> rp_4_II And rp_add_rp_return_rp_2(i) <> rp_4_II And rp_add_rp_return_rp_3(i) <> rp_4_II And rp_add_rp_return_rp_4(i) <> rp_4_II Then rp_4_ini = 0
										
										If rp_1_ini = 0 Then
											If rp_to_TP (tp_2, rp_1_II, Float(s_p_rp$(rp_1_II))) = 1 Then 
												rp_1_ini = 1
												rp_1_t = rp_1_II
											EndIf
										EndIf
										
										If rp_2_ini = 0 Then
											If rp_to_TP (tp_2, rp_2_II, Float(s_p_rp$(rp_2_II))) = 1 Then 
												rp_2_ini = 1
												rp_2_t = rp_2_II
											EndIf
										EndIf
										
										If rp_3_ini = 0 Then
											If rp_to_TP (tp_2, rp_3_II, Float(s_p_rp$(rp_3_II))) = 1 Then 
												rp_3_ini = 1
												rp_3_t = rp_3_II
											EndIf
										EndIf
										
										If rp_4_ini = 0 Then
											If rp_to_TP (tp_2, rp_4_II, Float(s_p_rp$(rp_4_II))) = 1 Then 
												rp_4_ini = 1
												rp_4_t = rp_4_II
											EndIf
										EndIf
										
										If rp_1_ini = 1 And rp_2_ini = 1 And rp_3_ini = 1 And rp_4_ini = 1 Then
											
											P_dop_tp_2# = Float(p_p_rp$(rp_add_rp_return_rp_1(i))) + Float(p_p_rp$(rp_add_rp_return_rp_2(i))) + Float(p_p_rp$(rp_add_rp_return_rp_3(i))) + Float(p_p_rp$(rp_add_rp_return_rp_4(i))) + Float(p_p_rp$(rp_1_t)) + Float(p_p_rp$(rp_2_t)) + Float(p_p_rp$(rp_3_t)) + Float(p_p_rp$(rp_4_t))
											Q_dop_tp_2# = Float(q_p_rp$(rp_add_rp_return_rp_1(i))) + Float(q_p_rp$(rp_add_rp_return_rp_2(i))) + Float(q_p_rp$(rp_add_rp_return_rp_3(i))) + Float(q_p_rp$(rp_add_rp_return_rp_4(i))) + Float(q_p_rp$(rp_1_t)) + Float(q_p_rp$(rp_2_t)) + Float(q_p_rp$(rp_3_t)) + Float(q_p_rp$(rp_4_t))
											
											If n_tr_1 = 1 Then
												P_dop_tp_2# = P_dop_tp_2# + Float(p_p_mode$(tp_1))
												Q_dop_tp_2# = Q_dop_tp_2# + Float(q_p_mode$(tp_1))
											EndIf
											
											If TP_to_TP (tp_1, tp_2, k_z_II#, trans%(e_II), P_dop_tp_2#, Q_dop_tp_2#) > 0 Then
												
												i_add = i_add + 1
												
												rp_1_kz_TP_2_ADD_return (i_add) = rp_add_rp_return_rp_1(i)
												rp_2_kz_TP_2_ADD_return (i_add) = rp_add_rp_return_rp_2(i)
												rp_3_kz_TP_2_ADD_return (i_add) = rp_add_rp_return_rp_3(i)
												rp_4_kz_TP_2_ADD_return (i_add) = rp_add_rp_return_rp_4(i)
												
												If rp_1_t > 0 Then rp_1_kz_TP_2_ini_return (i_add) = rp_1_t
												If rp_2_t > 0 Then rp_2_kz_TP_2_ini_return (i_add) = rp_2_t
												If rp_3_t > 0 Then rp_3_kz_TP_2_ini_return (i_add) = rp_3_t
												If rp_4_t > 0 Then rp_4_kz_TP_2_ini_return (i_add) = rp_4_t
												
											EndIf
											
										EndIf
										
									EndIf
									
								Next
								
							EndIf
							
						EndIf
						
						Exit
					EndIf
				Next
				
				a_dec = a_dec + 1
				
			Wend
			
		EndIf
		
		Return i_add
		
	EndIf
	
End Function

Function TP_to_TP(tp_1, tp_2, k_z_2#, s_nom_tr_tp_2, P_dop_tp_2#, Q_dop_tp_2#)
	
	; только если ТП-1 > 0 и ТП-2 > 0 и Кз > 0 и Sном > 0
	; проверка возможности резервирования одной ТП II категории к другой ТП
	; k_z_2# - расчетный коэффициент загрузки резервируемой ТП-2
	; s_nom_tr_tp_2 - номинальная мощность трансформаторов резервируемой ТП-2
	;P_dop_tp_2# - суммарная активная мощность РП, подключенных к резервируемой ТП-2
	;Q_dop_tp_2# - суммарная реактивная мощность РП, подключенных к резервируемой ТП-2
	
	If tp_1 > 0 And tp_2 > 0 And k_z_2# > 0 And s_nom_tr_tp_2 > 0 Then
		
		For i = 1 To 8
			If trans (i) = s_nom_tr_tp_2 Then
				i_add = i
				Exit
			EndIf
		Next
		
		If trans (i_add) = 0 Then Return 0
		
		ras_nagr# = Float(p_p_mode$(tp_2)) + P_dop_tp_2#
		ras_q# = Float(q_p_mode$(tp_2)) + Q_dop_tp_2#
		
		For ku = 1 To 32
			If Int(ku_nom%(ku)) >= ((ras_nagr# * (ras_q#/ras_nagr# - 0.33)) * 0.97) Then 
				q_qu_2 = ku_nom%(ku)
				Exit
			EndIf
			If ku = 32 Then q_qu_2 = ku_nom%(32)
		Next
		
		If tp_type$(tp_2) = "ТСЗ" Then
			delta_p_tp# = delta_p_xx_tsz#(i_add) + (delta_p_kz_tsz#(i_add) * (k_z_2#^2))
			delta_q_xx# = (t_xx_tsz# (i_add) * s_nom_tr_tp_2) / 100
			delta_q_kz# = (u_kz_tsz# (i_add) * s_nom_tr_tp_2) / 100
			delta_q_tp# = delta_q_xx# + (delta_q_kz# * (k_z_2#^2))
		Else
			delta_p_tp# = delta_p_xx_tm#(i_add) + (delta_p_kz_tm#(i_add) * (k_z_2#^2))
			delta_q_xx# = (t_xx_tm# (i_add) * s_nom_tr_tp_2) / 100
			delta_q_kz# = (u_kz_tm# (i_add) * s_nom_tr_tp_2) / 100
			delta_q_tp# = delta_q_xx# + (delta_q_kz# * (k_z_2#^2))
		EndIf
		
		While kl_ini = 0
			
			n_line = n_line + 1
			
			If n_line > 4 Then Return 0
			
			s_nom_tp# = Sqr((ras_nagr# / n_line + delta_p_tp#)^2 + ((ras_q# - q_qu_2) / n_line + delta_q_tp#)^2)
			i_r_nom# = s_nom_tp# / (Sqr(3) * 0.4)
			i_r_nom_dop# = i_r_nom# / k_1_koef#(n_line)
			
			If kl_04_ini(tp_1, tp_2, i_r_nom_dop#) > 0 Then Return 1
			
		Wend
		
	EndIf
	
End Function

Function rp_to_TP(tp, rp, S_sum_rp#) 
	
	; только если ТП и РП больше 0
	; проверка возможности подключения одной РП (или связки) к ТП
	; S_sum_rp# - суммарная мощность связки РП
	
	If tp > 0 And rp > 0 And S_sum_rp# <= 330 Then
		
		While kl_ini = 0
			
			n_line = n_line + 1
			
			If n_line > 2 Then Return 0
			
			i_r# = S_sum_rp# / (n_line * Sqr(3) * 0.4)
			
			If kl_04_ini(tp, rp_ini(rp), i_r#) > 0 Then Return 1
			
		Wend
		
	EndIf
	
End Function

Function kl_04_ini(obj_1, obj_2, i_r#)
	
	l_kl_tp# = min_dist_ceh_to_ceh# (obj_1, obj_2)
	
	For acb = 4 To 12
		
		If Float(tok_acb_04$ (acb)) >= (i_r# * 1.05) Then
			L_dop# = Float(d_p_acb_04$(acb)) * 5 * (Float(tok_acb_04$(acb)) / i_r#)
			If l_kl_tp# < L_dop# Then Return s_acb_04$(acb)
		EndIf
		
		If acb = 12 Then
			Return 0
		EndIf
		
	Next
	
End Function

Function kl_vv_ini(obj_1, obj_2, i_r#)
	
			;If Int(u_raspred$) = 6 Then
			;For acb = 4 To 12
				;If Float(tok_aasv_6$ (acb)) >= (i_r#*1.05) And Float(s_aasv_6$(acb)) >= (I_r_n# / 1.4) * 1.1 Then
					;acb_tp = acb
					;L_dop# = Float(L_dp_aasv_6$(acb_tp)) * 10 * (Float(tok_aasv_6$ (acb)) / i_r#)
					;Exit
				;EndIf
			;Next
		;ElseIf Int(u_raspred$) = 10 Then
			;For acb = 3 To 11
				;If Float(tok_aasv_10$ (acb)) >= (i_r#*1.05) And Float(s_aasv_10$(acb)) >= (I_r_n# / 1.4) * 1.1 Then
					;acb_tp = acb
					;L_dop# = Float(L_dp_aasv_10$(acb_tp)) * 10 * (Float(tok_aasv_10$ (acb)) / i_r#)
					;Exit
				;EndIf
			;Next
		;EndIf
	
End Function

Function rp_to_rp(rp_1, rp_2, S_sum_rp#) 
	
	; только если РП-1 и РП-2 больше 0
	; проверка возможности подключения одной РП (или связки) к РП [addable]
	; S_sum_rp# - суммарная мощность связки РП
	
	If rp_1 > 0 And rp_2 > 0 And S_sum_rp# <= 330 And (rp_ini(rp_1) <> rp_ini(rp_2)) Then
		
		While kl_ini = 0
			
			n_line = n_line + 1
			If n_line > 2 Then Return 0
			i_r# = S_sum_rp# / (n_line * Sqr(3) * 0.4)
			If kl_04_ini(rp_ini(rp_1), rp_ini(rp_2), i_r#) > 0 Then Return 1
			
		Wend
		
	EndIf
	
End Function

Function rp_add_rp(tp, rp_1, rp_2, rp_3, rp_4) 
	
	; учитывает варианты, в которых ТП > 0 и количество РП - 2 и более
	; перебор всех возможных связок из РП (взаимоподключаемых по магистрали и без)
	
	If tp > 0 Then
		
		p_en = 0
		
		Dim rp_add_hz (5)
		
		If rp_1 > 0 Then 
			p_en = p_en + 1
			rp_add_hz (p_en) = rp_1
		EndIf
		
		If rp_2 > 0 Then 
			p_en = p_en + 1
			rp_add_hz (p_en) = rp_2
		EndIf
		
		If rp_3 > 0 Then 
			p_en = p_en + 1
			rp_add_hz (p_en) = rp_3
		EndIf
		
		If rp_4 > 0 Then 
			p_en = p_en + 1
			rp_add_hz (p_en) = rp_4
		EndIf
		
	EndIf
	
	If p_en >= 2 Then
		
		For q = 1 To p_en
			
			If q = 1 Then
				
				n_III = p_en - 1
				end_str_III$ = ""
				str_t_III$ = ""
				a_dec_III = 0
				
				For i = 1 To n_III
					end_str_III$ = end_str_III$ + "1"
				Next
				
				While str_t_III$ <> end_str_III$
					
					str_t_III$ = Bin$(a_dec_III)
					
					If Len(str_t_III$) > n_III Then
						str_t_III$ = Right (str_t_III$, n_III)
					ElseIf Len(str_t_III$) < n_III
						While Len(str_t_III$) < n_III
							str_t_III$ = "0" + str_t_III$
						Wend
					EndIf
					
					rp_2_III = 0
					rp_3_III = 0
					rp_4_III = 0
					
					rp_1_III = rp_add_hz (q)
					
					For i = 2 To p_en
						add_ini_III$ = Mid$ (str_t_III$, (i - 1), 1)
						If i = 2 And add_ini_III$ = "1" Then rp_2_III = rp_add_hz(2)
						If i = 3 And add_ini_III$ = "1" Then rp_3_III = rp_add_hz(3)
						If i = 4 And add_ini_III$ = "1" Then rp_4_III = rp_add_hz(4)
					Next
					
					S_sum_rp# = rp_add_ini (tp, rp_1_III, rp_2_III, rp_3_III, rp_4_III)
					
					If S_sum_rp# > 0 Then 
						
						rp_add_rp_ini = rp_add_rp_ini + 1
						
						rp_add_rp_return_rp_1 (rp_add_rp_ini) = rp_1_III
						rp_add_rp_return_rp_2 (rp_add_rp_ini) = rp_2_III
						rp_add_rp_return_rp_3 (rp_add_rp_ini) = rp_3_III
						rp_add_rp_return_rp_4 (rp_add_rp_ini) = rp_4_III
						
					EndIf
					
					a_dec_III = a_dec_III + 1
					
				Wend
				
			ElseIf q = 2 Then
				
				n_III = p_en - 1
				end_str_III$ = ""
				str_t_III$ = ""
				a_dec_III = 0
				
				For i = 1 To n_III
					end_str_III$ = end_str_III$ + "1"
				Next
				
				While str_t_III$ <> end_str_III$
					
					str_t_III$ = Bin$(a_dec_III)
					
					If Len(str_t_III$) > n_III Then
						str_t_III$ = Right (str_t_III$, n_III)
					ElseIf Len(str_t_III$) < n_III
						While Len(str_t_III$) < n_III
							str_t_III$ = "0" + str_t_III$
						Wend
					EndIf
					
					rp_2_III = 0
					rp_3_III = 0
					rp_4_III = 0
					
					rp_1_III = rp_add_hz (q)
					
					For i = 2 To p_en
						add_ini_III$ = Mid$ (str_t_III$, (i - 1), 1)
						If i = 2 And add_ini_III$ = "1" Then rp_2_III = rp_add_hz(1)
						If i = 3 And add_ini_III$ = "1" Then rp_3_III = rp_add_hz(3)
						If i = 4 And add_ini_III$ = "1" Then rp_4_III = rp_add_hz(4)
					Next
					
					S_sum_rp# = rp_add_ini (tp, rp_1_III, rp_2_III, rp_3_III, rp_4_III)
					
					If S_sum_rp# > 0 Then 
						rp_add_rp_ini = rp_add_rp_ini + 1
						
						rp_add_rp_return_rp_1 (rp_add_rp_ini) = rp_1_III
						rp_add_rp_return_rp_2 (rp_add_rp_ini) = rp_2_III
						rp_add_rp_return_rp_3 (rp_add_rp_ini) = rp_3_III
						rp_add_rp_return_rp_4 (rp_add_rp_ini) = rp_4_III
					EndIf
					
					a_dec_III = a_dec_III + 1
					
				Wend
				
			ElseIf q = 3 Then
				
				n_III = p_en - 1
				end_str_III$ = ""
				str_t_III$ = ""
				a_dec_III = 0
				
				For i = 1 To n_III
					end_str_III$ = end_str_III$ + "1"
				Next
				
				While str_t_III$ <> end_str_III$
					
					str_t_III$ = Bin$(a_dec_III)
					
					If Len(str_t_III$) > n_III Then
						str_t_III$ = Right (str_t_III$, n_III)
					ElseIf Len(str_t_III$) < n_III
						While Len(str_t_III$) < n_III
							str_t_III$ = "0" + str_t_III$
						Wend
					EndIf
					
					rp_2_III = 0
					rp_3_III = 0
					rp_4_III = 0
					
					rp_1_III = rp_add_hz (q)
					
					For i = 2 To p_en
						add_ini_III$ = Mid$ (str_t_III$, (i - 1), 1)
						If i = 2 And add_ini_III$ = "1" Then rp_2_III = rp_add_hz(1)
						If i = 3 And add_ini_III$ = "1" Then rp_3_III = rp_add_hz(2)
						If i = 4 And add_ini_III$ = "1" Then rp_4_III = rp_add_hz(4)
					Next
					
					S_sum_rp# = rp_add_ini (tp, rp_1_III, rp_2_III, rp_3_III, rp_4_III)
					
					If S_sum_rp# > 0 Then 
						rp_add_rp_ini = rp_add_rp_ini + 1
						
						rp_add_rp_return_rp_1 (rp_add_rp_ini) = rp_1_III
						rp_add_rp_return_rp_2 (rp_add_rp_ini) = rp_2_III
						rp_add_rp_return_rp_3 (rp_add_rp_ini) = rp_3_III
						rp_add_rp_return_rp_4 (rp_add_rp_ini) = rp_4_III
					EndIf
					
					a_dec_III = a_dec_III + 1
					
				Wend
				
			ElseIf q = 4 Then
				
				n_III = p_en - 1
				end_str_III$ = ""
				str_t_III$ = ""
				a_dec_III = 0
				
				For i = 1 To n_III
					end_str_III$ = end_str_III$ + "1"
				Next
				
				While str_t_III$ <> end_str_III$
					
					str_t_III$ = Bin$(a_dec_III)
					
					If Len(str_t_III$) > n_III Then
						str_t_III$ = Right (str_t_III$, n_III)
					ElseIf Len(str_t_III$) < n_III
						While Len(str_t_III$) < n_III
							str_t_III$ = "0" + str_t_III$
						Wend
					EndIf
					
					rp_2_III = 0
					rp_3_III = 0
					rp_4_III = 0
					
					rp_1_III = rp_add_hz (q)
					
					For i = 2 To p_en
						add_ini_III$ = Mid$ (str_t_III$, (i - 1), 1)
						If i = 2 And add_ini_III$ = "1" Then rp_2_III = rp_add_hz(1)
						If i = 3 And add_ini_III$ = "1" Then rp_3_III = rp_add_hz(2)
						If i = 4 And add_ini_III$ = "1" Then rp_4_III = rp_add_hz(3)
					Next
					
					S_sum_rp# = rp_add_ini (tp, rp_1_III, rp_2_III, rp_3_III, rp_4_III)
					
					If S_sum_rp# > 0 Then 
						rp_add_rp_ini = rp_add_rp_ini + 1
						
						rp_add_rp_return_rp_1 (rp_add_rp_ini) = rp_1_III
						rp_add_rp_return_rp_2 (rp_add_rp_ini) = rp_2_III
						rp_add_rp_return_rp_3 (rp_add_rp_ini) = rp_3_III
						rp_add_rp_return_rp_4 (rp_add_rp_ini) = rp_4_III
					EndIf
					
					a_dec_III = a_dec_III + 1
					
				Wend
			EndIf	
			
		Next
		
	EndIf
	
	Return rp_add_rp_ini
	
End Function

Function rp_add_ini#(tp = 0, rp_1, rp_2 = 0, rp_3 = 0, rp_4 = 0) 
	
	; только если количество подключаемых РП 2 и более, иначе возвращает 0
	; проверка возможности создания магистралей(связок) из РП, подключенных к ТП
	
	If rp_1 > 0 And (rp_2 > 0 Or rp_3 > 0 Or rp_4 > 0) And (rp_ini(rp_1) <> rp_ini(rp_2)) And (rp_ini(rp_1) <> rp_ini(rp_3)) And (rp_ini(rp_1) <> rp_ini(rp_4)) Then 
		
		S_sum_rp# = Float(s_p_rp$(rp_1))
		
		If rp_2 > 0 Then S_sum_rp# = S_sum_rp# + Float(s_p_rp$(rp_2))
		If rp_3 > 0 Then S_sum_rp# = S_sum_rp# + Float(s_p_rp$(rp_3))
		If rp_4 > 0 Then S_sum_rp# = S_sum_rp# + Float(s_p_rp$(rp_4))
		
		If rp_to_TP (tp, rp_1, S_sum_rp#) = 1 Or (tp = 0 And S_sum_rp# <= 330) Then
			
			rp_2_ini = 1
			rp_3_ini = 1
			rp_4_ini = 1
			
			If rp_2 > 0 And rp_to_rp (rp_1, rp_2, Float(s_p_rp$(rp_2))) = 0 Then rp_2_ini = 0
			If rp_3 > 0 And rp_to_rp (rp_1, rp_3, Float(s_p_rp$(rp_3))) = 0 Then rp_3_ini = 0
			If rp_4 > 0 And rp_to_rp (rp_1, rp_4, Float(s_p_rp$(rp_4))) = 0 Then rp_4_ini = 0
			
			If rp_2_ini = 1 And rp_3_ini = 1 And rp_4_ini = 1 Then
				Return S_sum_rp#
			Else
				Return 0
			EndIf
		Else
			Return -1
		EndIf
	Else
		Return -1
	EndIf
	
End Function

Function min_dist_ceh_to_ceh#(ceh_1, ceh_2, mode = 0)
	
	; mode = 0 - сумма катетов; 1 - гипотенуза
	
	kol_line_do = 0
	kol_line_do_2 = 0
	
	If kol_objects_mode <> kol_objects Then
		ceh_1 = obj_st_2_ini(ceh_1)
		ceh_2 = obj_st_2_ini(ceh_2)
	EndIf
	
	For k = 1 To (ceh_1 - 1)
		kol_line_do = kol_line_do + kol_line (k)
	Next
	
	For k = 1 To (ceh_2 - 1)
		kol_line_do_2 = kol_line_do_2 + kol_line (k)
	Next
	
	Dim l_point#(kol_objects + 1, kol_objects + 1, kol_line (ceh_1) + 1, kol_line (ceh_2) + 1)
	
	For k = 1 To kol_line (ceh_1)
		For kt = 1 To kol_line (ceh_2)
			l_point# (ceh_1, ceh_2, k, kt) = Float(mashtab$) * (Sqr(((x1(kol_line_do + k) - x1(kol_line_do_2 + kt))^2) + ((y1(kol_line_do + k) - y1(kol_line_do_2 + kt))^2)))
			If l_point# (ceh_1, ceh_2, k, kt) = 0 Then l_point# (ceh_1, ceh_2, k, kt) = 20
		Next
	Next
	
	min_dist_c_2_c# = l_point#(ceh_1, ceh_2, 1, 1)
	
	For k = 1 To kol_line (ceh_1)
		For kt = 1 To kol_line (ceh_2)
			If l_point#(ceh_1, ceh_2, k, kt) < min_dist_c_2_c# Then
				min_dist_c_2_c# = l_point#(ceh_1, ceh_2, k, kt)
				min_dist_c_2_c_x_1 = x1(kol_line_do + k)
				min_dist_c_2_c_y_1 = y1(kol_line_do + k)
				min_dist_c_2_c_x_2 = x1(kol_line_do_2 + kt)
				min_dist_c_2_c_y_2 = y1(kol_line_do_2 + kt)
			ElseIf l_point#(ceh_1, ceh_2, k, kt) = min_dist_c_2_c# Then
				min_dist_c_2_c_2# = l_point#(ceh_1, ceh_2, k, kt)
				min_dist_c_2_c_x_1_2 = x1(kol_line_do + k)
				min_dist_c_2_c_y_1_2 = y1(kol_line_do + k)
				min_dist_c_2_c_x_2_2 = x1(kol_line_do_2 + kt)
				min_dist_c_2_c_y_2_2 = y1(kol_line_do_2 + kt)
			EndIf
		Next
	Next
	
	If min_dist_c_2_c_2# <> min_dist_c_2_c#
		min_dist_c_2_c_x_1_2 = 0
		min_dist_c_2_c_y_1_2 = 0
		min_dist_c_2_c_x_2_2 = 0
		min_dist_c_2_c_y_2_2 = 0
	EndIf
	
	;Color 255, 255, 255
	
	;Line min_dist_c_2_c_x_1(ceh_1, ceh_2), min_dist_c_2_c_y_1(ceh_1, ceh_2), min_dist_c_2_c_x_2(ceh_1, ceh_2), min_dist_c_2_c_y_2(ceh_1, ceh_2)
	;Line min_dist_c_2_c_x_1_2(ceh_1, ceh_2), min_dist_c_2_c_y_1_2(ceh_1, ceh_2), min_dist_c_2_c_x_2_2(ceh_1, ceh_2), min_dist_c_2_c_y_2_2(ceh_1, ceh_2)
	
	If mode = 1 Then
		
		Return min_dist_c_2_c#
		
	ElseIf mode = 0 Then
		
		If min_dist_c_2_c_x_1 > min_dist_c_2_c_x_2 Then
			d_x = min_dist_c_2_c_x_1 - min_dist_c_2_c_x_2
		Else
			d_x = min_dist_c_2_c_x_2 - min_dist_c_2_c_x_1
		EndIf
		
		If min_dist_c_2_c_y_1 > min_dist_c_2_c_y_2 Then
			d_y = min_dist_c_2_c_y_1 - min_dist_c_2_c_y_2
		Else
			d_y = min_dist_c_2_c_y_2 - min_dist_c_2_c_y_1
		EndIf
		
		min_dist_c_2_c# = 1.06 * Float(mashtab$) * (d_x + d_y)
		
		If min_dist_c_2_c# = 0 Then min_dist_c_2_c# = 20
		
		Return min_dist_c_2_c#
		
	EndIf
	
End Function
(Offline)
 
Ответить с цитированием