Ir ao conteúdo

Posts recomendados

Postado

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
Postado

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
Postado
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
Postado
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
Postado
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
Postado
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
Postado

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
  • Membro VIP
Postado

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
Postado

@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
Postado

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
Postado

 

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
Postado

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
  • Membro VIP
Postado
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

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!