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

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