Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
321 / 289 / 104
Регистрация: 12.04.2011
Сообщений: 925

Задать конечное значение цикла, которое определяется в самом цикле

08.12.2012, 01:13. Показов 1336. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток всем.
Хотел попросить помощи в разрешении следующей задачи. Ниже привожу код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Option Explicit
Dim a As Double
Dim p As Double
Dim y As Double
Dim l() As Double
Dim i As Integer
Dim t As Double
Dim z As Double
Dim b As Double
Dim S_p As Double
Dim S_g As Double
Dim z_gl As Double
 
Private Sub Form_Load()
      p = 0.09
      y = 1.7
For i = 1 To ??? Step 0.1 'вопросы "???" поставил т.к. не знаю как поступать в данном случае
      z = i - 0.1 / 2
      If z <= 0 Then a = 0
      m = 2 * z / b
      If 0 < m <= 0.4 Then a = 1 - (1 - 0.96) / 40 * (m - 0)
      If 0.4 < m <= 0.8 Then a = 0.96 - (0.96 - 0.8) * (m - 0.4) / 40
      If 0.8 < m <= 1.2 Then a = 0.8 - (0.8 - 0.606) * (m - 0.8) / 40
      If 1.2 < m <= 1.6 Then a = 0.606 - (0.606 - 0.449) * (m - 1.2) / 40
      If 1.6 < m <= 2 Then a = 0.449 - (0.449 - 0.336) * (m - 1.6) / 40
      If 2 < m <= 2.4 Then a = 0.336 - (0.336 - 0.26) * (m - 2) / 40
      If 2.4 < m <= 2.8 Then a = 0.26 - (0.26 - 0.2) * (m - 2.4) / 40
      If 2.8 < m <= 3.2 Then a = 0.2 - (0.2 - 0.13) * (m - 2.8) / 40
 
S_p = a * p
S_g = i * y
      'в следующей строке при выполнении условия необходимо присвоить переменной z_gl значение i - которое и будет 
      'являться конечным значением цикла.
      'ну или просто использовать значение элемента i при подстановке которого, данное условие выполняется
 
'Я понимаю, что можно указать конечный размер цикла значительно больше, того что будет получаться 
'из условия S_g >= S_p * 0.2 и по выполнению условия выполнять выход из цикла
     
      If S_g >= S_p * 0.2 Then z_gl = i  [and Exit For]
      'как сделать выход из цикла при выполнении данного условия или же лучше использовать другую конструкцию циклов
Next i
End Sub
И в заключении хотел спросить, как вывести значения данных a, S_p и S_g в окне или таблице с возможностью прокрутки.
Или же для удобства вывода этих значений необходимо использовать массив?
Всем откликнувшимся спасибо и буду благодарен за различные советы.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.12.2012, 01:13
Ответы с готовыми решениями:

Как задать значение переменной которое введено в Edit?
Как задать значение переменной которое введено в Edit? вообщем чтобы из Edit значение поподало в переменную к примеру: ... var ...

В цикле от 1 до 200 суммировать текущее значение счетчиков цикла
Здравствуйте, уважаемые форумчане. Помогите, пожалуйста, решить задачу. В цикле от 1 до 200 суммировать текущее значение...

Как Насипов узнал, что в цикле максимальное значение счетчика цикла пересчитывается на каждой итерации?
Курс ведет Гилев, но они вместе с Насиповым сейчас делают этот курс. Не суть. В общем, процитирую близко к тексту. Для Индекс =...

13
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
08.12.2012, 04:16
Лучший ответ Сообщение было отмечено как решение

Решение

как сделать выход из цикла при выполнении данного
Ну так они и называются циклы с условием.
Старый вариант, но до сих пор рабочий
Visual Basic
1
2
3
While S_g >= S_p * 0.2
 
Wend
поновей

Visual Basic
1
2
3
Do
 
Loop While S_g >= S_p * 0.2
Добавлено через 2 минуты
с возможностью прокрутки.
Да куда-нибудь: в список, текстбокс, грид где есть прокрутка

Добавлено через 4 минуты
Visual Basic
1
m = 2 * z / b
деление на 0 - не задана b

Добавлено через 3 минуты
Visual Basic
1
  If 0 < m <= 0.4 Then
неправильно. Надо так:
Visual Basic
1
If 0 < m And m <= 0.4 Then
0
 Аватар для Апострофф
9908 / 3928 / 742
Регистрация: 11.10.2011
Сообщений: 5,908
08.12.2012, 07:59
Цитата Сообщение от proft Посмотреть сообщение
If 0 < m <= 0.4 Then a = 1 - (1 - 0.96) / 40 * (m - 0)
If 0.4 < m <= 0.8 Then a = 0.96 - (0.96 - 0.8) * (m - 0.4) / 40
If 0.8 < m <= 1.2 Then a = 0.8 - (0.8 - 0.606) * (m - 0.8) / 40
If 1.2 < m <= 1.6 Then a = 0.606 - (0.606 - 0.449) * (m - 1.2) / 40
If 1.6 < m <= 2 Then a = 0.449 - (0.449 - 0.336) * (m - 1.6) / 40
If 2 < m <= 2.4 Then a = 0.336 - (0.336 - 0.26) * (m - 2) / 40
If 2.4 < m <= 2.8 Then a = 0.26 - (0.26 - 0.2) * (m - 2.4) / 40
If 2.8 < m <= 3.2 Then a = 0.2 - (0.2 - 0.13) * (m - 2.8) / 40
Alex77755 дал правильную поправку,
а исходя из конкретной задачи можно и сократить вычисления как-то так-
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if m<=0 or m>3.2 then
  msgbox "Неверные данные"
elseIf m <= 0.4 Then
    a = 1 - (1 - 0.96) / 40 * (m - 0)
elseIf m <= 0.8 Then
    a = 0.96 - (0.96 - 0.8) * (m - 0.4) / 40
elseIf m <= 1.2 Then
    a = 0.8 - (0.8 - 0.606) * (m - 0.8) / 40
elseIf m <= 1.6 Then
    a = 0.606 - (0.606 - 0.449) * (m - 1.2) / 40
elseIf m <= 2 Then
    a = 0.449 - (0.449 - 0.336) * (m - 1.6) / 40
elseIf m <= 2.4 Then
    a = 0.336 - (0.336 - 0.26) * (m - 2) / 40
elseIf m <= 2.8 Then
    a = 0.26 - (0.26 - 0.2) * (m - 2.4) / 40
elseIf m <= 3.2 Then
    a = 0.2 - (0.2 - 0.13) * (m - 2.8) / 40
endif
0
321 / 289 / 104
Регистрация: 12.04.2011
Сообщений: 925
08.12.2012, 11:05  [ТС]
Вроде всё ясно, спасибо.
Вот написал код проги, с учётом вышей помощи и рекомендаций, НО почему-то виснет...
И к сожалению не знаю как выкладывать в
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Option Explicit
Dim a As Double
Dim p As Double
Dim m As Double
Dim y As Double
Dim i As Integer
Dim k As Double
Dim z As Double
Dim b As Double
Dim S_p As Double
Dim S_g As Double
Dim z_gl As Double
Private Sub Form_Load()
      p = 0.09
      y = 1.7
      i = 0
      k = 0.2
      b = 2 'ширина
Do
      z = i - k / 2
      m = 2 * z / b
 
If m <= 0 Then
    a = 0
ElseIf m <= 0.4 Then
    a = 1 - (1 - 0.96) / 40 * (m - 0)
ElseIf m <= 0.8 Then
    a = 0.96 - (0.96 - 0.8) * (m - 0.4) / 40
ElseIf m <= 1.2 Then
    a = 0.8 - (0.8 - 0.606) * (m - 0.8) / 40
ElseIf m <= 1.6 Then
    a = 0.606 - (0.606 - 0.449) * (m - 1.2) / 40
ElseIf m <= 2 Then
    a = 0.449 - (0.449 - 0.336) * (m - 1.6) / 40
ElseIf m <= 2.4 Then
    a = 0.336 - (0.336 - 0.26) * (m - 2) / 40
ElseIf m <= 2.8 Then
    a = 0.26 - (0.26 - 0.2) * (m - 2.4) / 40
ElseIf m <= 3.2 Then
    a = 0.2 - (0.2 - 0.13) * (m - 2.8) / 40
ElseIf m > 3.2 Then
  MsgBox "Неверно введены данные"
End If
 
      z_gl = i
      i = i + k
      Print z_gl   'не знаю как вывести данные в список
Loop While S_g >= S_p * 0.2
 
End Sub
Добавлено через 10 минут
Я тут на форуме нашёл, похоже, похожий примерчик, вот что получилось:
Но прога всё равно зависает, не запускается..в чём дело?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Option Explicit
'на форме TextBox
Dim a As Double
Dim p As Double
Dim m As Double
Dim y As Double
Dim i As Integer
Dim k As Double
Dim z As Double
Dim b As Double
Dim S_p As Double
Dim S_g As Double
Dim z_gl As Double
Private Sub Form_Load()
      p = 0.09
      y = 1.7
      i = 0
      k = 0.2
      b = 2 'ширина
Do
      z = i - k / 2
      m = 2 * z / b
 
If m <= 0 Then
    a = 0
ElseIf m <= 0.4 Then
    a = 1 - (1 - 0.96) / 40 * (m - 0)
ElseIf m <= 0.8 Then
    a = 0.96 - (0.96 - 0.8) * (m - 0.4) / 40
ElseIf m <= 1.2 Then
    a = 0.8 - (0.8 - 0.606) * (m - 0.8) / 40
ElseIf m <= 1.6 Then
    a = 0.606 - (0.606 - 0.449) * (m - 1.2) / 40
ElseIf m <= 2 Then
    a = 0.449 - (0.449 - 0.336) * (m - 1.6) / 40
ElseIf m <= 2.4 Then
    a = 0.336 - (0.336 - 0.26) * (m - 2) / 40
ElseIf m <= 2.8 Then
    a = 0.26 - (0.26 - 0.2) * (m - 2.4) / 40
ElseIf m <= 3.2 Then
    a = 0.2 - (0.2 - 0.13) * (m - 2.8) / 40
ElseIf m > 3.2 Then
  MsgBox "Неверно введены данные"
End If
 
      z_gl = i
      i = i + k
      Combo1.AddItem "z_gl=" & Format(z_gl, "0.000")
 Next x
 
Loop While S_g >= S_p * 0.2
 
End Sub
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
08.12.2012, 16:51
Ты в блокноте что ли запускаешь?
Ну бейсик же сам показывает ошибки
1. Не объявлен Х
2. Не нужен Next Х потому, что не было For
И в цикле пока поставь DoEvents сразу после Do а то можешь не дождаться завершения если что-то не сраслось

Добавлено через 10 минут
Но самое интересное - условие выхода из цикла!!
Visual Basic
1
While S_g >= S_p * 0.2
Да никогда не выйдет!! Эти переменные только объявлены и нигде в вычислениях не участвуют.
В зависимости от условий вычисляется какая - то "а", которая ни на что не влияет

Добавлено через 22 минуты
Опубликовал бы задание - проще было бы понять, что ты хочешь и найти ошибки в коде

Добавлено через 2 часа 57 минут
Dim i As Integer
i = 0
k = 0.2
i = i + k
Про типы данных слышал?
Integer – целое число. Значение переменной занимает 2Б памяти;
Хоть миллион миллионов раз прибавляй по 0.2 результат не изменится.
Поменяй на
Visual Basic
1
Dim i As Double
1
321 / 289 / 104
Регистрация: 12.04.2011
Сообщений: 925
09.12.2012, 00:34  [ТС]
Алекс! Во-первых - вроде всё получилось, а во-вторых - возникла другая проблемка ..))
А по поводу задания, там ничего особого, просто немного увлекаюсь (скажем так ) и решил на работе кое что автоматизировать. Это небольшой кусок, в котором у меня и возникла проблемка и с которой Вы мне помогли справиться =)
А проблемка конкретно вот в чём - ругаетсО на строку 61. Хотел сделать счётчик, который соблюдал нумерацию в 1 колонке таблицы, в зависимости от количества - i. Первоначально это хотел сделать через цикл, строки - 77-79, но их убрал и хотел сделать как в строке - 61. Ни в 77-79, ни в 61, строках - не получается Может что-то ещё посоветуете для представления вышеиспользуемых переменных в табличной форме,как я пытаюсь представить. На листбокс не обращайте внимания - это так...для пробы. В любом случае СПАСИБО =)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
Option Explicit
Dim a As Double
Dim p As Double
Dim m As Double
Dim y As Double
Dim i As Double
Dim k As Double
Dim z As Double
Dim b As Double
Dim S_p As Double
Dim S_g As Double
Dim z_gl, x, j As Double
Dim ch As Integer       
 
Private Sub Form_Load()
'Таблица 1
MSFlexGrid1.Clear
Tabl
MSFlexGrid1.ColWidth(0) = 500 '    
Me.Caption = "TABL"
WindowState = 2
 
      p = 120          
      y = 1.7          
      i = 0           
      k = 0.2          
                        
      b = 2             
      ch = 0            
Do
      z = i - k / 2
      m = 2 * z / b
 
If m <= 0 Then
    a = 1
ElseIf m <= 0.4 Then
    a = 1 - (1 - 0.96) / 40 * (m - 0)
ElseIf m <= 0.8 Then
    a = 0.96 - (0.96 - 0.8) * (m - 0.4) / 40
ElseIf m <= 1.2 Then
    a = 0.8 - (0.8 - 0.606) * (m - 0.8) / 40
ElseIf m <= 1.6 Then
    a = 0.606 - (0.606 - 0.449) * (m - 1.2) / 40
ElseIf m <= 2 Then
    a = 0.449 - (0.449 - 0.336) * (m - 1.6) / 40
ElseIf m <= 2.4 Then
    a = 0.336 - (0.336 - 0.26) * (m - 2) / 40
ElseIf m <= 2.8 Then
    a = 0.26 - (0.26 - 0.2) * (m - 2.4) / 40
ElseIf m <= 3.2 Then
    a = 0.2 - (0.2 - 0.13) * (m - 2.8) / 40
ElseIf m > 3.2 Then
  MsgBox "Неверные данные"
End If
 
S_g = i * y
S_p = p * a
      z_gl = i
      i = i + k
      ch = ch + 1
      MSFlexGrid1.TextMatrix(ch, 1) = ch
      List1.AddItem "z_gl=" & Format(z_gl, "0.000")
Loop While S_g <= S_p * 0.2
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Объединение ячеек в таблице
         With MSFlexGrid1
                .Rows = 15
                .Cols = 10
                    For j = 1 To 7
                        .MergeCells = flexMergeFree
                        .TextMatrix(0, j) = "Наименование"
                        .TextMatrix(0, 0) = "№ п/п"
                        
                        .MergeRow(0) = True
                    Next j
         End With
                  'For j = 1 To ch
                   '     MSFlexGrid1.TextMatrix(j, 0) = j
                  'Next j
End Sub
Sub Tabl()    '   таблица 1
End Sub
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
09.12.2012, 09:54
хотел сделать как в строке - 61
ну а что ж не сделал?
Tabl - рудимент! убрать
концовка процедуры такая(не понял зачем обединение - убрал. Если нужно - добавь
Строки в таком случае лучше добавлять по необходимости
Visual Basic
1
2
3
4
5
6
7
8
9
10
      i = i + k
      ch = ch + 1
      MSFlexGrid1.Rows = ch + 1
      MSFlexGrid1.TextMatrix(ch, 0) = ch
      MSFlexGrid1.TextMatrix(ch, 1) = i
      List1.AddItem "z_gl=" & Format(z_gl, "0.000")
Loop While S_g <= S_p * 0.2
MSFlexGrid1.ColAlignment(0) = 3 'центровка
MSFlexGrid1.ColAlignment(0) = 3
End Sub
Добавлено через 6 минут
в 9 строке вместо 0 должна быть 1
0
321 / 289 / 104
Регистрация: 12.04.2011
Сообщений: 925
09.12.2012, 10:53  [ТС]
СПАСИБО огромное))) Переменной, которая объявлена в 9 строке, я присвоил - 2 ( 28 строка). Я учёл замечания в посте выше)) И хотел спросить, что такое рудимент ?))
Алекс, и каким образом можно сделать ширину и длину данной таблицы в зависимости от создаваемых столбцов и строк. Типа AutoSize в Label.
Спасибо =)
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
09.12.2012, 10:57
длину данной таблицы
имеется в виду количество строк? то в цикле это задаётся
Visual Basic
1
2
  ch = ch + 1
  MSFlexGrid1.Rows = ch + 1
0
321 / 289 / 104
Регистрация: 12.04.2011
Сообщений: 925
09.12.2012, 13:06  [ТС]
Не совсем то, я имел ввиду видимость таблицы по ширине. Ширина таблицы будет на половину формы. Чтобы не использовать горизонтальную прокрутку, а была наглядность - все колонки были видны. Конечно можно просто подбить ширину, а можно ли это сделать автоматически?
А что такое - рудимент?))
И вот, посмотрите что получается..на данном этапе =)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
Option Explicit
Dim a As Double
Dim p As Double
Dim m As Double
Dim y As Double
Dim i As Double
Dim k As Double
Dim z As Double
Dim b As Double
Dim S_p As Double
Dim S_g As Double
Dim z_gl, x, j As Double
Dim ch As Integer       'ñ÷¸ò÷èê êîëè÷åñòâà - ïîðÿäêîâûé íîìåð
Dim S_z_ad As Double
Dim S_z_tot As Double
Dim L_w, B_w As Double
Dim k_g As Double
Dim k_sw As Double
Private Sub Check1_Click()
If Check1 = True Then MSFlexGrid1.TextMatrix(ch, 6) = Format(1, "0.0") Else MSFlexGrid1.TextMatrix(ch, 6) = Format(0, "0.000")
End Sub
Private Sub Form_Load()
'Òàáëèöà ¹1
MSFlexGrid1.Clear
Me.Caption = "TABL"
WindowState = 2
 
      p = 80           'ÄÀÂËÅÍÈÅ ÏÎÄ ÏÎÄÎØÂÎÉ ÔÓÍÄÀÌÅÍÒÀ ÒÑ/Ì2
      y = 1.7           'óäåëüíûé âåñ ãðóíòà ïîä ïîäîøâîé ôóíäàìåíòà
      i = 0             'çíà÷åíèå ñ÷¸ò÷èêà äëÿ îïðåäåëåíèÿ ãëóáèíû îò ïîäîøâû ôóíäàìåíòà äî íèçà ñëîÿ ãðóíòà
      k = 0.15           'òîëùèíà ñëîÿ ãðóíòà ïîä êîòîðûì îïðåäåëÿåòñÿ äàâëåíèå
                        '(òîëùèíà ñëîÿ íà êîòîðûé ðàçáèâàåòñÿ òîëùà ïîä îñíîâàíèåì)
      b = 2             'øèðèíà ôóíäàìåíòà
      ch = 0            'ñ÷¸ò÷èê äëÿ ïîðÿäêîâîãî íîìåðà â 1 êîëîíêå 1 òàáëèöû
Do
      z = i - k / 2
      m = 2 * z / b
 
If m <= 0 Then
    a = 1
ElseIf m <= 0.4 Then
    a = 1 - (1 - 0.96) / 40 * (m - 0)
ElseIf m <= 0.8 Then
    a = 0.96 - (0.96 - 0.8) * (m - 0.4) / 40
ElseIf m <= 1.2 Then
    a = 0.8 - (0.8 - 0.606) * (m - 0.8) / 40
ElseIf m <= 1.6 Then
    a = 0.606 - (0.606 - 0.449) * (m - 1.2) / 40
ElseIf m <= 2 Then
    a = 0.449 - (0.449 - 0.336) * (m - 1.6) / 40
ElseIf m <= 2.4 Then
    a = 0.336 - (0.336 - 0.26) * (m - 2) / 40
ElseIf m <= 2.8 Then
    a = 0.26 - (0.26 - 0.2) * (m - 2.4) / 40
ElseIf m <= 3.2 Then
    a = 0.2 - (0.2 - 0.13) * (m - 2.8) / 40
ElseIf m <= 3.6 Then
      a = 0.13 - (0.13 - 0.106) * (m - 3.2) / 40
ElseIf m <= 4 Then
      a = 0.106 - (0.106 - 0.087) * (m - 3.6) / 40
ElseIf m <= 4.4 Then
      a = 0.087 - (0.087 - 0.073) * (m - 4) / 40
ElseIf m <= 4.8 Then
      a = 0.073 - (0.073 - 0.062) * (m - 4.4) / 40
ElseIf m <= 5.2 Then
      a = 0.062 - (0.062 - 0.053) * (m - 4.8) / 40
ElseIf m <= 5.6 Then
      a = 0.053 - (0.053 - 0.046) * (m - 5.2) / 40
ElseIf m <= 6 Then
      a = 0.046 - (0.046 - 0.04) * (m - 5.6) / 40
ElseIf m <= 6.4 Then
      a = 0.04 - (0.04 - 0.036) * (m - 6) / 40
ElseIf m <= 6.8 Then
      a = 0.036 - (0.036 - 0.032) * (m - 6.4) / 40
ElseIf m <= 7.2 Then
      a = 0.032 - (0.032 - 0.028) * (m - 6.8) / 40
ElseIf m <= 7.6 Then
      a = 0.028 - (0.028 - 0.024) * (m - 7.2) / 40
ElseIf m <= 8# Then
      a = 0.024 - (0.024 - 0.022) * (m - 7.6) / 40
ElseIf m <= 8.4 Then
      a = 0.022 - (0.022 - 0.021) * (m - 8#) / 40
ElseIf m <= 8.8 Then
      a = 0.021 - (0.021 - 0.019) * (m - 8.4) / 40
ElseIf m <= 9.2 Then
      a = 0.019 - (0.019 - 0.018) * (m - 8.8) / 40
ElseIf m <= 9.6 Then
      a = 0.018 - (0.018 - 0.016) * (m - 9.2) / 40
ElseIf m <= 10 Then
      a = 0.016 - (0.016 - 0.015) * (m - 9.6) / 40
ElseIf m > 10 Then a = 0.015 - (0.015 - 0.011) * (m - 10) / 40
  MsgBox "Íåâåðíî ââåäåíû äàííûå"
End If
 
S_g = i * y
S_p = p * a
      z_gl = i
 
      i = i + k         'ñóììàðíàÿ ãëóáèíà äî îòìåòêè ñëåäóþùåãî ñëîÿ
      ch = ch + 1       'ñ÷¸ò÷èê, ïîðÿäêîâûé, â çàâèñèìîñòè îò ÷èñëà
                        'ñëî¸â íà êîòîðûå ðàçáèòî ïîäîøâåííîå îñíîâàíèå
      MSFlexGrid1.Rows = ch + 1
      MSFlexGrid1.Cols = 10
      MSFlexGrid1.ColWidth(0) = 700 '     øèðèíà 0 êîëîíêè
      MSFlexGrid1.ColWidth(1) = 1200 '    øèðèíà 1 êîëîíêè
      MSFlexGrid1.ColWidth(2) = 1200 '     øèðèíà 0 êîëîíêè
'ÇÀÃÎËÎÂÊÈ ñòîëáöîâ òàáëèöû
      MSFlexGrid1.TextMatrix(0, 0) = "¹ ï/ï"
      MSFlexGrid1.TextMatrix(0, 1) = "îò ÏÃ äî ñëîÿ"
      MSFlexGrid1.TextMatrix(0, 2) = "òîëùèíà ñëîÿ"
      MSFlexGrid1.TextMatrix(0, 3) = "àëüôà à"
      MSFlexGrid1.TextMatrix(0, 4) = "S_zp"
      MSFlexGrid1.TextMatrix(0, 5) = "S_zg"
      MSFlexGrid1.TextMatrix(0, 6) = "S_z_ad"
      MSFlexGrid1.TextMatrix(0, 7) = "S_z_tot"
      MSFlexGrid1.TextMatrix(0, 8) = "k_g"
      MSFlexGrid1.TextMatrix(0, 9) = "k_sw"
      
      
      MSFlexGrid1.TextMatrix(ch, 0) = ch
      MSFlexGrid1.TextMatrix(ch, 1) = i - k
      MSFlexGrid1.TextMatrix(ch, 2) = Format(k, "0.0")
      MSFlexGrid1.TextMatrix(ch, 3) = Format(a, "0.0000")
      MSFlexGrid1.TextMatrix(ch, 4) = Format(S_p, "0.0000")
      MSFlexGrid1.TextMatrix(ch, 5) = Format(S_g, "0.0000")
      
      'List1.AddItem "z_gl=" & Format(z_gl, "0.000")
Loop While S_p > S_g * 0.2
 
MSFlexGrid1.ColAlignment(0) = 3 'öåíòðîâêà 0 ñòîëáöà
MSFlexGrid1.ColAlignment(1) = 3 'öåíòðîâêà 1 ñòîëáöà
MSFlexGrid1.ColAlignment(2) = 3 'öåíòðîâêà 2 ñòîëáöà
MSFlexGrid1.ColAlignment(3) = 3 'öåíòðîâêà 3 ñòîëáöà
MSFlexGrid1.ColAlignment(4) = 3 'öåíòðîâêà 3 ñòîëáöà
MSFlexGrid1.ColAlignment(5) = 3 'öåíòðîâêà 3 ñòîëáöà
MSFlexGrid1.ColAlignment(6) = 3 'öåíòðîâêà 3 ñòîëáöà
MSFlexGrid1.ColAlignment(7) = 3 'öåíòðîâêà 3 ñòîëáöà
MSFlexGrid1.ColAlignment(8) = 3 'öåíòðîâêà 3 ñòîëáöà
MSFlexGrid1.ColAlignment(9) = 3 'öåíòðîâêà 3 ñòîëáöà
End Sub
Когда уменьшил шаг (k) до 0.15 и если уменьшать ещё, к примеру до 0.1 или 0.05, то при запуске программы во 2 колонке, где выполняется сложение i=i+k, с 45 строки в ячейках записывается непонятный набор множества цифр...хм...с чём это может быть связано??
И ещё вот такой вопросик)
На форму добавил CheckBox.
И в 20 строке записал условие для CheckBox. Чёт не арбайтен
Спасибо!!!
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
09.12.2012, 15:21
Ну, как я понял, примерно так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
Option Explicit
Dim a As Double
Dim p As Double
Dim m As Double
Dim y As Double
Dim i As Double
Dim k As Double
Dim z As Double
Dim b As Double
Dim S_p As Double
Dim S_g As Double
Dim z_gl, x, j As Double
Dim ch As Integer       'счётчик количества - порядковый номер
Dim S_z_ad As Double
Dim S_z_tot As Double
Dim L_w, B_w As Double
Dim k_g As Double
Dim k_sw As Double
 
 
Private Sub Check1_Click()
RESIZ
End Sub
 
 
Private Sub Form_Load()
RESIZ
End Sub
 
 
 Sub RESIZ()
 'Таблица №1
MSFlexGrid1.Clear
Me.Caption = "TABL"
WindowState = 2
 
      p = 80           'ДАВЛЕНИЕ ПОД ПОДОШВОЙ ФУНДАМЕНТА ТС/М2
      y = 1.7           'удельный вес грунта под подошвой фундамента
      i = 0             'значение счётчика для определения глубины от подошвы фундамента до низа слоя грунта
      k = 0.05           'толщина слоя грунта под которым определяется давление
                        '(толщина слоя на который разбивается толща под основанием)
      b = 2             'ширина фундамента
      ch = 0            'счётчик для порядкового номера в 1 колонке 1 таблицы
Do
      z = i - k / 2
      m = 2 * z / b
 
If m <= 0 Then
    a = 1
ElseIf m <= 0.4 Then
    a = 1 - (1 - 0.96) / 40 * (m - 0)
ElseIf m <= 0.8 Then
    a = 0.96 - (0.96 - 0.8) * (m - 0.4) / 40
ElseIf m <= 1.2 Then
    a = 0.8 - (0.8 - 0.606) * (m - 0.8) / 40
ElseIf m <= 1.6 Then
    a = 0.606 - (0.606 - 0.449) * (m - 1.2) / 40
ElseIf m <= 2 Then
    a = 0.449 - (0.449 - 0.336) * (m - 1.6) / 40
ElseIf m <= 2.4 Then
    a = 0.336 - (0.336 - 0.26) * (m - 2) / 40
ElseIf m <= 2.8 Then
    a = 0.26 - (0.26 - 0.2) * (m - 2.4) / 40
ElseIf m <= 3.2 Then
    a = 0.2 - (0.2 - 0.13) * (m - 2.8) / 40
ElseIf m <= 3.6 Then
      a = 0.13 - (0.13 - 0.106) * (m - 3.2) / 40
ElseIf m <= 4 Then
      a = 0.106 - (0.106 - 0.087) * (m - 3.6) / 40
ElseIf m <= 4.4 Then
      a = 0.087 - (0.087 - 0.073) * (m - 4) / 40
ElseIf m <= 4.8 Then
      a = 0.073 - (0.073 - 0.062) * (m - 4.4) / 40
ElseIf m <= 5.2 Then
      a = 0.062 - (0.062 - 0.053) * (m - 4.8) / 40
ElseIf m <= 5.6 Then
      a = 0.053 - (0.053 - 0.046) * (m - 5.2) / 40
ElseIf m <= 6 Then
      a = 0.046 - (0.046 - 0.04) * (m - 5.6) / 40
ElseIf m <= 6.4 Then
      a = 0.04 - (0.04 - 0.036) * (m - 6) / 40
ElseIf m <= 6.8 Then
      a = 0.036 - (0.036 - 0.032) * (m - 6.4) / 40
ElseIf m <= 7.2 Then
      a = 0.032 - (0.032 - 0.028) * (m - 6.8) / 40
ElseIf m <= 7.6 Then
      a = 0.028 - (0.028 - 0.024) * (m - 7.2) / 40
ElseIf m <= 8# Then
      a = 0.024 - (0.024 - 0.022) * (m - 7.6) / 40
ElseIf m <= 8.4 Then
      a = 0.022 - (0.022 - 0.021) * (m - 8#) / 40
ElseIf m <= 8.8 Then
      a = 0.021 - (0.021 - 0.019) * (m - 8.4) / 40
ElseIf m <= 9.2 Then
      a = 0.019 - (0.019 - 0.018) * (m - 8.8) / 40
ElseIf m <= 9.6 Then
      a = 0.018 - (0.018 - 0.016) * (m - 9.2) / 40
ElseIf m <= 10 Then
      a = 0.016 - (0.016 - 0.015) * (m - 9.6) / 40
ElseIf m > 10 Then a = 0.015 - (0.015 - 0.011) * (m - 10) / 40
  MsgBox "Неверно введены данные"
End If
 
S_g = i * y
S_p = p * a
      z_gl = i
 
      i = i + k         'суммарная глубина до отметки следующего слоя
      ch = ch + 1       'счётчик, порядковый, в зависимости от числа
                        'слоёв на которые разбито подошвенное основание
      MSFlexGrid1.Rows = ch + 1
      MSFlexGrid1.Cols = 10
      
      
      MSFlexGrid1.TextMatrix(ch, 0) = ch
      Debug.Print Check1
     MSFlexGrid1.TextMatrix(ch, 1) = IIf(Check1 = 1, Format(i, "0.0"), Format(i, "0.000"))
     
      MSFlexGrid1.TextMatrix(ch, 2) = Format(k, "0.0")
      MSFlexGrid1.TextMatrix(ch, 3) = Format(a, "0.0000")
      MSFlexGrid1.TextMatrix(ch, 4) = Format(S_p, "0.0000")
      MSFlexGrid1.TextMatrix(ch, 5) = Format(S_g, "0.0000")
      
      'List1.AddItem "z_gl=" & Format(z_gl, "0.000")
Loop While S_p > S_g * 0.2
 
MSFlexGrid1.ColAlignment(0) = 3 'центровка 0 столбца
MSFlexGrid1.ColAlignment(1) = 3 'центровка 1 столбца
MSFlexGrid1.ColAlignment(2) = 3 'центровка 2 столбца
MSFlexGrid1.ColAlignment(3) = 3 'центровка 3 столбца
MSFlexGrid1.ColAlignment(4) = 3 'центровка 3 столбца
MSFlexGrid1.ColAlignment(5) = 3 'центровка 3 столбца
MSFlexGrid1.ColAlignment(6) = 3 'центровка 3 столбца
MSFlexGrid1.ColAlignment(7) = 3 'центровка 3 столбца
MSFlexGrid1.ColAlignment(8) = 3 'центровка 3 столбца
MSFlexGrid1.ColAlignment(9) = 3 'центровка 3 столбца
 
       MSFlexGrid1.ColWidth(0) = 700 '     ширина 0 колонки
      MSFlexGrid1.ColWidth(1) = 1200 '    ширина 1 колонки
      MSFlexGrid1.ColWidth(2) = 1200 '     ширина 0 колонки
'ЗАГОЛОВКИ столбцов таблицы
      MSFlexGrid1.TextMatrix(0, 0) = "№ п/п"
      MSFlexGrid1.TextMatrix(0, 1) = "от ПГ до слоя"
      MSFlexGrid1.TextMatrix(0, 2) = "толщина слоя"
      MSFlexGrid1.TextMatrix(0, 3) = "альфа а"
      MSFlexGrid1.TextMatrix(0, 4) = "S_zp"
      MSFlexGrid1.TextMatrix(0, 5) = "S_zg"
      MSFlexGrid1.TextMatrix(0, 6) = "S_z_ad"
      MSFlexGrid1.TextMatrix(0, 7) = "S_z_tot"
      MSFlexGrid1.TextMatrix(0, 8) = "k_g"
      MSFlexGrid1.TextMatrix(0, 9) = "k_sw"
 
 End Sub
1
321 / 289 / 104
Регистрация: 12.04.2011
Сообщений: 925
09.12.2012, 19:14  [ТС]
Если быть более конкретным, то лучше опишу задачу, для которой хотел использовать чекбокс.
Т.е. как сделать переход при использовании ЧЕКа:
- "пустой" - в колонку №6 (S_z_ad) во всех строках "0" (как это сделать я уже понял );
- "стоит галочка" - перейти к вводу значений с последующим вычислениями используя введённые значения и имеющиеся в коде через условия (а вот это я чёт не догоняю, через процедуру или хз...).

Добавлено через 2 часа 45 минут
Вот я тут пытался что-то сделать...
Определить коэф-т k_g и занести его в 6 столбец таблицы. Но...если нет галочки check1 - весь столбец обнуляется, а если галочка -ТРУ, то просит ввести дополнительные параметры, используя которые определяется данный коэффициент для каждого слоя.
код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
Option Explicit
Dim a As Double
Dim p As Double
Dim m As Double
Dim y As Double
Dim i As Double
Dim k As Double
Dim z As Double
Dim b As Double
Dim S_p As Double
Dim S_g As Double
Dim z_gl, x, j As Double
Dim ch As Integer       'счётчик количества - порядковый номер
Dim S_z_ad As Double
Dim S_z_tot As Double
Dim L_w, B_w As Double
Dim k_g As Double
Dim k_sw As Double
Dim n_1, m_1, d As Double
Private Sub Check1_Click()
RESIZ
zal_pov
End Sub
Private Sub Form_Load()
RESIZ
End Sub
Private Sub zal_pov()
L_w = InputBox("VVedite dlinu zatoplennoy poverhnosty")
B_w = InputBox("VVedite shirinu zatoplennoy poverhnosty")
d = InputBox("VVedite глубину заложения ПФ")
n_1 = L_w / B_w
k = 0.05
i = 0
 
Do
      z = i - k / 2
      m_1 = (z + d) / B_w
      m = 2 * z / b
 
If m <= 0 Then
    a = 1
ElseIf m <= 0.4 Then
    a = 1 - (m - 0) / 0.4 * (1 - 0.96)
ElseIf m <= 0.8 Then
    a = 0.96 - (m - 0.4) / 0.4 * (0.96 - 0.8)
ElseIf m <= 1.2 Then
    a = 0.8 - (m - 0.8) / 0.4 * (0.8 - 0.606)
ElseIf m <= 1.6 Then
    a = 0.606 - (m - 1.2) / 0.4 * (0.606 - 0.449)
ElseIf m <= 2 Then
    a = 0.449 - (m - 1.6) / 0.4 * (0.449 - 0.336)
ElseIf m <= 2.4 Then
    a = 0.336 - (m - 2) / 0.4 * (0.336 - 0.257)
ElseIf m <= 2.8 Then
    a = 0.257 - (m - 2.4) / 0.4 * (0.257 - 0.201)
ElseIf m <= 3.2 Then
    a = 0.201 - (m - 2.8) / 0.4 * (0.201 - 0.16)
ElseIf m <= 3.6 Then
      a = 0.16 - (m - 3.2) / 0.4 * (0.16 - 0.13)
ElseIf m <= 4 Then
      a = 0.13 - (m - 3.6) / 0.4 * (0.13 - 0.108)
ElseIf m <= 4.4 Then
      a = 0.108 - (m - 4) / 0.4 * (0.108 - 0.091)
ElseIf m <= 4.8 Then
      a = 0.091 - (m - 4.4) / 0.4 * (0.091 - 0.077)
ElseIf m <= 5.2 Then
      a = 0.077 - (m - 4.8) / 0.4 * (0.077 - 0.066)
ElseIf m <= 5.6 Then
      a = 0.066 - (m - 5.2) / 0.4 * (0.066 - 0.058)
ElseIf m <= 6 Then
      a = 0.058 - (m - 5.6) / 0.4 * (0.058 - 0.051)
ElseIf m <= 6.4 Then
      a = 0.051 - (m - 6) / 0.4 * (0.051 - 0.045)
ElseIf m <= 6.8 Then
      a = 0.045 - (m - 6.4) / 0.4 * (0.045 - 0.04)
ElseIf m <= 7.2 Then
      a = 0.04 - (m - 6.8) / 0.4 * (0.04 - 0.036)
ElseIf m <= 7.6 Then
      a = 0.036 - (m - 7.2) / 0.4 * (0.036 - 0.032)
ElseIf m <= 8# Then
      a = 0.032 - (m - 7.6) / 0.4 * (0.032 - 0.029)
ElseIf m <= 8.4 Then
      a = 0.029 - (m - 8) / 0.4 * (0.029 - 0.026)
ElseIf m <= 8.8 Then
      a = 0.026 - (m - 8.4) / 0.4 * (0.026 - 0.024)
ElseIf m <= 9.2 Then
      a = 0.024 - (m - 8.8) / 0.4 * (0.024 - 0.022)
ElseIf m <= 9.6 Then
      a = 0.022 - (m - 9.2) / 0.4 * (0.022 - 0.02)
ElseIf m <= 10 Then
      a = 0.02 - (m - 9.6) / 0.4 * (0.02 - 0.019)
ElseIf m > 10 Then a = 0.019 - (m - 10) / 0.4 * (0.019 - 0.017)
  MsgBox "Неверно введены данные"
End If
 
If m_1 <= 0.5 Then
   k_g = 0
ElseIf m_1 <= 1 And n_1 = 1 Then
      k_g = 0 + (m_1 - 0.5) / 0.5 * (0.58 - 0)
ElseIf m_1 <= 2 Then
     k_g = 0.58 + (m_1 - 1) / 1 * (0.81 - 0.58)
ElseIf m_1 <= 3 Then
    k_g = 0.81 + (m_1 - 2) / 1 * (0.94 - 0.81)
ElseIf m_1 <= 4 Then
    k_g = 0.94 + (m_1 - 3) / 1 * (1.02 - 0.94)
ElseIf m_1 <= 5 Then
    k_g = 1.02 + (m_1 - 4) / 1 * (1.07 - 1.02)
ElseIf m_1 <= 6 Then
    k_g = 1.07 + (m_1 - 5) / 1 * (1.1 - 1.07)
ElseIf m > 10 Then k_g = 1.14
  MsgBox "Неверно введены данные"
End If
 
S_g = i * y
S_p = p * a
      z_gl = i
 
      i = i + k         'суммарная глубина до отметки следующего слоя
      ch = ch + 1       'счётчик, порядковый, в зависимости от числа
                        'слоёв на которые разбито подошвенное основание
S_z_ad = k_g * y * (d + z)
MSFlexGrid1.TextMatrix(ch, 7) = Format(S_z_ad, "0.00")
      
Loop While S_p > S_g * 0.2
End Sub
Sub RESIZ()
 'Таблица №1
MSFlexGrid1.Clear
Me.Caption = "TABL"
WindowState = 2
 
      p = 20           'ДАВЛЕНИЕ ПОД ПОДОШВОЙ ФУНДАМЕНТА ТС/М2
      y = 1.7           'удельный вес грунта под подошвой фундамента
      i = 0             'значение счётчика для определения глубины от подошвы фундамента до низа слоя грунта
      k = 0.05           'толщина слоя грунта под которым определяется давление
                        '(толщина слоя на который разбивается толща под основанием)
      b = 2             'ширина фундамента
      ch = 0            'счётчик для порядкового номера в 1 колонке 1 таблицы
Do
      z = i - k / 2
      m = 2 * z / b
 
If m <= 0 Then
    a = 1
ElseIf m <= 0.4 Then
    a = 1 - (m - 0) / 0.4 * (1 - 0.96)
ElseIf m <= 0.8 Then
    a = 0.96 - (m - 0.4) / 0.4 * (0.96 - 0.8)
ElseIf m <= 1.2 Then
    a = 0.8 - (m - 0.8) / 0.4 * (0.8 - 0.606)
ElseIf m <= 1.6 Then
    a = 0.606 - (m - 1.2) / 0.4 * (0.606 - 0.449)
ElseIf m <= 2 Then
    a = 0.449 - (m - 1.6) / 0.4 * (0.449 - 0.336)
ElseIf m <= 2.4 Then
    a = 0.336 - (m - 2) / 0.4 * (0.336 - 0.257)
ElseIf m <= 2.8 Then
    a = 0.257 - (m - 2.4) / 0.4 * (0.257 - 0.201)
ElseIf m <= 3.2 Then
    a = 0.201 - (m - 2.8) / 0.4 * (0.201 - 0.16)
ElseIf m <= 3.6 Then
      a = 0.16 - (m - 3.2) / 0.4 * (0.16 - 0.13)
ElseIf m <= 4 Then
      a = 0.13 - (m - 3.6) / 0.4 * (0.13 - 0.108)
ElseIf m <= 4.4 Then
      a = 0.108 - (m - 4) / 0.4 * (0.108 - 0.091)
ElseIf m <= 4.8 Then
      a = 0.091 - (m - 4.4) / 0.4 * (0.091 - 0.077)
ElseIf m <= 5.2 Then
      a = 0.077 - (m - 4.8) / 0.4 * (0.077 - 0.066)
ElseIf m <= 5.6 Then
      a = 0.066 - (m - 5.2) / 0.4 * (0.066 - 0.058)
ElseIf m <= 6 Then
      a = 0.058 - (m - 5.6) / 0.4 * (0.058 - 0.051)
ElseIf m <= 6.4 Then
      a = 0.051 - (m - 6) / 0.4 * (0.051 - 0.045)
ElseIf m <= 6.8 Then
      a = 0.045 - (m - 6.4) / 0.4 * (0.045 - 0.04)
ElseIf m <= 7.2 Then
      a = 0.04 - (m - 6.8) / 0.4 * (0.04 - 0.036)
ElseIf m <= 7.6 Then
      a = 0.036 - (m - 7.2) / 0.4 * (0.036 - 0.032)
ElseIf m <= 8# Then
      a = 0.032 - (m - 7.6) / 0.4 * (0.032 - 0.029)
ElseIf m <= 8.4 Then
      a = 0.029 - (m - 8) / 0.4 * (0.029 - 0.026)
ElseIf m <= 8.8 Then
      a = 0.026 - (m - 8.4) / 0.4 * (0.026 - 0.024)
ElseIf m <= 9.2 Then
      a = 0.024 - (m - 8.8) / 0.4 * (0.024 - 0.022)
ElseIf m <= 9.6 Then
      a = 0.022 - (m - 9.2) / 0.4 * (0.022 - 0.02)
ElseIf m <= 10 Then
      a = 0.02 - (m - 9.6) / 0.4 * (0.02 - 0.019)
ElseIf m > 10 Then a = 0.019 - (m - 10) / 0.4 * (0.019 - 0.017)
  MsgBox "Неверно введены данные"
End If
 
S_g = i * y
S_p = p * a
      z_gl = i
 
      i = i + k         'суммарная глубина до отметки следующего слоя
      ch = ch + 1       'счётчик, порядковый, в зависимости от числа
                        'слоёв на которые разбито подошвенное основание
      MSFlexGrid1.Rows = ch + 1
      MSFlexGrid1.Cols = 10
            
      MSFlexGrid1.TextMatrix(ch, 0) = ch
      MSFlexGrid1.TextMatrix(ch, 1) = Format(i, "0.00")
      MSFlexGrid1.TextMatrix(ch, 6) = IIf(Check1 = 1, S_z_ad, Format(0))
 
 
     ' MSFlexGrid1.TextMatrix(1, 7) =
     
      MSFlexGrid1.TextMatrix(ch, 2) = Format(k, "0.0")
      MSFlexGrid1.TextMatrix(ch, 3) = Format(a, "0.0000")
      MSFlexGrid1.TextMatrix(ch, 4) = Format(S_p, "0.0000")
      MSFlexGrid1.TextMatrix(ch, 5) = Format(S_g, "0.0000")
      
      'List1.AddItem "z_gl=" & Format(z_gl, "0.000")
Loop While S_p > S_g * 0.2
 
MSFlexGrid1.ColAlignment(0) = 3 'центровка 0 столбца
MSFlexGrid1.ColAlignment(1) = 3 'центровка 1 столбца
MSFlexGrid1.ColAlignment(2) = 3 'центровка 2 столбца
MSFlexGrid1.ColAlignment(3) = 3 'центровка 3 столбца
MSFlexGrid1.ColAlignment(4) = 3 'центровка 3 столбца
MSFlexGrid1.ColAlignment(5) = 3 'центровка 3 столбца
MSFlexGrid1.ColAlignment(6) = 3 'центровка 3 столбца
MSFlexGrid1.ColAlignment(7) = 3 'центровка 3 столбца
MSFlexGrid1.ColAlignment(8) = 3 'центровка 3 столбца
MSFlexGrid1.ColAlignment(9) = 3 'центровка 3 столбца
 
       MSFlexGrid1.ColWidth(0) = 700 '     ширина 0 колонки
      MSFlexGrid1.ColWidth(1) = 1200 '    ширина 1 колонки
      MSFlexGrid1.ColWidth(2) = 1200 '     ширина 0 колонки
'ЗАГОЛОВКИ столбцов таблицы
      MSFlexGrid1.TextMatrix(0, 0) = "№ п/п"
      MSFlexGrid1.TextMatrix(0, 1) = "от ПГ до слоя"
      MSFlexGrid1.TextMatrix(0, 2) = "толщина слоя"
      MSFlexGrid1.TextMatrix(0, 3) = "альфа а"
      MSFlexGrid1.TextMatrix(0, 4) = "S_zp"
      MSFlexGrid1.TextMatrix(0, 5) = "S_zg"
      MSFlexGrid1.TextMatrix(0, 6) = "S_z_ad"
      MSFlexGrid1.TextMatrix(0, 7) = "S_z_tot"
      MSFlexGrid1.TextMatrix(0, 8) = "k_g"
      MSFlexGrid1.TextMatrix(0, 9) = "k_sw"
 
 End Sub
РугаетсО на 122 строку...не знаю что делать (
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
10.12.2012, 12:15
У вас счётчик строк глобальная переменная и вначале созданной вами процедуры не обновляется
Решение 1: не создавать много отдельных похожих процедур, а использовать одну с параметрами
или непосредственно в процедуре проверять состояние чека

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Private Sub Check1_Click()
RESIZ
End Sub
 
Private Sub Form_Load()
RESIZ
End Sub
 
Sub RESIZ()
 
If Check1.Value = 1 Then ' если поставиди флажек = запрашиваем параметры
    L_w = InputBox("VVedite dlinu zatoplennoy poverhnosty")
    B_w = InputBox("VVedite shirinu zatoplennoy poverhnosty")
    d = InputBox("VVedite глубину заложения ПФ")
    n_1 = L_w / B_w
    
 Else 'если сняли - назначаем по умолчанию
    ' назначения
    '
      p = 20           'ДАВЛЕНИЕ ПОД ПОДОШВОЙ ФУНДАМЕНТА ТС/М2
      y = 1.7           'удельный вес грунта под подошвой фундамента
      i = 0             'значение счётчика для определения глубины от подошвы фундамента до низа слоя грунта
      k = 0.05           'толщина слоя грунта под которым определяется давление
                        '(толщина слоя на который разбивается толща под основанием)
      b = 2             'ширина фундамента
End If
Решение2:
Поможет в вашем примере перед началом цикла обнулить счетчик строк. Недостаток способа: не вникая в суть не могу скозать точно, но если параметры изменят количество строк в таблице, то либо часть таблицы окажется со старыми данными, либо опять вылетит ошибка. Лучше строки до начала цикла удалить а в цикле по одной добавлять и заполнять
0
321 / 289 / 104
Регистрация: 12.04.2011
Сообщений: 925
15.12.2012, 13:08  [ТС]
Сори за столь долгое время, вот что у меня получилось -)))
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
Option Explicit
Dim a As Double
Dim p As Double
Dim m As Double
Dim y As Double
Dim i As Double
Dim k As Double
Dim z As Double
 
Dim b As Double         'ширина подошвы фундамента
Dim l As Double         'длина подошвы фундамента
 
Dim S_p As Double
Dim S_g As Double
Dim n As Double
Dim z_gl, x As Double
Dim ch As Integer       'счётчик количества - порядковый номер
Dim S_z_ad As Double
Dim S_z_tot As Double
Dim L_w, B_w As Double
Dim k_g As Double
Dim k_sw As Double
Dim n_1, m_1, d As Double
Dim ch_1 As Integer
Dim j As Double         'счётчик для прорисовки эпюры
'переменные для координатной сетки и последующей прорисовки графика
Dim minX As Double
Dim maxX As Double
Dim MinY As Double
Dim MaxY As Double
 
Dim f_1 As Double 'переменные использумые при двойной интерполяции
Dim f_2 As Double 'переменные использумые при двойной интерполяции
 
'для построения графиков
Dim d_x As Double
Dim d_y As Double
Dim d_x_1 As Double
Dim d_y_1 As Double
Dim d_x_2 As Double
Dim d_y_2 As Double
Dim d_x_3 As Double
Dim d_y_3 As Double
 
Private Sub Form_Load()
 RESIZ
    'Picture1.Width = Form1.Width - MSFlexGrid1.Width
    'Picture1.Height = Form1.Height
    Picture1.Scale (-maxX * 1.1, -MaxY * 0.6)-(maxX * 1.2, MaxY * 1.15)
End Sub
Private Sub zal_pov()
L_w = InputBox("Введите длину затопляемой поверхности", "Большая сторона затопляемой поверхности")
B_w = InputBox("Введите длину затопляемой поверхности", "Меньшая сторона затопляемой поверхности")
 
n_1 = L_w / B_w
k = 0.05
i = 0
ch_1 = 0
Do
      z = i - k / 2
      If z <= 0 Then z = 0
      m_1 = (z + d) / B_w
      'MsgBox (d)
If m_1 <= 0.5 Then
   k_g = 0
ElseIf m_1 <= 1 And n_1 = 1 Then
      k_g = 0 + (m_1 - 0.5) / 0.5 * (0.58 - 0)
ElseIf m_1 <= 2 Then
     k_g = 0.58 + (m_1 - 1) / 1 * (0.81 - 0.58)
ElseIf m_1 <= 3 Then
    k_g = 0.81 + (m_1 - 2) / 1 * (0.94 - 0.81)
ElseIf m_1 <= 4 Then
    k_g = 0.94 + (m_1 - 3) / 1 * (1.02 - 0.94)
ElseIf m_1 <= 5 Then
    k_g = 1.02 + (m_1 - 4) / 1 * (1.07 - 1.02)
ElseIf m_1 <= 6 Then
    k_g = 1.07 + (m_1 - 5) / 1 * (1.1 - 1.07)
ElseIf m > 10 Then k_g = 1.14
  MsgBox "Неверно введены данные"
End If
S_g = i * y
S_p = p * a
 
      i = i + k             'суммарная глубина до отметки следующего слоя
      ch_1 = ch_1 + 1       'счётчик, порядковый, в зависимости от числа
                            'слоёв на которые разбито подошвенное основание
S_z_ad = k_g * y * (d + z)
MSFlexGrid1.TextMatrix(ch_1, 6) = Format(S_z_ad, "0.00")
MSFlexGrid1.TextMatrix(ch_1, 8) = Format(k_g, "0.00")
MSFlexGrid1.TextMatrix(ch_1, 7) = CDbl(MSFlexGrid1.TextMatrix(ch_1, 4)) + CDbl(MSFlexGrid1.TextMatrix(ch_1, 5)) + CDbl(MSFlexGrid1.TextMatrix(ch_1, 6))
Loop While S_p > S_g * 0.2
 
End Sub
Sub RESIZ()
'MSFlexGrid1.Clear           'Таблица №1
Me.Caption = "Определение сжимаемой толщи, осадки фундамента и учёт набухающего действия грунта"
WindowState = 2
      p = 80                'ДАВЛЕНИЕ ПОД ПОДОШВОЙ ФУНДАМЕНТА ТС/М2
      y = 1.7               'удельный вес грунта под подошвой фундамента
      i = 0                 'значение счётчика для определения глубины от подошвы фундамента до низа слоя грунта
      k = 0.03              'толщина слоя грунта под которым определяется давление
                            '(толщина слоя на который разбивается толща под основанием)
      b = 2                 'ширина фундамента
      ch = 0                'счётчик для порядкового номера в 1 колонке 1 таблицы
      d = 3.5               'глубина заложения фундамента, считая от поверхности грунта
      l = 2                 'длина фундамента
      
      'd = InputBox("Введите глубину заложения ПФ от поверхности грунта (поверхность планировки)", "Глубина заложения подошвы затопляемого фундамента")
Do
      z = i - k / 2
      m = 2 * z / b
      n = l / b
'--------------------------------------
'     ДВОЙНАЯ ИНТЕРПОЛЯЦИЯ ДЛЯ  n=1
'--------------------------------------
If m <= 0 And n = 1 Then
    a = 1
ElseIf m <= 0.4 And n = 1 Then
        a = 1 - (m - 0) / 0.4 * (1 - 0.96)
ElseIf m <= 0.8 And n = 1 Then
    a = 0.96 - (m - 0.4) / 0.4 * (0.96 - 0.8)
ElseIf m <= 1.2 And n = 1 Then
    a = 0.8 - (m - 0.8) / 0.4 * (0.8 - 0.606)
ElseIf m <= 1.6 And n = 1 Then
    a = 0.606 - (m - 1.2) / 0.4 * (0.606 - 0.449)
ElseIf m <= 2 And n = 1 Then
    a = 0.449 - (m - 1.6) / 0.4 * (0.449 - 0.336)
ElseIf m <= 2.4 And n = 1 Then
    a = 0.336 - (m - 2) / 0.4 * (0.336 - 0.257)
ElseIf m <= 2.8 And n = 1 Then
    a = 0.257 - (m - 2.4) / 0.4 * (0.257 - 0.201)
ElseIf m <= 3.2 And n = 1 Then
    a = 0.201 - (m - 2.8) / 0.4 * (0.201 - 0.16)
ElseIf m <= 3.6 And n = 1 Then
      a = 0.16 - (m - 3.2) / 0.4 * (0.16 - 0.13)
ElseIf m <= 4 And n = 1 Then
      a = 0.13 - (m - 3.6) / 0.4 * (0.13 - 0.108)
ElseIf m <= 4.4 And n = 1 Then
      a = 0.108 - (m - 4) / 0.4 * (0.108 - 0.091)
ElseIf m <= 4.8 And n = 1 Then
      a = 0.091 - (m - 4.4) / 0.4 * (0.091 - 0.077)
ElseIf m <= 5.2 And n = 1 Then
      a = 0.077 - (m - 4.8) / 0.4 * (0.077 - 0.066)
ElseIf m <= 5.6 And n = 1 Then
      a = 0.066 - (m - 5.2) / 0.4 * (0.066 - 0.058)
ElseIf m <= 6 And n = 1 Then
      a = 0.058 - (m - 5.6) / 0.4 * (0.058 - 0.051)
ElseIf m <= 6.4 And n = 1 Then
      a = 0.051 - (m - 6) / 0.4 * (0.051 - 0.045)
ElseIf m <= 6.8 And n = 1 Then
      a = 0.045 - (m - 6.4) / 0.4 * (0.045 - 0.04)
ElseIf m <= 7.2 And n = 1 Then
      a = 0.04 - (m - 6.8) / 0.4 * (0.04 - 0.036)
ElseIf m <= 7.6 And n = 1 Then
      a = 0.036 - (m - 7.2) / 0.4 * (0.036 - 0.032)
ElseIf m <= 8# And n = 1 Then
      a = 0.032 - (m - 7.6) / 0.4 * (0.032 - 0.029)
ElseIf m <= 8.4 And n = 1 Then
      a = 0.029 - (m - 8) / 0.4 * (0.029 - 0.026)
ElseIf m <= 8.8 And n = 1 Then
      a = 0.026 - (m - 8.4) / 0.4 * (0.026 - 0.024)
ElseIf m <= 9.2 And n = 1 Then
      a = 0.024 - (m - 8.8) / 0.4 * (0.024 - 0.022)
ElseIf m <= 9.6 And n = 1 Then
      a = 0.022 - (m - 9.2) / 0.4 * (0.022 - 0.02)
ElseIf m <= 10 And n = 1 Then
      a = 0.02 - (m - 9.6) / 0.4 * (0.02 - 0.019)
ElseIf m <= 10.4 And n = 1 Then
      a = 0.019 - (m - 10) / 0.4 * (0.019 - 0.017)
ElseIf m <= 10.8 And n = 1 Then
      a = 0.017 - (m - 10.4) / 0.4 * (0.017 - 0.016)
ElseIf m <= 11.2 And n = 1 Then
      a = 0.016 - (m - 10.8) / 0.4 * (0.016 - 0.015)
ElseIf m <= 11.6 And n = 1 Then
      a = 0.015 - (m - 11.2) / 0.4 * (0.015 - 0.014)
ElseIf m <= 12 And n = 1 Then
      a = 0.014 - (m - 11.6) / 0.4 * (0.014 - 0.013)
ElseIf m > 12 Then
        MsgBox "Очень сильное давление на грунт, нужно увеличить площадь подошвы или ширину фундамента"
'-----------------------------------------------
'     ДВОЙНАЯ ИНТЕРПОЛЯЦИЯ ДЛЯ  1.0 < n <= 1.4
'-----------------------------------------------
ElseIf m <= 0.4 And n <= 1.4 Then
    f_1 = 1
    f_2 = 0.96 + (n - 1) / 0.4 * (0.972 - 0.96)
    a = f_1 - (m - 0) / 0.4 * (f_1 - f_2)
    
ElseIf m <= 0.8 And n <= 1.4 Then
    f_1 = 0.96 + (n - 1) / 0.4 * (0.972 - 0.96)
    f_2 = 0.8 + (n - 1) / 0.4 * (0.848 - 0.8)
    a = f_1 - (m - 0.4) / 0.4 * (f_1 - f_2)
    
ElseIf m <= 1.2 And n <= 1.4 Then
    f_1 = 0.8 + (n - 1) / 0.4 * (0.848 - 0.8)
    f_2 = 0.606 + (n - 1) / 0.4 * (0.682 - 0.606)
    a = f_1 - (m - 0.8) / 0.4 * (f_1 - f_2)
    
ElseIf m <= 1.6 And n <= 1.4 Then
    f_1 = 0.606 + (n - 1) / 0.4 * (0.682 - 0.606)
    f_2 = 0.449 + (n - 1) / 0.4 * (0.532 - 0.449)
    a = f_1 - (m - 1.2) / 0.4 * (f_1 - f_2)
    
ElseIf m <= 2 And n <= 1.4 Then
    f_1 = 0.449 + (n - 1) / 0.4 * (0.532 - 0.449)
    f_2 = 0.386 + (n - 1) / 0.4 * (0.414 - 0.386)
    a = f_1 - (m - 1.6) / 0.4 * (f_1 - f_2)
    
ElseIf m <= 2.4 And n <= 1.4 Then
    f_1 = 0.386 + (n - 1) / 0.4 * (0.414 - 0.386)
    f_2 = 0.257 + (n - 1) / 0.4 * (0.325 - 0.257)
    a = f_1 - (m - 2) / 0.4 * (f_1 - f_2)
    
ElseIf m <= 2.8 And n <= 1.4 Then
    f_1 = 0.257 + (n - 1) / 0.4 * (0.325 - 0.257)
    f_2 = 0.201 + (n - 1) / 0.4 * (0.26 - 0.201)
    a = f_1 - (m - 2.4) / 0.4 * (f_1 - f_2)
    
ElseIf m <= 3.2 And n <= 1.4 Then
    f_1 = 0.201 + (n - 1) / 0.4 * (0.26 - 0.201)
    f_2 = 0.16 + (n - 1) / 0.4 * (0.21 - 0.16)
    a = f_1 - (m - 2.8) / 0.4 * (f_1 - f_2)
    
ElseIf m <= 3.6 And n <= 1.4 Then
    f_1 = 0.16 + (n - 1) / 0.4 * (0.21 - 0.16)
    f_2 = 0.131 + (n - 1) / 0.4 * (0.173 - 0.131)
    a = f_1 - (m - 3.2) / 0.4 * (f_1 - f_2)
    
 
ElseIf m <= 4 And n <= 1.4 Then
    f_1 = 0.131 + (n - 1) / 0.4 * (0.173 - 0.131)
    f_2 = 0.108 + (n - 1) / 0.4 * (0.145 - 0.108)
    a = f_1 - (m - 3.6) / 0.4 * (f_1 - f_2)
    
ElseIf m <= 4.4 And n <= 1.4 Then
    f_1 = 0.108 + (n - 1) / 0.4 * (0.145 - 0.108)
    f_2 = 0.091 + (n - 1) / 0.4 * (0.123 - 0.091)
    a = f_1 - (m - 4#) / 0.4 * (f_1 - f_2)
    
ElseIf m <= 4.8 And n <= 1.4 Then
    f_1 = 0.091 + (n - 1) / 0.4 * (0.123 - 0.091)
    f_2 = 0.077 + (n - 1) / 0.4 * (0.105 - 0.077)
    a = f_1 - (m - 4.4) / 0.4 * (f_1 - f_2)
    
ElseIf m <= 5.2 And n <= 1.4 Then
    f_1 = 0.077 + (n - 1) / 0.4 * (0.105 - 0.077)
    f_2 = 0.067 + (n - 1) / 0.4 * (0.091 - 0.067)
    a = f_1 - (m - 4.8) / 0.4 * (f_1 - f_2)
    
 
ElseIf m <= 5.6 And n <= 1.4 Then
    f_1 = 0.067 + (n - 1) / 0.4 * (0.091 - 0.067)
    f_2 = 0.058 + (n - 1) / 0.4 * (0.079 - 0.058)
    a = f_1 - (m - 5.2) / 0.4 * (f_1 - f_2)
    
ElseIf m <= 6 And n <= 1.4 Then
    f_1 = 0.058 + (n - 1) / 0.4 * (0.079 - 0.058)
    f_2 = 0.051 + (n - 1) / 0.4 * (0.07 - 0.051)
    a = f_1 - (m - 5.6) / 0.4 * (f_1 - f_2)
    
ElseIf m <= 6.4 And n <= 1.4 Then
    f_1 = 0.051 + (n - 1) / 0.4 * (0.07 - 0.051)
    f_2 = 0.045 + (n - 1) / 0.4 * (0.062 - 0.045)
    a = f_1 - (m - 6) / 0.4 * (f_1 - f_2)
    
ElseIf m <= 6.8 And n <= 1.4 Then
    f_1 = 0.045 + (n - 1) / 0.4 * (0.062 - 0.045)
    f_2 = 0.04 + (n - 1) / 0.4 * (0.055 - 0.04)
    a = f_1 - (m - 6.4) / 0.4 * (f_1 - f_2)
    
ElseIf m <= 7.2 And n <= 1.4 Then
    f_1 = 0.04 + (n - 1) / 0.4 * (0.055 - 0.04)
    f_2 = 0.036 + (n - 1) / 0.4 * (0.049 - 0.036)
    a = f_1 - (m - 6.8) / 0.4 * (f_1 - f_2)
    
ElseIf m <= 7.6 And n <= 1.4 Then
    f_1 = 0.036 + (n - 1) / 0.4 * (0.049 - 0.036)
    f_2 = 0.032 + (n - 1) / 0.4 * (0.044 - 0.032)
    a = f_1 - (m - 7.2) / 0.4 * (f_1 - f_2)
 
ElseIf m <= 8 And n <= 1.4 Then
    f_1 = 0.032 + (n - 1) / 0.4 * (0.044 - 0.032)
    f_2 = 0.029 + (n - 1) / 0.4 * (0.04 - 0.029)
    a = f_1 - (m - 7.6) / 0.4 * (f_1 - f_2)
    
ElseIf m <= 8.4 And n <= 1.4 Then
    f_1 = 0.029 + (n - 1) / 0.4 * (0.04 - 0.029)
    f_2 = 0.026 + (n - 1) / 0.4 * (0.037 - 0.026)
    a = f_1 - (m - 8) / 0.4 * (f_1 - f_2)
    
ElseIf m <= 8.8 And n <= 1.4 Then
    f_1 = 0.026 + (n - 1) / 0.4 * (0.037 - 0.026)
    f_2 = 0.024 + (n - 1) / 0.4 * (0.033 - 0.024)
    a = f_1 - (m - 8.4) / 0.4 * (f_1 - f_2)
    
ElseIf m <= 9.2 And n <= 1.4 Then
    f_1 = 0.024 + (n - 1) / 0.4 * (0.033 - 0.024)
    f_2 = 0.022 + (n - 1) / 0.4 * (0.031 - 0.022)
    a = f_1 - (m - 8.8) / 0.4 * (f_1 - f_2)
    
ElseIf m <= 9.6 And n <= 1.4 Then
    f_1 = 0.022 + (n - 1) / 0.4 * (0.031 - 0.022)
    f_2 = 0.02 + (n - 1) / 0.4 * (0.028 - 0.02)
    a = f_1 - (m - 9.2) / 0.4 * (f_1 - f_2)
 
ElseIf m <= 10 And n <= 1.4 Then
    f_1 = 0.02 + (n - 1) / 0.4 * (0.028 - 0.02)
    f_2 = 0.019 + (n - 1) / 0.4 * (0.026 - 0.019)
    a = f_1 - (m - 9.6) / 0.4 * (f_1 - f_2)
    
ElseIf m <= 10.4 And n <= 1.4 Then
    f_1 = 0.019 + (n - 1) / 0.4 * (0.026 - 0.019)
    f_2 = 0.017 + (n - 1) / 0.4 * (0.024 - 0.017)
    a = f_1 - (m - 10) / 0.4 * (f_1 - f_2)
    
ElseIf m <= 10.8 And n <= 1.4 Then
    f_1 = 0.017 + (n - 1) / 0.4 * (0.024 - 0.017)
    f_2 = 0.016 + (n - 1) / 0.4 * (0.022 - 0.016)
    a = f_1 - (m - 10.4) / 0.4 * (f_1 - f_2)
    
ElseIf m <= 11.2 And n <= 1.4 Then
    f_1 = 0.016 + (n - 1) / 0.4 * (0.022 - 0.016)
    f_2 = 0.015 + (n - 1) / 0.4 * (0.021 - 0.015)
    a = f_1 - (m - 10.8) / 0.4 * (f_1 - f_2)
    
ElseIf m <= 11.6 And n <= 1.4 Then
    f_1 = 0.015 + (n - 1) / 0.4 * (0.021 - 0.015)
    f_2 = 0.014 + (n - 1) / 0.4 * (0.02 - 0.014)
    a = f_1 - (m - 11.2) / 0.4 * (f_1 - f_2)
    
 
ElseIf m <= 12 And n <= 1.4 Then
    f_1 = 0.014 + (n - 1) / 0.4 * (0.02 - 0.014)
    f_2 = 0.013 + (n - 1) / 0.4 * (0.018 - 0.013)
    a = f_1 - (m - 11.6) / 0.4 * (f_1 - f_2)
    
ElseIf m > 12 And n <= 1.4 Then
    MsgBox "Очень сильное давление на грунт, нужно увеличить площадь подошвы или ширину фундамента"
    
ElseIf m > 12 And n <= 1.8 Then
    MsgBox "Очень сильное давление на грунт, нужно увеличить площадь подошвы или ширину фундамента"
S_g = i * y
S_p = p * a
      
      i = i + k         'суммарная глубина до отметки следующего слоя
      ch = ch + 1       'счётчик, порядковый, в зависимости от числа
                        'слоёв на которые разбито подошвенное основание
      MSFlexGrid1.Rows = ch + 1
      MSFlexGrid1.Cols = 10
            
      MSFlexGrid1.TextMatrix(ch, 0) = ch
      MSFlexGrid1.TextMatrix(ch, 1) = Format(i, "0.00")
      MSFlexGrid1.TextMatrix(ch, 6) = "-"
      MSFlexGrid1.TextMatrix(ch, 8) = "-"
    
      MSFlexGrid1.TextMatrix(ch, 2) = Format(k, "0.00")
      MSFlexGrid1.TextMatrix(ch, 3) = Format(a, "0.000")
      MSFlexGrid1.TextMatrix(ch, 4) = Format(S_p, "0.000")
      MSFlexGrid1.TextMatrix(ch, 5) = Round(S_g, 2)
      MSFlexGrid1.TextMatrix(ch, 7) = "-"
                               
Loop While S_p > S_g * 0.2
                                
MSFlexGrid1.ColAlignment(0) = 3 'центровка 0 столбца
MSFlexGrid1.ColAlignment(1) = 3 'центровка 1 столбца
MSFlexGrid1.ColAlignment(2) = 3 'центровка 2 столбца
MSFlexGrid1.ColAlignment(3) = 3 'центровка 3 столбца
MSFlexGrid1.ColAlignment(4) = 3 'центровка 3 столбца
MSFlexGrid1.ColAlignment(5) = 3 'центровка 3 столбца
MSFlexGrid1.ColAlignment(6) = 3 'центровка 3 столбца
MSFlexGrid1.ColAlignment(7) = 3 'центровка 3 столбца
MSFlexGrid1.ColAlignment(8) = 3 'центровка 3 столбца
MSFlexGrid1.ColAlignment(9) = 3 'центровка 3 столбца
 
       MSFlexGrid1.ColWidth(0) = 700 '     ширина 0 колонки
      MSFlexGrid1.ColWidth(1) = 1200 '    ширина 1 колонки
      MSFlexGrid1.ColWidth(2) = 1200 '     ширина 0 колонки
'ЗАГОЛОВКИ столбцов таблицы
      MSFlexGrid1.TextMatrix(0, 0) = "№ п/п"
      MSFlexGrid1.TextMatrix(0, 1) = "от ПГ до слоя"
      MSFlexGrid1.TextMatrix(0, 2) = "толщина слоя"
      MSFlexGrid1.TextMatrix(0, 3) = "альфа а"
      MSFlexGrid1.TextMatrix(0, 4) = "S_zp"
      MSFlexGrid1.TextMatrix(0, 5) = "S_zg"
      MSFlexGrid1.TextMatrix(0, 6) = "S_z_ad"
      MSFlexGrid1.TextMatrix(0, 7) = "S_z_tot"
      MSFlexGrid1.TextMatrix(0, 8) = "k_g"
      MSFlexGrid1.TextMatrix(0, 9) = "k_sw"
 End Sub
Тему можно закрывать, всем откликнувшимся спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.12.2012, 13:08
Помогаю со студенческими работами здесь

Существует ли конечное число выполнения заданного цикла так, что кубик вновь станет собранным?
Здравствуйте все! Не знаю к какому разделу отнести вопрос, поэтому пишу здесь. Имеем собранный кубик Рубика 3х3х3. Выполняем следующий...

Дан массив размера N. Найти сумму элементов массива, превышающих число 5. (Как задать значение которое превышает число?)
Дан массив размера N. Найти сумму элементов массива, превышающих число 5 Как понять &quot;Найти сумму элементов массива, превышающих...

Вычислить конечное значение
Помогите пожалуйста написать программу, вычисляющую конечное значение Я подозреваю, что делается это через рекурсию?

Цикл не прекращается, а выдает конечное значение i
Var m,k,S:real; i,j:integer; Begin Readln(k); Readln(m); S:=0; for i:=1 to 1500 do begin j:=i; if (k = s) then break else...

Как задать начальные координаты непосредственно на самом 3-х мерном графике?
Добрый день, как задать начальные координаты непосредственно на самом 3-х мерном графике, ginput(n) - он же задают с помощью 2 осей,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru