Необходимо оптимизировать код.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Sofist
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.02.2007 (Вс) 19:19

Необходимо оптимизировать код.

Сообщение Sofist » 16.02.2007 (Пт) 21:26

Помогите оптимизировать код, а то выполнение его слишком много времени занимает:
Код: Выделить всё
Option Explicit
Public Pic1(1 to 3, 1 to 320, 1 to 240) as Byte
Public Pic2(1 to 3, 1 to 320, 1 to 240) as Byte
Public Rezultat(1 to 3, 1 to 320, 1 to 240) as Byte

Sub Sravnit_massivy()
   Dim k As Byte, x As Long, y As Long
   For i = 2 To 320 Step 4
      For j = 2 To 240 Step 3
         If Module.SR(i, j) = True Then
            If Module.SR(i + 2, j) = True Then
               For k = 1 To 3
                  Rezultat(k, i, j) = Pic2(k, i, j)
                  Rezultat(k, i + 2, j) = Pic2(k, i + 2, j)
                  Rezultat(k, i - 1, j) = Pic2(k, i - 1, j)
                  Rezultat(k, i + 1, j) = Pic2(k, i + 1, j)
               Next k
               For x = -1 To 1 Step 2
                  For y = -1 To 1 Step 2
                     If Module.SR(i + x, j + y) = True Then
                        For k = 1 To 3
                           Rezultat(k, i + x, j + y) = Pic2(k, i + x, j + y)
                           Rezultat(k, i + x + 1, j + y) = Pic2(k, i + x + 1, j + y)
                        Next k
                     End If
                  Next y
               Next x
            End If
         End If
      Next j
   Next i
End Sub

Public Function SR(i, j) As Boolean
   If Pic2(1, i, j) > CLng(Pic1(1, i, j)) + 8 Or Pic2(1, i, j) < CLng(Pic1(1, i, j)) - 8 Or_
      Pic2(2, i, j) > CLng(Pic1(2, i, j)) + 8 Or Pic2(2, i, j) < CLng(Pic1(2, i, j)) - 8 Or_
      Pic2(3, i, j) > CLng(Pic1(3, i, j)) + 8 Or Pic2(3, i, j) < CLng(Pic1(3, i, j)) - 8 Then
      SR = True
   Else
      SR = False
   End If
End Function

Заранее спасибо.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 16.02.2007 (Пт) 22:33

Объясни человеческим языком, что тебе нужно.
Изображение

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 17.02.2007 (Сб) 7:35

как минимум выкинуть преобразования из Byte в Long посредством CLng, задать тип аргументов функции SR как Integer или Long, заменить If с несколькими Or на несколько последовательных If и да, присоединяюсь к tyomitch.
Весь мир матрица, а мы в нем потоки байтов!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 95

    TopList