Показать полную графическую версию : Помогитите пожалуйста с одномерными массивами решить задачу
помогите решить хотя бы под одной буквой=)
Даны целые числа a1, a2, … Известно, что a1 > 0 и что среди a2,a3,… есть хотя бы одно отрицательное число. Пусть a1,…,an – члены данной последовательности, предшествующие первому отрицательному члену (n заранее неизвестно). Получить:
a) max (а1, …, аn );б) min (a1+a2, a2+a3, …,an-1+an);
в) количество четных среди а1, …, аn;
vivat, а в чем собственно проблема?
мах как найти?я не знаю и минимум тоже...
vivat, хм... дела. Может сравнение елементов попробовать? :unsure:
мне хотя бы знать,как вычисления делать,по какой формуле вычислять прогрессию.....
я пыталась сделать под а)нахождение максимального значения вот что вышло
Sub mac1()
Dim A() As Integer, n As Byte, i As Integer, r As Integer, b As Integer
n = InputBox("n")
ReDim A(n)
For i = 1 To n
A(i) = InputBox("A(i)")
Next i
Amax = A(1) : k = 1
For i = 2 To n
If A(i) > max Then max = A(i) : k = i
Next i
MsgBox "max=" & r
End Sub
у меня ошибка есть,но я не знаю где....
vivat, вроде все верно.
1. Покажи объявление переменных max, k.
2. Сделай проверку на единичную длину массива.
3. If A(i) > max Then max = A(i) : k = i напиши в две строки.
If A(i) > max Then max = A(i)
k = i - ЕМНИП это не будет принадлежать условию if.
If A(i) > max Then max = A(i)
k = i
else
EndIf
А вот так будет. В любом случае проверь синтаксис конструкции IF Then Else.
4. MsgBox "max=" & r Максимальное значение у тебя храниться в max, индекс максимального в k. Скажи, причем здесь r ?
Это как в анекдоте: Летят два крокодила, один зеленый, другой на север. Вопрос: сколько лет было тигру, когда посадили медведя. Ответ: а зачем мне холодильник, если я не курю.
Вот так и у тебя. Считается в одних переменных, а на вывод ты запрашиваешь другие.
5. A(i) = InputBox("A(i)") - эта конструкция точно верна? у меня VBA под руками нет проверить.
мне тоже кажется,что не верно A(i) = InputBox("A(i)"),но а как тогда?
vivat, возьми какую либо книжку (http://forum.oszone.net/thread-160548.html) почитать. Там расскажут и покажут все первые шаги программирования.
Я же могу тебя только отослать к чтению документации. Запрос к гугл (http://www.google.ru/search?hl=ru&q=VBA+InputBox) Ведет к первоисточнику (http://msdn.microsoft.com/ru-ru/library/6z0ak68w(v=vs.90).aspx).
Т.к. возвращается строка, а необходимо получить число, соотв надо найти функцию перевода строки в число.
Это тебе для самостоятельного поиска. :) (а мне надо идти)
vivat, наслаждайтесь
Function GetCountEvenItems(ByRef An() As Double) As Long
Dim evenCount As Long
Dim i As Long
evenCount = 0
For i = 0 To UBound(An)
If (An(i) / 2 - An(i) \ 2) = 0 Then
evenCount = evenCount + 1
End If
Next i
GetCountEvenItems = evenCount
End Function
Function MinimumOfSumNearlessItems(ByRef An() As Double) As Double
Dim minSumNearlessItems As Double
Dim i As Long
minSumNearlessItems = (An(0) + An(1))
For i = 1 To UBound(An)
If (An(i - 1) + An(i)) < minSumNearlessItems Then
minSumNearlessItems = (An(i - 1) + An(i))
End If
Next i
MinimumOfSumNearlessItems = minSumNearlessItems
End Function
Function Maximum(ByRef An() As Double) As Double
Dim maxItem As Double
Dim i As Long
maxItem = An(0)
For i = 0 To UBound(An)
If An(i) > maxItem Then
maxItem = An(i)
End If
Next i
Maximum = maxItem
End Function
Sub TestStart()
Dim tmp() As Double
Dim n As Long
Dim i As Long
'Общая инициализация массива An
Randomize
n = Val(Rnd() * 100 & "")
ReDim tmp(n)
For i = 0 To n
tmp(i) = Val((Rnd() * 100)) * IIf((Rnd() * 100) > 50, 1, -1)
Next i
'Массив в окно Immediate (для проверки правильности)
For i = 0 To n
Debug.Print "Элемент: A" & i & " = " & tmp(i)
Next i
'Вариант_А
'Результат в окно Immediate (вызывается по нажатию Ctrl+G)
Debug.Print "Максимальный элемент массива: " & Maximum(tmp())
'Вариант_Б
'Результат в окно Immediate (вызывается по нажатию Ctrl+G)
Debug.Print "Минимальная сумма соседних элементов массива: " & MinimumOfSumNearlessItems(tmp())
'Вариант_В
'Результат в окно Immediate (вызывается по нажатию Ctrl+G)
Debug.Print "Количество четных элементов в массиве: " & GetCountEvenItems(tmp())
End Sub
Результат одного из запусков рядышком
Элемент: A0 = 9
Элемент: A1 = 30
Элемент: A2 = -14
Элемент: A3 = 27
Элемент: A4 = -78
Элемент: A5 = -23
Элемент: A6 = -97
Элемент: A7 = -39
Элемент: A8 = -37
Элемент: A9 = 29
Элемент: A10 = -34
Элемент: A11 = -90
Элемент: A12 = -25
Элемент: A13 = -2
Элемент: A14 = -94
Элемент: A15 = 92
Элемент: A16 = -52
Элемент: A17 = 25
Элемент: A18 = 39
Элемент: A19 = -15
Элемент: A20 = 47
Элемент: A21 = 67
Элемент: A22 = -77
Элемент: A23 = -37
Элемент: A24 = 11
Элемент: A25 = 27
Элемент: A26 = -14
Элемент: A27 = 94
Элемент: A28 = 63
Элемент: A29 = -90
Элемент: A30 = -98
Элемент: A31 = -28
Элемент: A32 = -95
Элемент: A33 = -71
Элемент: A34 = -73
Элемент: A35 = 42
Элемент: A36 = 17
Элемент: A37 = 69
Элемент: A38 = 30
Элемент: A39 = 44
Элемент: A40 = -11
Элемент: A41 = -15
Элемент: A42 = 55
Элемент: A43 = 0
Элемент: A44 = 79
Элемент: A45 = 25
Элемент: A46 = -76
Элемент: A47 = -87
Элемент: A48 = 91
Элемент: A49 = -46
Элемент: A50 = 21
Максимальный элемент массива: 94
Минимальная сумма соседних элементов массива: -188
Количество четных элементов в массиве: 20
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.