Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2010, 10:34   #1
Bombastick
Пользователь
 
Аватар для Bombastick
 
Регистрация: 06.12.2010
Сообщений: 26
По умолчанию VBA Excel

Определить количество инверсий в одномерном массиве X[1..20] (т.е. таких пар элементов, в которых большее число находится слева от меньшего: X[I] > X[J] при I < J).

а)Создаю массив
Dim x() As Integer
Dim N As Integer

Private Sub CB_1_Click()
Dim A, B, i As Integer
N = Val(TB_N.Value)
ReDim x(1 To N) As Integer
A = -20
B = 30
Randomize
For i = 1 To N
x(i) = Int((B - A) * Rnd + A)
Next i
For i = 1 To N
Cells(i, 1) = x(i)
Next i
End Sub

Далее сама функция
Private Sub CB_2_Click()
S=0
For I=1 To N
If I<I+1 and x(I) > X(I+1)
Then S=S+1
Next I
End Sub
Выдает ошибку в строке If I<I+1 and x(I) > X(I+1)
И не получается сделать что бы выводило в окошко результат (TB_K)
Bombastick вне форума Ответить с цитированием
Старый 25.12.2010, 10:40   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
If I<I+1 ...
В чем смысл этой загадочной проверки?

Или вы думаете, что если 4 меньше, чем 5, - то это не навсегда, и лишний раз проверить не помешает?
EducatedFool вне форума Ответить с цитированием
Старый 25.12.2010, 10:44   #3
Bombastick
Пользователь
 
Аватар для Bombastick
 
Регистрация: 06.12.2010
Сообщений: 26
По умолчанию

не судите строго, могу и бред написать ибо не работал в ВБА никогда. Наработки есть, код есть но чего то не хватает

Последний раз редактировалось Bombastick; 25.12.2010 в 11:23.
Bombastick вне форума Ответить с цитированием
Старый 25.12.2010, 11:42   #4
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Цитата:
Выдает ошибку в строке If I<I+1 and x(I) > X(I+1)
не знаю, как там с логикой, но вот здесь просто синтаксические ошибки.
Запишите так
Код:
Private Sub CB_2_Click()
    S = 0
    For i = 1 To N
        If i < i + 1 And x(i) > x(i + 1) Then
            S = S + 1
        End If
    Next i
End Sub
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 25.12.2010, 12:06   #5
Bombastick
Пользователь
 
Аватар для Bombastick
 
Регистрация: 06.12.2010
Сообщений: 26
По умолчанию

все равно ошибка. даю файл гляньте
Вложения
Тип файла: rar задача.rar (8.6 Кб, 11 просмотров)
Bombastick вне форума Ответить с цитированием
Старый 25.12.2010, 12:29   #6
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

как писалось выше
Цитата:
В чем смысл этой загадочной проверки?
If i < i + 1 And x(i) > x(i + 1) Then
исходя из логики i все равно будет меньше чем i+1
как и x(i) никогда не будет больше чем x(i + 1)
хотя..может я и неправ
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 25.12.2010, 12:33   #7
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Может, так?
Код:
Private Sub CB_2_Click()
Dim i As Integer, s As Integer
For i = 1 To N - 1
    If x(i) > x(i + 1) Then s = s + 1
Next i
Me.TB_K.Text = s
End Sub
nilem вне форума Ответить с цитированием
Старый 25.12.2010, 12:53   #8
Bombastick
Пользователь
 
Аватар для Bombastick
 
Регистрация: 06.12.2010
Сообщений: 26
По умолчанию

дааа
Private Sub CB_2_Click()
Dim i As Integer, s As Integer
For i = 1 To N - 1
If x(i) > x(i + 1) Then s = s + 1
Next i
Me.TB_K.Text = s
End Sub

сработало находит, до земли поклон
Bombastick вне форума Ответить с цитированием
Старый 25.12.2010, 13:19   #9
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
сработало находит
Находит, но решение неполное.

Прочитайте ещё раз условие:
Цитата:
Определить количество инверсий в одномерном массиве X[1..20] (т.е. таких пар элементов, в которых большее число находится слева от меньшего: X[I] > X[J] при I < J).
Где написано, что сравнивать надо только стоящие рядом значения?
"слева" - не значит, что рядом.

К примеру, если X[5] > X[16], то такой случай тоже надо учитывать.
А в вашем решении это не учитывается.

Вас выручат вложенные циклы.
EducatedFool вне форума Ответить с цитированием
Старый 25.12.2010, 13:30   #10
Bombastick
Пользователь
 
Аватар для Bombastick
 
Регистрация: 06.12.2010
Сообщений: 26
По умолчанию

Честно говоря я уже не знаю что делать с этим, а как учесть X[5] > X[16] такое?
Bombastick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA Excel .::pk::. Помощь студентам 2 14.05.2016 09:54
VBA Word,VBA Excel решить 2 задачи fafolo4ka Фриланс 6 05.03.2012 01:15
Как запретить запуск программы на VBA Excel 2003 в Excel 2007 kovalevskivf Microsoft Office Excel 2 15.05.2009 16:47
VBA Excel Олька я Помощь студентам 0 09.05.2009 01:24
VBA i Excel corsarlt Microsoft Office Excel 3 03.04.2008 06:13