Товстолес Денис. Результаты контрольной по VBA.
вернуться на главную страницу можно, воспользовавшись ссылкой.
Оценка 8,05 балла (0,9+0,9+0,9+0,9+0,9+0,9+2,65).
Задание 1.
Деня, за отсутствие описаний типов, как ты мог догадаться, снимается 0,1 (10%) баллов. Ну и a ^ 0.5 я бы рекомендовал записывать как Sqr(a), но это как бы и не ошибка.
0,9
Public Function zadanie1(a)
If a > 10 Then
y = a * a ^ 0.5
End If
If a > 5 And a <= 10 Then
y = (4 * a) / (2 * (15 * a - 5))
End If
If a < 5 Then
y = (3 * a + 5) / (a ^ 2 + 1)
End If
zadanie1 = y
End Function
Задание 2.
Ты бы все-таки мог поправильнее написать – речь о первой строке, в которой нет никакого смысла и о строке y = "" – в ней хотелось бы увидеть указание пользователю об отсутствии хотя бы двух отрицательных чисел.
0,9
Public Function zadanie2(a, b, c)
y = a * b * c
If a < 0 And b < 0 Or a < 0 And c < 0 Or b < 0 And c < 0 Or a < 0 And b < 0 And c < 0 Then
If a < 0 And b < 0 Then
y = a * b
End If
If a < 0 And c < 0 Then
y = a * c
End If
If b < 0 And c < 0 Then
y = b * c
End If
If a < 0 And b < 0 And c < 0 Then
y = a * b * c
End If
Else
y = ""
End If
zadanie2 = y
End Function
Задание 3.
ОК, только типы переменных и функции хотелось бы знать.
0,9
Public Function zadanie3()
s = 0
For j = 13 To 30 Step 2
s = s + (j * (100 - j))
Next j
zadanie3 = s
End Function
Задание 4.
См. предыдущий пункт.
0,9
Public Function zadanie4(ByVal N As Variant) As Variant
Dim a As Double
zadanie4 = 0
While N <> 0
a = N Mod 10
If a Mod 5 <> 0 Then zadanie4 = zadanie4 + 1
N = N \ 10
Wend
End Function
Задание 5.
Ошибки в этом нет нет, но, Деня, рекомендации на будущее - лучше и начинать со строк, то есть с Rows, и присваивать их количество переменной n, - устоялось как то так. Соответственно, первый индекс – номер строки - будет от I до n. Ну и типы переменных.
0,9
Public Function ZADANIE5(a)
N = a.Columns.Count
m = a.Rows.Count
s = o
For i = 1 To m
For j = 1 To N
If a(i, j) > 0 Then
s = s + a(i, j)
End If
Next j
Next i
ZADANIE5 = s
End Function
Задание 6.
См. предыдущий пункт.
0,9
Public Function zadanie6(a)
N = a.Columns.Count
m = a.Rows.Count
s = o
For i = 1 To m
For j = 1 To N
If a(i, j) Mod 3 <> 0 And a(i, j) < 0 Then
s = s + 1
End If
Next j
Next i
zadanie6 = s
End Function
Задание 7.
Дениска, вот в чем здесь был прикол. Функция, определяющая полиндромом ли является число, - меняет передаваемую в нее переменную, так, что в результате bb в первом же цикле – при bb равном m – после проверки "на полиндромность" становится равным 0, потом, после next bb становится равным 1 и начинается зацикливание – "на полиндромность" все время проверяется эта самая 1. Выхода может быть два. Первый – в алгоритме проверки на полиндром поменять местами b1 и b. И второй – передавать в функцию проверки на полиндром переменную "по значению" (ByVal) – т.е. Public Function polindrom(ByVal b) As Boolean – а не по ссылке, как "забито" по умолчанию. Ты бы до этого сто процентов додумался, если бы поставил точку останова и просмотрел во время выполнения пары циклов, как меняются переменные. Ну за типы снято, как и у всех, 10% баллов – 0,3, а вот за эту зацикленность – символические 0,05. Потому что сам бы мог разобраться, хотя и сложновато, конечно.
2,65
Public Function polindrom(b) As Boolean
b1 = b
While b <> 0
a = b Mod 10
p = p * 10 + a
b = b \ 10
Wend
If p = b1 Then polindrom = True Else polindrom = False
End Function
Private Sub CommandButton1_Click()
r = " "
m = Val(TextBox1.Value)
N = Val(TextBox2.Value)
k = Val(TextBox3.Value)
For bb = m To N
If Not polindrom(bb) And bb Mod 10 = k Then
r = r & " " & Str(bb)
End If
Next bb
TextBox4.Value = r
End Sub
Private Sub CommandButton2_Click()
zadanie7.Hide
End Sub
|