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:  
Entre para seguir isso  
Murrer

Ano Bissexto

Recommended Posts

e ae, rapazeada!? então... tenho que fazer um programa que receba os valores de dia, mes e ano e que faça os testes pra ver se os valores estão nos intervalos certos de dia(de 1 a 31, 1 a 30, 1 a 29 ou 1 a 28 dependendo se é bissexto ou não, e do mes do ano), de mes(1 a 12) e de ano(1900 a 2100)...

o que eu fiz foi isso aí... vários "do"s e "while"s porque é o que eu to estudando no momento...

mas acontece que quando eu escolho o ano 2011 por exemplo(não é bissexto), ele tá falando que é bissexto!

alguém sabe o que tá errado?


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

int main(){
int d, m, a, bissexto=0, cont=0, ndia;
do{
printf("Insira o ano(1900-2100): \n\n");
scanf("%d", &a);
if(a>2100||a<1900){
printf("\nFavor escolher um numero de 1900 a 2100. \n\n");
}
}while (a>2100||a<1900);
if ((a % 4 == 0) && ((a%400==0)||(a % 100 != 0))){
printf("Ano Bissexto! \n\n");
bissexto = 1;}

do{
printf("Insira o mes: \n\n");
scanf("%d", &m);
if (m>12||m<1){
printf("\nFavor escolher um numero de 1 a 12. \n\n");
}
}while (m>12||m<1);
REFAZ:
printf("Insira o dia do mes: \n\n");
scanf("%d", &d);
if(d>31||d<1){
printf("\nFavor escolher um numero de 1 a 31. \n\n");
goto REFAZ;}
if((m==4 || m==6 || m==9 || m==11) && (d>30||d<1)){
printf("\nFavor escolher um numero de 1 a 30. \n\n");
goto REFAZ;}
if(((bissexto==1)&&(m==2))&&((d<1)||(d>29))){
printf("\nFavor escolher um numero de 1 a 29. \n\n");
goto REFAZ;}
if(((bissexto==0)&&(m==2))&&((d<1)||(d>28))){
printf("\nFavor escolher um numero de 1 a 28. \n\n");
goto REFAZ;}

printf("\nA data é: %d/%d/%d\n", d, m, a);
if (bissexto == 0) printf("\nO ano nao e bissexto!\n\n");
else printf("\nO ano e bissexto!\n\n");

switch (m) {
case 1:
ndia=d;
break;
case 2:
ndia=31+d;
break;
case 3:
if(bissexto==1){
ndia=31+29+d;
} else {
ndia=31+28+d;
}
break;
case 4:
if(bissexto==1){
ndia=31+29+31+d;
} else {
ndia=31+28+31+d;
}
break;
case 5:
if(bissexto==1){
ndia=31+29+31+30+d;
} else {
ndia=31+28+31+30+d;
}
break;
case 6:
if(bissexto==1){
ndia=31+29+31+30+31+d;
} else {
ndia=31+28+31+30+31+d;
}
break;
case 7:
if(bissexto==1){
ndia=31+29+31+30+31+30+d;
} else {
ndia=31+28+31+30+31+30+d;
}

break;
case 8:
if(bissexto==1){
ndia=31+29+31+30+31+30+31+d;
} else {
ndia=31+28+31+30+31+30+31+d;
}
break;
case 9:
if(bissexto==1){
ndia=31+29+31+30+31+30+31+31+d;
} else {
ndia=31+28+31+30+31+30+31+31+d;
}
break;
case 10:
if(bissexto==1){
ndia=31+29+31+30+31+30+31+31+30+d;
} else {
ndia=31+28+31+30+31+30+31+31+30+d;
}
break;
case 11:
if(bissexto==1){
ndia=31+29+31+30+31+30+31+31+30+31+d;
} else {
ndia=31+28+31+30+31+30+31+31+30+31+d;
}
break;
case 12:
if(bissexto==1){
ndia=31+29+31+30+31+30+31+31+30+31+30+d;
} else {
ndia=31+28+31+30+31+30+31+31+30+31+30+d;
}
break;
}
printf("\nO dia do ano e: %d\n\n", ndia);
system("PAUSE");
return(0);
}

tai o código completo, mas to achando que ficou muito grande... tem como fazer mais simples?

Editado por Murrer
Código completo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Murrer,

Testei o seu código e não encontrei erro. testei vários anos diferentes, inclusive 2011 que você citou. O resultado sempre foi correto.

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

Entre para seguir isso  





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

×