Сравнить массивы

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

Сравнить массивы

Сообщение Orastar » 08.12.2004 (Ср) 15:59

Есть два массива, один одномерный массив из 4 чисел (например 1,2,3,4) и есть двухмерный масив (4 на 100). Эти два массива надо сравнить построчно, т.е. если одномерный массив совпадает с какой-нибудь стокой двумерного массива - вывести кол-во совпадений и строку которая совпала.
Буду очень признателен за помощь. Заранее спасибо.

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

Сообщение tyomitch » 08.12.2004 (Ср) 16:02

Писать одно и то же в два форума сразу нехорошо.
Изображение

Orastar
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 29.11.2004 (Пн) 15:41

Сообщение Orastar » 08.12.2004 (Ср) 16:04

Извиняюсь, я здесь недавно, и не знаю к какому форуму эта тема относиться.

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 08.12.2004 (Ср) 16:17


Gemini
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 390
Зарегистрирован: 24.07.2002 (Ср) 14:15
Откуда: Ozersk

Сообщение Gemini » 08.12.2004 (Ср) 16:26

По идее должно быть так... :roll:

For X = 0 to 4
For Y = 0 to 100
For Z = 1 to 4

if Массив(Z)=Массив(X,Y) then N = N + 1

Next Z
Next Y
Next X

msgbox "Повторов: " & N & " раз."

Orastar
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 29.11.2004 (Пн) 15:41

Сообщение Orastar » 09.12.2004 (Чт) 10:41

Так работает но считает все совпадения, а нужно чтобы считал сопадения в каждой строчке и вывел максимальное кол-во совпадений.

TEH3OP
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 12.12.2003 (Пт) 20:19
Откуда: Москва

Чавой?

Сообщение TEH3OP » 10.12.2004 (Пт) 11:34

Orastar писал(а):Так работает но считает все совпадения, а нужно чтобы считал сопадения в каждой строчке и вывел максимальное кол-во совпадений.

Дык максимальным будет 5.
А сравнивать мона так:
Код: Выделить всё
Option Explicit

Public Sub Main()
    Dim alngTestPattern(4) As Long
    Dim alngTestSource(4, 100) As Long
    Dim k As Long
    Dim m As Long
   
    VBA.Randomize
   
    For k = 0 To 4
        alngTestPattern(k) = VBA.Rnd() * &H7FFFFFFF
    Next k
   
    For m = 0 To 100
        For k = 0 To 4
            alngTestSource(k, m) = VBA.Rnd() * &H7FFFFFFF
        Next k
    Next m

    Dim lngCompareResult As Long
   
    lngCompareResult = MatrixCompare(alngTestSource, alngTestPattern)
   
    m = VBA.Rnd() * 100
   
    For k = 0 To 4
        alngTestPattern(k) = alngTestSource(k, m)
    Next k
   
    lngCompareResult = MatrixCompare(alngTestSource, alngTestPattern)
End Sub


Private Function MatrixCompare(ByRef iSource() As Long, ByRef iPattern() As Long) As Long
    Dim alngSource() As Long
    Dim alngPattern() As Long
    Dim lngUboundPattern As Long
    Dim lngUboundSource As Long
    Dim lngReturn As Long
   
    alngPattern = iPattern
    alngSource = iSource
    lngUboundPattern = UBound(alngPattern)
    lngUboundSource = UBound(alngSource, 2)
   
    Dim k As Long
    Dim m As Long
    Dim lngTMP As Long
   
    For k = 0 To lngUboundSource
        lngTMP = 0&
       
        For m = 0 To lngUboundPattern
           
            If alngPattern(m) = alngSource(m, k) Then
                lngTMP = lngTMP + 1&
            End If
       
        Next m
       
        If lngTMP > lngReturn Then
            lngReturn = lngTMP
        End If
       
       
        If lngReturn - 1& = lngUboundPattern Then
            Exit For
        End If
    Next k
   
    MatrixCompare = lngReturn
End Function


PS: Чёта толком неясно, чего тебе считать надо?


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

    TopList  
cron