• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Guryonurb

~Qual é o seu Signo?~

12 mensagens neste tópico

Programinha que fiz na brincadeira para saber,mediante a introdução do dia e mês de aniversario, qual é o nosso signo e suas caracteristicas. :cheesygrin:

:eek:

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

main()
{
     
      
int x,y,op=1;
   do
   {
      system("cls");
      printf("\nQual e o dia do seu aniversario?");
      scanf("%d",&x);
      printf("\nQual e o mes do seu aniversario?"); 
      scanf("%d",&y);
      
      if (x>=21&&x<=31)
      {
          if (y==1)
          {
          printf("\nO seu signo e:Aquario\n");
          printf("\nO aquariano e simpatico, humanitario, honesto e totalmente leal.\n\n\n\n");
          system("pause");                                         
          }
          if(y==3)                
          {
          printf("\nO seu signo e:Aries\n");
          printf("\nSao aventureiros, energicos, pioneiros e valentes.\n\n\n\n");
          system("pause");                                        
          }
          
           if (y==4)
          {
          printf("\nO seu signo e:Touro\n");
          printf("\nSao Pacientes, persistentes, decididos e fiaveis.\n\n\n\n");
          system("pause");                                       
          } 
      }
          
      if (x>=1&&x<=21)
      {
          if(y==5)            
          {
          printf("\nO seu signo e:Touro\n");
          printf("\nSao Pacientes, persistentes, decididos e fiaveis.\n\n\n\n");
          system("pause");                                         
          }
          
          if (y==6)
          {
          printf("\nO seu signo e:Gemeos\n");
          printf("\nOs geminianos sao adaptaveis, versateis, eloquentes e carinhosos.\n\n\n\n");
          system("pause");                                         
          } 
      }
      
        if (x>=22&&x<=31)
        {
        if(y==5)                 
          {
          printf("\nO seu signo e:Gemeos\n");
          printf("\nOs geminianos sao adaptaveis, versateis, eloquentes e carinhosos.\n\n\n\n");
          system("pause");                                         
          }
          
          if (y==6)
          {
          printf("\nO seu signo e:Caranguejo\n");
          printf("\nOs cancerianos sao emotivos, carinhosos, protetores e simpaticos.\n\n\n\n");
          system("pause");                                         
          }        
        } 
      
      if (x>=1&&x<=23)
      {
          if(y==7)
          {
          printf("\nO seu signo e:Caranguejo\n");
          printf("\nOs cancerianos sao emotivos, carinhosos, protetores e simpaticos.\n\n\n\n");
          system("pause");                                         
          }
          
          if (y==8)
          {
          printf("\nO seu signo e:Leao\n");
          printf("\nO leonino e generoso, bondoso, fiel e carinhoso.\n\n\n\n");
          system("pause");                                         
          }
          
          if (y==9)
          {
          printf("\nO seu signo e:Virgem\n");
          printf("\nOs virgens costumam ser meticulosos, praticos e trabalhadores.\n\n\n\n");
          system("pause");                                         
          }
          
          if (y==10)
          {
          printf("\nO seu signo e:Libra\n");
          printf("\nOs librianos sao idealistas, pacificos, otimistas e romanticos.\n\n\n\n");
          system("pause");                                         
          }
      }
     
      if (x>=24&&x<=31)
       {
          if (y==7)
          {
              printf("\nO seu signo e:Leao\n");
              printf("\nO leonino e generoso, bondoso, fiel e carinhoso.\n\n\n\n");
              system("pause");                                         
          }
          
          if (y==8)
          {
          printf("\nO seu signo e:Virgem\n");
          printf("\nOs virgens costumam ser meticulosos, praticos e trabalhadores.\n\n\n\n");
          system("pause");                                         
          }
          
          if (y==9)
          {
          printf("\nO seu signo e:Libra\n");
          printf("\nOs librianos sao idealistas, pacificos, otimistas e romanticos.\n\n\n\n");
          system("pause");                                         
          }
          
          if (y==10)
          {
          printf("\nO seu signo e:Escorpiao\n");
          printf("\nO escorpiao e emotivo, decidido, poderoso e apaixonado.\n\n\n\n");
          system("pause");                                         
          } 
          
       }
      
      if (x>=1&&x<=22)
      {
          if(y==11)
          {
          printf("\nO seu signo e:Escorpiao\n");
          printf("\nO escorpiao e emotivo, decidido, poderoso e apaixonado.\n\n\n\n");
          system("pause");                                         
          }
          
          if (y==12)
          {
          printf("\nO seu signo e:Sagitario\n");
          printf("\nOs sagitario sao intelectuais, honestos, sinceros e simpaticos.\n\n\n\n");
          system("pause");                                         
          }
      }
      
      if (x>=23&&x<=31)
      {
          if(y==11)
          {
          printf("\nO seu signo e:Sagitario\n");
          printf("\nOs sagitario sao intelectuais, honestos, sinceros e simpaticos.\n\n\n\n");
          system("pause");                                         
          }
          
          if (y==12)
          {
          printf("\nO seu signo e:Capricornio\n");
          printf("\nO capricorniano e ambicioso, disciplinado, pratico e prudente.\n\n\n\n");
          system("pause");                                         
          }
      }
      
      if (x>=1&&x<=20)
      {
      if(y==1)                
          {
          printf("\nO seu signo e:Capricornio\n");
          printf("\nO capricorniano e ambicioso, disciplinado, pratico e prudente.\n\n\n\n");
          system("pause");                                         
          }
          
          if (y==3)
          {
          printf("\nO seu signo e:Peixes\n");
          printf("\nPeixes e imaginativo, sensivel, amavel e tem compaixao.\n\n\n\n");
          system("pause");                                         
          }
          
          if (y==4)  
          {
          printf("\nO seu signo e:Aries\n");
          printf("\nSao aventureiros, energicos, pioneiros e valentes.\n\n\n\n");
          system("pause");                                        
          } 
      }
      
      if ((y==2)&&(x>=1&&x<=19))
      {
      printf("\nO seu signo e:Aquario\n");
      printf("\nO aquariano e simpatico, humanitario, honesto e totalmente leal.\n\n\n\n");
      system("pause");                                         
      }
      
      if ((y==2)&&(x>=20&&x<=31))
      {
      printf("\nO seu signo e:Peixes\n");
      printf("\nPeixes e imaginativo, sensivel, amavel e tem compaixao.\n\n\n\n");
      system("pause");                                         
      }
   }
   while (op==1);                 
}

 

     

:eek: :cheesygrin: :eek: :cheesygrin: :eek: :cheesygrin: :eek: :cheesygrin: :eek: :cheesygrin: :eek:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hmm, tá grande! :)

True xD

Isto é só uma sugestão Guryonurb, mas porque é que não pensas em factorizar um pouco o código ?

É que do ponto de vista da boa programação tens ai algumas coisas que podias mudar. Por exemplo, tens ai printfs repetidos (os mesmos prints para o mesmo signo em dois sítios) porque é que não usas funções para factorizar isso. Por exemplo

void printAquario() {
          printf("\nO seu signo e:Aquario\n");
          printf("\nO aquariano e simpatico, humanitario, honesto e totalmente leal.\n\n\n\n");
}

E depois nos sítios onde fazes os prints, chamas a função invés de fazeres os prints.

Isto não é (só) mariquice. Imagina que queres mudar o texto que aparece para cada signo. Terias, que para todos os signos, estar a mudar em dois sítios.

É uma questão de boa programação que é melhor que te comeces a habituar (não sei se és um programador novo ou não, mas diria que sim)

edit- E os nomes que dás as vars (x e y) também não são os melhores. O nome de uma variável deve reflectir aquilo que ela representa (neste caso, o dia e o mês). Mais uma vez, é uma questão de boa programação. Num programa pequeno como este não há grande problema, mas num programa grande ter uma variável chamada x, y, z, etc é de cortar os pulsos xD

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens razão Jpaires,obrigado pelas dicas.

Comecei a programar a mais ou menos mês e meio e estou a adorar.

já criei as funções e fiquei só com um printf por signo pois,como muito bem explicaste

se for preciso alterar o texto só é necessario alterar num sitio.

:eek:

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

//Prototipo das funções

void Aquario();
void Carneiro();
void Touro();
void Gemeos();
void Caranguejo();
void Leao();
void Virgem();
void Libra();
void Escorpiao();
void Sagitario();
void Capricornio();
void Peixes();
//Fim prototipo das funções

main()
{
   int dia,mes,op=1;
   do
   {
              
      system("cls");
      printf("\nQual e o dia do seu aniversario?");
      scanf("%d",&dia);
      printf("\nQual e o mes do seu aniversario?"); 
      scanf("%d",&mes); 
      
      if (dia>=21&&dia<=31)
      {
          if (mes==1)
          {
           Aquario();                                      
          }
          if(mes==3)                
          {
           Carneiro();                          
          }
          if(mes==4)
          {
           Touro();               
          } 
      }
          
      if ((mes==4)&&(dia>=1&&dia<=20))  
      {
       Carneiro();                                       
      } 
      
      if (dia>=1&&dia<=21)
      {
          if(mes==5)            
          {
           Touro();                                       
          }
          
          if (mes==6)
          {
           Gemeos();                            
          } 
      }
      
        if (dia>=22&&dia<=31)
        {
        if(mes==5)                 
          {
           Gemeos();                                        
          }
        if(mes==6)
          {
           Caranguejo();                                      
          }        
        } 
      
      if (dia>=1&&dia<=23)
      {
          if(mes==7)
          {
           Caranguejo();                                       
          }
          if(mes==8)
          {
           Leao();                                        
          }
          if(mes==9)
          {
           Virgem();                                     
          }
          if(mes==10)
          {
           Libra();                                       
          }
      }
      if (dia>=24&&dia<=31)
       {
          if(mes==7)
          {
           Leao();                                         
          }
          if(mes==8)
          {
           Virgem();                                        
          }
          if(mes==9)
          {
           Libra();                                        
          }
          if(mes==10)
          {
           Escorpiao();                                    
          } 
       }
      
      if (dia>=1&&dia<=22)
      {
          if(mes==11)
          {
           Escorpiao();                                        
          }
          if (mes==12)
          {
           Sagitario();                                      
          }
      }
      
      if (dia>=23&&dia<=31)
      {
          if(mes==11)
          {
           Sagitario();                                        
          }
          if (mes==12)
          {
           Capricornio();                                        
          }
      }
      
      if (dia>=1&&dia<=20)
      {
      if(mes==1)                
          {
           Capricornio();                                       
          }
          if (mes==3)
          {
           Peixes();                                       
          }
      }
      if ((mes==2)&&(dia>=1&&dia<=19))
      {
       Aquario();                                       
      }
      
      if ((mes==2)&&(dia>=20&&dia<=31))
      {
       Peixes();                                       
      }
   }
   while (op==1);                 
}

//Funções do programa
void Aquario()
{
          printf("\nO seu signo e:Aquario\n");
          printf("\nO aquariano e simpatico, humanitario, honesto e totalmente leal.\n\n\n\n");
          system("pause");
}

void Carneiro()
{
          printf("\nO seu signo e:Carneiro\n");
          printf("\nSao aventureiros, energicos, pioneiros e valentes.\n\n\n\n");
          system("pause");                  
} 

void Touro()
{
          printf("\nO seu signo e:Touro\n");
          printf("\nSao Pacientes, persistentes, decididos e fiaveis.\n\n\n\n");
          system("pause");                       
}

void Gemeos()
{
         printf("\nO seu signo e:Gemeos\n");
         printf("\nOs geminianos sao adaptaveis, versateis, eloquentes e carinhosos.\n\n\n\n");
         system("pause");            
} 

void Caranguejo()
{
          printf("\nO seu signo e:Caranguejo\n");
          printf("\nOs cancerianos sao emotivos, carinhosos, protetores e simpaticos.\n\n\n\n");
          system("pause");
} 

void Leao()
{
          printf("\nO seu signo e:Leao\n");
          printf("\nO leonino e generoso, bondoso, fiel e carinhoso.\n\n\n\n");
          system("pause");    
}
void Virgem()
{
          printf("\nO seu signo e:Virgem\n");
          printf("\nOs virgens costumam ser meticulosos, praticos e trabalhadores.\n\n\n\n");
          system("pause"); 
} 

void Libra()
{
          printf("\nO seu signo e:Libra\n");
          printf("\nOs librianos sao idealistas, pacificos, otimistas e romanticos.\n\n\n\n");
          system("pause");   
}

void Escorpiao()
{
          printf("\nO seu signo e:Escorpiao\n");
          printf("\nO escorpiao e emotivo, decidido, poderoso e apaixonado.\n\n\n\n");
          system("pause");        
} 

void Sagitario()
{
          printf("\nO seu signo e:Sagitario\n");
          printf("\nOs sagitario sao intelectuais, honestos, sinceros e simpaticos.\n\n\n\n");
          system("pause");       
} 

void Capricornio()
{
          printf("\nO seu signo e:Capricornio\n");
          printf("\nO capricorniano e ambicioso, disciplinado, pratico e prudente.\n\n\n\n");
          system("pause");     
}

void Peixes()
{
          printf("\nO seu signo e:Peixes\n");
          printf("\nPeixes e imaginativo, sensivel, amavel e tem compaixao.\n\n\n\n");
          system("pause");    
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como o KiNgPiTo disse, quando meteres código usa as opções especiais para colorir o código.

Basta que selecciones o código (enquanto estás a escrever o post), e clica no caixa "Insert code" e escolhe C.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ainda podes melhorar significativamente o código. Ainda tens muito printf repetido ("O seu signo e") e também fazes as comparações da data de uma maneira mais inteligente. :)

Pesquisa também sobre function pointers e jump tables, uma técnica muito poderosa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pesquisa também sobre function pointers e jump tables, uma técnica muito poderosa.

Sinceramente, se ele programa há menos de 2 meses não acho boa ideia que se vá meter nisso (jump tables). Mas isso é uma opinião minha. De resto, no caso geral também não acho que seja uma ideia lá muito boa, mas isso sou eu.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sabia pôr a cor para a proxima já sei.Obrigado

Quero ainda agradecer as dicas e pedir se podem dar um exemplo com as function pointers e jump tables que eu programo a pouco tempo mas quero muito aprender.

:eek:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas pessoal,

Peguei na ideia do Guryonurb (espero que não te importes) e fiz também este programa dos signos.

Os meus conhecimentos de programação são muito reduzidos, pelo que gostava que comentassem o meu código e me dissessem se o posso melhorar e como.

Gostava também de fazer um ciclo em que o programa se repeti-se sempre até ser primida a tecla "ESC". Já fiz isto uma vez, mas não sei desse programa e já não me lembro como fiz.

Tem é muito "if"  :)

Depois também quero melhorar um bocado o aspecto em que é representado.

Aqui fica o código:

#include <stdio.h>

main()
{
int dia, mes;

printf("\t\tDescubra o seu signo!!!\n\n");

printf("Introduza o dia de aniversario: ");
scanf("%d", &dia);
printf("Introduza o mes de aniversario: ");
scanf("%d", &mes);

if (dia >= 21 && mes == 3 || dia <= 20 && mes == 4)
	printf("Carneiro\n");
if (dia >= 21 && mes == 4 || dia <= 20 && mes == 5)
	printf("Touro\n");
if (dia >= 21 && mes == 5 || dia <= 20 && mes == 6)
	printf("Gemeos\n");
if (dia >= 21 && mes == 6 || dia <= 22 && mes == 7)
	printf("Carangueijo\n");
if (dia >= 23 && mes == 7 || dia <= 22 && mes == 8)
	printf("Leao\n");
if (dia >= 23 && mes == 8 || dia <= 22 && mes == 9)
	printf("Virgem\n");
if (dia >= 23 && mes == 9 || dia <= 22 && mes == 10)
	printf("Balanca\n");
if (dia >= 23 && mes == 10 || dia <= 21 && mes == 11)
	printf("Escorpiao\n");
if (dia >= 22 && mes == 11 || dia <= 21 && mes == 12)
	printf("Sagitario\n");
if (dia >= 22 && mes == 12 || dia <= 19 && mes == 1)
	printf("Capricornio\n");
if (dia >= 20 && mes == 1 || dia <= 18 && mes == 2)
	printf("Aquario\n");
if (dia >= 19 && mes == 2 || dia <= 20 && mes == 3)
	printf("Peixes\n");	

getch();
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

C não é o meu forte, mas talvez tenha excesso de ifs sim, podias ter feito com if ... else if, porque dessa forma, embora não seja nada de extraordinário, vai acabar por avaliar todas as expressões no melhor e no pior caso, enquanto que com else if, no melhor caso (ficar-se apenas pela primeira expressão, apenas iria avaliar o caso do carneiro.

Ainda gostava de ver um snippet/função disto, sem recurso a tanto if, fica o desafio :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E se metesse "dia" e "mes" numa variável só??

(como na ordenação de datas, o valor do mês é mais significativo, colocamos ele como algarismo mais significativo)

dia_mes = mes * 100 + dia

e então arranjamos uma função matemática que retorna o número do signo da pessoa, baseada nesse número.

nesse caso, meti os valores no graph e obitve:

f(x) = 0.00997117*x - 1.868603

Agora fica fácil:

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

int numeroSigno(int data)
{
if (data < 119)
	return 0;
else if (data > 1221)
	return 0;
else
	//a tal função
	return floor(0.009971706*data - 0.1868603);
}

inline
int juntarData(int dia, int mes)
{
return mes*100 + dia;
}

int main(int argc, char *argv[])
{
char *signos[12] =
{
"Capricornio",
"Aquario",
"Peixes",
"Carneiro",
"Touro",
"Gemeos",
"Carangueijo",
"Leao",
"Virgem",
"Balanca",
"Escorpiao",
"Sargitario"
};

for (;
{
int dia, mes, data;

	printf("Para cancelar, digite 0.\n");
	printf("Digite o dia de nascimento: ");
	scanf("%d%*c", &dia);
	printf("Digite o mes de nascimento: ");
	scanf("%d%*c", &mes);

	//se algum deles for zero, o resultado dessa conta será sempre zero!
	if (dia*mes == 0)
		break;

	data = juntarData(dia, mes);
	printf("O seu signo e: %s\n\n", signos[numeroSigno(data)]);	
}


return 0;
}

Não esqueçam da opção "-lm" na hora de compilar, para linkar com a biblioteca math

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora