Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

PJM

Árvore Completa

Recommended Posts

PJM

Boas pessoal tudo bem?

Amanha irei ter teste a php e o stor de certeza que irá pedir o seguinte exercício:

      *

  * * *

* * * * *

E eu não consigo fazer, estou farto de  :wallbash: e nada

O que fiz até agora:

<table align="center">
<?php

arvore_completa(5);

function arvore_completa($n_linhas) {
		for ($i=1;$i<=$n_linhas;$i++) {
			echo "<tr align='center'>";
				echo "<td>";
				if ($i==1) {
					echo "*"; 
				} else {

					for ($x=1;$x<=$i+2;$x++) {
						echo "*";	
					}

				}

				echo "</td>";
			echo "</tr>";
		}
}

?>
</table>

O objectivo é incrementar 2 ao anterior, mas não sei onde estou a errar  🤔

Exemplo:

1ºlinha -> 1

2ºlinha -> 3

3º linha -> 5

Obrigado  :P

Share this post


Link to post
Share on other sites
pedrotuga

A única coisa que tens mal é o número de estrelas que queres, que é o limite de paragem no teu ciclo for 'interior'.

então vejamos

1,3,5,7, ... é a sucessão 2n-1 com n pertencente ao conjunto dos números naturais.

E já te disse a solução, ora vê lá se consegues traduzir o que eu disse para o teu código. Só precisas de mudar uma linhazita.

Ok, e podes tirar o caso particular do termo de ordem 1.

Share this post


Link to post
Share on other sites
PJM

É mesmo isso, obrigado pedrotuga  :cheesygrin:

Ainda por cima ando a dar esta matéria a matemática e estava a ver-me a rasca  😲

Para quem quiser saber a solução é substituir o

for ($x=1;$x<=$i+2;$x++) {

por

for ($x=1;$x<=(2*$i)-1;$x++) {

Processo matemático  :P

1º linha: 1

2º linha: 1º linha + 2 = 3

3º linha: 2º linha + 2 = 1º linha + 2 + 2

4º linha: 3º linha + 2 = 2º linha + 2 + 2 = 1º linha + 2 + 2 + 2

O valor 2 é a nossa razão, logo podemos fazer o termo geral como está abaixo indicado:

nº linha (termo geral) = 2(n) - 1

Share this post


Link to post
Share on other sites
Battousai

Só um reparo para optimizares o código.

Guarda a conta (2*$i) numa variável e substitui no ciclo. Senão, cada vez que ele faz um ciclo, vai-te fazer a conta outra vez, o que é desnecessário.

Share this post


Link to post
Share on other sites
djthyrax

Ou então mais simples ainda (não vou usar tabelas):

for($i=1; $i<$limite; $i+=2) echo str_repeat("*", $i), "<br />\n";


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.