Jump to content
progster

Pirâmide

Recommended Posts

progster

Viva,

O exercício pede para criar uma pirâmide, em que o número de linhas é introduzido pelo utilizador.

O output deverá ser algo do género:

    1
  121
12321

Ainda não tenho nada de jeito feito:

package piramide;
public class Piramide {
   public static void main(String[] args)
   {
       int i,nlinhas;

       System.out.print("Introduza o número de linhas: ");
       nlinhas=Le.umIt();
       System.out.println("O número de linhas da pirâmide é: "+nlinhas);
       for(i=1;i<=nlinhas;i=i+1){
           System.out.println(i); 
       }
   }
}

O output que me dá é:

O número de linhas da pirâmide é: 5
1
2
3
4
5

Como posso prosseguir a partir daqui? Qual é o próximo passo? Podem dar-me uma dica para ver se consigo lá chegar sozinho?

Agradeço desde já qualquer ajuda que me possam dar.


Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites
progster

Trocando o System.out.print que lá está por este:

System.out.println(""+i+""+i+""+i+""); 

Dá-me o seguinte output:

Introduza o número de linhas: 3
O número de linhas da pirâmide é: 3
111
222
333

O que me leva à conclusão de que vou precisar de pelo menos outro ciclo for.

Ok, vou dar uma vista de olhos, entretanto o tópico fica em aberto.


Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites
thoga31

Não tinhas lá nenhum System.out.print, mas sim um System.out.println.

Vais precisar de facto de dois ciclos, e de utilizar uma mistura destes dois métodos de output.


Knowledge is free!

Share this post


Link to post
Share on other sites
progster

Não tinhas lá nenhum System.out.print, mas sim um System.out.println.

Vais precisar de facto de dois ciclos, e de utilizar uma mistura destes dois métodos de output.

Tens razão vou ver se lá consigo chegar sozinho, se vir coisa, peço mais umas dicas.


Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites
progster

Viva, penso que preciso de mais uma dica:

package piramide;
public class Piramide {
   public static void main(String[] args)
   {
       int i,j,k,nrlinhas;

       System.out.print("Introduza o número de linhas: ");
       nrlinhas=Le.umIt();
       System.out.println("O número de linhas da pirâmide é: "+nrlinhas);
       for(i=1;i<=nrlinhas;i=i+1){
           System.out.print(i);    
           for(j=i-1;i>=1;j=i-1){
               System.out.println(j);
               break;
           }
       }
   }
}

Output:

run:
Introduza o número de linhas: 3
O número de linhas da pirâmide é: 3
10
21
32

O que é que me estará a escapar?


Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites
HappyHippyHippo

os teu ciclos não fazem sentido

tenta tu descrever o que querias fazer com cada um, e depois tenta comparar com o que tens e o que querias


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
thoga31

Tens um problema na condição dos teus ciclos. Lê lá bem o que eles estão a fazer.

E possivelmente precises de mais ciclos for, dependendo do algoritmo que te vier à cabeça.

Edited by thoga31

Knowledge is free!

Share this post


Link to post
Share on other sites
progster

O objetivo final é construir uma pirâmide do género indicado anteriormente.

No primeiro for o raciocinio é:

Para uma variável i a variar entre 1 e nrlinhas, quero que escreva i, ou seja 1,2,3,...,mrlinhas (vertical).

Para o segundo for o raciocinio é semelhante ao anterior, mas para nrlinhas=3 para já quero que escreva 0,1,2 que é o que está a fazer.

Onde estou a ter dificuldades é fazer o mesmo para outra linha, não sei se me faço entender, mas basicamente o output que quero receber:

   1
 121
12321

Ok. Vou trabalhar mais um pouco nos ciclos for.


Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites
thoga31

Os teus ciclos não fazem o que pretendes. Não fazem, aliás, sentido.

Pega no seguinte algoritmo, com espaços a preencher por ti, a ver se consegues chegar a uma solução:

Para cada i, a variar entre 1 e nrlinhas, fazer:
   Para cada j, a variar entre <???> e <???>, fazer:   // escrever espaços
       Escrever ' '
   Para cada j, a variar entre <???> e <???>, fazer:   // escrever ordem crescente
       Escrever i
   Para cada j, a variar entre <???> e <???>, fazer:   // escrever ordem decrescente
       Escrever i
   Escrever linha
Fim-Para

Edited by thoga31

Knowledge is free!

Share this post


Link to post
Share on other sites
progster

Para já:

Para cada j, a variar entre <1> e <nrlinhas>, fazer: // escrever ordem crescente a)
Escrever i
Para cada j, a variar entre <nrlinhas> e <1>, fazer: // escrever ordem decrescente b)
Escrever i

a)

J=1;J<=nrlinhas;J=J+1

b)

J=nrlinhas-1;J>=1;J=J-1

Vou trabalhar nos outros.

Edited by progster

Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites
vrael

Assim pensando por alto..Precisas de saber as regras básicas da pirâmide. Do género tem de ter sempre um nr impar de caracteres e por cada linha a fórmula para o nr de chars é (x*2)-1..sendo x o nr de linhas de resto já tens o algoritmo postado acima..

Boa sorte

Share this post


Link to post
Share on other sites
progster

Bem, fiz progressos.

package piramide;
public class Piramide {
public static void main(String[] args)
{
	int num,nlinha,i;

   do{
	 System.out.print("Número de linhas: ");
	 num=Le.umIt();
	 if(num<1 || num>9){
	   System.out.print("Número incorreto!");
	 }
   }while (num<1 || num>9);

 for(nlinha=1;nlinha<=num-nlinha;nlinha++){
	 for(i=1;i<=num - nlinha;i++){
		System.out.print(" ");

	 }

	 for(i=1;i<=nlinha;i++){
		  System.out.print(i);
	 }

	 for(i=nlinha-1;i>=1;i--){
		  System.out.print(i);
	 }

	 System.out.println();
 }	  
 }
}

A questão é que por exemplo quando num=4 só aparece:

1
121

quando deveria de aparecer:

   1
 121
  12321
1234321

O que é que me estará a escapar?

Edited by progster

Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites
HappyHippyHippo
for(nlinha=1;
   nlinha<=num-nlinha; // faz as contas para o primeiro ciclo, para o segundo e para o terceiro (o quarto não é necessário)
   nlinha++){


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
HappyHippyHippo

altera os nomes das variáveis pelos valores correspondentes destas nos momentos descritos

- primeira verificação (antes de executar o código pela primeira vez)

- segunda verificação (depois de executar o código uma vez)

- terceira verificação (depois de executar o código duas vezes)


IRC : sim, é algo que ainda existe >> #p@p

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

×
×
  • Create New...

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.