Ir ao conteúdo

Posts recomendados

Postado

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
Postado

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

Postado

@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

  • Curtir 1
Postado

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

  • Curtir 1
  • Membro VIP
Postado

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
Postado

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

  • Curtir 1
  • Membro VIP
Postado

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
Postado

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
Postado

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

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

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.

 

  • Curtir 1
Postado
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!

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

  • Curtir 2
Postado

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

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
Postado

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

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

 

  • Membro VIP
Postado

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?

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