Ir ao conteúdo
  • Cadastre-se
alissonr539

exercício que não consigo resolver em C [ básico ]

Recommended Posts

Por favor, não sei como fazer, já morri pensando, sempre me perco no while, pensei em usar algo assim:

while(base>0) {    printf(" %c ", ast);    //variar o asterisco   base -= 2;}
 
mas também não sei se da pra fazer, alguém me ajuda aí urgente, problema abaixo :

 

Faça um programa que leia o tamanho da base de um triângulo e mostre na tela o 
desenho usando ‘*’ (asteriscos) para as bordas e preenchimento. 

Exemplo de entrada 

 

Exemplo de Saída

     *

   ***

 *****
*******

 


O de saida ta errado, era pra sair uma piramide certinha, só q pelo fórum saiu torto é como se fosse

___*___

__***__

_*****_

*******


tipo sempre sobrando perdendo dois asteriscos de baixo pra cima

Compartilhar este post


Link para o post
Compartilhar em outros sites

@alissonr539

 

 

já morri pensando

 

Bom, então nem precisa fazer mais.. :lol:;)

 

 

Sério, vamos lá..

 

 

Existem algumas formas de resolver isso.. Depois de saber o tamanho da base, seria interessante descobrir então o número de linhas total que vai compor a pirâmide. Como o incremento/decremento é sempre de 2 a cada linha, então você poderia calcular:

 

linhas = base / 2 + 1

= 3 + 1 (daria 3,5, mas o valor será truncado ao atribuir ao inteiro)

= 4 linhas.

 

Então, você vai precisar montar os laços de repetição para:

 

1) imprimir todas as linhas (que você já conhece o total);

2) dentro do laço principal acima, você monta um laço exclusivo para imprimir espaços;

3) outro laço agora para imprimir os asteriscos.

 

Dica: analise o padrão de formação da pirâmide para observar que, na primeira linha, você imprime no total 4 caracteres: 3 espaços + 1 asterisco, depois, 2 espaços + 3 asteriscos, etc. até, 0 espaço + 7 asteriscos.

 

 

Você vai precisar ajustar justamente os contadores desses laços de repetição (preferência o for) para que possam produzir as iterações adequadas à formação da pirâmide. Fiz rapidinho:

 

piram.png

 

 

 

 

LNW

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas ainda não entendi como variar direito, porque tipo eu preciso fazer com while isso

ta, entendi que o num de espaços sempre tem q ser < base/2

e dai ele só vai diminuindo,

mas como eu faço pra ele jogar um número de espaços até a < base/2, jogar 1 asterisco e dar \n, não consigo variar isso, poderia me jogar o código que fizeste nesse dai pra melhor compreender o que você fez?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos lá: para fazer este programa, eu utilizei de parte da lógica que o @LNV falou:

void main(void){      int base, a, espaco, temp, asterisco, i;      printf("Insira o comprimento da base......: ");      scanf("%i", &base);      a = (base / 2) + 1;      espaco = a - 1;      if (base % 2 != 0)           asterisco = 1;      else           asterisco = 0;      printf("\n");      for (i = a; i > 0; i--){           //impressão dos espaços               temp = espaco;           while (temp != 0){                printf("%c", 32);                temp--;           }           //impressao dos asteriscos                temp = asterisco;           while (temp != 0) {                printf("%c", 42);                temp--;           }           asterisco += 2;           espaco--;           printf("\n");      }}

Um detalhe a se notar ao rodar o programa é que: se o comprimento da base for par, obviamente cada linha do triângulo terá asteriscos pares, não tendo a ponta com somente 1 asterisco. Se for ímpar, cada linha terá número ímpar de asterisco.  

 

Desse modo, vamos trabalhar com número par. Ao colocar a = 6  por exemplo, de acordo com a lógica acima, terá 4 linhas (uma delas vazia. O número de espaços é sempre um menor a base, para que assim se ponha asteriscos. Importante salientar que a variável temp vai manipular tanto o número de espaços quanto a impressão do asterisco. 

 

Primeiramente vai imprimir os espaços até temp chegar a zero. Na tabela ASCII, o espaço é equivalente ao número 32. Primeiramente teremos uma linha vazia, já que na condição acima (base % 2 != 0), em outras palavras, se a base for ímpar, tem um asterisco na ponta. Caso contrário não tem. Não entrará no segundo while. 

 

Asteriscos vai ser incrementado em dois em dois (atenção: escrever "asterisco += 2" é a mesma coisa que "asterisco = asterisco + 2") e espaços será decrementado até acabar a quantidade de linhas. No final há uma quebra de linha.

 

Espero que tenha ajudado  :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×