Ir ao conteúdo
  • Cadastre-se

Quadrado Vazio em C


Posts recomendados

E aí pessoal, gostaria de ver se algum membro poderia me ajudar.Estou no primeiro semestre do curso ADS e ainda não consegui assimilar bem algumas funções. Estou em uma maratona de exercícios de programação e me deparei com o tal quadrado vazio. Bem eu consegui fazer o quadrado completo com dois "for", mas para fazer vazio , estou quebrando a cabeça. 

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

Seria este formato caso o usuário digitasse 5, por exemplo;

*  *  *  *  *

*              *

*              *

*              *

*  *  *  *  *

...  

 

 

adicionado 6 minutos depois
13 minutos atrás, isrnick disse:

O que você quer dizer com "quadrado vazio"?

E poste sua tentativa para que possamos te ajudar (para postar códigos no fórum use a tag Code apertando o botão <> no topo do campo de respostas).

 

Bem, mas, depois de algumas pesquisas encontrei um exercício em outra linguagem, mas como a estrutura é praticamente  a mesma, consegui utilizar.

Obrigado. 

 

#include<stdio.h>
#include<locale>
int main(){
	setlocale(LC_CTYPE,"");
	
	int lado;
	
	printf("Digite o tamanho do lado do  quadrado:  ");
	scanf("%d",&lado);
	
	
	for(int col=1; col<=lado;col++){		
		printf(" *");
	}
	printf("\n");
	
	for(int lin=2;lin<lado;lin++){			
			printf(" *");
	 	for(int col=2;col<lado;col++){
			printf("  ");
		}	
		printf(" * \n");
		
	}
    for(int col=1; col<=lado;col++){		
		printf(" *");
			
	}	
	
	return 0;
}

 

adicionado 21 minutos depois

Aqui vai ele com os meus comentários, se estiver errada a minha interpretação do código, comentem, pois estou com dificuldades em entender bem , mas acho que é isso!!! valeu!!

#include<stdio.h>
#include<locale>
int main(){
	setlocale(LC_CTYPE,"");
	
	int lado;
	
	printf("Digite o tamanho do lado do quadrado:  ");
	scanf("%d",&lado);
	
	
	for(int col=1; col<=lado;col++){// Coluna recebe 1, enquanto coluna for menor ou igual que o lado, incrementa +1;		
		printf(" *");// imprime a imagem de um espaço e asterisco;
	}
	printf("\n");//quebra a linha para a próxima instrução;
	
	//no próximo "FOR" é onde são feitas as laterais do quadrado;
	for(int lin=2;lin<lado;lin++){// aqui a variavel linha, inicia com 2, e enquanto ela for menor que o lado, incrementa com +1;
			printf(" *");// e imprime espaço e asterisco;
	 	for(int col=2;col<lado;col++){ //dentro deste mesmo "FOR", temos um outro para criar as colunas vazias;coluna recebe 2, enquanto for menor que o lado, soma com 1;
			printf("  "); // e imprime o espaço vazio;
		}	
		printf(" * \n");//aqui finaliza o "FOR" da criação das laterais ;
		
	}
    for(int col=1; col<=lado;col++){		// aqui o código repete , veja que é como o primeiro "FOR" declarado. para fazer a última linha , a base do quadrado.
		printf(" *");//onde os asteriscos preenchem a linha.
			
	}		
			
	return 0;
}

 

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

Legal. :thumbsup:

 

Aqui outra solução:

#include <stdio.h>
int main(){
    int n, i, j;
  
    printf("Digite o tamanho do lado do quadrado: ");
    scanf("%d%*c", &n);
  
    printf("\n");
  
    for (i=0; i<n; i++){
        for (j=0; j<n; j++){
            if (i==0 || i==n-1 || j==0 || j==n-1)
                printf(" *");
            else
                printf("  ");
        }
        printf("\n");
    }
  
    return 0;
}

 

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

  • 4 anos depois...

@Felipe Bandechi    poste seu código , para vermos como está e em que podemos ajudar  ,   e também você pode usar o  "\r"   "Return Carriage" e escrever sua msg se estiver no meio ,   escrevendo o Asterísco e em seguida a msg , depois de já ter escrito os Asteríscos na mesma Linha .

1444314797_quadradovazio.thumb.jpg.9e5da990607d0dcefc63f2fff77e2369.jpg

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

#include <iostream>
#include <locale.h>

using namespace std;

int main()
{
    setlocale( LC_ALL, "Portuguese");

    int horizontal = 10, vertical = 10;
    char icon = '*';

    for (int i = 0; i <= vertical; i++ )
        {

            for (int j = 0; j <= horizontal; j++ )
                {
                        if (j == 0 || j == 10 || i == 0 || i == 10)
                            {cout << icon << " " ;}

                        else if (i == 5 && j == 2 )

                            {cout << "Hello World";}

                        else
                            {cout << "  "; }
                }

            cout << "\n" ;
        }

    cin.get();

    return 0;
}



Segue meu código.
Ainda n entendi.

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

@Felipe Bandechi     se você souber  o tamanho horizontal e vertical  vai funcionar  bem  , mas se modificar o tamanho vai precisar modificar todos os outros valores também , nos Loop's   e nos    IF's ,  e um outro modo poderia ser controlando a posição do Cursor  ,  e se você estiver usando o windows , então poderia usar um código parecido com esse aqui  :

#include <iostream>
#include <windows.h>
#include <locale.h>
using namespace std;
int main()
{
  HANDLE _h = GetStdHandle(STD_OUTPUT_HANDLE);
  setlocale( LC_ALL, "Portuguese");
  int horizontal = 10, vertical = 10;
  char icon = '*';
  for (int i = 0; i <= vertical; i++ )
  {
    for (int j = 0; j <= horizontal; j++ )
    {
      if (j == 0 || j == 10 || i == 0 || i == 10)
      {
        cout << icon << " " ;
        Sleep(50);
      }
      else
      {
        cout << "  ";
        Sleep(50);
      }
    }
    cout << "\n" ;
  }
  COORD c;
  c.X = horizontal / 2;
  c.Y = vertical   / 2;
  SetConsoleCursorPosition( _h , c );
  cout << "Hello World!\n\n\n\n\n"  ;
  cin.get();
  return 0;
}

 

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

10 horas atrás, Felipe Bandechi disse:

Cara consegui de uma forma meio tosca kkkkk com certeza não é uma boa solução.

Não tá tosco, seria basicamente isso mesmo!

1 hora atrás, Felipe Bandechi disse:

É que sou novato em programação, tem muitos comandos que ainda conheço Ex Sleep, \r, essa técnica do cursor também. Vou pesquisar mais.

Se você está começando eu sugiro você não procurar nada relacionado a api do windows, ela tende a complicar tudo.

 

Minha solução seria

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


void
caixa_mensagem(char *msg, int largura, int altura);

int main(void)
{
    caixa_mensagem("caixa!", 25, 8);
    return(0);
}

void
caixa_mensagem(char *msg, int largura, int altura)
{
    int
        local_vertical = altura/2,
        local_horizontal = (largura-strlen(msg))/2,
        x, y,
        contador = 0;

    for (y = 0; y < altura; y++) {
        for (x = 0; x < largura; x++) {
            if (x == local_horizontal &&
                y == local_vertical) {
                printf("%s", msg);
                x+=(strlen(msg)-1);
            } else if (y == 0 || y == (altura-1) ||
                       x == 0 || x == (largura-1)) {
                putchar('*');
            } else {
                putchar(' ');
            }
        }
        putchar('\n');
    }
}

1421238352_Capturadetela_2022-05-22_12-12-34.thumb.png.7fa876508c7b6f77d2dfb803c11b3526.png

  • Obrigado 2
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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!