Сенокосова Анна. Результаты контрольной по VBA.
вернуться на главную страницу можно, воспользовавшись ссылкой.
Оценка 12
Из них собственно за контрольную 1+1+0,5+1+0,9+0,9+2,7+2=10. А, еще призовой +1 за первую тройку и еще+1 за реферат.
Задание 1.
1
Public Function zadanie2_1(x As Integer) As Double
Dim s As Double
If x > 10 Then
s = 2 * (Sqr(x))
ElseIf x < 5 Then
s = (3 * x + 5) / (x * x + 1)
Else
s = 4 * x / (2 * (15 * x - 5))
End If
zadanie2_1 = s
End Function
Задание 2.
1
Public Function Zadanie2_2(a As Integer, b As Integer, c As Integer) As Integer
Dim s As Integer
s = 1
If a < 0 Then s = s * a
If b < 0 Then s = s * b
If c < 0 Then s = s * c
If (a >= 0) And (b >= 0) And (c >= 0) Then
MsgBox ("Отрицательных чисел нет")
Else
Zadanie2_2 = s
End If
End Function
Задание 3.
Учитывая, что задание состояло в том, чтобы "Разработать функцию пользователя, вычисляющую сумму: 13*87+16*84+19*81...+31*69 (1 балл)", ты, была не совсем внимательна в двух вещах. Во-первых, шаг не 2 а 3, то есть
13, 16, 19, 22, 25, 28, 31 и
87, 84, 81, 78, 75, 72, 69 как видишь, отличны между собой именно на 3. А во-вторых, второй множитель в цикле это все-таки не 90-i, а 100-i, - сама видишь, почему.
0,5
Public Function zadanie2_3() As Integer
Dim i As Integer, s As Integer
For i = 13 To 31 Step 2
s = s + i * (90 - i)
Next i
zadanie2_3 = s
End Function
Задание 4.
Дискуссионный вопрос, конечно, но переменную i, возможно, и вводить не стоило – просто n=Abs(n) – памяти бы немного сэкономила?, но с тем же успехом можно и продолжать подобные рассуждения до того, что и s вводить не стоило…но все вышесказанное, повторюсь, очень оспоримо, так что это можно делать так, как считаешь нужным.
1
Public Function zadanie2_4(n As Integer) As Integer
Dim i As Integer, s As Integer, k As Integer
i = Abs(n)
While i <> 0
k = i Mod 10
If k Mod 5 <> 0 Then
s = s + 1
End If
i = i \ 10
Wend
zadanie2_4 = s
End Function
Задание 5.
Стоп, а функция-то почему Variant?
0,9
Public Function zadanie2_5(a As Variant) As Variant
Dim m As Integer, n As Integer, i As Integer, j As Integer, s As Variant
m = a.Columns.Count
n = a.Rows.Count
For i = 1 To n
For j = 1 To m
If a(i, j) > 0 Then
s = s + a(i, j)
End If
Next j
Next i
zadanie2_5 = s
End Function
Задание 6.
И здесь тоже – функции-то зачем быть типа Variant? И, кстати, ты уверена в необходимости переменной k?
0,9
Public Function zadanie2_6(a As Variant) As Variant
Dim m As Integer, n As Integer, i As Integer, j As Integer, s As Integer, k As Integer
m = a.Columns.Count
n = a.Rows.Count
For i = 1 To n
For j = 1 To m
k = Abs(a(i, j))
If a(i, j) < 0 And k Mod 3 <> 0 Then
s = s + 1
End If
Next j
Next i
zadanie2_6 = s
End Function
Задание 7.
Аня, ну согласен, что работает, согласен, что весьма элегантно написано. Но придраться есть к чему. Посмотри, насколько "рационально" у тебя работает функция обратное для отрицательных чисел. Заходим, создаем обратную цепочку символов, которая нам ничего не даст, доходим до соответствующего условия, и заменяем эту цепочку на правильную…А зачем тогда было ее создавать изначально?
2,7
Private Sub CommandButton1_Click()
Dim a As Integer, b As Integer, i As Double
r.Clear
a = Val(n.Text)
b = Val(m.Text)
For i = a To b
If Полиндром(i) = "Нет" And i Mod 10 = Val(k.Text) Then
r.AddItem (Str(i))
End If
Next i
End Sub
Public Function обратное(a As Double) As String
Dim n As Integer, i As Integer
n = Len(Format(a))
обратное = ""
For i = n To 1 Step -1
обратное = обратное + Mid(Format(a), i, 1)
Next i
If a < 0 Then
обратное = -обратное(Abs(a))
End If
End Function
Public Function Полиндром(a As Double) As String
If Format(a) = обратное(a) Then
Полиндром = "Да"
Else
Полиндром = "Нет"
End If
End Function
Задание 8.
Аня, на всякий случай – ты помнишь – что Application.Selection, что Selection – все равно сработает
2
Public Sub zadanie2_8()
Dim a As Variant, n As Variant
Dim rez As Integer
a = Application.Selection
n = UBound(a, 1)
rez = a(1, 1)
a(1, 1) = a(n, 1)
a(n, 1) = rez
Application.Selection = a
End Sub
|