Daniela T Posted November 11, 2016 at 11:03 PM Report #600325 Posted November 11, 2016 at 11:03 PM Olá, eu sou nova nesta comunidade (o que não significa que já não tenha lido algumas conversas daqui e tenho a dizer que já aprendi bastante). Estou no primeiro ano do curso de Informática e tenho uma cadeira que é Algoritmia e Programação, que não é a minha melhor (por mais irónico que pareça). Portanto, vinha-vos pedir ajuda com um exercício que é o seguinte: Citação Ex14) Escreva um programa em C que apresente no ecrã uma árvore de Natal como a que se segue. (***) Para isso deverá pedir ao utilizador o valor de B que representa o número de asteriscos (*) na base da árvore. O valor de B deverá ser obrigatoriamente ímpar e maior ou igual 3. Deverá pedir também o valor de L e A que representam, respetivamente a largura e a altura do tronco da árvore. A largura do tronco L deverá ser pelo menos 1 asterisco, deverá ser obrigatoriamente impar e não poderá ultrapassar metade de B, isto é metade do número de asteriscos da base. A altura do tronco A deverá ser pelo menos 2 asteriscos e também não deverá ultrapassar metade de B. Em caso de valores inválidos o programa deverá apresentar um erro e voltar a pedi-los. A sério eu já tentei de tudo mas o máximo que consegui foi dar resposta aos printfs e depois o programa "explodir". Mando aqui o meu código. Se alguém me pudesse ajudar, agradecia. P.S.: Não pus foto porque não estava a aceitar. Desculpem-me. #include<stdio.h> #include<math.h> #include<stdlib.h> int main() { int B, A, L, i, j, k; do { printf("Qual o numero de asteriscos na base da arvore?"); scanf("%d", &B); } while(B<3 && B%2==0); do { printf("Qual o numero de asteriscos na largura?"); scanf("%d", &L); } while(L<1 && L!=0.5*B); do { printf("Qual o numero de asteriscos na altura?"); scanf("%d", &A); } while(A<2 && A!=0.5*B); for(i=3; i<=B; i++) { printf(""); printf("\n"); for(i=1; i=L; i++) for(j=B/2; j>=i; j--) printf("*"); printf("\n"); for(i=2; i<=B; i++) for(k=B/2; k>=i; k--) printf("*\n"); } getchar(); return 0; system("pause"); }
PsySc0rpi0n Posted November 11, 2016 at 11:36 PM Report #600328 Posted November 11, 2016 at 11:36 PM Vou tentar fazer isto contigo! Mas em primeiro vamos arrumar o código. Identa lá isso melhor e todo o código a seguir a um return é pura e simplesmente descartado! Quando editares esse código, escolhe a opção "C" para activar a syntax highlight que ajuda o código a ficar mais legível! Quando vir isso feito, vamos tentar fazer isto por partes! Kurt Cobain - Grunge misses you Nissan GT-R - beast killer
HappyHippyHippo Posted November 12, 2016 at 05:55 AM Report #600333 Posted November 12, 2016 at 05:55 AM poderias dar uma vista de olhos neste tópico : https://www.portugal-a-programar.pt/forums/topic/57368-árvore-de-natal/ ps : sê discriminatória na selecção das entradas que existem nesse tópico, porque nem tudo que está lá será direccionado para uma pessoa que está a iniciar IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Daniela T Posted November 12, 2016 at 09:39 AM Author Report #600334 Posted November 12, 2016 at 09:39 AM Em 11/11/2016 às 23:36, PsySc0rpi0n disse: Vou tentar fazer isto contigo! Mas em primeiro vamos arrumar o código. Identa lá isso melhor e todo o código a seguir a um return é pura e simplesmente descartado! Quando editares esse código, escolhe a opção "C" para activar a syntax highlight que ajuda o código a ficar mais legível! Quando vir isso feito, vamos tentar fazer isto por partes! Assim o farei! Obrigada pela ajuda! Em 12/11/2016 às 05:55, HappyHippyHippo disse: poderias dar uma vista de olhos neste tópico : https://www.portugal-a-programar.pt/forums/topic/57368-árvore-de-natal/ ps : sê discriminatória na selecção das entradas que existem nesse tópico, porque nem tudo que está lá será direccionado para uma pessoa que está a iniciar Por acaso baseei-me também nesse exercício! Mas não é bem o que eu preciso...Mas já ajuda!
HappyHippyHippo Posted November 12, 2016 at 09:41 AM Report #600335 Posted November 12, 2016 at 09:41 AM as diferenças são minúsculas, logo podes aproveitar quase todo o tópico para criar a tua árvore IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
PsySc0rpi0n Posted November 12, 2016 at 09:49 AM Report #600336 Posted November 12, 2016 at 09:49 AM Em 12/11/2016 às 05:55, HappyHippyHippo disse: poderias dar uma vista de olhos neste tópico : https://www.portugal-a-programar.pt/forums/topic/57368-árvore-de-natal/ ps : sê discriminatória na selecção das entradas que existem nesse tópico, porque nem tudo que está lá será direccionado para uma pessoa que está a iniciar Eu lembrava-me que já tinha tido uma luta deste género mas já nem me lembrava que tinha sido aqui que tinha colocado o problema! Kurt Cobain - Grunge misses you Nissan GT-R - beast killer
Daniela T Posted November 12, 2016 at 09:54 AM Author Report #600337 Posted November 12, 2016 at 09:54 AM #include<stdio.h> #include<math.h> #include<stdlib.h> int main() { int B, A, L, i, j, k; do { printf("Qual o numero de asteriscos na base da arvore?"); scanf("%d", &B); } while(B<3 && B%2==0); do { printf("Qual o numero de asteriscos na largura?"); scanf("%d", &L); } while(L<1 && L!=0.5*B); do { printf("Qual o numero de asteriscos na altura?"); scanf("%d", &A); } while(A<2 && A!=0.5*B); for(i=3; i<=B; i++) { printf(""); printf("\n"); for(i=1; i=L; i++) for(j=B/2; j>=i; j--) printf("*"); printf("\n"); for(i=2; i<=B; i++) for(k=B/2; k>=i; k--) printf("*\n"); } getchar(); return 0; } Está mais legível?
Daniela T Posted November 12, 2016 at 10:01 AM Author Report #600338 Posted November 12, 2016 at 10:01 AM 16 minutos atrás, HappyHippyHippo disse: as diferenças são minúsculas, logo podes aproveitar quase todo o tópico para criar a tua árvore Eu pensei em copiar praticamente tudo, só que não dá, porque: naquele exercício havia 2 e não 3 variáveis; não podia copiar a parte inicial porque é o utilizador que escolhe o nº de asteriscos para a base, altura e largura da árvore, ou seja, não dá apenas um nº qualquer e depois aparece a árvore É principalmente por causa do 2 que eu acho que não dá para copiar
PsySc0rpi0n Posted November 12, 2016 at 10:02 AM Report #600339 Posted November 12, 2016 at 10:02 AM Eu não sei se é do forum ou não, mas como no passado o forum tinha problemas a manter a identação que a gente tinha no código que postava, vou experimentar identar o teu código como se fosse o meu código a ver se fica como deve ser: #include<stdio.h> #include<math.h> #include<stdlib.h> int main(){ int B, A, L, i, j, k; do{ printf("Qual o numero de asteriscos na base da arvore?\n"); scanf(" %d", &B); }while(B<3 && B%2==0); do{ printf("Qual o numero de asteriscos na largura?\n"); scanf(" %d", &L); }while(L<1 && L!=0.5*B); do{ printf("Qual o numero de asteriscos na altura?\n"); scanf(" %d", &A); }while(A<2 && A!=0.5*B); for(i=3; i<=B; i++){ printf(""); printf("\n"); for(i=1; i=L; i++) for(j=B/2; j>=i; j--) printf("*"); printf("\n"); for(i=2; i<=B; i++) for(k=B/2; k>=i; k--) printf("*\n"); } getchar(); return 0; } Eu não sei se era isto que pretendias fazer, mas em termos de identação, penso que esta seja uma das formas correctas de identar... Claro que haverá outras! Kurt Cobain - Grunge misses you Nissan GT-R - beast killer
HappyHippyHippo Posted November 12, 2016 at 10:10 AM Report #600340 Posted November 12, 2016 at 10:10 AM 4 minutes ago, Daniela T said: Eu pensei em copiar praticamente tudo, só que não dá, porque: naquele exercício havia 2 e não 3 variáveis; não podia copiar a parte inicial porque é o utilizador que escolhe o nº de asteriscos para a base, altura e largura da árvore, ou seja, não dá apenas um nº qualquer e depois aparece a árvore É principalmente por causa do 2 que eu acho que não dá para copiar isso não é razão nenhuma se o ponto de partida é diferente, nada interfere sobre o processo de impressão da árvore. achas que correr o código com A = 3 ou A = 5 o código é diferente ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Daniela T Posted November 12, 2016 at 10:11 AM Author Report #600342 Posted November 12, 2016 at 10:11 AM PsySc0rpi0n era mesmo isso!
Daniela T Posted November 12, 2016 at 10:12 AM Author Report #600343 Posted November 12, 2016 at 10:12 AM 1 minuto atrás, HappyHippyHippo disse: isso não é razão nenhuma se o ponto de partida é diferente, nada interfere sobre o processo de impressão da árvore. achas que correr o código com A = 3 ou A = 5 o código é diferente ? Claro que correr com A=3 ou A=5 não interfere em nada, só queria dizer que o processo de estruturação do código ia ser diferente
Daniela T Posted November 12, 2016 at 10:16 AM Author Report #600344 Posted November 12, 2016 at 10:16 AM (edited) O problema é que com este código consigo responder bem às perguntas mas depois o programa explode. Ou seja, o problema está mesmo no código. Se alguém conseguisse identificar o erro ficava mesmo muito agradecida, porque eu já tentei de tudo mesmo... Edited November 12, 2016 at 10:19 AM by Daniela T Acrescentar informação e melhora português
HappyHippyHippo Posted November 12, 2016 at 10:18 AM Report #600345 Posted November 12, 2016 at 10:18 AM 5 minutes ago, Daniela T said: Claro que correr com A=3 ou A=5 não interfere em nada, só queria dizer que o processo de estruturação do código ia ser diferente mas ai é que está ... não ia ser diferente não IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Daniela T Posted November 12, 2016 at 10:22 AM Author Report #600346 Posted November 12, 2016 at 10:22 AM HappyHippyHippo Mas se num tens 2 variáveis e no outro tens 3, então alguma coisa vai mudar (nem que seja uma coisa infinitésimal)
PsySc0rpi0n Posted November 12, 2016 at 10:25 AM Report #600347 Posted November 12, 2016 at 10:25 AM Just now, Daniela T said: HappyHippyHippo Mas se num tens 2 variáveis e no outro tens 3, então alguma coisa vai mudar (nem que seja uma coisa infinitésimal) O que eu acho que o HappyHippyHippo quer dizer é que a forma de imprimir a árvore é a mesma, não varia nada só porque há mais variáveis ou menos! Portanto, o que eu acho que podes aproveitar dequela thread é que, consoante os dados pedidos e as restrições que te são impostas no enunciado, deves calcular o número de asteriscos a imprimir e o número de espaços a imprimir. Depois é usar os 'for's' para imprimir asteriscos e espaços! Kurt Cobain - Grunge misses you Nissan GT-R - beast killer
Daniela T Posted November 12, 2016 at 10:32 AM Author Report #600349 Posted November 12, 2016 at 10:32 AM PsySc0rpi0n Aí é que eu tenho outro problema...É que eu sei as fórmulas para o número de asteriscos, mas não sei como se calcula o número de espaços (é bem...) Desculpem-me, mas eu no início disse que não era a minha melhor cadeira...
HappyHippyHippo Posted November 12, 2016 at 10:39 AM Report #600350 Posted November 12, 2016 at 10:39 AM 6 minutes ago, Daniela T said: PsySc0rpi0n Aí é que eu tenho outro problema...É que eu sei as fórmulas para o número de asteriscos, mas não sei como se calcula o número de espaços (é bem...) como tinha dito, a solução está no tópico que tinha referenciado : https://www.portugal-a-programar.pt/forums/topic/57368-%C3%A1rvore-de-natal/?do=findComment?comment=483596 IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
PsySc0rpi0n Posted November 12, 2016 at 10:44 AM Report #600351 Posted November 12, 2016 at 10:44 AM (edited) 13 minutes ago, Daniela T said: PsySc0rpi0n Aí é que eu tenho outro problema...É que eu sei as fórmulas para o número de asteriscos, mas não sei como se calcula o número de espaços (é bem...) Desculpem-me, mas eu no início disse que não era a minha melhor cadeira... Já sabes como calcular os asteriscos por cada linha? Óptimo! Coloca aí a fórmula que encontraste. Depois refaz-se o teu código ou faz-se um novo! Então, quanto aos espaços: em primeiro lugar, conta quantos espaços precisas de ter em cada linha, por exemplo, pensado que a largura da base da copa da árvore é 15... Ou seja, o teu B = 15... Depois o raciocínio passa por arranjar uma fórmula que, dependendo do teu único dado fixo relativamente à largura da base da copa da árvore, ou seja o teu B, te dê o número de espaços por cada linha. Quote .......* ......*** .....***** ....******* ...********* ..*********** .************* *************** Vou dar um exemplo para a primeira linha: Q: Quanto é o meu B? A: 15 Q: Quantas linhas de altura tem a copa da minha árvore? A: 8 Q: Quantos espaços tenho que ter na linha nº 1? A: 7 Vê agora se consegues relacionar o número de espaços, com a altura da copa da árvore, com a largura da base da copa a árvore e com a linha em que estás a desenhar. Edited November 12, 2016 at 10:46 AM by PsySc0rpi0n Kurt Cobain - Grunge misses you Nissan GT-R - beast killer
PsySc0rpi0n Posted November 12, 2016 at 10:47 AM Report #600352 Posted November 12, 2016 at 10:47 AM (edited) Eu não cheguei a ver a solução da outra thread, apenas vi que a principal ideia é calcular o número de asteriscos e o númeo de espaços! Depois é imprimir espaços e asteriscos! Eu voltei a tentar calcular as fórmulas e se calhar até podem ser simplificadas mas eu estou a usar de momento as primeiras versões das fórmulas que achei! Edited November 12, 2016 at 10:48 AM by PsySc0rpi0n Kurt Cobain - Grunge misses you Nissan GT-R - beast killer
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now