Ir para conteúdo

POWERED BY:

Arquivado

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

André Severino

Exercícios sobre Arrays

Recommended Posts

  Em 15/03/2011 at 09:58, João Batista Neto disse:

O amigo André quer exercícios de arrays para treinar um pouco, não alguns exercícios sobre algorítimos.

 

Se fosse assim, eu teria movido o tópico para o fórum de Lógica de Programação e Algorítimos

 

Então, como nosso amigo Periscuelo já respondeu adequadamente o problema, vamos para um próximo:

 

Realmente, acabei me empolgando porque, como comentamos depois, no Google Summer of Code o objetivo original do problema era encontrar uma solução menos complexa e diferente que a sugerida.

 

Mas valeu.

 

Se der um tempinho aqui eu tento resolver o segundo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá João, obrigado por me passar os exercicios.

 

Estou um pouco apertado no momento, mas acredito que hj eu consiga fazer os 2 :thumbsup:

Assim que eu terminar eu vou postando tb.

 

Abraços até +

Compartilhar este post


Link para o post
Compartilhar em outros sites

Talvez não seja a melhor solução mas tá funcionando

<?php
$alunos = array(
       1.65 , 1.75 , 1.75 , 1.95 , 1.71,
       1.75 , 1.83 , 1.72 , 1.73 , 1.74,
       1.68 , 1.75 , 1.78 , 1.67 , 1.76,
       1.87 , 1.75 , 1.81 , 1.74 , 1.92,
       1.74 , 1.76 , 1.72 , 1.73 , 1.75,
       1.76 , 1.75 , 1.68 , 1.67 , 1.78,
);

sort( $alunos );

$t = count($alunos);
$m = array_sum($alunos)/$t;
$s = null;

array_map(function($aluno) use(&$s,$m)
	{
		$s += pow( $aluno - $m , 2 );
	},$alunos);

$s = sqrt( $s / ( $t - 1 ) ) ;

array_map(function($aluno) use ($m,$s)
	{
        if ( $aluno < $m - $s ) {
                printf( "%f está abaixo da média<br/>" , $aluno );
        } elseif ( $aluno > $m + $s ){
                printf( "%f está acima da média<br/>" , $aluno );
        } else {
                printf( "%f está na média<br/>" , $aluno );
        }

	},$alunos);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 15/03/2011 at 12:21, Kratos Zohr disse:

Talvez não seja a melhor solução mas tá funcionando

 

Quase lá, Kratos...

 

Um detalhe é que você está utilizando a função array_map() para calcular o desvio padrão amostral, o ideal seria utilizar array_reduce() para tal.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 15/03/2011 at 12:36, João Batista Neto disse:
  Em 15/03/2011 at 12:21, Kratos Zohr disse:

Talvez não seja a melhor solução mas tá funcionando

 

Quase lá, Kratos...

 

Um detalhe é que você está utilizando a função array_map() para calcular o desvio padrão amostral, o ideal seria utilizar array_reduce() para tal.

 

Valeu pela dica :lol:

 

Seria algo assim:

<?php
$alunos = array(
       1.65 , 1.75 , 1.75 , 1.95 , 1.71,
       1.75 , 1.83 , 1.72 , 1.73 , 1.74,
       1.68 , 1.75 , 1.78 , 1.67 , 1.76,
       1.87 , 1.75 , 1.81 , 1.74 , 1.92,
       1.74 , 1.76 , 1.72 , 1.73 , 1.75,
       1.76 , 1.75 , 1.68 , 1.67 , 1.78,
);

sort( $alunos );

$t = count($alunos);
$m = array_sum($alunos)/$t;

$s = sqrt(array_reduce($alunos,function($s,$aluno) use ($m)
	{
		$s += pow( $aluno - $m , 2 );
		return $s;
	}) / ( $t - 1 ) ) ;

array_map(function($aluno) use ($m,$s)
	{
        if ( $aluno < $m - $s ) {
                printf( "%f está abaixo da média<br/>" , $aluno );
        } elseif ( $aluno > $m + $s ){
                printf( "%f está acima da média<br/>" , $aluno );
        } else {
                printf( "%f está na média<br/>" , $aluno );
        }

	},$alunos);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 15/03/2011 at 12:55, Kratos Zohr disse:

Seria algo assim:

 

Show !!!

 

Agora, veja a array_walk() em vez da array_map() afinal, você quer percorrer a matriz, e não mapeá-la.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pra completar de vez então:

<?php
$alunos = array(
       1.65 , 1.75 , 1.75 , 1.95 , 1.71,
       1.75 , 1.83 , 1.72 , 1.73 , 1.74,
       1.68 , 1.75 , 1.78 , 1.67 , 1.76,
       1.87 , 1.75 , 1.81 , 1.74 , 1.92,
       1.74 , 1.76 , 1.72 , 1.73 , 1.75,
       1.76 , 1.75 , 1.68 , 1.67 , 1.78,
);

sort( $alunos );

$t = count($alunos);
$m = array_sum($alunos)/$t;

$s = sqrt(array_reduce($alunos,function($s,$aluno) use ($m)
	{
		$s += pow( $aluno - $m , 2 );
		return $s;
	}) / ( $t - 1 ) ) ;

array_walk($alunos,function($aluno) use ($m,$s)
	{
        if ( $aluno < $m - $s ) {
                printf( "%f está abaixo da média<br/>" , $aluno );
        } elseif ( $aluno > $m + $s ){
                printf( "%f está acima da média<br/>" , $aluno );
        } else {
                printf( "%f está na média<br/>" , $aluno );
        }

	});
?>

 

Quando puder posta mais alguma coisa pra galera :joia:, e obrigado pelas dicas que servem como aprendizado :lol:

 

Qual seria a diferença entre array_map e array_walk, sendo que as duas neste caso fazem a mesma coisa, até agora utilizei tanto uma quanto a outra mas na verdade não sei a principal diferença entre elas.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 15/03/2011 at 13:19, Kratos Zohr disse:

Qual seria a diferença entre array_map e array_walk, sendo que as duas neste caso fazem a mesma coisa, até agora utilizei tanto uma quanto a outra mas na verdade não sei a principal diferença entre elas.

 

A diferença é conceitual, ambos realizam a tarefa, mas o array_map() serve para mapear um conjunto de dados enquanto o array_walk() serve para percorrer um conjunto de dados.

 

A solução:

<?php
$alunos = array(
1.65 , 1.75 , 1.75 , 1.95 , 1.71,
1.75 , 1.83 , 1.72 , 1.73 , 1.74,
1.68 , 1.75 , 1.78 , 1.67 , 1.76,
1.87 , 1.75 , 1.81 , 1.74 , 1.92,
1.74 , 1.76 , 1.72 , 1.73 , 1.75,
1.76 , 1.75 , 1.68 , 1.67 , 1.78,
);

sort( $alunos );

//Solução
$t = count( $alunos );
$m = array_sum( $alunos ) / $t;

array_walk( $alunos,
function( $x , $k , $s ) use ( $m ) {
	printf( "%f está %s média\n" , $x , $x < $m - $s ? 'abaixo da' : ( $x > $m + $s ? 'acima da' : 'na' ) );
},
sqrt( array_reduce( $alunos,
	function( $s , $x ) use ( $m ) {
		return $s + ( pow( $x - $m , 2 ) );
	}
) / ( $t - 1 ) )
);

 

Vamos esperar mais algumas soluções, depois posto um novo problema.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou falar João porque "Tio João" ta pegando mal po é marca de arroz :P

 

Sem querer sair muito do contexto amigo João, da um exemplo pra gente de

aplicação do conceito, onde é necessário mapear array para entendermos as

diferenças entre um e outro. ^_^

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 15/03/2011 at 14:45, Periscuelo disse:

 

Sem querer sair muito do contexto amigo João, da um exemplo pra gente de

aplicação do conceito, onde é necessário mapear array para entendermos as

diferenças entre um e outro. ^_^

 

Abraços.

Seria bem interessante ^_^

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 15/03/2011 at 14:45, Periscuelo disse:

Sem querer sair muito do contexto amigo João, da um exemplo pra gente de aplicação do conceito

 

  Em 15/03/2011 at 15:07, Kratos Zohr disse:

Seria bem interessante

 

Utilizando a mesma ideia do problema atual:

 

<?php
$alunos = array(
1.65 , 1.75 , 1.75 , 1.95 , 1.71,
1.75 , 1.83 , 1.72 , 1.73 , 1.74,
1.68 , 1.75 , 1.78 , 1.67 , 1.76,
1.87 , 1.75 , 1.81 , 1.74 , 1.92,
1.74 , 1.76 , 1.72 , 1.73 , 1.75,
1.76 , 1.75 , 1.68 , 1.67 , 1.78,
);

sort( $alunos );

$t = count( $alunos );
$m = array_sum( $alunos ) / $t;
$s = sqrt( array_reduce( $alunos , function( $s , $x ) use ( $m ) {
	return $s + ( pow( $x - $m , 2 ) );
} ) / ( $t - 1 ) );

$r = array_reduce( array_map(
function( $x ) use ( $m , $s ) {
	$k = $x < $m - $s ? 'abaixo' : ( $x > $m + $s ? 'acima' : 'média' );
	return array( $k => $x );
} , $alunos ),
function( $v , $b ) {
	$k = key( $b );

	if ( $v == null ) $v = array();
	if ( !isset( $v[ $k ] ) ) $v[ $k ] = array();

	$v[ $k ][] = current( $b );

	return $v;
}
);

print_r( $r );

 

Saída:

Array
(
[abaixo] => Array
   	(
       	[0] => 1.65
       	[1] => 1.67
       	[2] => 1.67
       	[3] => 1.68
       	[4] => 1.68
   	)

[média] => Array
   	(
       	[0] => 1.71
       	[1] => 1.72
       	[2] => 1.72
       	[3] => 1.73
       	[4] => 1.73
       	[5] => 1.74
       	[6] => 1.74
       	[7] => 1.74
       	[8] => 1.75
       	[9] => 1.75
       	[10] => 1.75
       	[11] => 1.75
       	[12] => 1.75
       	[13] => 1.75
       	[14] => 1.75
       	[15] => 1.76
       	[16] => 1.76
       	[17] => 1.76
       	[18] => 1.78
       	[19] => 1.78
       	[20] => 1.81
   	)

[acima] => Array
   	(
       	[0] => 1.83
       	[1] => 1.87
       	[2] => 1.92
       	[3] => 1.95
   	)

)

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas assim amigo João a seco? Sem nem uma orientaçãozinha, um porque, nadinha? :cry:

Da uma palinha do seu vasto conhecimento para o povo meu amigo ^_^

Explique para nós o conceito dentro do exemplo (porque deve ou não se usar determinada função).

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 15/03/2011 at 15:56, Periscuelo disse:

Mas assim amigo João a seco? Sem nem uma orientaçãozinha, um porque, nadinha?

 

Mas se for muito diferente, sairemos do escopo tópico, já pensou se empolgo na explicação e esse tópico vira alguma coisa parecida com :seta: http://forum.imasters.com.br/topic/408602-buscar-array/

 

  Em 15/03/2011 at 15:56, Periscuelo disse:

Explique para nós o conceito dentro do exemplo (porque deve ou não se usar determinada função).

 

Não existe um "deve ou não deve", como eu disse antes, as duas realizam a tarefa e que a diferença é conceitual.

 

Primeiro, com array_map() mapeamos e geramos um conjunto de pares chave/valor intermediários e, em seguida, a função array_reduce() mesclamos todos os valores com a mesma chave intermediária.

 

Pense nesse mapa (par chave/valor) como um conjunto nomeado que possui uma série de valores, quando agrupamos as informações dessa forma, conseguimos descrever e sumarizar um conjunto de dados.

 

Isso pode ser visto pelo resultado das duas funções, enquanto a array_walk() apenas percorreu a matriz, a array_map() retornou uma nova matriz com os dados agrupados.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz diferente, já que meus braços estão formigando.

 

Sem classes, funções mirabolantes ou até mesmo preocupações com performance.

 

 

  Mostrar conteúdo oculto

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, continuando com a brincadeira:

 

A chance de uma campanha publicitária atingir sucesso a ponto de ser comentada nas ruas e até incorporada ao vocabulário da população é muito baixa. De acordo com estudos essa probabilidade se altera de acordo com o meio de comunicação utilizado.

 

Na amostra abaixo, temos algumas campanhas que obtiveram sucesso (true) e outras que não obtiveram sucesso, cada uma dessas campanhas possui uma chave indicando o meio de comunicação utilizado:

 

<?php
$campanhas = array(
'radio' => array(
	true  , false , false , true  , false,
	false , false , false , true  , false,
	false , false , false , false , false,
	false , false , false , false , false,
	false , false , false , false , false,
	false , false , false , false , false,
	false , false , false , false , false,
	true  , false , false , false , false,
	false , false , false , false , false,
	false , false , false , false , false,
	false , false , false , false , false,
	false , false , false , false , false,
	false , false , false , false , false,
	false , false , false , false , false,
	false , false , true  , false , false,
	false , false , false , false , false
),
'tv' => array(
	false , false , false , false , false,
	true  , true  , false , true  , false,
	false , false , false , false , false,
	false , false , false , false , false,
	true  , false , false , false , false,
	false , false , false , false , true,
	false , false , false , false , false,
	false , false , false , false , false,
	false , false , false , false , false,
	false , false , false , false , true,
	true  , false , false , false , false,
	false , false , false , false , false,
	false , false , false , false , false,
	false , false , false , false , false,
	false , false , false , false , false,
	true  , false , false , false , false,
	false , false , false , false , false,
	false , false , false , false , false,
	false , false , true  , false , false,
	false , false , false , false , false
),
'radio+tv' => array(
	false , false , false , false , false,
	false , false , false , true  , false,
	false , false , false , false , false,
	false , false , false , false , false,
	false , true  , false , false , true,
	false , false , false , true  , false,
	false , false , false , false , false,
	false , false , false , true  , false,
	false , false , false , false , false,
	false , false , false , false , false,
	false , false , false , false , false,
	false , false , true  , false , false,
	false , true  , false , false , false,
	true  , false , false , false , false,
	false , true  , false , false , false,
	false , false , true  , false , false,
	false , false , false , false , false,
	false , false , false , false , false,
	false , false , false , false , false,
	false , false , false , true  , false,
	false , false , false , false , false,
	false , false , false , false , false,
	false , false , false , true  , false,
	false , false , false , false , false,
)
);

 

Com base na matriz acima, qual a probabilidade de sucesso para cada um dos meios de comunicação ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Minha contribuição:

 

 

  Mostrar conteúdo oculto

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 16/03/2011 at 11:44, Bruno Augusto disse:

Minha contribuição:

 

Muito grande, Bruno.

 

Que tal dar uma olhada em array_filter()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Minha contribuição:

 

 

  Mostrar conteúdo oculto

 

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 16/03/2011 at 13:31, Matias Rezende disse:

Minha contribuição:

 

Legal,

 

Só não entendi o objetivo de você utilizar o "use ( $campanhas )"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ops... foi uma falha... tava tentando pegar o nome da campanha, mas não funcionou. Daí eu li novamente o manual de array_walk e vi que o segundo parâmetro seria a chave do array. Esqueci de tirar.

 

Código corrigido.

 

 

  Mostrar conteúdo oculto

 

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.