Tarde!
Preciso fazer um programa no qual, dado uma certa data (dia/mes/ano), o programa teria que me retornar qual dia ele corresponde dentro daquele ano. Para isso, tive que passar por estes critérios:
- verificar anos bissextos no intervalo de 1900 até 2100;
- verificar meses com 30/31 dias (além de fevereiro)
Consegui implementar os intervalos de anos bissextos e a fórmula para achar o dia correspondente, mas o furo ainda consiste em determinar se tal mês tem 30 ou 31 dias.
A ordem dos dados são: 1-dia, 2-mes, 3-ano.
Como seria um "filtro de meses somente final-31" caso eu digite, por exemplo, dia 31?
PS: não tenho o código comigo agora =/
Grato a todos.
- Home
- >
- Fórum
- >
- Profissional
- >
- Programação, Sc...
- >
- Verificar dia do mês (C/C...
tente usando o switch/case
int mes, anoBissexto(pode ser bool),maxDays
switch(mes)
{
case 1:
maxDays = 31;
case 2:
if(anoBissexto)
{
maxDays = 29;
}else
{
maxDays = 30;
}
case 3:
...
case 12:
}
if(day <= maxDays)
{
valido
}
else
{
inválido
}
olha só, vc não precisa verificar os dias dos meses não, basta aplicar a formula abaixo:
http://br.answers.yahoo.com/question/index?qid=20061006142050AANDiyb
ou essa outra:
http://www.pobrevirtual.com.br/default/art.php?art=51
Casa:MS Windows Seven (empolgando)
Trampo: MS Windows Seven (desapontando)
Quer um Fórum exclusivamente sobre Open Source? Aqui: www.linuxbsd.com.br/forum
Eu olhei os sites que o jcferranti mandou, muito bom mesmo, agradeço a dica..
Mas as fórmulas ensinam a determinar o dia da semana dentro do ano, e não qual dia ordinalmente ele representa naquele ano.. tem algum complemento que ensine a determiná-lo apartir dessa fórmula?
Esses tópicos podem te ajudar
https://www.hardware.com.br/comunidade/data-validar/794196/
https://www.hardware.com.br/comunidade/descobrir-dias/226116/
https://www.hardware.com.br/comunidade/entender-dia/883496/
Bart Simpson: - Olha, as casas continuam pegando fogo e as pessoas continuam doentes. Os verdadeiros heróis são os Schwarzenegger's, os Stallone's, e, em menores proporções, os Vandame's..."
marciohp disse: Mas as fórmulas ensinam a determinar o dia da semana dentro do ano, e não qual dia ordinalmente ele representa naquele ano.. tem algum complemento que ensine a determiná-lo apartir dessa fórmula?
ops! entendi errado. entendi que queria o dia da semana.
Bom para saber qual é o dia dentro do ano, basta subtrairuma data da outra, veja:
10/02/2009 - 01/01/2009 = dia dentro do ano
o problema é que vc teria que montar as funções que fazer esse calculo ou achar bibliotecas que trabalham com datas.
Casa:MS Windows Seven (empolgando)
Trampo: MS Windows Seven (desapontando)
Quer um Fórum exclusivamente sobre Open Source? Aqui: www.linuxbsd.com.br/forum
Veja se isso ajuda:
[PHP]
#include
#include
int main(void){
int p_mes[]= {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int dia=0, mes=0, ano=0, num_dias=0, i, resp;
//pede os dados
do{
system("cls");
printf("\nInforme o dia:");
scanf("%d%c",&dia);
printf("\nInforme o mes:");
scanf("%d%c",&mes);
printf("\nInforme o ano:");
scanf("%d%c",&ano);
//testa se o ano é bisexto
if (ano%4 == 0 && !(ano%100 == 0 && ano%400 != 0))
p_mes[1]=29;
//calcula a quantidade de dias decorridos
for (i=0; i<(mes - 1); i++)
num_dias += p_mes[i];
num_dias += dia;
printf("\nA data especificada equivale ao [ %d ] dia do ano.\n",num_dias);
printf("\nPara terminar digite [ 0 ] zero: ");
scanf("%d%c",&resp);
}while(resp);
return 0;
}
[/PHP]
magavilha, cara..
só ficou faltando 2 itens...
1) quando testamos uma data com o ano bissexto, ele não reseta o "29 de fevereiro", por isso coloquei um else na p_mes[1] voltando pra 28, caso o usuário informe um ano não-bissexto.
2) zerei a variável num_dias, senão ela se tornará acumulador, se o usuário não sair do programa.
[CODE=rich]#include
#include
int main(void){
int p_mes[]= {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int dia=0, mes=0, ano=0, num_dias=0, i, resp;
//pede os dados
do{
system("cls");
printf("\nInforme o dia:");
scanf("%d%c",&dia);
printf("\nInforme o mes:");
scanf("%d%c",&mes);
printf("\nInforme o ano:");
scanf("%d%c",&ano);
//testa se o ano é bisexto
if (ano%4 == 0 && !(ano%100 == 0 && ano%400 != 0))
p_mes[1]=29;
else
p_mes[1]=28;
//calcula a quantidade de dias decorridos
for (i=0; i<(mes - 1); i++)
num_dias += p_mes[i];
num_dias += dia;
printf("\nA data especificada equivale ao [%d] dia do ano.\n",num_dias);
num_dias=0;
printf("\nPara terminar digite [ 0 ] zero: ");
scanf("%d%c",&resp);
}while(resp);
return 0;
}[/CODE]
Estou voltando a me aprofundar no C/C++ e agora quero aprender C#, desde a época da facul, me familiarizei mto com essa linguagem. Qualquer dúvida eu venho aqui torrar os neurônios de vcs novamente.
Valeu a todos pela cooperação.