Logo Hardware.com.br
marciohp
marciohp Super Participante Registrado
729 Mensagens 6 Curtidas

Verificar dia do mês (C/C++)

#1 Por marciohp 12/05/2009 - 15:24
Tarde! legal.png

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.
Responder
jcferranti
jcferranti General de Pijama Registrado
4.7K Mensagens 162 Curtidas
#3 Por jcferranti
12/05/2009 - 17:10
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
marciohp
marciohp Super Participante Registrado
729 Mensagens 6 Curtidas
#5 Por marciohp
12/05/2009 - 18:45
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?
[i5 2500] [P8H67-M Pro] [2x4Gb Corsair Vengeance@1333] [Seagate 2Tb 7200 64Mb S3] [CM 690 KKN-5] [EVGA GTX680 P4-2682-KR] [XFX 750W Core-Edition] [LG 47" LED 3D] [MODISC Blue-Ray R/RW] [Win 10 Pro]
tpcvasco
tpcvasco General de Pijama Registrado
2.9K Mensagens 330 Curtidas
#6 Por tpcvasco
13/05/2009 - 00:16
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/
"Milhouse: - Médicos e bombeiros são heróis.
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..."
jcferranti
jcferranti General de Pijama Registrado
4.7K Mensagens 162 Curtidas
#7 Por jcferranti
13/05/2009 - 10:33
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
br_branco
br_branco Membro Senior Registrado
341 Mensagens 22 Curtidas
#8 Por br_branco
13/05/2009 - 12:53
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]
marciohp
marciohp Super Participante Registrado
729 Mensagens 6 Curtidas
#9 Por marciohp
13/05/2009 - 18:58
br_branco

magavilha, cara.. comemorando.gif
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. big_green.png
Valeu a todos pela cooperação.
[i5 2500] [P8H67-M Pro] [2x4Gb Corsair Vengeance@1333] [Seagate 2Tb 7200 64Mb S3] [CM 690 KKN-5] [EVGA GTX680 P4-2682-KR] [XFX 750W Core-Edition] [LG 47" LED 3D] [MODISC Blue-Ray R/RW] [Win 10 Pro]
Responder Tópico
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal