forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Работа (http://forum.boolean.name/forumdisplay.php?f=162)
-   -   Работа в стартапе (http://forum.boolean.name/showthread.php?t=20225)

DarkInside 11.03.2016 21:32

Работа в стартапе
 
Интересно, а остались еще люди, готовые работать на энтузиазме? :) Есть парочка нишевых стартапов.

1) Первый проект уже был доведен до релиза и зарабатывал деньги. Но потом рынок изменился, проект стал неактуален и теперь либо каждые пол года писать такую программу, либо взять выше и писать систему для быстрой генерации таких программ. Склоняюсь ко второму варианту. Не откажусь от помощи, естественно, не за еду, а за процент.
Вкратце это экспертная система для автоматизации работы проектировщика - генерит чертежи AutoCAD и документацию к ним. Чертежи генерит скрипт на питоне, который надо допиливать. Документацию генерят скрипты AutoIT (тут проблем нет). Расчетный движок на блиц3д.
Самое простое для меня - это формулировать задание следующим образом: нужна функция, у которой на входе такие-то данные, на выходе должны быть такие-то данные. Без объяснения, для чего это надо и как оно будет интегрировано в проект. Грубо говоря, библиотека из функций, которые я мог бы самостоятельно собирать. И без разницы, на чем они, в принципе, написаны. В виде dll или в виде скриптов пайтон.

2) Второй проект более массовый, попроще и пока на стадии идеи. Тут не отказался бы от помощи по дизайну приложения (концепции, картинок и т.д.). То есть нужны свободные художники.

RegIon 11.03.2016 22:33

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

Я бы смог на питон переписать блитзовский проект, если он за собой не тянет 3d (Хотя есть же Coccos на этот случай)
Хотя кстати и генератор документации на питон не так сложно переписать с AutoIt.
Если это так востребовано, то можно поднять потом сервер, с питоном это не сложно будет

DarkInside 11.03.2016 22:57

Ответ: Работа в стартапе
 
Цитата:

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

Я бы смог на питон переписать блитзовский проект, если он за собой не тянет 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


RegIon 11.03.2016 23:26

Ответ: Работа в стартапе
 
PHP код:

If rp_1 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 (iThen rp_1_ini 0
                            
If rp_2 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 (iThen rp_2_ini 0
                            
If rp_3 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 (iThen rp_3_ini 0
                            
If rp_4 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 (iThen rp_4_ini 

Капец наркомания....проще будет заново написать наверное, с учетом фишек и финтефлюшек питона.

RegIon 11.03.2016 23:28

Ответ: Работа в стартапе
 
Цитата:

Сообщение от DarkInside (Сообщение 304756)
Вот один из чертежей, которые генерит программа

Чет типо такого просил чувак на Unity написать за 300р:-D:-D

DarkInside 11.03.2016 23:35

Ответ: Работа в стартапе
 
Цитата:

Сообщение от RegIon (Сообщение 304757)
Капец наркомания....проще будет заново написать наверное, с учетом фишек и финтефлюшек питона.

Да, там есть такие моменты :-D
Цитата:

Чет типо такого просил чувак на Unity написать за 300р
Чтоб генерило такие чертежи? :-D тут по-хорошему месяца 3 работы, и то если прижмет и писать по ночам...

Так вот...суть в том, что это единичная программа, которая генерит 9 чертежей и файл ворд на 60 страниц. А сейчас нужно писать программу, которая будет генерить такие программы для автоматического проектирования. То есть гораздо всё сложнее. Я неплохо ориентируюсь во всём этом проектировании, могу расписать логику, как проще сделать и что от чего зависит. Могу даже на блице это всё написать, но в питоне я слаб...
Тут так просто не въехать, это надо часа 1,5, чтобы объяснить, в чем заключается идея и как это должно выглядеть... Можно в мессенджере каком-нибудь или скайпе, если есть интерес...

RegIon 11.03.2016 23:46

Ответ: Работа в стартапе
 
Цитата:

Сообщение от DarkInside (Сообщение 304760)
Так вот...суть в том, что это единичная программа, которая генерит 9 чертежей и файл ворд на 60 страниц.

А зачем такая программа нужна, когда она генерирует однотипные чертежи всегда? :dontknow:
Не проще вручную написать?

Цитата:

А сейчас нужно писать программу, которая будет генерить такие программы для автоматического проектирования. То есть гораздо всё сложнее. Я неплохо ориентируюсь во всём этом проектировании, могу расписать логику, как проще сделать и что от чего зависит. Могу даже на блице это всё написать, но в питоне я слаб...
Что-то тут не так. Программа для генерации программы?
Не, так не пойдет. Нужна программа, которая на определенные входные данные выдаст определенный чертеж и документацию.
Иначе вообще геморой.

Что-то для меня все это слишком сложным кажется


Вот блин напасть: то никого, то сразу толпа предложений поработать.
За 3 дня уже 4:
  • Одногруппник ищет напарника для продаж
  • Чувак, который торгует медиавизуализацией, ищет программиста
  • Дарксинсйдеру нужен напарник
  • С HH.ru написали о наличии вакансии и хотят рассмотреть меня
А у меня дипломная практика и учеба парралельно.


DarkInside 11.03.2016 23:59

Ответ: Работа в стартапе
 
В том то и проблема, что чертежи не однотипные и файлы ворд не однотипные, то есть они постоянно изменяются кардинально. И пришлось бы каждый раз переписывать полностью программу каждые 3 месяца (это слишком долго и трудозатратно). Суть в том, грубо говоря, чтобы создать некий API (с графическим интерфейсом), который позволит без программирования создавать такие программы. То есть "пользователь" открывает пример документации в файле ворд, открывает параллельно нашу программу, выделяет цифровые значения в документации, нажимает кнопочку в программе - эти значения заносятся в базу, далее прописываются все связи этих значений, формулы, условия. Затем то же самое проделывает с чертежами (в большинстве случаев чертежи состоят из повторяющихся блоков, нужно лишь эти блоки занести в базу и назначить, что от чего зависит). Таким образом создается алгоритм проектирования. Далее пользователь использует получившийся алгоритм для автоматизации таких же по типу расчетов.
Ну потому и прибыльно, потому что сложно :-D На самом деле не так уж всё и сложно, просто надо въехать в концепцию, понять смысл...может я слишком сложно объясняю

RegIon 12.03.2016 00:07

Ответ: Работа в стартапе
 
Цитата:

Сообщение от DarkInside (Сообщение 304762)
В том то и проблема, что чертежи не однотипные и файлы ворд не однотипные, то есть они постоянно изменяются кардинально. И пришлось бы каждый раз переписывать полностью программу каждые 3 месяца (это слишком долго и трудозатратно). Суть в том, грубо говоря, чтобы создать некий API (с графическим интерфейсом), который позволит без программирования создавать такие программы. То есть "пользователь" открывает пример документации в файле ворд, открывает параллельно нашу программу, выделяет цифровые значения в документации, нажимает кнопочку в программе - эти значения заносятся в базу, далее прописываются все связи этих значений, формулы, условия. Затем то же самое проделывает с чертежами (в большинстве случаев чертежи состоят из повторяющихся блоков, нужно лишь эти блоки занести в базу и назначить, что от чего зависит). Таким образом создается алгоритм проектирования. Далее пользователь использует получившийся алгоритм для автоматизации таких же по типу расчетов.
Ну потому и прибыльно, потому что сложно :-D На самом деле не так уж всё и сложно, просто надо въехать в концепцию, понять смысл...может я слишком сложно объясняю

Тогда тебе нужно познать ДЗЕН написания техзадания, так какесли ты не один пишешь софт, то это минимально что нужно сделать.
В любом случае, как бы ты не объяснял человеку, который не владеет этой областью, то он не поймет всего что ты имел ввиду, пока сам не столкнется.
Да и с ТЗ тебе будет проще во много раз самому, так как нужно будет разрозненно модули писать, а не все в одной программе, а в голове все не удержишь.
И да, нужно продумать архитектуру такому проекту очень хорошо, что бы не было как у тебя сейчас в коде. А то даже не стырить, так как без грибов каких не разобраться

DarkInside 12.03.2016 00:17

Ответ: Работа в стартапе
 
Цитата:

Сообщение от RegIon (Сообщение 304763)
Тогда тебе нужно познать ДЗЕН написания техзадания, так какесли ты не один пишешь софт, то это минимально что нужно сделать.
В любом случае, как бы ты не объяснял человеку, который не владеет этой областью, то он не поймет всего что ты имел ввиду, пока сам не столкнется.

Согласен. Самое простое для меня - это формулировать задание следующим образом: нужна функция, у которой на входе такие-то данные, на выходе должны быть такие-то данные. Без объяснения, для чего это надо и как оно будет интегрировано в проект. Грубо говоря, библиотека из функций, которые я мог бы самостоятельно собирать. И без разницы, на чем они, в принципе, написаны. В виде dll или в виде скриптов пайтон. А чтобы понять концепцию, просто нужно знать историю, как эта вся каша заварилась и для чего она нужна, но это слишком личное и так сразу раскрывать не хотелось бы.

Цитата:

И да, нужно продумать архитектуру такому проекту очень хорошо, что бы не было как у тебя сейчас в коде. А то даже не стырить, так как без грибов каких не разобраться
Потому и выкладываю спокойно, не боюсь, что стырят :-D тк только я могу разобраться, что там понаписано. Но в этом и не нужно никому больше разбираться. Логику я сам напишу, нужно писать библиотеки. Например, нужна функция, которая добавляет стандартную рамку А1 в готовый чертеж DXF.

RegIon 12.03.2016 12:07

Ответ: Работа в стартапе
 
https://pypi.python.org/pypi/dxfwrite/

Эту библиотеку используешь?
Гугление вывело на эту штуку, ток она под .Net
https://netdxf.codeplex.com

Обновилась в декабре, а та аж в 2011

DarkInside 12.03.2016 12:12

Ответ: Работа в стартапе
 
Не, вот эту https://github.com/nycresistor/SDXF


Часовой пояс GMT +4, время: 07:00.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot