Connected by... logo
  Главная
Market Connected by Velcom Connected by МТС Connected by БелСел Connected by Белтелеком Оборудование  

Товстолес Денис. Результаты контрольной по 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