Jump to content
Guryonurb

~Qual é o seu Signo?~

Recommended Posts

Guryonurb

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:

😲

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

 

     

😲 :cheesygrin: 😲 :cheesygrin: 😲 :cheesygrin: 😲 :cheesygrin: 😲 :cheesygrin: 😲

Share this post


Link to post
Share on other sites
jpaires

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

Share this post


Link to post
Share on other sites
Guryonurb

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.

😲

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

Share this post


Link to post
Share on other sites
Triton

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.


<3 life

Share this post


Link to post
Share on other sites
Triton

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.


<3 life

Share this post


Link to post
Share on other sites
jpaires

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.

Share this post


Link to post
Share on other sites
Guryonurb

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.

😲

Share this post


Link to post
Share on other sites
Nuno_Martins

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

Share this post


Link to post
Share on other sites
softklin

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


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
VictorCacciari

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


"#define QUESTION ((bb) || !(bb))" —— Shakespeare"Para obter a resposta certa, é preciso fazer a PERGUNTA CERTA." —— Albert Einstein

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.