Jump to content
Fórum Script Brasil
  • 0

ASCII Art


Guest

Question

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

Edited by Guest
Link to post
Share on other sites

3 answers to this question

Recommended Posts

  • 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(" ");
}

 

Edited by Hazzu
Link to post
Share on other 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 to post
Share on other 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

Edited by Hazzu
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Cloud Computing


  • Forum Statistics

    • Total Topics
      148887
    • Total Posts
      644948
×
×
  • Create New...