Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bruno Augusto

Comparação de Qualidade

Recommended Posts

Num cenário hipotético figuramos eu ter dois itens: A e B

 

O item A possui um grau de qualidade 10

O item B possui um grau de qualidade 20

 

Como calcular o percentual diferencial entre as duas qualidades?

 

Tentei com regra de 3, mas não ficou muito certo, eu acho.

 

Trazendo a regra de três para programação teriamos que D = BC / A (sendo D a variável) no mesmo esquema que abaixo:

 

A --- B
C --- D
Jogando os valores pressupostos para discussão do algoritimo temos:

 

10 --- 100 %
20 ---   x %

10x = 2000
  x = 2000 / 10
  x = 200 %
E quando inverto:

 

20 --- 100 %
10 ---   x %

20x = 1000
  x = 1000 / 20
  x = 50 %
Até aí tudo bem. Mas como calcular o diferencial?

 

Se eu subtrair, teria, comparando a qualidade:

 

do item A -> B: 200 - 50 = 150 %

do item B -> A: 50 - 200 = -150 %

 

Mas como eu tiro a prova disso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nao entendi o que exatamente o programa quer com isso...

 

"Como calcular o percentual diferencial entre as duas qualidades?"

 

Como assim percentual diferencial?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quantos % o primeiro item é melhor ou pior que o segundo.

 

Usei o termo diferencial porque quando se subtrai uma coisa de outra, temos uma diferença como resultado.

 

Eu bolei uma fórmula aqui para calcular isso exatamente no esquema postado: Faço a regra de três do A pelo B e do B pelo A e subtraio o A do B.

 

Depois refiz a conta manualmente com o valor de A e com o valor de B para obter o resultados certo e ver se o algoritimo era funcional.

 

Aparentemente funciona, mas queria confirmara lógica.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem nesse caso será sempre o dobro ou 200% pois uma é 10 e o outro 20. Seria interessante se o programa pedisse a qualidade do A e depois a qualidade do B e ai sim fizesse o calculo da porcentagem de um em relação ao outro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

,

 

Sendo A e B dois valores variáveis:

 

A <= 10

B <= 20

 

A comparação entre eles pode ser feita:

 

AV <= A / B

BV <= ( B / A ) - 1

 

Calculando:

 

BV = ( 20 / 10 ) - 1

BV = 2 - 1

BV = 1

 

AV = 10 / 20

AV = 0.5

 

Sendo assim,

 

B é (BV * 100) melhor que A ou 100%

A é (AV * 100) de B ou 50%

 

Para tirar a prova é simples também,

 

PB = A + ( A * BV )

PB = 10 + ( 10 * 1 )

PB = 10 + 10

PB = 20

 

PA = B * AV

PA = 20 * 0.5

PA = 10

 

Em PHP:

<?php
function calcula( $a , $b ){
if ( $a > $b ) $a ^= $b ^= $a ^= $b;

return array( ( $a / $b ) * 100 , ( ( $b / $a ) - 1 ) * 100 );
}

$a = 20;
$b = 15;

if ( $a > $b ){
vprintf( "B é %.02f%% de A\nA é %.02f%% maior que B\n" , calcula( $a , $b ) );
} else {
vprintf( "A é %.02f%% de B\nB é %.02f%% maior que A\n" , calcula( $a , $b ) );
}

 

A saída:

B é 50.00% de A

A é 100.00% maior que B

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hmmm... Não sei não hein João.

 

Joguei nessa sua função valores reais para $a e $b (84 e 88, respectivamente) e retornado, apesar de dentro do esperado pela função, não parece ser o real.

 

Retornou: A é 95.45% de B B é 4.76% maior que A

 

Eu fiz diferente:

 

$diff = -round( ( ( ( 100 * $B ) / $A ) - 100 ) / 100, 2 );

Em vermelho, minha interpretação da Regra de Três traduzida para programação.

Em azul, apenas para retornar a porcentagem em decimal.

 

Mexi com tantos algoritimos esse fim de semana que nem lembro de onde veio o -100. Acho que seria o valor de B na tradução da Regra de Três.

 

E esse algoritimo me retorna 0.05 (5%) se A é melhor que B e o mesmo valor, porém negativo, se B for melhor que A.

 

A sua retorna positivo em ambos os casos. Se A é melhor que B, um valor positivo deve ser retornado. Se B é melor que A algo negativo deveria resultar, concorda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hmmm... Não sei não hein João.

 

Retornou: A é 95.45% de B B é 4.76% maior que A

É só tirar a prova:

 

<?php
function calcula( $a , $b ){
	if ( $a > $b ) $a ^= $b ^= $a ^= $b;

	return array( ( $a / $b ) * 100 , ( ( $b / $a ) - 1 ) * 100 );
}

$a = 84;
$b = 88;

list( $c , $d ) = calcula( $a , $b );

var_dump( ( $b * $c ) / 100 , $a + ( ( $a * $d ) / 100 ) );

 

Saída:

float(84)
float(88)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não entendeu. A lógica está correta. Se você fizer e desfizer o processo os valores resultantes serão os mesmos.

 

Acontece que não parece ser o certo entende? Porque ambas as análises retornam positivo, porém em quantidades diferentes. Eu vejo que, se A melhor que B,o resultado deve ser positivo. Caso contrário, o mesmo valor deve ser retornado, porém negativo.

 

Meu algoritimo faz isso, mas não se é o mais adequado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas isso é apenas um detalhe pois está dando resultados iguais de forma diferente

 

é o mesmo que dizer que o resultado não é 4 mas 2 elevado ao quadrado, é a mesma coisa

 

usando os mesmos 84 e 88

 

temos pela logica usada pelo joão que vê os dois sentidos

 

Retornou: A é 95.45% de B B é 4.76% maior que A

E pela sua apenas vê um sentido o de A para B, mas na pratica é o mesmo

 

Você precisa definir que informação deseja transmitir ao usuário final e formatar

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.