View Full Version : Figuras Geometricas Em C


djn3ox
11-06-2008, 11:51
Boas .
Gostaria de me tirassem uma duvida .
Como posso fazer em C , uma cruz suasticas ( Aquela Nazi ) .
Tenho que fazer 6 figuras, 4 delas ja estão feitas.
Deixei as mais dificeis para o fim , que são a Cruz Suastica e um diamante com um quadrado la dentro .

Alguem me poderia ajudar?

Aqui fica o codigo de o rectangulo ( Apenas a Função ) :

void rectangulo ()
{
int linha,coluna,cont1,cont2;
char letra;

system("cls");
printf ("Introduza a Linha a Coluna e o Caracter : \n");
scanf ("%d %d %c",&linha,&coluna,&letra);

for (cont1=0;cont1<linha;cont1++)
{
printf ("%c",letra);
if (cont1==0||cont1==(linha-1))
{
for (cont2=1;cont2<(coluna-1);cont2++)
{
printf ("%c",letra);
}
}
else
{
for (cont2=1;cont2<(coluna-1);cont2++)
{
printf (" ");
}
}
printf ("%c\n",letra);
}

}

MPalhas
11-06-2008, 16:09
e qual é o problema? se soubeste fazer isso o resto não deverá ser muito mais complicado (estou a falar de cabeça, nunca experimentei)

nesse rectangulo, pediste o comprimento, largura e o caracter usado

para a cruz basta pedires uma medida (porque se não me engano aquilo tem 8 rectas todas iguais
pode dar um bocado de trabalho fazer os ciclos para a desenhar, mas acho que não deve ser muito complicado.

o diamante com o quadrado, que medidas queres pedir? podias por exemplo, pedir apenas a largura do diamante, e fazer uma coisa tipo piramide. para um diamante de largura 5 ficava:

a
aaa
aaaaa
aaa
a

e depois bastava desenhar um quadrado á volta disto

agora não estou com muito tempo mas se ainda não tiveres conseguido daqui a pouco em tento fazer estes dois, até parece um exercicio engraçado

djn3ox
12-06-2008, 00:18
Pois , o problema é fazer os ciclos da cruz suastica.
Mas nessa nao vou pedir nem altura nem comprimento, apenas o caracter a uzar.
Por exemplo

Introduza o caracter da Cruz :
R

http://img113.imageshack.us/img113/2930/semttulows2.jpg

djn3ox
12-06-2008, 11:34
Tentei fazer hoje uma mira, que em principio ou fica a mira ou o diamante.
E epa, no final saiu-me tipo uma minhoca =\

Ve aqui .

Interface do programa :
http://img502.imageshack.us/img502/9069/66838524pb3.jpg


Ao executar a Mira , sai -me genero uma minhoca =\
http://img444.imageshack.us/img444/7052/85576096uw6.jpg


Tinha que ficar genero assim.

X
X
X
XXXXXXX
X
X
X


Fica aqui o codigo da Mira (apenas Função) :


void mira ()
{
int linha,coluna,cont1,cont2;
char letra;

system("cls");
printf ("Introduza o caracter : \n");
scanf ("%c",&letra);

for (coluna=0;coluna<5;coluna++)
{
printf (" ");
if ((coluna==2) || (linha==2))
{
printf ("%c\n",letra);
}

for (linha=0;linha<5;linha++)
{
printf (" ");
if ((coluna==2) || (linha==2))
{
printf ("%c\n",letra);
}
}
}

}

MPalhas
12-06-2008, 11:46
ainda não testei isso, mas parece-me que estás a tentar comparar a variavel linha sem sequer lhe dar um valor primeiro

djn3ox
12-06-2008, 11:52
O tamanho , nao vai ser pedido, vai ser igual a 5.
5 X para cima
5 X para o lado

Tenho que atribuir o valor a uma variavel ?

MPalhas
12-06-2008, 11:56
não, o que eu estava a dizer é que, na primeira passagem pelo primeiro for, ao fazer isto:
if ((coluna==2) || (linha==2))

a variavei linha ainda não tem nenhum valor. o visual studio queixa-se disso, não sei se o teu compilador também

mas para a mira, aqui tens, simples e eficaz:

void mira () {
int linha,coluna;
char letra;

system("cls");
printf ("Introduza o caracter : \n");
scanf ("%c",&letra);
printf("\n\n");
for (linha=0; linha<5; linha++) {
for (coluna=0; coluna<5; coluna++) {
if (linha==2 || coluna==2)
printf("%c", letra);
else
printf(" ");
}
printf("\n");
}
}

o que tu tinhas mal eram os ciclos. estavas a passar primeiro pelas colunas e depois pelas linhas. tem que ser ao contrário

djn3ox
12-06-2008, 12:03
Brigadao, agora ja puz isso entre matrizes , para ficar como nos critérios pedidos .
Estava a tentar voltar agora uma piramide, para fazer um diamante .
Ja meto aqui o codigo .

Aqui fica a piramide.
Nao percebo uma cena. ele o Executavel Abre.
Mas quando vou executar no compilador , simplesmente aparece Prima qualquer tecla para continuar.

Aqui fica o codigo .


main()
{

int valor,a,b,c,h;
a=9;

while (valor>=a)
{
h=a;
if (a==h)
{
if (a==0) printf (" ");
c=0;
b=h;

while (c<h)
{
printf ("%d",c);
b=b-1;
c=h-b;
}
if (c==h)
{
printf ("%d",h);
}
b=0;
while (b<h)
{
b=b+1;
c=h-b;
printf ("%d",c);
}
}
printf ("\n");
if (h==0) printf (" ");
if (h==1) printf (" ");
if (h==2) printf (" ");
if (h==3) printf (" ");
if (h==4) printf (" ");
if (h==5) printf (" ");
if (h==6) printf (" ");
if (h==7) printf (" ");
if (h==8) printf (" ");
a++;
}

printf ("\n");
printf (" Base\n");

system("PAUSE");

}

A idea era pegar nesse codigo que faz a piramide, e depois inverter, mas agora como fasso isso ?
Copio outravez as funcoes e meto -- ?

djn3ox
12-06-2008, 23:04
instalei agora o visual studio para ver se consigo corrigir esse programa da piramide e inverte lo, porque o usava era o Dev C e simplesmente nao me da erro nenhum.

djn3ox
13-06-2008, 10:47
Acabei agora mesmo de fazer o diamante.

Aqui fica o codigo (Apenas Função):


void diamante()
{
int linha,coluna;
char letra,x[5][5];

system("cls");
printf ("Introduza o caracter : \n");
scanf ("%c",&letra);
printf("\n\n");

for (linha=0; linha<5; linha++)
{
for (coluna=0; coluna<5; coluna++)
{
if ((linha==2 || coluna==2) || (linha==1 && coluna==3) || (linha==3 && coluna==1) || (linha==3 && coluna==3) || (linha==1 && coluna==1))
{
x[linha][coluna]=letra;
}
else
{
x[linha][coluna]=' ';
}
}
}
for (linha=0; linha<5; linha++)
{
for (coluna=0; coluna<5; coluna++)
{
printf ("%c",x[linha][coluna]);
}
printf("\n");
}

}

djn3ox
13-06-2008, 15:23
Peguei no codigo do diamante , para fazer o ultimo desenho , a Cruz Suastica ( NAzi ) .
So mudei uma cena, que foi chamar a matriz depois la em baixo , que foi pedido .

Agora é o seguinte, ja fiz a estructura e meti no If , o desenho do diamante para testar o programa.

MAs acontence, que o programa nao faz nada, simplesmente nao desenha.

Aqui fica o codigo

void cruz()
{
char x[7][7],letra;
int linha,coluna;

system("cls");
printf ("Introduza o caracter : \n");
scanf ("%c \n\n",&letra);

for (linha=0 ;linha<7 ;linha++)
{
for (coluna=0; coluna<7 ;coluna++)
{
if ((linha==2 && coluna==2) || (linha==1 && coluna==3) || (linha==3 && coluna==1) || (linha==3 && coluna==3) || (linha==1 && coluna==1))
{
x[linha][coluna]=letra;
}
else
{
x[linha][coluna]=' ';
}
}
}

for (linha=0 ;linha<7 ;linha++)
{
for (coluna=0 ;coluna<7 ;coluna++)
{
printf ("%c",x[linha][coluna]);
}
printf ("\n");
}
}