Ir para conteúdo
Fórum Script Brasil
  • 0

ASCII Art


Visitante

Pergunta

Olá, preciso desenvolver um código que possa gerar figuras geométricas utilizando estruturas de repetição do tipo do/while de forma alinhada, abaixo um exemplo de código que gera um quadrado conforme a base informada pelo usuário.

#include <stdio.h>

int main(void) {

  int a, b, base;

  printf("\nPrograma para apresentar uma forma geometrica!\n");
  printf("Base: ");
  scanf("%d", &base);
  getchar();

  b = 0;
  while (b < base) {
    a = 0;
    while (a < base) {
      printf ("*");
      a++;
    }
    printf ("\n");
    b++;
  }
  return(0);
}

Preciso implementar figuras conforme os exemplos abaixo:

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

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

Se alguém puder ajudar ficarei grato!

Obrigado

Editado por Visitante
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

A montagem de qualquer forma geométrica baseia-se na impressão de espaçamentos e preenchimentos. Visto que isto será recorrente, aconselho a definição das funções preenche espaço.
Aqui está um exemplo de resolução:
 

//Programa: ASCII Art
//Função: formar figuras geométrica com caractere
//Autor: Hazzu#7444
//Data: 11/05/2020

//Cabeçalhos
#include <stdio.h>

//Assinatura das funções
void preenche(int n);
void espaco(int n);

//Função principal
int main(){
	//Declaração de variáveis
	int tam, i, j;
	
	//Quadrado
	printf("QUADRADO\n>Insira um tamanho:\n");
	scanf("%d", &tam);
	for (i=1; i<=tam; i++){
		preenche(tam);
	}
	
	//Triângulo
	printf("TRIANGULO\n>Insira um tamanho:\n");
	scanf("%d", &tam);
	for (i=tam; i>0; i--){
		preenche(i);
	}
	
	//Triângulos espelhados
	printf("TRIANGULOS ESPELHADOS\n>Insira um tamanho:\n");
	scanf("%d", &tam);
	for (i=tam; i>0; i--){	//Triângulo regular
		preenche(i);
	}
	for (i=1; i<=tam; i++){	//Triângulo invertido
		preenche(i);
	}
	
	//Losango
	printf("LOSANGO\n>Insira um tamanho:\n");
	scanf("%d", &tam);
	if (tam%2 == 0){		//Par
		for (i=2; i<=tam; i+=2){		//Triangulo regular
			espaco((tam-i)/2);
			preenche(i);
		}
		for (i=tam; i>0; i-=2){		//Triangulo invertido
			espaco((tam-i)/2);
			preenche(i);
		}
	}
	else{	//Ímpar
		for (i=1; i<=tam-2; i+=2){		//Triangulo regular
			espaco((tam-i)/2);
			preenche(i);
		}
		preenche(tam);		//Faixa central
		for (i=tam-2; i>0; i-=2){		//Triangulo invertido
			espaco((tam-i)/2);
			preenche(i);
		}
	}
	
	//Encerrando programa
	return 0;
}

//Função que imprime o preechimento
void preenche(int n){
	int i;
	for (i=1; i <= n; i++) printf("*");
	printf("\n");
}

//Função que imprime o espaçamento
void espaco(int n){
	int i;
	for (i=1; i <= n; i++) printf(" ");
}

 

Editado por Hazzu
Link para o comentário
Compartilhar em outros sites

  • 0
16 horas atrás, Hazzu disse:

A montagem de qualquer forma geométrica baseia-se na impressão de espaçamentos e preenchimentos. Visto que isto será recorrente, aconselho a definição das funções preenche espaço.
Aqui está um exemplo de resolução:
 


//Programa: ASCII Art
//Função: formar figuras geométrica com caractere
//Autor: Hazzu#7444
//Data: 11/05/2020

//Cabeçalhos
#include <stdio.h>

//Assinatura das funções
void preenche(int n);
void espaco(int n);

//Função principal
int main(){
	//Declaração de variáveis
	int tam, i, j;
	
	//Quadrado
	printf("QUADRADO\n>Insira um tamanho:\n");
	scanf("%d", &tam);
	for (i=1; i<=tam; i++){
		preenche(tam);
	}
	
	//Triângulo
	printf("TRIANGULO\n>Insira um tamanho:\n");
	scanf("%d", &tam);
	for (i=tam; i>0; i--){
		preenche(i);
	}
	
	//Triângulos espelhados
	printf("TRIANGULOS ESPELHADOS\n>Insira um tamanho:\n");
	scanf("%d", &tam);
	for (i=tam; i>0; i--){	//Triângulo regular
		preenche(i);
	}
	for (i=1; i<=tam; i++){	//Triângulo invertido
		preenche(i);
	}
	
	//Losango
	printf("LOSANGO\n>Insira um tamanho:\n");
	scanf("%d", &tam);
	if (tam%2 == 0){		//Par
		for (i=2; i<=tam; i+=2){		//Triangulo regular
			espaco((tam-i)/2);
			preenche(i);
		}
		for (i=tam; i>0; i-=2){		//Triangulo invertido
			espaco((tam-i)/2);
			preenche(i);
		}
	}
	else{	//Ímpar
		for (i=1; i<=tam-2; i+=2){		//Triangulo regular
			espaco((tam-i)/2);
			preenche(i);
		}
		preenche(tam);		//Faixa central
		for (i=tam-2; i>0; i-=2){		//Triangulo invertido
			espaco((tam-i)/2);
			preenche(i);
		}
	}
	
	//Encerrando programa
	return 0;
}

//Função que imprime o preechimento
void preenche(int n){
	int i;
	for (i=1; i <= n; i++) printf("*");
	printf("\n");
}

//Função que imprime o espaçamento
void espaco(int n){
	int i;
	for (i=1; i <= n; i++) printf(" ");
}

 

E figuras mais elaboradas, eu entendi a lógica, mas não estou conseguindo reaplicar para outras figuras, como as abaixo:

************ 
*****  ***** 
****    **** 
***      ***
**        ** 
*          *        
*          * 
**        ** 
***      *** 
****    **** 
*****  ***** 
************
  
\    *    / 
 \  ***  / 
  \*****/ 
   \***/ 
    \*/
    /*\ 
   /***\ 
  /*****\
 /  ***  \ 
/    *    \

 

Link para o comentário
Compartilhar em outros sites

  • 0

Existem várias formas de fazê-las. Para facilitar, estou admitindo todas semelhantes aos modelos sugeridos, sendo o tamanho apenas uma referência para a próximo arranjo de caracteres possível. Naturalmente, a medida que a complexidade da forma aumenta, é requerido uma maior interpretação algébrica/geométrica para construí-la. Aqui está um exemplo de como fazê-las.

//Programa: ASCII Art
//Função: formar figuras geométrica com caractere
//Autor: Hazzu#7444
//Data: 11/05/2020

//Cabeçalhos
#include <stdio.h>

//Assinatura das funções
void preenche(int n);
void espaco(int n);

//Função principal
int main(){
	//Declaração de variáveis
	int tam, i, j;
	
	//Moldura Losango
	printf("-Moldura Losango\n>Insira um tamanho:\n");
	scanf("%d", &tam);
	for (i=tam; i>0; i--){		//Superior
		preenche(i);		//Preenchimento esquerdo
		espaco(2*(tam-i));	//Espaçamento central
		preenche(i);		//Preenchimento direito
		printf("\n");	//Quebra de linha
	}
	for (i=1; i<=tam; i++){		//Inferior
		preenche(i);		//Preenchimento esquerdo
		espaco(2*(tam-i));	//Espaçamento central
		preenche(i);		//Preenchimento direito
		printf("\n");	//Quebra de linha
	}
	
	//Ampulheta
	printf("-Ampulheta\n>Insira um tamanho:\n");
	scanf("%d", &tam);
	//Superior
	for (i=0; i<tam; i++){
		espaco(i);
		printf("\\");
		espaco(2*(tam-i-1));
		preenche(2*i+1);
		espaco(2*(tam-i-1));
		printf("/");
		printf("\n");
	}
	for (i=tam-1; i>0; i--){
		espaco(2*tam-1-i);
		printf("\\");
		preenche(2*i-1);
		printf("/");
		printf("\n");
	}
	//Inferior
	for (i=0; i<tam-1; i++){
		espaco(2*tam-2-i);
		printf("/");
		preenche(2*i+1);
		printf("\\");
		printf("\n");
	}
	for (i=tam-1; i>=0; i--){
		espaco(i);
		printf("/");
		espaco(2*(tam-i-1));
		preenche(2*i+1);
		espaco(2*(tam-i-1));
		printf("\\");
		printf("\n");
	}
	
	//Encerrando programa
	return 0;
}

//Função que imprime o preechimento
void preenche(int n){
	while(n > 0){
		printf("#");
		n--;
	}
}

//Função que imprime o espaçamento
void espaco(int n){
	while (n > 0){
		printf(" ");
		n--;
	}
}

Partição dos laços:

Losango.png.fea7505d8f529f613d1ea1a841ac8947.png

Ampulheta.png

Editado por Hazzu
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...