Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Despair089
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 22
1

Что не так с этим кодом?

12.07.2019, 00:57. Просмотров 1958. Ответов 9
Метки нет (Все метки)

Код должен производить pacчeт траектории движeния капель щелока в excel.
В vba к сожалению практически ничего не понимаю.

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
Dim M(20, 20)
Dim N(20, 20)
Print "T="
Input T
Print "T1="
INPUT T1
Print "T2="
INPUT T2
Print "V2="
INPUT V2
Print "V3="
INPUT V3
Print "D="
INPUT D
Print "ВВЕДИТЕ ИМЯ ФАЙЛА ДАННЫХ R*.KAT"
INPUT A
Print "ИМЯ ИСХОДНЫХ ДАННЫХ ДЛЯ ЧТЕНИЯ S*.KAT "
INPUT S
Print "ВВЕДИТЕ ИМЯ ФАЙЛА ДЛЯ ЗАПИСИ РЕЗУЛЬТАТОВ STF*.KAT"
INPUT M
OPEN M FOR OUTPUT AS FILE 2
OPEN S FOR INPUT AS FILE 1
For Y = 0 To 12
For X = 0 To 8
INPUT 1, M (X , Y) , N (X , Y)
Next X
Next Y
INPUT 1, L1, L2, X1, Y1
Close 1
OPEN A FOR OUTPUT AS FILE 3
Print 3, "-----------------------------------------------"
Print 3, "  T  !  X1  !  Y1  !  V1  !  V2  !  V3  "
Print 3, "-----------------------------------------------"
I = Int(X1 / L1)
J = Int(Y1 / L2)
Z1 = (X1 - IxL1) / L1
Z2 = (Y1 - JxL2) / L2
Z3 = M(I, J) + (M(I + 1, J) - M(I, J)) * Z1
Z4 = M(I, J + 1) + (M(I + 1, J + 1) - M(I, J + 1)) * Z1
W1 = Z3 + (Z4 - Z3) * Z2
Z5 = N(I, J) + (N(I + 1, J) - N(I, J)) * Z1
Z6 = N(I, J + 1) + (N(I + 1, J + 1) - N(I, J + 1)) * Z1
W2 = Z5 - (Z6 - Z5) * Z2
T = T + T1
If T > T2 Then GoTo 1000
If D = 1 Then GoTo 340
If D = 2 Then GoTo 350
If D = 3 Then GoTo 355
If D = 4 Then GoTo 370
If D = 5 Then GoTo 380
V1=.36*T^2-2.37*T+4.96\GO TO 390
V1=.216*T^2-2.23*T+6.65\GO TO 390
V1=.135*T^2-2.33*Y+11.1\GO TO 390
GoTo 390
GoTo 390
IF V1<=0 GO TO 1000
C1 = 9.8 / V1 ^ 2
C2 = 1 / C1
C3 = -19 / V1
C4 = Exp(C3)
If C4 < 0.0000001 Then C4 = 0
If W1 < 0 Then GoTo 455
If V2 > W1 Then GoTo 530
If V2 < W1 Then GoTo 700
V2 = (V2 + W1) / (1 + T * (V2 + W1) * C1) - W1
X2 = C2 * Log(1 + C1 * T1 * (V2 + W1)) - W1 * T1
GoTo 755
V2 = W1 + ((V2 - W1) / (1 + T * (V2 - W1) * C1))
X2 = W1 * T1 + C2 * Log(1 + C1 * T1 * (V2 - W1))
GoTo 755
V2 = W1 + (V2 - W1) / (1 + T * (V2 - W1) * C1)
X2 = W1 * T1 + C2 * Log(1 + C1 * T1 * (W1 - V2))
X1 = X1 + X2
If W2 > V1 Then GoTo 855
K1 = V1 + W2
K2 = V1 - V3 - W2
K3 = V1 - W2
K4 = V1 + V3 + W2
V3 = (K1 * K2 * C4 ^ T - K3 * K4) / (K4 + K2 * C4 * T)
Y2 = C2 * Log(Abs(K4 / (2 * V1) + K2 * C4 ^ T1 / (2 * V1))) - K3 * T1
GoTo 930
K1 = V1 + W2
K2 = V1 - W2 + V3
K3 = W2 - V1
K4 = V1 + W2 - V3
V3 = (K3 * K4 + K1 * K2 * C4 ^ T) / (K4 + K2 * C4 ^ T)
Y2 = K3 * T1 - C2 * Log(Abs(K4 / (2 * V1) + K2 * C4 ^ T1 / (2 * V1)))
Y1 = Y1 + Y2
Print T, X1, Y1, W2
If Y1 < 0 Then GoTo 1100
If Y1 > 12 Then GoTo 1100
F = "    !    !    !    !    !    "
Print USING; F, T; X1; Y1; V1; V2; V3
Print T; ","; X1; ","; Y1; ","; V1; ","; V2; ","; V3; ","; W2; ","; W1
If Y1 > 7 Then GoTo 960
GoTo 190
W1 = 0
W2 = 3
GoTo 260
Close
Close
End
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.07.2019, 00:57
Ответы с готовыми решениями:

Что не так с кодом?
Дорогие форумяне, помогите разобраться... на листе 2 кода. при BRC - один выполняется если лист...

Отредактировать макрос так, чтобы он искал в столбце определенное значение и копировал строку с этим значением
Здравствуйте, как отредактировать этот макрос, чтобы он по значению в (А1) искал в столбце...

Что не так с этим кодом ?
В PyCharm все работает, а если из командной строки python-e файл давать, то ошибку выдает ! ...

Что не так с этим кодом?
Что не так с этим кодом? #include &lt;stdio.h&gt; struct Texture { unsigned int tex; ...

Что не так с этим кодом? Массивы
Подскажите, пожалуйста, что здесь неправильно. Дан массив из 20 элементов. Массив заполняется с...

9
snipe
3153 / 1122 / 272
Регистрация: 07.08.2013
Сообщений: 2,859
12.07.2019, 01:18 2
код не весь
вот эти goto - это переход на строку
если предположить что нумерация строк проставлена автоматически
и учесть что в Basic нумерация проводилась (обычно через 10 т.е. 10 20 30 40)
то должно быть более 110 строк
1
Despair089
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 22
12.07.2019, 01:57  [ТС] 3
Код тут весь.
Но вы правы. Некоторые строки подписаны как 80-81-82-90-100-101-110-120-130.
Пошел думать как это все структурировать и запихать в excel.
Спасибо.
0
snipe
3153 / 1122 / 272
Регистрация: 07.08.2013
Сообщений: 2,859
12.07.2019, 02:06 4
но номера строк вы не предоставили
1
12.07.2019, 02:06
Despair089
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 22
12.07.2019, 02:13  [ТС] 5
Visual Basic
1 Dim М(20, 20)
2 Dim N(20, 20)
10 Print "Т="
20 Input T
30 Print "Т1="
40 INPUT Т1
50 Print "Т2="
60 INPUT Т2
70 Print "V2="
80 INPUT V2
81 Print "V3="
82 INPUT VЗ
90 Print "D="
100 INPUT D
101 Print "ВВЕДИТЕ ИМЯ ФАЙЛА ДАННЫХ R*.KAT"
102 INPUT А*
103 Print "ИМЯ ИСХОДНЫХ ДАННЫХ ДЛЯ ЧТЕНИЯ S*.KAT "
104 INPUT S*
105 Print "ВВЕДИТЕ ИМЯ ФАЙЛА ДЛЯ ЗАПИСИ РЕЗУЛЬТАТОВ STF*.KAT"
106 INPUT М*
107 OPEN М* FOR OUTPUT AS FILE 2
110 OPEN S* FOR INPUT AS FILE 1
120 For Y = 0 To 12
130 For X = 0 To 8
140 INPUT 1, M (X , Y) , N (X , Y)
150 Next X
160 Next Y
170 INPUT 1, L1, L2, X1, Y1
180 Close 1
181 OPEN A* FOR OUTPUT AS FILE 3
182 Print 3, "-----------------------------------------------"
183 Print 3, "  T  !  X1  !  Y1  !  V1  !  V2  !  V3  "
184 Print 3, "-----------------------------------------------"
190 I = Int(X1 / L1)
200 J = Int(Y1 / L2)
210 Z1 = (X1 - IxL1) / L1
220 Z2 = (Y1 - JxL2) / L2
230 Z3 = M(I, J) + (M(I + 1, J) - M(I, J)) * Z1
240 Z4 = M(I, J + 1) + (M(I + 1, J + 1) - M(I, J + 1)) * Z1
250 W1 = Z3 + (Z4 - Z3) * Z2
255 Z5 = N(I, J) + (N(I + 1, J) - N(I, J)) * Z1
257 Z6 = N(I, J + 1) + (N(I + 1, J + 1) - N(I, J + 1)) * Z1
259 W2 = Z5 - (Z6 - Z5) * Z2
260 T = T + T1
280 If T > T2 Then GoTo 1000
290 If D = 1 Then GoTo 340
300 If D = 2 Then GoTo 350
310 If D = 3 Then GoTo 355
320 If D = 4 Then GoTo 370
330 If D = 5 Then GoTo 380
340 V1=.36*T^2-2.37*T+4.96\GO TO 390
350 V1=.216*T^2-2.23*T+6.65\GO TO 390
355 V1=.135*T^2-2.33*Y+11.1\GO TO 390
370 GoTo 390
380 GoTo 390
390 IF V1<=0 GO TO 1000
395 C1 = 9.8 / V1 ^ 2
400 C2 = 1 / C1
410 C3 = -19 / V1
420 C4 = Exp(C3)
425 If C4 < 0.0000001 Then C4 = 0
430 If W1 < 0 Then GoTo 455
440 If V2 > W1 Then GoTo 530
450 If V2 < W1 Then GoTo 700
455 V2 = (V2 + W1) / (1 + T * (V2 + W1) * C1) - W1
470 X2 = C2 * Log(1 + C1 * T1 * (V2 + W1)) - W1 * T1
520 GoTo 755
530 V2 = W1 + ((V2 - W1) / (1 + T * (V2 - W1) * C1))
540 X2 = W1 * T1 + C2 * Log(1 + C1 * T1 * (V2 - W1))
590 GoTo 755
700 V2 = W1 + (V2 - W1) / (1 + T * (V2 - W1) * C1)
710 X2 = W1 * T1 + C2 * Log(1 + C1 * T1 * (W1 - V2))
755 X1 = X1 + X2
770 If W2 > V1 Then GoTo 855
780 K1 = V1 + W2
790 K2 = V1 - V3 - W2
810 K3 = V1 - W2
820 K4 = V1 + V3 + W2
830 V3 = (K1 * K2 * C4 ^ T - K3 * K4) / (K4 + K2 * C4 * T)
840 Y2 = C2 * Log(Abs(K4 / (2 * V1) + K2 * C4 ^ T1 / (2 * V1))) - K3 * T1
850 GoTo 930
855 K1 = V1 + W2
870 K2 = V1 - W2 + V3
890 K3 = W2 - V1
900 K4 = V1 + W2 - V3
910 V3 = (K3 * K4 + K1 * K2 * C4 ^ T) / (K4 + K2 * C4 ^ T)
920 Y2 = K3 * T1 - C2 * Log(Abs(K4 / (2 * V1) + K2 * C4 ^ T1 / (2 * V1)))
930 Y1 = Y1 + Y2
931 Print T, X1, Y1, W2
932 If Y1 < 0 Then GoTo 1100
933 If Y1 > 12 Then GoTo 1100
935 F = "    !    !    !    !    !    "
940 Print USING; F, T; X1; Y1; V1; V2; V3
941 Print T; ","; X1; ","; Y1; ","; V1; ","; V2; ","; V3; ","; W2; ","; W1
950 If Y1 > 7 Then GoTo 960
951 GoTo 190
960 W1 = 0
970 W2 = 3
980 GoTo 260
1000 Close
1010 Close
1100 End
0
Pro_grammer
Модератор
6222 / 2309 / 450
Регистрация: 24.04.2011
Сообщений: 4,129
Записей в блоге: 10
12.07.2019, 06:49 6
Цитата Сообщение от Despair089 Посмотреть сообщение
В vba к сожалению практически ничего не понимаю.
Это ни коим образом не относится к VBA. Изначально код был написан для весьма древнего Бейсика, типа GW-BASIC или BASICA под управлением DOS.
Код можно исправить для работы с относительно менее древним QBasic. В основном нужно исправить кодировку под DOS ASCII.
Для того, чтобы код заработал в VBA нужно его полностью переписать заново.
1
Despair089
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 22
12.07.2019, 06:55  [ТС] 7
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Изначально код был написан для весьма древнего Бейсика. Для того, чтобы код заработал в VBA нужно его полностью переписать заново.
Да я уже так и понял.
Еще на том моменте, когда мне это смесью бейсика и паскаля показалось.
0
Pro_grammer
Модератор
6222 / 2309 / 450
Регистрация: 24.04.2011
Сообщений: 4,129
Записей в блоге: 10
12.07.2019, 07:27 8
Цитата Сообщение от Despair089 Посмотреть сообщение
мне это смесью бейсика и паскаля показалось.

Я его запустил на QBasic, предварительно исправив некоторые моменты. Вроде работает, но точно сказать не могу, потому как нет файла с исходными данными, да и другие параметры, которые надо вводить мне не известны.
0
Despair089
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 22
12.07.2019, 07:37  [ТС] 9
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Я его запустил на QBasic, предварительно исправив некоторые моменты.
Удивительно!
Должен получиться график.
Можете скинуть?
0
Pro_grammer
Модератор
6222 / 2309 / 450
Регистрация: 24.04.2011
Сообщений: 4,129
Записей в блоге: 10
12.07.2019, 09:13 10
Цитата Сообщение от Despair089 Посмотреть сообщение
Должен получиться график.
Нет, график точно не должен. Там по идее должна быть таблица на выходе.
Но на входе запрашивается файл с данными типа R*.KAT, которого нет, потому не могу проверить.
Цитата Сообщение от Despair089 Посмотреть сообщение
Можете скинуть?
От самого файла толку вам точно не будет.
Вот сборка, которую можно запустить на современной Windows системе. Там уже прописан QBasic, который автоматически откроется если запустить файл Qbasic.bat. Дальше из меню Файл->Открыть выбирайте kapl.bas и запускайте при помощи клавиши F5
Для работы этого кода надо в ту же папку предварительно записать файл с данными (R*.KAT)
1
Вложения
Тип файла: zip QB_WIN7.ZIP (2.06 Мб, 1 просмотров)
12.07.2019, 09:13
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2019, 09:13

Сериализация: что не так с этим кодом?
В курсе Байдачного http://www.microsoftvirtualacademy.com/training-courses/csharp_part_2 в 17...

Что не так с этим кодом? В чем его ошибка?
public class CustomMath { public static int multiply(int a, string b) { return a * b;...

Что не так с кодом? ( пытаюсь понять, что не так? )
Есть исходный код. Hook, работает хорошо, но есть минус огромный - перестаёт писать в лог, при...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru