Часовских Екатерина. Результаты контрольной по VBA.
вернуться на главную страницу можно, воспользовавшись ссылкой.
Оценка 8,7 балла (0,9+0,9+0,9+0,9+0,9+0,9+1,5+1,8), плюс 1 балл за призовую тройку, итого 9,7.
Задание 1.
Катюша, тип Variant, здесь не самое рациональное решение, как ты понимаешь.
0,9
Public Function y(x As Variant) As Variant
If x < -3 Then
y = 2 * Sqr(x)
ElseIf x >= -3 And x <= 7 Then
y = (3 * x) / (5 * x + 3)
ElseIf x > 7 Then
y = (4 * x + 5) / (x ^ 2 + 1)
End If
End Function
Задание 2.
А вот здесь тип Variant, который по умолчанию для функции – единственно возможное решение, а вот для переменных a, b и c – опять же неудачен.
0,9
Public Function zadan2(a, b, c)
If a >= 0 And b >= 0 And c >= 0 Then
zadan2 = 2 * (a + b + c)
ElseIf a >= 0 And b >= 0 Then
zadan2 = 2 * (a + b)
ElseIf a >= 0 And c >= 0 Then
zadan2 = 2 * (a + c)
ElseIf b >= 0 And c >= 0 Then
zadan2 = 2 * (b + c)
Else
zadan2 = "введите два неотрицательных числа"
End If
End Function
Задание 3.
Опять же - s As Integer – а сама функция? И еще одно – особенность описания типа в VBA в том, что i, как это не парадоксально, у тебя здесь типа variant. Догадалась, почему?
0,9
Public Function zadan3()
Dim i, s As Integer
s = 0
For i = 12 To 40 Step 2
s = s + i * (70 - i)
Next i
zadan3 = s
End Function
Задание 4.
И совсем была наша победа, но вот переменные появляющиеся в программе – сначала s, а потом еще и с – не самого рационального, как ты понимаешь, типа Variant. Не одно – так другое?
0,9
Public Function zadan4(n As Integer) As Integer
s = 0
While n <> 0
c = n Mod 10
If c Mod 5 <> 0 Then
s = s + c
End If
n = n \ 10
Wend
zadan4 = s
End Function
Задание 5.
Опять же "вариации на тему". И сама функция типа variant, и все переменные, кроме s
0,9
Public Function zadan5(a)
Dim m, n, i, j, s As Integer
m = a.Columns.Count
n = a.Rows.Count
s = 1
For i = 1 To n
For j = 1 To m
If a(i, j) < 0 Then s = s * a(i, j)
Next j
Next i
zadan5 = s
End Function
Задание 6.
И еще одна версия "вариаций на тему". Как и в предыдущем случае, все переменные, кроме s, типа variant, что не рационально, и сама функция того же типа с теми же последствиями.
0,9
Public Function zadan6(a)
Dim m, n, i, j, s As Integer
m = a.Columns.Count
n = a.Rows.Count
s = 0
For i = 1 To n
For j = 1 To m
If a(i, j) > 0 And a(i, j) Mod 7 = 0 Then s = s + 1
Next j
Next i
zadan6 = s
End Function
Задание 7.
Ну и здесь – еще раз о типах. Плюс, мягко говоря, не самый рациональный алгоритм. Да, он есть в конспекте, но как правило, лектор, перед тем как его привести, сообщает о том заем он его дает. Приблизительно, в следующей формулировке: "чтобы я его никогда больше не видел". Для большого числа разница между корнем из этого числа и его половиной – значительна. 25, например, не самое большое число, но 5 и 12,5 (или 12 в цикле) – это уже 7 лишних проходов цикла, то есть больше половины. А еще -обнаружив хотя бы один делитель (отличный от 1 и самого числа) – его уже можно без всяких условий добавлять в b и из цикла надо выходить (Exit for) – чего же там дальше делать, обнаруживая еще новые делители, суммируя их, с тем, чтобы потом сумму зачем-то сравнить с единицей?
1,5
Private Sub CommandButton1_Click()
Dim b As String, a As Integer
a = TextBox3.Value
b = ""
n = TextBox1.Value
m = TextBox2.Value
For i = n To m
s = 0
For k = 1 To i / 2
If i Mod k = 0 Then
s = s + k
End If
Next k
If s <> 1 Then
If i Mod 10 = a Then b = b + Str(i) + ";"
End If
Next i
TextBox4.Value = b
End Sub
Задание 8.
Ну типы неистребимы. А еще переменная k лишняя, я же говорил. Вполне хватило бы
a(imin, jmin) = maxim
a(imax, jmax) = minim
1,8
Public Sub maxmin()
a = Selection
n = UBound(a, 1)
m = UBound(a, 2)
minim = a(1, 1)
maxim = a(1, 1)
For i = 1 To n
For j = 1 To m
If a(i, j) < minim Then
minim = a(i, j)
imin = i
jmin = j
End If
If a(i, j) > maxim Then
maxim = a(i, j)
imax = i
jmax = j
End If
Next j
Next i
k = a(imin, jmin)
a(imin, jmin) = a(imax, jmax)
a(imax, jmax) = k
Selection = a
End Sub
|