Фролова Ника. Результаты контрольной по VBA.
вернуться на главную страницу можно, воспользовавшись ссылкой.
Оценка 4 балла (0,9+0,3+0,5+0+0,5+1,8).
Задание 1.
Ника, по первой задаче практически всем одно и то же замечание – тип "по умолчанию" Variant – здесь использовать нерационально. За что и снята одна десятая балла.
0,9
Public Function znachenie(x)
If x < -3 Then
y = 2 * x ^ 1 / 2
End If
If -3 <= x <= 7 Then
y = 3 * x / (5 * x + 3)
End If
If x > 7 Then
y = (4 * x + 5) / (x ^ 2 + 1)
End If
znachenie(x) = y
End Function
Задание 2.
Ника, здесь про типы уже неуместно, здесь уже началось такое, что говорит просто о полном непонимании того, чего от тебя собственно хотят. Хотят суммы неотрицательных чисел, у тебя же какое-то нагромождение условий, а результат в любом случае один, вне зависимости от условий - s = 2 * (a + b + c). Это само по себе очень грустно, но вот для комплекта последняя строчка -summa(a, b, c) = y – оно вообще к чему? К тому чтобы я сам догадался, что имелось в виду summa=s? И еще - строчки b < o, c < o – (т.е. буква о вместо 0) они при массовом характере этой "ошибки" говорят о том, как все запущенно. Вы же даже шпорами (именно о шпорах наводит на мысль характер ошибки – на бумаге что о, что 0 – все одинаково выглядит – тут уже надо понимать просто, что пишешь и к чему это – примерно это я пишу всем, у кого такая, с позволения сказать, ошибка) воспользоваться нормально не можете.
0,3
2. Разработать функцию пользователя, вычисляющую удвоенную сумму неотрицательных чисел, из трех заданных. (1 балл)
Public Function summa(a, b, c)
s = 2 * (a + b + c)
If a < 0 And b < 0 Or b < 0 And c < 0 Or a < 0 And b < o Then
If a < 0 And b < 0 Then
s = 2 * (a + b + c)
End If
If b < o And c < o Then
s = 2 * (a + b + c)
End If
If c < 0 And a < 0 Then
s = 2 * (a + b + c)
End If
summa(a, b, c) = y
End Function
Задание 3.
Ника, про типы как бы опять же неуместно. Строка s = o (т.е. опять о) меня ввела в ступор, Идем дальше, ну, хорошо, For j = 68 To 40 Step -2, а дальше? Ну, допускаю, ошибка в условиях ввела тебя в заблуждение, там вообще 80-j надо во втором множителе. Но вот что такое zadanie2 ss – никто уж точно не догадается.
0,5
3.Разработать функцию пользователя, вычисляющую сумму: 12*68+14*66+16*64...+40*40 (1 балл)
Public Function zadanie2()
s = o
For j = 68 To 40 Step -2
s = s + (j * (70 - j))
Next j
zadanie2 ss
End Function
Задание 4.
Ника, этому заданию уж конечно самое место было в пятом модуле. Ну да ладно. А вот учитывая, что я открытым текстом сказал про четные-нечетные цифры-элементы массива строка "If a Mod 2 = 0 Then" - это ФИНИШ - дальше можно было уже не смотреть. Есть еще как бы "описка при списывании" – вместо "zadanie4 = zadanie4 = a" надо zadanie4 = zadanie4 + a, переменная n не типа Variant, а переменная a – опять же не совсем вещественного (десятичного) типа Double – по смыслу хватило бы целочисленного типа, но последнее можно как бы оспаривать при понимании сути и желании. Ну да ладно, это опять же из области лирических отступлений на будущее. Повторюсь, из-за вот этого поиска ЧЕТНЫХ цифр вместо "не кратных 5", при том, что именно об этом я предупредил – за задание 0 баллов.
0
4. Разработать функцию пользователя, вычисляющую сумму не кратных 5 цифр числа.
Public Function zadanie4(ByVal n As vaiant) As Variant
Dim a As Double
zadanie4 = 0
While n <> 0
a = n Mod 10
If a Mod 2 = 0 Then
zadanie4 = zadanie4 = a
n = n / 10
Wend
End Function
Задание 5.
Да, оно начинает быть похоже на случайное нажатие клавиш. Хорошо, хоть в m и n не запуталась. Хотя здесь лучше все-таки по-другому - первый индекс массива – это как в матрице на вышке – номер строки, второй, соответственно, - номер столбца. По-английски Columns – это колонки (ну звучит же именно так), то есть столбики, а Rows, соответственно, строчки. Так вот первое, лучше и начинать со строк, то есть с Rows, и присваивать их количество переменной n, более часто употребляемой, чем n. Ну да ладно, это лирическое отступление – первые 4 строчки все-таки работоспособны. Что означает пятая строчка – "pro: zv"???? Почему в 4-ой и 5-ой индекс от "-1"??? Что за условие в 6-й – "If a(i, j) Then"??? В чем оно состоит, по-твоему? В том, что такой элемент массива есть в наличии? А как это соотносится с поиском произведения отрицательных элементов???
0,5
5.Разработать функцию пользователя, вычисляющую произведение отрицательных элементов массива (1 балл)
Public Function zadanie5(a)
n = a.Columns.Count
m = a.Rows.Count
pro: zv
For i = -1 To m
For j = -1 To n
If a(i, j) Then
proizv = proizv * a(i, j)
End If
Next j
Next i
zadanie5 = proizv
End Function
Задание 8.
Повезло, я бы сказал... Хотя хорошо бы ты понимала смысл написанного…Тут же, как видишь, типы не описаны (за что снимается 10% баллов -0,2 – тут уж самой надо было участие принять в дописывании), опять же на будущее - одна переменная лишняя – вместо строчек rez = a(imin, jmin): a(imin, jmin) = a(imax, jmax): a(imax, jmax) = rez можно ограничиться a(imin, jmin) = maxi, a(imax, jmax) = mini – это не ошибка, конечно…
1,8
8.Составить макрокоманду, которая в выделенном диапазоне рабочей таблицы, переставит максимальный и минимальный элементы (2 балла)
Public Sub zamena()
a = Application.Selection
n = UBound(a, 1)
m = UBound(a, 2)
mini = a(1, 1)
maxi = a(1, 1)
imin = 1: jmin = 1
imax = 1: jmax = 1
For i = 1 To n
For j = 1 To n
If mini < a(i, j) Then
mini = a(i, j): imin = i: jmin = j
If maxi > a(i, j) Then
maxi = a(i, j): imax = i: jmin = j
Next i
Next j
rez = a(imin, jmin)
a(imin, jmin) = a(imax, jmax)
a(imax, jmax) = rez
Application.Selection = a
End Sub
|