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

J4m3s007

Criar Arvore

15 mensagens neste tópico

Boa noite p@p.

Venho aqui pedir-vos para me indicarem umas dicas para tentar criar um programa, como o objectivo de formar uma árvore.

314avb6.jpg

O utilizador deveria inserir a altura da árvore, e consoante a altura tinha-se o comprimento. E inserir também a altura e o comprimento do tronco da árvore, sabendo que o tronco fica no meio da mesma.

Pode-se ver que a árvore só tem números ímpares (nas linhas), ou seja:

1;3;5;7;9

Se alguém pudesse dar umas dicas agradecia.

Obrigado  :confused:

Edited a Bold

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes fazer isso com PIL.

O que posso utilizar é: for,while, def, input, if, else, elif, e mais uns poucos.

;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Calculo que seja para fazer isso de forma a que output sejam caracteres, dado ser um exercício didático.

A única dica que consigo dar é mesmo o obvio dos óbvios:

Um ciclo que pára na altura da árvore e vai incrementando a largura, e que a duas iterações do fim apenas coloca o tronco.

Qual é a tua primeira dúvida em concreto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

# Criar arvore de Natal com o carácter (*)

altura_arvore= input ("Qual a altura da arvore?")
altura_tronco= input ("Qual a altura do tronco?")
largura_tronco= input ("Qual a largura do tronco?")

Coloquei so a altura da arvore visto que a largura aumenta consoante a altura. Acho que estou a fazer bem.

Agora vem o mais difícil que queria umas dicas para poder continuar.

;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens sempre X espaços por linha, a diferença é que uns são vazios e outros são cor, e o número de espaços com cor é 2n-1, sendo n o número da linha.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens sempre X espaços por linha, a diferença é que uns são vazios e outros são cor, e o número de espaços com cor é 2n-1, sendo n o número da linha.

E em relação as espaços como faço?

cumps ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então, quando é espaço, usas ' ', quando é árvore, usas '*'. Qual é a dúvida?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então, quando é espaço, usas ' ', quando é árvore, usas '*'. Qual é a dúvida?

Como digo ao programa que vai ter que deixar um X de espaços entre a margem e a formação da árvore?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A linha n tem x posições, e na linha n, há 2n-1 posições ocupadas pela arvore e o resto está desocupado, logo há x-(2n-1) posições desocupadas, metade antes, metade depois.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu fiz assim:

n=input("Qual a Altura da arvore? ")

for contador in range(1,n+1,1):

    x=2*contador-1

    print "",x

e da me:

1

3

5

7

9

11

agora eu queria que o programa invés de números que  aparecesse em asteriscos para formar a árvore de natal, sabes como poderia fazer ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ola. Olha quando responderes aos meus topico, tenta responder em linguagem que eu perceba. ahah

É a primeira vez que es estou a ter programação e não percebo muito disso.

:biggrin:

Limitei-me a explicar matematicamente o que tens que fazer. ;)

Anyway,

linhas = 9
larguraNaUltimaLinha = 2*linhas-1 #a largura na ultima linha é a largura máxima que vais precisar.
for linha in range(1, linhas+1):
    #primeiro imprimimos os espaços antes da arvore, que é metade do espaço deixado por preencher pela arvore nessa linha
    print '#' * ((larguraNaUltimaLinha-(2*linha-1))/2),
    #depois imprimimos a arvore
    print '*' * (2*linha-1),
    #depois o resto dos espaços, que é a mesma quantidade que antes da arvore
    print '#' * ((larguraNaUltimaLinha-(2*linha-1))/2)

Este código tem alguns pormenores a acertar que não te vou dizer de mão beijada, tens que experimentar para os ver ;) Falta ainda imprimires o tronco, mas bem percebendo o código que te deixei agora, facilmente o fazes. :)

Ah, e nem sequer experimentei o código, por isso se tiver erros, melhor ainda :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Parece que já dá qualquer coisa.

# Criar arvore de Natal
print "Se quer inserir valor >40, MAXIMIZE A JANELA"
print ""
linhas = input ("Qual a altura da arvore 20? ")
if linhas < 70:
    larguraNaUltimaLinha = 2*linhas-1 #a largura na ultima linha é a largura máxima que vais precisar.
    for linha in range(1, linhas+1):
        #primeiro imprimimos os espaços antes da arvore, que é metade do espaço deixado por preencher pela arvore nessa linha
        print ' ' * ((larguraNaUltimaLinha-(2*linha-1))/2),
        #depois imprimimos a arvore
        print '*' * (2*linha-1),
        #depois o resto dos espaços, que é a mesma quantidade que antes da arvore
        print ' ' * ((larguraNaUltimaLinha-(2*linha-1))/2)
    print ' ' * ((2*linhas-1)/2-1),
    print "###"
    print ' ' * ((2*linhas-1)/2-1),
    print "###"
#Linhas nao podem ser inferiores ou iguais a 5
elif (linhas <=5):
    print "insira um valor superior do que 5"
# Se nenhuma das opcoes anteriores fazer
else:
    print "Insira um valor inferior a 70"

Alguém me sabe dizer o porque do elif não fazer a função dele?

;)

Edited:

V1

# Criar arvore de Natal
print "Se quer inserir valor >40, MAXIMIZE A JANELA"
print ""
linhas = input ("Qual a altura da arvore? ")
if linhas >=6 and linhas <=70:
    larguraNaUltimaLinha = 2*linhas-1 #a largura na ultima linha é a largura máxima que vais precisar.
    for linha in range(1, linhas+1):
        #primeiro imprimimos os espaços antes da arvore, que é metade do espaço deixado por preencher pela arvore nessa linha
        print ' ' * ((larguraNaUltimaLinha-(2*linha-1))/2),
        #depois imprimimos a arvore
        print '*' * (2*linha-1),
        #depois o resto dos espaços, que é a mesma quantidade que antes da arvore
        print ' ' * ((larguraNaUltimaLinha-(2*linha-1))/2)
    print ' ' * ((2*linhas-1)/2-1),
    print "###"
    print ' ' * ((2*linhas-1)/2-1),
    print "###"
#Linhas nao podem ser inferiores ou iguais a 5
elif (linhas <=5):
    print "insira um valor superior do que 5"
# Se nenhuma das opcoes anteriores fazer
else:
    print "Insira um valor menor ou igual a 70"

V2

# Criar arvore de Natal
print "Se quer inserir valor >40, MAXIMIZE A JANELA"
print ""
linhas = input ("Qual a altura da arvore? ")
if linhas >=6 and linhas <=70:
    larguraNaUltimaLinha = 2*linhas-1 #a largura na ultima linha é a largura máxima que vais precisar.
    for linha in range(1, linhas+1):
        #primeiro imprimimos os espaços antes da arvore, que é metade do espaço deixado por preencher pela arvore nessa linha
        print ' ' * ((larguraNaUltimaLinha-(2*linha-1))/2),
        #depois imprimimos a arvore
        print '*' * (2*linha-1),
        #depois o resto dos espaços, que é a mesma quantidade que antes da arvore
        print ' ' * ((larguraNaUltimaLinha-(2*linha-1))/2)
    print ' ' * ((2*linhas-1)/2-1),
    print "###"
    print ' ' * ((2*linhas-1)/2-1),
    print "###"
# Se nenhuma das opcoes anteriores fazer
else:
    print "Insira um valor entre [6;70]"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porque o IF já faz ;)

O IF diz menor de 70, logo tudo o que for menor de 70 entra ali. O elif diz menor ou igual a 5. Todos estes também são menores que 70, logo entram na condição do if.

Muda o if para maior que 5 e menor que 70 e já funciona.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porque o IF já faz ;)

O IF diz menor de 70, logo tudo o que for menor de 70 entra ali. O elif diz menor ou igual a 5. Todos estes também são menores que 70, logo entram na condição do if.

Muda o if para maior que 5 e menor que 70 e já funciona.

Thank´s parece que postei ao mesmo tempo que tu. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora