Ir ao conteúdo
  • Cadastre-se

C Imprimir 4 triangulos usando * em C


Posts recomendados

Alguem poderia me ajudar tenho esse exercicio para resolver, consiste em imprimir 4 triangulos usando *, os dois primeiro eu consegui imprimir com exito, porém não consigo imprimir os outros dois que são uma copia dos primeiros porém invertidos. Alguem pode me ajudar?? Meu código está assim

#include <stdio.h>

#include <stdlib.h>

int main(){
  int i, j;
  printf("(A)");
  printf("\n");
  for (i = 0; i < 8; i++){
    for (j = 0; j <= i; j++){
      printf("*");
    }
    printf("\n");
  }
  printf("(B)");
  printf("\n");
  for (i = 8; i >= 0; i--){
    for (j = 0; j < i; j++){
      printf("*");
    }
    printf("\n");
  }
  printf("(C)");
  printf("\n");
  for (i = 8; i >= 0; i--){
    for (j = 0; j < i; j++){
      printf("*");
      printf("\n");
    }
    printf("(D)");
    printf("\n");
    for (i = 0; i < 8; i++){
      for (j = 0; j <= i; j++){
        printf("*");
      }
      printf("\n");
    }
    return 0;
  }

 

IMG-20200514-WA0008.jpg

IMG-20200514-WA0009.jpg

  • Curtir 1
  • Haha 1
Link para o comentário
Compartilhar em outros sites

Post(s): #2 Caso C.: Na mesma medida o contador de linhas aumenta, aumenta número de " " e diminui de "*".

Acontece isto...

 

00 linha tem:   0 de " " 10 de "*" **********

01 linha tem:   1 de " "   9 de "*"  *********

                              ...

09 linha tem:   9 de " "   1 de "*"              *

10 linha tem: 10 de " "   0 de "*"                Post(s): #15

 

 

 

 

  • Curtir 2
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

7 horas atrás, Leonardo R Leonardi disse:

Alguem poderia me ajudar tenho esse exercicio para resolver, consiste em imprimir 4 triangulos usando *, os dois primeiro eu consegui imprimir com exito, porém não consigo imprimir os outros dois que são uma copia dos primeiros porém invertidos. Alguem pode me ajudar?? Meu código está assim


#include <stdio.h>

#include <stdlib.h>

int main(){
  int i, j;
  printf("(A)");
  printf("\n");
  for (i = 0; i < 8; i++){
    for (j = 0; j <= i; j++){
      printf("*");
    }
    printf("\n");
  }
  printf("(B)");
  printf("\n");
  for (i = 8; i >= 0; i--){
    for (j = 0; j < i; j++){
      printf("*");
    }
    printf("\n");
  }
  printf("(C)");
  printf("\n");
  for (i = 8; i >= 0; i--){
    for (j = 0; j < i; j++){
      printf("*");
      printf("\n");
    }
    printf("(D)");
    printf("\n");
    for (i = 0; i < 8; i++){
      for (j = 0; j <= i; j++){
        printf("*");
      }
      printf("\n");
    }
    return 0;
  }

 

IMG-20200514-WA0008.jpg

IMG-20200514-WA0009.jpg

 

Isso em fundo preto seria o que?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

5 horas atrás, Mauro Britivaldo disse:

Post(s): #2 Caso C.: Na mesma medida o contador de linhas aumenta, aumenta número de " " e diminui de "*".

Acontece isto...

 

00 linha tem:   0 de " " 10 de "*" **********

01 linha tem:   1 de " "   9 de "*"  *********

                              ...

09 linha tem:   9 de " "   1 de "*"              *

10 linha tem: 10 de " "   0 de "*"               

 

 

 

 

 

Eu fiz assim e funcionou 

#include <stdio.h>

int main(){
     printf("(A)\n\n");
     for(int i = 0; i <= 9;i++){
          for(int j = 0;j <= i;j++){
               printf("*");
          }
          printf("\n");
     }

     printf("(B)\n\n");
     for(int j = 9;j >= 0;j--){
          for(int i = 0; i <= j;i++){
               printf("*");
          }
          printf("\n");
     }

     printf("(C)\n\n");
     for(int j = 9;j >= 0;j--){
          for(int k = 0;k <= 9-j;k++){
               printf(" ");
          }
          for(int i = 0; i <= j;i++){
               printf("*");
          }
          printf("\n");
     }
     
     printf("(D)\n\n");
     for(int i = 0; i <= 9;i++){
          for(int k = 0;k <= 9 - i;k++){
               printf(" ");
          }
          for(int j = 0;j <= i;j++){
               printf("*");
          }
          printf("\n");
     }
     return 0;
}

image.thumb.png.b325091d03a3cd882069bf96e70e3f8b.png

  • Curtir 2
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

1 minuto atrás, Leonardo R Leonardi disse:

@arfneto A impressão do meu código código 

Entendo.

Então sabe que imprimiu 3 vezes a mesma coisa. Porque não postou o código?

 

Entenda que cada bloco desses é só uma letra entre parenteses seguida por uma lista de 10 linhas de 10 letrinhas. E cada letrinha pode ser espaço ou asterisco. 

Só isso.

 

Para imprimir os asteriscos você DEVE usar um printf("*"); para cada um. O resto você pode fazer como quiser. E para ver como fazer é só contar de 1 a 10 para as linhas e dentro das linhas acertar o número de espaços em cada linha, o que varia de um em um. 

 

É opcional imprimir os espaços à direita já que ninguém vai ver mesmo ;) . E os espaços a esquerda vão alinhar os asteriscos. Ou aumenta um a cada linha ou diminui um a cada linha, dependendo do padrão.

 

Qual a sua dificuldade? 

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

11 minutos atrás, arfneto disse:

Entendo.

Então sabe que imprimiu 3 vezes a mesma coisa. Porque não postou o código?

 

Entenda que cada bloco desses é só uma letra entre parenteses seguida por uma lista de 10 linhas de 10 letrinhas. E cada letrinha pode ser espaço ou asterisco. 

Só isso.

 

Para imprimir os asteriscos você DEVE usar um printf("*"); para cada um. O resto você pode fazer como quiser. E para ver como fazer é só contar de 1 a 10 para as linhas e dentro das linhas acertar o número de espaços em cada linha, o que varia de um em um. 

 

É opcional imprimir os espaços à direita já que ninguém vai ver mesmo ;) . E os espaços a esquerda vão alinhar os asteriscos. Ou aumenta um a cada linha ou diminui um a cada linha, dependendo do padrão.

 

Qual a sua dificuldade? 

 

Eu fiz assim e agora funcionou 

#include <stdio.h>
#include <stdio.h>

int main(){
     printf("(A)\n\n");
     for(int i = 0; i <= 9;i++){
          for(int j = 0;j <= i;j++){
               printf("*");
          }
          printf("\n");
     }

     printf("(B)\n\n");
     for(int j = 9;j >= 0;j--){
          for(int i = 0; i <= j;i++){
               printf("*");
          }
          printf("\n");
     }

     printf("(C)\n\n");
     for(int j = 9;j >= 0;j--){
          for(int k = 0;k <= 9-j;k++){
               printf(" ");
          }
          for(int i = 0; i <= j;i++){
               printf("*");
          }
          printf("\n");
     }
     
     printf("(D)\n\n");
     for(int i = 0; i <= 9;i++){
          for(int k = 0;k <= 9 - i;k++){
               printf(" ");
          }
          for(int j = 0;j <= i;j++){
               printf("*");
          }
          printf("\n");
     }
     return 0;
}

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Outro jeito:

 

#include <stdio.h>

int main()
{
    int i, j;
    
    for (i=0; i<10; i++){
        for (j=0; j<10; j++){
            if(i<=j) printf("*");
            else printf(" ");
        }
        printf("\n");
    }
    
    printf("\n");
    
    for (i=0; i<10; i++){
        for (j=0; j<10; j++){
            if(i>=9-j) printf("*");
            else printf(" ");
        }
        printf("\n");
    }
    
    return 0;
}

 

  • Curtir 1
  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Outro exemplo, baseado no código do @isrnick, seria substituindo os ifs por operadores ternários:

#include <stdio.h>

int main()
{
    int i, j;
    
    for (i=0; i<10; i++) {
        for (j=0; j<10; j++)
            i<=j ? printf("*") : printf(" ");
        printf("\n");
    }
    
    printf("\n");
    
    for (i=0; i<10; i++) {
        for (j=0; j<10; j++)
            i>=9-j ? printf("*") : printf(" ");
        printf("\n");
    }
    
    return 0;
}

 

ADENDO:
Para efeitos de demonstração, outras formas de identação:

#include <stdio.h>

int main()
{
    int i, j;
    
    for (i=0; i<10; i++) {
        for (j=0; j<10; j++) i<=j ? printf("*") : printf(" ");
        printf("\n");
    }
    
    printf("\n");
    
    for (i=0; i<10; i++) {
        for (j=0; j<10; j++) i>=9-j ? printf("*") : printf(" ");
        printf("\n");
    }
    
    return 0;
}

 

Ou outra que acho legal:

#include <stdio.h>

int main()
{
    int i, j;
    
    for (i=0; i<10; i++) {
        for (j=0; j<10; j++)
            i<=j
            ? printf("*")
            : printf(" ");
        printf("\n");
    }
    
    printf("\n");
    
    for (i=0; i<10; i++) {
        for (j=0; j<10; j++)
            i>=9-j
            ? printf("*")
            : printf(" ");
        printf("\n");
    }
    
    return 0;
}

 

Observe que, propositalmente, removi as {} do segundo for (os mais internos) nos 3 códigos, pois eles são desnecessários... veja por exemplo esse último código. Parece que tem "3 linhas dentro do for", mas na verdade esses fazem parte de uma mesma instrução (obs.: não sei se o termo correto seria "instrução", mas acho que deu para entender). Ah! para o primeiro for precisa de {} pois tem mais de uma "instrução"... no caso um "for" (o que está dentro dele não importa, pois está "dentro" dele) e um "printf"... 


PS:

Uma dúvida minha: por quê antes do else tem ";" no C e seus derivados? 🤔

 

  • Curtir 5
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Leonardo R Leonardi coloca a cor do fundo branco e as letras pretas para ficar igual.

adicionado 1 minuto depois

 

adicionado 36 minutos depois
#include <stdio.h>
#include <windows.h>
#define pretobranco char cor[10];snprintf(cor,10,"color %x",0XF0);system(cor); 

int main()
{
	pretobranco;
    int i, j;
    
    for (i=0; i<10; i++) {
        for (j=0; j<10; j++) i<=j ? printf("*") : printf(" ");
        printf("\n");
    }	
   
    printf("\n");
    for (i=0; i<10; i++) {
        for (j=0; j<10; j++) i>=9-j ? printf("*") : printf(" ");
        printf("\n");
    }
    
    return 0;
}

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Por mim, todos têm notas 10.0 na disciplina de Introdução a Lógica e Algoritmos.

 

@Leonardo R Leonardi e você... como está sua solução essa manhã, pegou as dicas da comunidade, repensou novas soluções.

 

Post(s): #4 Observação-Final: Se de início escreve para imprimir também os espaços embranco " " no padrão A, teria o bastante para o padrão C, pois o padrão C é simples troca de preenchimento do padrão A, o mesmo com relação os padrões B e D; é praticamente a implementação que usa para Padrão A.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

 

5 horas atrás, Simon Viegas disse:

Ou outra que acho legal:

 

Essa é uma solução mais formal. E elegante. Muito boa porque leva em conta a topologia da coisa: sempre vai imprimir 100 letrinhas em 10 linhas de 10 letras. Conforme muda o contexto imprime o espaço ou o asterisco. E o código reflete isso.

 

Se você considerar o espaço apenas como alinhamento ainda seria formal, marginalmente mais eficiente e mais legível  escrever apenas

#include "stdio.h"

int main()
{
	const char* margem[11] =
	{   "",
		"",
		" ",
		"  ",
		"   ",
		"    ",
		"     ",
		"      ",
		"       ",
		"        ",
		"         "
	};
	int i = 0;
	int asteriscos = 0;

	printf("(A)\n\n");
	for (i = 1; i <= 10; i += 1)
	{	for (asteriscos = 1; asteriscos <= i; asteriscos += 1) printf("*");
		printf("\n");
	}

	printf("\n(B)\n\n");
	for ( i = 1; i <= 10; i += 1)
	{	for (int asteriscos = 10; asteriscos >= i; asteriscos -= 1) printf("*");
		printf("\n");
	}

	printf("\n(C)\n\n");
	for (int i = 1; i <= 10; i += 1)
	{	printf("%s", margem[i]);
		for (int asteriscos = 10; asteriscos >= i; asteriscos -= 1) printf("*");
		printf("\n");
	}

	printf("\n(D)\n\n");
	for (int i = 1; i <= 10; i += 1)
	{	printf("%s", margem[11-i]);
		for (int asteriscos = 1; asteriscos <=i; asteriscos += 1) printf("*");
		printf("\n");
	}

	return 0;
}

inserindo as margens onde necessário. Esse imprime exatamente como está no enunciado.

 

5 horas atrás, Simon Viegas disse:

Uma dúvida minha: por quê antes do else tem ";" no C e seus derivados? 

 

Pela gramática da linguagem o if é seguido de um comando que pode ser segundo por um else e outro comando.

 

E a definição de comando é essa: um comando simples termina por um ; ou pode ser um bloco delimitado por { }. Um if como esse abaixo seria um exemplo completo
 

	if (i == 0)
	    {}
	else
		;

tanto ; quando { } são comandos válidos. Para retirar a necessidade do ;  antes do else seria preciso aceitar o else como terminador de comando. Mas aí seria preciso decidir: ou else pode ser aceito como ; em qualquer comando ou seria preciso avaliar APENAS o else dentro do if para aceitar isso. E aí a gramática não seria mais genérica em relação aos comandos.

 

Provavelmente não valeria a pena mudar tanto as coisas. Às vez se aceita alguma coisa assim para ajudar o programador, alguma liberalidade,  como deixei aí no exemplo uma vírgula a mais antes da chave na declaração das constantes. Pra que não seja preciso o programador voltar lá se retirar do final da lista alguma coisa. Fica "feio" mas é útil. Mas no caso do else seria talvez muito trabalho porque iria mudar a avaliação de comandos no geral.

  • Curtir 1
  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

Na verdade esqueci de deixar a vírgula. É a isso que me refiro:

	const char* margem[11] =
	{   "",
		"",
		" ",
		"  ",
		"   ",
		"    ",
		"     ",
		"      ",
		"       ",
		"        ",
		"         ",
	};

Você pode deixar a última vírgula. Durante muito tempo não compilava. É uma liberalidade, porque o programador SEMPRE esquecia. E em programas que geravam código fonte era preciso ter esse tratamento especial para a última linha.

 

Por falar em liberalidade, em C é perfeitamente válido inicializar vetores fora de ordem. E mesmo faltando índices. Algo como

	const char* margem[11] =
	{ 
	    [ 4] = "   ",
	    [ 5] = "    ",
	    [ 6] = "     ",
	    [ 7] = "      ",
	    [ 8] = "       ",
	    [ 1] = "",
	    [ 2] = " ",
	    [ 3] = "  ",
	    [ 9] = "        ",
	    [10] = "         ",
	};

Serviria sem problemas no programa acima. Veja que a posição 0 não foi inicializada. Em C++ não pode ser assim fora de ordem.

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
2 horas atrás, arfneto disse:
8 horas atrás, Simon Viegas disse:

Ou outra que acho legal:

Essa é uma solução mais formal. E elegante. Muito boa porque leva em conta a topologia da coisa: sempre vai imprimir 100 letrinhas em 10 linhas de 10 letras. Conforme muda o contexto imprime o espaço ou o asterisco. E o código reflete isso.

 

Só um adendo: os 3 códigos que postei são "idênticos" ao do @isrnick... apenas mudei de if para operador ternário... (pelo menos suponho que sejam, na lógica, exatamente a mesma coisa). A diferença entre os meus códigos estão apenas nas identações, ou seja: a identação que acho mais legal seria a terceira (quebrando as linhas do elementos do operador ternário).

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!