Ir ao conteúdo
  • Cadastre-se

Laço de repetição - Pinheiro em C


The_Oicle
Ir à solução Resolvido por Pedro Math.pi,

Posts recomendados

Pessoal, já tentei varias vezes e não consigo fazer um pinheiro com laço de repetição.

               X
             XXX
          XXXXX
        XXXXXXX
      XXXXXXXXX
    XXXXXXXXXXX
  XXXXXXXXXXXXX
XXXXXXXXXXXXXXX
               XX
               XX
             XXXX

 

Tentei cortar o pinheiro ao meio e fazer uma parte dela.

Postarei o código e o resultado logo abaixo;

#include<stdio.h>int main(){    int i,b;    char a = "x";        for(i = 0;i<=11;i++){            b = i % 2;                if(b == 0){                printf("\n");            }         printf("%c",a);        }}

$$

$$

$$

$$

$$

$$

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
  • Solução

Ahaha. Legal.

 

Você vai precisar de 2 laços de repetição. O primeiro escreverá na linha. O segundo escreverá na coluna.

Eu posso usar esses 2 vetores pra fazer somente a parte de cima da árvore. A base do triângulo usa 15 X e da base até a ponta são 8 posições.

Então nossos vetores linha e coluna terão 8 e 15 posições, respectivamente.

 

Agora temos que entender como são escritas as linhas. Na primeira linha, o X é impresso na posição 8. Na segunda linha, é escrito na posição 7, 8 e 9. Na terceira linha, é escrito nas posições 5, 6, 7, 8, 9 e 10.

 

Sobre as colunas, contando de baixo pra cima, a primeira linha pode ser a linha 8. Isso vai ajudar na hora de construir o programa, pois na linha 8, vai começar na posição 8 da linha, na linha 7, vai começar no 7, e assim por diante. Fica fácil pra comparar linha e coluna.

 

Pra começar, ficaria assim:

#include <stdio.h>#include <stdlib.h>main(){    int i,j,k, somax=1;    for(i = 8; i >= 1; i--){ //conta linha      for(j = 1; j <= 15; j++){ // conta caracteres X e espaço            if(j == i){                 for(k = 1; k <= somax; k++) // verifica quantos X vai precisar colocar                       printf("X");                 somax += 2; // a quantidade de X soma mais 2 a cada linha            }            else                printf(" ");      }      printf("\n");    }    system("Pause");}

Falta só fazer a base. 

Link para o comentário
Compartilhar em outros sites


#include <stdio.h>

int main(void) {

int linhas_topo=8;

int max_marcas;

int espacos;

int i,j;

for(i=1, max_marcas=1; i<=linhas_topo; i++, max_marcas+=2) {

espacos = linhas_topo-i;

for(j=1; j<=espacos; j++) printf(" ");

for(j=1; j<=max_marcas; j++) printf("X");

puts("");

}

// Tronco

int meio = (2*linhas_topo-1)/2;

espacos = meio-1;

int linhas_tronco = 2;

for(i=1; i<=linhas_tronco; i++) {

for(j=1; j<=espacos; j++) printf(" ");

printf("XX\n");

}

espacos = meio - 2;

for(i=1;i<=espacos;i++) printf(" ");

printf("XXXX\n");

return 0;

}

Link para o comentário
Compartilhar em outros sites

ola

primeiro, quando for declarar uma variável como char, utilize aspas simples ' ', e não aspas duplas " ",

 

em relação ao código, tente o seguinte 

 

 

 

#include <stdio.h>

int main()
{
char a = 'x';
int linhas,
caracters,
espacos,
count;
 
caracters = 1;
espacos = 8;
 
printf("\n\n\n");
 
//parte de cima
for(linhas = 0; espacos > 0;linhas++)
{
for(count = 0; count <= espacos; count++)
{
printf(" ");
}
 
for(count = 0; count < caracters; count++)
{
printf("%c",a);
}
espacos--;
caracters+=2;
printf("\n");
}
//parte de baixo
espacos = 8;
for(linhas = 0; linhas<2;linhas++)
{
for(count = 0; count <= espacos;count++)
{
printf(" ");
}
printf("%c\n",a);
}
for(count = 0; count<espacos; count++)
{
printf(" ");
}
for(count = 0; count<3;count++)
{
printf("%c",a);
}
printf("\n\n\n");
return 0;
}
 

 

espero ter ajudado

Link para o comentário
Compartilhar em outros sites

bom,

pelo que percebi, este é um erro que acontece bastante no code::blocks, normalmente vai embora sozinho quando se reinicia o projeto ou ate mesmo quando você aperta F9 para executar o programa, eu não uso o code::blocks e não sei uma forma concreta para acabar com o problema, mas você pode tentar isso que falei acima, pode dar certo, mas  com certeza o problema voltará em algum momento 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...