Como comparar um vetor a uma matriz

Boa tarde, gostaria de fazer uma fun��o que varre uma matriz e ache um linha que contenha todos os elementos maior que da linha seguinte ou da linha anterior, basicamente � para testar todas com todas at� encontrar a linha que tenha todos os elementos maior ou igual a outra linha. fiz a fun��o por�m n�o estou tendo �xito. Se algu�m puder me ajudar , desde j� agrade�o.

function mista(): string; var posI,posJ,i,j,l,k,cont:integer; verifica: array of Boolean; validado,achou: Boolean; texto,resultado: string; begin achou := false; validado:=true; posI:=0; SetLength(matrizAux,qtdLinha,qtdColuna); SetLength(verifica,qtdColuna); for i:=0 to qtdLinha-1 do //preenchendo a matriz aux for j:=0 to qtdColuna-1 do begin matrizAux[i,j]:=matriz[i,j]; verifica[i]:= false; end; for i:= 0 to qtdLinha-1 do for j:= 0 to qtdColuna-1 do for l:=0 to qtdLinha-1 do if not achou then begin for k:=0 to qtdColuna-1 do begin if not l=i then begin if (matriz[i,j]>= matrizAux[l,k]) then begin verifica[i]:= true; end; end; end; // for K cont:=0; while validado do begin if verifica[cont] then begin posI:= i; inc(cont); achou:=true; end else begin validado:= false; achou := false end; end; //while end //if do achou else break; if achou then begin for j:= 0 to qtdColuna-1 do begin texto:= texto + ''''+ inttostr(matrizAux[posI,j]); end; resultado:= texto; end else resultado:= ''linha n�o encontrada''; mista:= resultado; end;

Posts

Ol� Maria Taisa, Achei um post bem interessante que possa lhe ajudar com o seu problema, d� uma olhada l� ok, sucesso! http://thalesreis.com/delphi/delphi-um-passo-alem-com-matrizes-array/ Um abra�o,

ITO

Ol� Maria Taisa, Achei um post bem interessante que possa lhe ajudar com o seu problema, d� uma olhada l� ok, sucesso! http://thalesreis.com/delphi/delphi-um-passo-alem-com-matrizes-array/ Um abra�o,

ITO

ja li o post, mas n�o me ajudou muito.

Este artigo se concentra na comparação feita usando NumPy em matrizes. Comparar dois arrays NumPy determina se eles são equivalentes, verificando se todos os elementos em cada índice correspondente são iguais.

Método 1:

Geralmente usamos o ==operador para comparar duas matrizes NumPy para gerar um novo objeto de matriz. Chame ndarray.all() com o novo objeto array como ndarray para retornar True se os dois arrays NumPy forem equivalentes.

import numpy as np    an_array = np.array([[1, 2], [3, 4]]) another_array = np.array([[1, 2], [3, 4]])    comparison = an_array == another_array equal_arrays = comparison.all()    print(equal_arrays)

Resultado:

Como comparar um vetor a uma matriz

Arrays. O método equals() não compara recursivamente se um array contém outro array em outro Arrays. O método deepEquals() compara recursivamente se um array contém outro array.

Arrays.equals (Object [], Object []) 

Sintaxe:

public static boolean equals(int[] a, int[] a2)

Parâmetros:

  • a - uma matriz a ser testada quanto à igualdade
  • a2 - a outra matriz a ser testada quanto à igualdade

Retorna: verdadeiro se as duas matrizes forem iguais

  • Retorne True se as matrizes forem iguais umas às outras.
  • Se ambas as matrizes contiverem um número igual de elementos e o mesmo elemento em cada índice.
  • Além disso, se os dois arrays forem nulos, eles serão considerados iguais.
  • O método Arrays.equals() não compara recursivamente se um array contém outro array.
  • Em todos os outros casos, ele retorna False.

Array.deepEquals (Object [], Object [])

Sintaxe:

public static boolean deepEquals(Object[] o1, Object[] o2) o1 = First Array to test for Equality o2 = Second Array to test for Equality
  • Retorne True se as duas matrizes forem iguais uma à outra.
  • Se ambas as matrizes contiverem o mesmo número de elementos e o mesmo elemento em cada índice.
  • Além disso, os dois arrays são nulos, então eles são considerados iguais.
  • Além disso, se o elemento aninhado for novamente array, os elementos do array aninhado também são comparados de maneira iterativa.
  • O método Arrays.deepEquals() compara recursivamente se uma matriz contiver outra matriz.

Principais diferenças:

Se em qualquer Array, um item for outro Array, a chamada para equals() vai para java.lang.Object equals(), que compara a referência de dois Object e não realiza comparação profunda e falha na comparação lógica no caso de Array aninhado .

Por outro lado, o método Arrays.deepEquals() executa várias verificações e chama Arrays.equals() para comparação sem matriz e chama recursivamente Arrays.deepEquals() para comparação de tipo de matriz, o que permite comparar matrizes aninhadas logicamente em Java .  

Observação: é sempre recomendável usar Arrays.equals() para comparar Array não aninhado e Arrays.deepEquals() para comparar Array aninhado, já que Array.equals() é mais rápido do que Arrays.deepEquals() no caso de não aninhado Variedade.

Ilustração de equals() em java:

// Java program to compare two arrays // using .equals() method import java.io.*; import java.util.*; class GFG { public static void main(String[] args) { int[] A = { 1, 2, 3, 4, 5 }; int[] B = { 1, 2, 3, 4, 5 }; int[] C = { 2, 1, 4, 3, 5 }; // Comparing two arrays A and B using .equals() if (Arrays.equals(A,B)) System.out.println( "Array A and Array B is equal"); else System.out.println( "Array A and Array B is not equal"); if (Arrays.equals(A, C)) System.out.println( "Array A and Array C is equal"); else System.out.println( "Array A and Array C is not equal"); } }

SaídaMatriz A e Matriz B são iguais Array A e Array C não são iguais

Abaixo está a ilustração de deepEquals() em java: -

// Java program to compare two arrays // using .deepEquals() method import java.io.*; import java.util.*; class GFG { public static void main(String[] args) { int[][] A = { { 1, 2, 3 }, { 3, 4, 5 }, { 6, 7, 8 } }; int[][] B = { { 1, 2, 3 }, { 3, 4, 5 }, { 6, 7, 8 } }; int[][] C = { { 3, 4, 5 }, { 4, 5, 6 }, { 7, 2, 4 } }; // Comparing A and B arrays using .deepEquals() method if (Arrays.deepEquals(A, B)) System.out.println( "Array A and Array B is equal"); else System.out.println( "Array A and Array B is not equal"); if (Arrays.deepEquals(A, C)) System.out.println( "Array A and Array C is equal"); else System.out.println( "Array A and Array C is not equal"); } }

SaídaMatriz A e Matriz B são iguais Array A e Array C não são iguais

Olá Bruno!

Você quer uma solução apenas em VBA ou se for uma fórmula na planilha te atende?

Não há necessidade de VBA para realizar essa comparação, você pode utilizar o recurso de fórmula matricial do Excel. A fórmula vai ficar um pouco longa porque você tem muitas colunas para comparar, mas a ideia é comparar cada valor de cada coluna e ir gerando vetores com valores booleanos (VERDADEIRO ou FALSO) que vão ser multiplicado entre eles, no final da multiplicação, se houve correspondência em todas as colunas a multiplicação vai resultar em 1, e então trazemos, por exemplo, o valor da linha para ser utilizado com a função DESLOC. Observe o modelo abaixo:

Como comparar um vetor a uma matriz

A fórmula deste modelo, que deve ser inserida com CTRL + SHIFT + ENTER é:

=SEERRO(DESLOC($M$1;MÍNIMO(SE((A10=A2:A5)*(B10=B2:B5)*(C10=C2:C5)*(D10=D2:D5)*(E10=E2:E5)*(F10=F2:F5)*(G10=G2:G5)*(H10=H2:H5)*(I10=I2:I5)*(J10=J2:J5)*(K10=K2:K5)*(L10=L2:L5)=1;LIN(M2:M5);""))-1;0);"Não Localizado")

Outra alternativa também com fórmula matricial, seria comparar os valores concatenando cada coluna. Observe a fórmula para o modelo da imagem:

=SEERRO(DESLOC($M$1;MÍNIMO(SE(A2:A5&B2:B5&C2:C5&D2:D5&E2:E5&F2:F5&G2:G5&H2:H5&I2:I5&J2:J5&K2:K5&L2:L5=A10&B10&C10&D10&E10&F10&G10&H10&I10&J10&K10&L10;LIN(M2:M5);""))-1;0);"Não Localizado")

Se quiser entender melhor pode baixar também o modelo pelo link:

https://dl.dropboxusercontent.com/u/80811028/Modelo%20-%20F%C3%B3rmula%20matricial%20-%20Comparar%20linhas.xlsx

Abraços!

Rafael Kamimura