Ir ao conteúdo
  • Cadastre-se

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


alissonr539

Posts recomendados

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

Link para o comentário
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

Link para o comentário
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?

Link para o comentário
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  :)

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...