Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
dondney

C++ c++ programa que exiba na tela o desenho de um "quadrado"

Recommended Posts

Salve pessoal! Deem uma olhada nesse exercício:
 

Escrever um programa C exiba na tela um "quadrado"
formado pelo caractere * repetido diversas vezes. O
tamanho do quadrado, ou seja, o número de asteriscos
na linha e na coluna deve ser informado pelo usuário.

 

Penso em usar algum tipo de laço em for, porém sei nem que linha seguir. Alguém sabe dar uma direção?

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@dondney  Penso em algo assim.
1- Se for a ultima ou a primeira linha: Desenha N vezes o '*'
2- Se não for primeira nem a ultima linha: desenha '*' e N-1 "espaços", quando chegar na N-ésima posição, você desenha outro '*'

3- Se for > que a ultima linha: termina.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @dondney.

 

Faça testes... tente inicialmente imprimir apenas um linha com N "*" (use um for). Depois, só fazer imprimir essas  linhas com N "*" N vezes. (use um for dentro de outro for).

 

No aguardo.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • @Simon Viegas e @CiroboyBR
    O código que digitei esta assim:

    #include<stdio.h>
    #include<ctype.h>
    int main(){
        int i,x=6,y=6;
        char ch='*';
            for(i=1;i<=x;i++)
                printf("%c", ch);
            for(i=1;i<=y;i++)
                printf("%c\n", ch);
        
    }

     

    A imagem do executável também ta ai. O quadrado ficou tipo que "vazado"
    Agradeço muito a paciência de vocês!
     

    Capturar.PNG

    Editado por Simon Viegas
    Favor ler tópico e seguir orientações sobre postagem de códigos: http://www.clubedohardware.com.br/announcement/27-poste-seus-c%C3%B3digos-corretamente/
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @dondney seu código está quase certo, mas você precisa usar dois loop um dentro do outro, sendo o primeiro loop para as linhas e o segundo para as colunas e dentro do segundo loop você coloca para imprimir, e cada loop com variáveis diferentes.

    Editado por Simon Viegas
    Remoção de código. Prezados, favor evitar "entregar" código prontos para o usuário. Prefira apenas orientar o usuário encontrar a sua resposta.
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Olá a todos

     

    Vou tentar complementar.

     

    Antes, um comentário pertinente: a quantidade de linhas e colunas são iguais.

    23 horas atrás, dondney disse:

    Escrever um programa C exiba na tela um "quadrado"
    formado pelo caractere * repetido diversas vezes

    Ou seja, se é um quadrado, todos os seus lados tem o mesmo tamanho, logo só precisa de uma coordenada de referência (perceba como seus x e y tem o mesmo tamanho.... logo, por exemplo, use x tanto para altura, quanto para largura).

     

     

     

    1) IMPRIMIR APENAS UMA LINHA

    22 horas atrás, Simon Viegas disse:

    Faça testes... tente inicialmente imprimir apenas um linha com N "*" (use um for).

    Essa parte ficou ok. Falta agora imprimir as outras linhas.

     

     

     

     

    2) IMPRIMIR AS 'N' LINHAS

    22 horas atrás, Simon Viegas disse:

    Depois, só fazer imprimir essas  linhas com N "*" N vezes. (use um for dentro de outro for).

    Ou seja, você já sabe imprimir uma linha com N "*", correto? Agora perceba (pequena homenagem ao mestre Procópio), para desenhar um quadrado, basta imprimir essa linha também N vezes.

     

    Em outras palavras: todo o processo de desenhar uma linha necessita ser repetido N vezes.

     

    É bem simples... em vez de você imprimir um "*" no seu segundo for, faça imprimir uma linha completa. (o primeiro for ficará dentro do segundo for). A única observação é que você vai precisar de variáveis de controle diferentes¹ para cada for, como está usando i para um, poderia usar o o j para o outro.

     

    1 - Isso deve ser observado pois o escopo do segundo for é o mesmo do primeiro, ou seja, se você declarar a variável i como global (antes do main, ou fora dos for) e tentar controlar os dois laços de repetições com ele, ambos vão usar o mesmo endereço de memória, daí, ao finalizar o segundo for, o primeiro vai continuar com o valor que está... daí o programa pode ter um comportamento indesejado, como imprimir apenas uma linha, em vez das N. Logo, ou você declara uma variável para cada for, como i e j, ou declara como variável local. Algo como "for(int i = 0;i < x;i++){". Dessa forma, essa variável i só será "visível" para o for (escopo dele), o que não interfere dos outros i que possam existir no código.

     

    O segredo é tentar abstrair as etapas. Veja que no segundo for está imprimindo as linhas corretamente... a questão é que você não precisa apenas de um "*",  basta que abstrair que esse "*" significa "uma linha completa com N '*'". Pronto... apenas substitua o "*" pelo que ele representa, que seria "uma estrutura que faz imprimir uma linha com N '*'". Entende?

     

     

     

    ***

     

    Qualquer coisa é só postar.

     

    No aguardo.

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Antes de mais nada, @Simon Viegas, @devair1010 e @CiroboyBR vocês são mais que 10. Brigado mesmo pela ajuda.
    Simon, eu acho que entendi o que você disse. Complementou bem o que o Devair disse. Mas ainda estou apanhando com o código.
    vê se é esse o caminho:

    [Código removido pela moderação]

     

    Estou errando na questão do loop, eu acho

    Editado por Simon Viegas
    Favor editar postagem, e inserir novamente o código utilizando a tag CODE (clique no botão <>))
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Olá @dondney.

     

    Seu código está saindo desconfigurado :(. Favor ler e seguir orientações do tópico "Poste seus códigos corretamente!" contido lá nos COMUNICADOS, que está no topo desta página.

     

    Obs.: edite a postagem, e antes de publicar, clique em "Pré-visualizar" e veja se ficou tudo certinho.

     

    No aguardo.

     

     

    • Curtir 2

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Pessoal, muito obrigado pela ajuda! Depois de muitas tentativas, consegui!
    Se não fosse pela boa vontade, ja teria deixo isso pra lá, haha
    Ficou assim:

     

    #include<stdio.h>
    #include<ctype.h>
    int main(){
    	int i,j,x,y;
    	char ch='*';
    	printf("Programa que imprime um quadrado em forma de *\n");
    	printf("De o numero de linhas do quadrado\n");
    	scanf("%i", &x);
    	printf("De o numero de colunas do quadrado\n");
    	scanf("%i", &y);
    		for(i=1;i<=x;i++)
    		{
    		for(j=1;j<=y;j++)
    		{
    			printf("%c", ch);
    		}
    			printf("\n");
    		}
    		}

    O que acharam?

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @dondney    ficou bom, imprimiu o quadrado certinho,  mas no c/c++ geralmente as variáveis do laço começam em zero e vai ate enquanto for menor que x, assim :

    for(i=1;i<=x;i++)
      
      ficaria assim :
    
    for(i = 0;i < x;i++)

    então fazendo desse modo quando  você pegar um código para estudar você já estará acostumado . e isso por que nos vetores a posição inicial é zero também .

    Editado por devair1010
    • Curtir 2

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 22 minutos atrás, devair1010 disse:

    @dondney    ficou bom, imprimiu o quadrado certinho,  mas no c/c++ geralmente as variáveis do laço começam em zero e vai ate enquanto for menor que x, assim :

    
    for(i=1;i<=x;i++)
      
      ficaria assim :
    
    for(i = 0;i < x;i++)

    então fazendo desse modo quando  você pegar um código para estudar você já estará acostumado . e isso por que nos vetores a posição inicial é zero também .

    Valeu mesmo, Devair!

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Olá.

     

    Além do que @devair1010 sugeriu, se atente a indentação. É de suma importância, ex.:

    #include<stdio.h>
    #include<ctype.h>
    int main() {
    	int i,j,x,y;
    	char ch='*';
    	printf("Programa que imprime um quadrado em forma de *\n");
    	printf("De o numero de linhas do quadrado\n");
    	scanf("%i", &x);
    	printf("De o numero de colunas do quadrado\n");
    	scanf("%i", &y);
    	for(i=1;i<=x;i++) {
    		for(j=1;j<=y;j++) {
    			printf("%c", ch);
    		}
    		printf("\n");
    	}
    }

     

    @dondney, veja todo quadrado, NECESSARIAMENTE tem a mesma quantidade de linhas e colunas. Se não for assim, não será um quadrado. SEMPRE o X terá que ser igual ao Y.... Deste modo, seria um erro (diria grotesco) solicitar a linha E coluna... Basta saber o tamanho do lado.

     

     

    No aguardo.

     

    Editado por Simon Viegas
    Pequeno ajuste no código
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 17 minutos atrás, Simon Viegas disse:

    Olá.

     

    Além do que @devair1010 sugeriu, se atente a indentação. É de suma importância, ex.:

    
    #include<stdio.h>
    #include<ctype.h>
    int main() {
    	int i,j,x,y;
    	char ch='*';
    	printf("Programa que imprime um quadrado em forma de *\n");
    	printf("De o numero de linhas do quadrado\n");
    	scanf("%i", &x);
    	printf("De o numero de colunas do quadrado\n");
    	scanf("%i", &y);
    	for(i=1;i<=x;i++) {
    		for(j=1;j<=y;j++) {
    			printf("%c", ch);
    		}
    		printf("\n");
    	}
    }

     

    @dondney, veja todo quadrado, NECESSARIAMENTE tem a mesma quantidade de linhas e colunas. Se não for assim, não será um quadrado. SEMPRE o X terá que ser igual ao Y.... Deste modo, seria um erro (diria grotesco) solicitar a linha E coluna... Basta saber o tamanho do lado.

     

     

    No aguardo.

     

    É verdade, Simon, erro grotesco mesmo.
    E, de fato, preciso melhorar a minha indentação. Agradeço demais a atenciosidade!

    Editado por Simon Viegas
    Pequeno ajuste no código da citação
    • Curtir 2

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Em 31/10/2017 às 10:46, dondney disse:

    Escrever um programa C exiba na tela um "quadrado"
    formado pelo caractere * repetido diversas vezes. O
    tamanho do quadrado, ou seja, o número de asteriscos
    na linha e na coluna deve ser informado pelo usuário.


    O enunciado está ambíguo... ele não diz necessariamente que precisa ler a linha e a coluna do usuário, ou seja, não dá para dizer que está errado, mas ao mesmo tempo fica estranho porque, como dito, todo quadrado tem lados iguais....

    Em fim, sugiro criar 2 programas. Um do jeito que está (corrigindo a indentação e o lance do valor inicial das variável) e outro com uma "retificação do enunciado", ou seja, esse "quadrado" pode ser subentendido como um "quadrilátero".

    Eu tenho a impressão que o certo seria apenas ler o lado mesmo... e criar um programa com as linhas e colunas iguais (use L ou X)... mas na dúvida tenha os 2! Não custa nada.

    Caso concorde, poste os dois códigos completos para darmos uma revisada ou só um deles mesmo.

     

     

    No aguardo.
     

    adicionado 6 minutos depois

    Adendo 1: fiz uma pequena correção no código.
    Adendo 2: como está utilizando uma variável para representar o caractere escolhido (ch), use-a também lá no primeiro printf(), ou seja, ou use "*" lá printf() dentro do for.. Entende? (melhor primeira opção)

    adicionado 10 minutos depois

    Adendo 3: se você der um espaço para imprimir os "*", ficarão melhor alinhados... terá um aspecto de quadrado. (só não sei se pode, rs). Qualquer coisa, testa e vê como fica. Na hora de apresentar comentar sobre isso...

    Editado por Simon Viegas
    • Curtir 2

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Salve, pessoal.
    Tendo em vista a última mensagem do @Simon Viegas, fiz dois programas, uma para imprimir um quadrado e outro para um quadrilátero. Segue:

     

    Quadrado:

    #include<stdio.h>
    #include<ctype.h>
    int main(){
    	int i,j,x,y;
    	char ch='*';
    	printf("__________________________________________________\n");
    	printf("Programa que imprime um QUADRADO em forma de '%c'\n", ch);
    	printf("--------------------------------------------------\n");
    	printf("De o numero de linhas e colunas do quadrado: ");
    	scanf("%i", &x);
    	printf("\n");
    		for(i=1;i<=x;i++){
    			for(j=1;j<=x;j++){
    				printf(" %c", ch);
    			}
    			printf("\n");
    		}
    }

    Quadrilátero:

    #include<stdio.h>
    #include<ctype.h>
    int main(){
    	int i,j,x,y;
    	char ch='*';
    	printf("__________________________________________________\n");
    	printf("Programa que imprime um QUADRILATERO em forma de '%c'\n", ch);
    	printf("__________________________________________________\n");
    	printf("De o numero de linhas: ");
    	scanf("%i", &x);
    	printf("De o numero de colunas: ");
    	scanf("%i", &y);
    	printf("\n");
    		for(i=1;i<=x;i++){
    			for(j=1;j<=y;j++){
    				printf(" %c", ch);
    			}	
    			printf("\n");
    		}
    }

    Observações:

    @devair1010, eu tentei fazer for(i = 0;i < x;i++), no entanto não deu certo. Se eu coloco, por exemplo, o numero de linhas do quadrado igual a 4, ele imprime 3 '*'.
    @Simon Viegas, seus adendos foram bons. O "espaço" deu uma noção melhor do desenho.

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Olá @dondney.

     

    1) CUIDADO COM A INDENTAÇÃO

    O for deve ficar na mesma direção do resto do programa, ex.:

    #include<stdio.h>
    #include<ctype.h>
    int main(){
    	int i,j,x,y;
    	char ch='*';
    	printf("__________________________________________________\n");
    	printf("Programa que imprime um QUADRILATERO em forma de '%c'\n", ch);
    	printf("__________________________________________________\n");
    	printf("De o numero de linhas: ");
    	scanf("%i", &x);
    	printf("De o numero de colunas: ");
    	scanf("%i", &y);
    	printf("\n");
    	for(i=1;i<=x;i++){
    		for(j=1;j<=y;j++){
    			printf(" %c", ch);
    		}
    		printf("\n");
    	}
    }

     

     

     

    2) VALOR INICIAL DE VARIÁVEL

    31 minutos atrás, dondney disse:

    @devair1010, eu tentei fazer for(i = 0;i < x;i++), no entanto não deu certo. Se eu coloco, por exemplo, o numero de linhas do quadrado igual a 4, ele imprime 3 '*'.

    Testei aqui e funcionou normalmente. Para seu contexto, teoricamente é a mesma coisa. As duas formas funcionam... veja, vamos supor que temos x=5. Se i começar com 0, para o for ter 5 loops (voltas), teria que executar o 0, 1, 2 ,3 e 4, ou seja, "uma posição antes do valor de x). Logo, tirando o "=", ficam apenas "i<x" (seria o mesmo que i<=x-1). Já se começar com i=1, terá que ir de 1 a 5, daí ficando "i<=x".

     

    Em 05/11/2017 às 19:31, devair1010 disse:

    então fazendo desse modo quando  você pegar um código para estudar você já estará acostumado . e isso por que nos vetores a posição inicial é zero também .

    No caso, usar começando com 0, seria para estimular/acostumar usar a forma padrão da maioria das linguagens, ou seja, tornar natural o conceito que o "primeiro valor" é o 0, não o 1. Obs.: está referência é para o funcionamento interno. A visão do usuário é começando com 1 mesmo... entende? "A primeira posição do para o usuário é a 1, mas internamente estaria acessando a posição 0 do vetor". Isso costuma ser transparente (o usuário não precisa saber disso. Não há necessidade... é algo "técnico").

     

     

     

    3) USO DE ESPAÇOS

    48 minutos atrás, dondney disse:

    @Simon Viegas, seus adendos foram bons. O "espaço" deu uma noção melhor do desenho.

    Vale salientar que tecnicamente pode está deixando de ser um "quadrado". É interessante essa noção... seria bom "discutir" com o professor/facilitador. O "espaço" não faz parte do processo em si... está apenas como um recurso estético. Não importa o que é "visto", mas o que ele representa. Digo isso com o mesmo sentido do uso do "0" citado acima, vejam essa analogia:

     

    quadrado.jpg

     

    Essa figura é um quadrado... pois está lá que são ângulos retos, e todos os lados tem o mesmo tamanho. Entende? Essas informações poderia está no outro local indicando isso. É comum ocorrer em provas e concurso. Onde os gráficos NÃO NECESSARIAMENTE estão em escala ou representam os dados perfeitamente. Servem apenas para "ilustrar". Se tá escrito que é um quadrado, é um quadrado.

     

    OBS.: sugiro deixar com o espaço mesmo, apenas estou fazendo uma observação do que interpreto.

     

     

    ***

     

    No aguardo.

    • Curtir 2

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Mais uma vez só tenho a agradecer.

     

    18 minutos atrás, Simon Viegas disse:

    2) VALOR INICIAL DE VARIÁVEL

    1 hora atrás, dondney disse:

    @devair1010, eu tentei fazer for(i = 0;i < x;i++), no entanto não deu certo. Se eu coloco, por exemplo, o numero de linhas do quadrado igual a 4, ele imprime 3 '*'.

    Testei aqui e funcionou normalmente. Para seu contexto, teoricamente é a mesma coisa. As duas formas funcionam... veja, vamos supor que temos x=5. Se i começar com 0, para o for ter 5 loops (voltas), teria que executar o 0, 1, 2 ,3 e 4, ou seja, "uma posição antes do valor de x). Logo, tirando o "=", ficam apenas "i<x" (seria o mesmo que i<=x-1). Já se começar com i=1, terá que ir de 1 a 5, daí ficando "i<=x".

     

    De fato, não prestei atenção e deixei o "=".

     

    @Simon Viegas, vou ficar bem mais atento a indentação e a importância do valor inicial da variável ser "0", seguir o padrão é melhor. Obrigado por todas as observações.

    • Curtir 2

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Meu raciocínio:

    #include<stdio.h>
    #include<ctype.h>
    int main(){
    	int i,j,x,y;
    	char ch='*';
    	printf("__________________________________________________\n");
    	printf("Programa que imprime um QUADRADO em forma de '%c'\n", ch);
    	printf("--------------------------------------------------\n");
    	printf("De o numero de linhas e colunas do quadrado: ");
    	scanf("%i", &x);
    	printf("\n");
    		for(i=1;i<=x;i++){
    			for(j=1;j<=x;j++){
                    if(i == 1 || j == 1 || j == x || i == x)
                        printf(" %c", ch);
                    else
                        printf("  ");
    			}
    			printf("\n");
    		}
    }

     

    • Curtir 2

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Olá.

     

    @CiroboyBR, interessante essa interpretação. 

     

    @dondney, nesse sentido, a sugestão seria ter mais uma versão disponível.. ou seja, como pode existir essa ambiguidade na interpretação, seria interessante tê-las e "entregar" todas... ou tirar as antes dúvidas.

     

    Por favor, se possível, depois nos informe qual seria a certa.

     

     

    PS.: apenas para complementar, eu não sei dizer, mas meio que entendo que um quadrado se refere a toda superfície mesmo, ou seja, seria análogo a um círculo, onde o que conta é a superfície. Tanto que eles têm "área". Em detrimento da circunferência, onde este seria apenas a aresta*. Nesse sentido, o último desenho seria uma espécie de quadranferência :D. O que acham?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×