Ex 52 – Pirâmide B

Home Fóruns Programação Básica Ex 52 – Pirâmide B

Visualizando 11 respostas da discussão
  • Autor
    Posts
    • #73672
      Michel Souza
      Participante

      Olá pessoal! No desafio 052 Mod_03 o Prof. Guanabara, pediu pra desenhar na tela uma pirâmide invertida, de cabeça pra baixo, formando tipo um V.
      Depois pediu como desfio extra desenhar uma pirâmide normal. Aqui está o código que eu fiz, quem quiser da uma olhada e melhorar alguma coisa fiquem a vontade.

      programa
      {	/* Extra 52b: Pirâmide 2 -
      	* Faça um programa que pergunte o número de camadas (andares) de uma pirâmide e com base nesse valor, 
      	* desenhar uma pirâmide na tela.
      	*/
      
      	inclua biblioteca Util --> u
      	funcao inicio()
      	{
      // Declaração de variáveis -----		
      		inteiro camada, quantEst = 0, quantEsp, contCam, contEst, contEsp
      // Entrada de Dados -----
      		escreva("Quantas camadas a pirâmide vai ter ? ")
      		leia(camada)
      // Analise dos Dados -----					
      		quantEsp = (camada) // A quantidade de espaços em branco será proporcional ao número de camadas.
      		escreva("\n ===== Desenhando a Pirãmide ====\n\n") 		
      // Estrutura de repetição - Construindo a pirâmide.		
      		para (contCam = 1; contCam <= camada; contCam ++) { // Primeiro (para) vai "contar" as camadas. 
      			para (contEsp = 1; contEsp <= quantEsp; contEsp++) { // Segundo (para) vai "contar" os espaços em branco.
      				escreva(" ") // Mostra os espaços em branco. Coloca um traço (-) entre as aspas que visualiza melhor.
      			}
      			quantEsp -- // A cada iteração vai reduzir um espaço. Se colocar ++ vai desenhar uma pequena escada.			
      				para (contEst = 0; contEst <= quantEst; contEst ++) { // Terceiro (para) vai contar as estrelas *.    
      					escreva("*") // Mostra as estrelas
      				}
      				quantEst += 2 // A cada repetição da camada (andares) vai acrescentar 2 estrelas a mais.
      				escreva("\n") // pula uma linha
      				u.aguarde(500)	// Aguardar 1/2 segundo entre uma camada e outra.		
      		}
      		escreva("\n===== PRONTO TERMINEI DE DESENHAR A PIRÂMIDE =====\n\n")
      	}
      }

      Valeu, bons estudos a todos!

    • #73844
      Tutora Mayla
      Mestre

      Michel, parabéns por ter conseguido resolver o desafio! Continue se dedicando e será cada vez um programador melhor!
      Se houver quaisquer dúvidas basta entrar em contato que lhe ajudaremos.

    • #74615

      Yo..
      Eu assisti a aula 14 e consegui fazer todos os exercícios, mas com um pouco (ta, talvez mais que apenas “um pouco”) de dificuldade, então por isso vim procurar por soluções de outras pessoas e comparar com as minhas, para tentar amadurecer toda a ideia de aninhamentos.. minha lógica.. e encontrei este post primeiro, onde falava de uma tal pirâmide B. eu ja ia postar meu código para pedir opniões, então com base nesse post, resolvi tentar fazer essa pirâmide B também, e ja mostrar o dois. e eu consegui.. (eu acho?)

      programa
      { // Estudonauta: Programação básica. Módulo 3, Aula 14, Exercício 052. (https://estudonauta.com/)
      	
      	inclua biblioteca Util --> ut
      	funcao inicio()
      	{
      		inteiro an, ctrl, ctrl2, anctrl=0, anctrl2=0
      		
      		escreva("{ EXERCÍCIO 052 - Pirâmide }\nQuantos andares? ")
      		leia(an)
      		escreva("\n")
      		
      		para (ctrl=1;ctrl<=an;ctrl++) {
      			se (ctrl==1) {
      				anctrl=an*2
      			} senao {
      				anctrl-=2
      			}
      			anctrl2++
      
      			para (ctrl2=anctrl2;ctrl2>0;ctrl2--) {
      				escreva(" ")
      			}
      			
      			para (ctrl2=anctrl;ctrl2>0;ctrl2--) {
      				ut.aguarde(50)
      				escreva("*")
      			}
      			
      			escreva("\n")
      		}
      
      		escreva("\n")
      
      		anctrl=0
      		anctrl2=0
      		
      		para (ctrl=1;ctrl<=an;ctrl++) {
      			se (ctrl==1) {
      				anctrl2=an
      			} senao {
      				anctrl2-=1
      			}
      			
      			anctrl+=2
      
      			para (ctrl2=1;ctrl2<=anctrl2;ctrl2++) {
      				escreva(" ")
      			}
      			
      			para (ctrl2=1;ctrl2<=anctrl;ctrl2++) {
      				ut.aguarde(50)
      				escreva("*")
      			}
      			escreva("\n")
      		}
      	}
      }

      esse é de longe, o código mais confuso que ja fiz até agora. eu gastei um bom tempo nele, evoluindo a partir de pequenos avanços, e depois de pronto, quando deu aquela felicidade de ver o resultado que eu almejava, eu parei para analisar do começo ao fim tudo o que fiz e eu me confudi varias vezes kkkkkkkk
      então, não sei se essa confusão é porque eu ainda não dei tempo ao tempo para me acostumar com toda a ideia, ou se o problema é realmente o meu código..

    • #74655
      Michel Souza
      Participante

      Lucas, esse post que eu chamei de pirâmide B é um desafio extra que o professor Guanabara sugeriu, não é obrigatório é mais para aprendizado mesmo.
      Pelo que eu vi aqui o seu código funcionou normalmente. A lógica é a mesma do primeiro a pirâmide A, o que muda é que nesse se inicia pelas estrelinhas (*) depois vai diminuindo o número delas e acrescentando os espaços em branco. Nessa segunda pirâmide B se começa pelos espaços e vai a cada repetição acrescentando as estrelas (*) e diminuindo os espaços. Talvez vc possa ter ficado confuso por ter colocado os dois exemplos em um único código usando as mesmas variáveis. Tenta fazer separadamente usando nomes de variável mais condizentes creio que terá uma visão melhor.
      Se eu puder passar mais um desafio, tenta fazer um losango aparecer na tela.

    • #74684

      Michel, consegui fazer o seu desafio:

      programa
      { // Estudonauta: Programação básica. Módulo 3, Extra.
      	
      	inclua biblioteca Util --> ut
      	funcao inicio()
      	{
      		inteiro ctrl, ctrl2, an, an_ctrl=0, esp_ctrl=0
      		// ctrl=variavel de controle externa
      		// ctrl2=variavel de controle interna
      		// an=variavel do número de andares
      		// an_ctrl=variavel de manipulação dos asterísticos baseada na an
      		// esp_ctrl= variavel de manipulação dos espaços em relação ao an_ctrl
      		
      		escreva("{ EXTRA - Losango }\nQuantos andares? ")
      		leia(an)
      		escreva("\n")
      		
      		para (ctrl=1;ctrl<=an;ctrl++) {
      			se (ctrl==1) {
      				esp_ctrl=an
      			} senao {
      				esp_ctrl-=1
      			}
      			
      			para (ctrl2=1;ctrl2<=esp_ctrl;ctrl2++) {
      				escreva(" ")
      			}
      
      			an_ctrl+=2
      			para(ctrl2=1;ctrl2<=an_ctrl;ctrl2++) {
      				ut.aguarde(20)
      				escreva("*")
      			}
      			escreva("\n")
      		}
      
      		para (ctrl=1;ctrl<=an;ctrl++) {
      			esp_ctrl++
      			para (ctrl2=1;ctrl2<=esp_ctrl;ctrl2++) {
      				escreva(" ")
      			}
      
      			an_ctrl-=2
      			para (ctrl2=1;ctrl2<=an_ctrl;ctrl2++) {
      				ut.aguarde(20)
      				escreva("*")
      			}
      			escreva("\n")
      		}
      	}
      }

      Eu consegui visualizar o meu código muito melhor agora no seu desafio, e é realmente interessante a ideia de fazer um losango, deu pra reforçar legal o conceito de aninhamento na minha mente. Consigo visualizar todo o código bem melhor. Obrigado pela ajuda cara!

    • #74966
      Tutora Mayla
      Mestre

      Michel, parabéns pela explicação e por ajudar o aluno Lucas!
      Lucas, parabéns por ter concluído o desafio!
      Continuem se dedicando assim e serão cada vez programadores melhores!
      Quaisquer dúvidas basta entrar em contato que lhes ajudaremos.

    • #89558
      Arthur Martins Alves
      Participante

      Olá pessoal! No desafio 052 Mod_03 o Prof. Guanabara, além do desefio extra de desenhar uma pirâmide normal, pele também desafiou a desenhar uma piramide de lado. Aqui está o código que eu fiz, mas foi um código bem confuso e não sei se é a melhor forma de fazer.

      
      programa
      {
      	
      	funcao inicio()
      	{
      		inteiro and
      		escreva("Quantos andares a pirâmide vai ter? ")
      		leia(and)
      		inteiro quantEsp = (and * 2) - 1
      		inteiro quantEst = 1
      		para(inteiro cAnd = 1; cAnd <= and; cAnd++) {
      			para (inteiro cEst = 1; cEst <= quantEst; cEst++) {
      				escreva("*")
      			}
      			quantEst++
      			para (inteiro cEsp = 1; cEsp <= quantEsp; cEsp++) {
      				escreva(" ")
      			}
      			quantEsp -= 2
      			escreva("\n")
      		}
      		inteiro quantEst2 = and - 1
      		inteiro quantEsp2 = 1
      		para(inteiro cAnd2 = 1; cAnd2 <= and; cAnd2++) {
      			para(inteiro cEst2 = 1; cEst2 <= quantEst2; cEst2++) {
      				escreva("*")
      			}
      			quantEst2--
      			para(inteiro cEsp2 = 1; cEsp2 <= quantEsp2; cEsp2++) {
      				escreva(" ")
      	
      			}
      			quantEsp2 += 2
      			escreva("\n")
      		}
      		
      	}
      }
      
    • #89989
      IcaroFilho
      Moderador

      Boa tarde Arthur.
      Existe diversas formas de se realizar esse desafio, pois tudo é relativo a perspectiva que se enxerga o problema.
      O importante é o código ter ficado limpo e resolvido o problema.
      Por exemplo, eu enxerguei uma P.A na base do triangulo, tendo base inicial igual a 3 e sempre que se sobe 1 andar, adiciona + 2 a base.
      Tendo isso como primícia, basta fazer o laço para “subir” até o centro do triangulo e depois “descer”

      Segue meu código:

      programa {
          funcao inicio() {
              inteiro base = 3
              inteiro andar, base_num
      
              escreva("Quantos andares a pirâmide vai ter? ")
              leia(andar)
              base_num = base + ((andar-1) * 2 )
      		
              para(inteiro b = 0; b < base_num; b++){
      		    
                  se(b > (base_num /2)){
                      para(inteiro altura = base_num -1 ; altura > b; altura--){
                          escreva("*")
          		    }
                  } senao {
                      para(inteiro altura = 0 ; altura < b; altura++){
                          escreva("*")
                      }
                  }
      		    
                  escreva("*\n")
              }
          }
      }

      PS: Nó meu código estou cogitando que a base não conta como altura, assim como um prédio que conta o primeiro andar o segundo pavimento.

      • Esta resposta foi modificada 2 anos atrás por IcaroFilho.
    • #108283
      Marlei GS
      Participante

      Olá pessoal!!!!
      Ref.: M03A14-Ex052

      Segue a execução do meu código.

      programa
      {
      	
      	inclua biblioteca Util --> u
      	funcao inicio()
      	{
      		escreva("M03A14: Laços Aninhados\n")
      		escreva("Ex 052: Pirâmide\n\n")
      
      		inteiro n, c, x, y
      		
      		escreva("Quantos andares? ")
      		leia(n)
      
      		para(c = n; c > 0; c--) {
      			
      			para(y = c+1; y <= n; y++) {
      				escreva("A")								
      			}
      						
      			para(x = 1; x <= c*2; x++) {
      				u.aguarde(300)
      				escreva("*")
      			}
      			escreva("\n")
      			
      		}
      
      		escreva("\n=*=*=*=*=*=> PROGRAMA ENCERRADO <=*=*=*=*=*=\n")
      		
      	}
      }
      

      Abraços,

      MarleiGS

      • #108284
        Marlei GS
        Participante

        PS. Coloquei a letra “A” para facilitar a visualização dos ESPAÇOS.

    • #108311
      Tutora Jessica
      Moderador

      Ola Marlei, alguma dúvida?

    • #108512
      Carol Protásio
      Participante

      Olá!! Cheguei nesse code para a pirâmide “normal” que o prof Guanabara solicitou:

      inclua biblioteca Util –> u

      inteiro and, cEst, cEsp, cAnd, tot
      escreva(“Quantos andares seu triangulo vai ter? “)
      leia(and)

      inteiro qtEst = 1
      inteiro qtEsp = and – 1

      para(cAnd = 1; cAnd <= and; cAnd++){

      para(cEsp = 1; cEsp <= qtEsp; cEsp++){
      escreva(” “)
      }
      qtEsp–
      para(cEst = 1; cEst <= qtEst; cEst++){
      escreva(“*”)
      u.aguarde(100)
      }
      qtEst+=2
      escreva(“\n”)
      }

    • #108513
      Tutora Jessica
      Moderador

      Ola Carol, tem alguma duvida?

Visualizando 11 respostas da discussão
  • Você deve fazer login para responder a este tópico.