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

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