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

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