Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

joao.palma

[RESOLVIDO] Contar os dias uteis entre 2 datas C++

Mensagens Recomendadas

joao.palma    0
joao.palma

Boa Tarde... :)

O meu problema é o seguinte:

Um funcionario só pode faltar X dias.

Esse funcionario pode tirar os dias todos de ferias ou ir tirando...

O que eu não sei é como vou contar os dias úteis  entre as 2 datas... :(

Estou a utilizar o Borland Developer Studio linguagem C++ :)

alguém me pode ajudar???

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
joao.palma    0
joao.palma

@TheDark

Contas os dias todos, e depois, a partir do 1º fim de semana, por cada 7 dias, retiras 2. Isto sem contar com feriados.

Podes-me dizer como faço isso em c++?? É que eu sou novo em c++... Ainda não sei muito bem as funções...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Aqua Costa    0
Aqua Costa

// diferença entre as duas datas
int dif;
// numero de semanas
int nsem;
// numero a subtrair
int nsub
// numero dias uteis
int duteis;

//calcula numero de semanas
nsem = dif/7;

// calcula numero de dias a subtrair
nsub = nsem * 2;

// calcula numero de dias uteis
duteis = dif - nsub

como és novo em c++ não usei funções, fiz o código mas simples que consegui  :P

mas não está totalmente correcto, pois este código está simples de mais, pois apenas funciona com o numero de dias 7,14,21, etc, se quiseres que te ajude a desenvolver é só pedir

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
joao.palma    0
joao.palma

@Aqua Costa

Obrigado...

tambem ja tava a pensar em fazer um ciclo e verificar se era dia de semana ou fim de semana ou feriado...

Tipo:

Para data1 ate data2 fazer

if (dayofweek(strtodate(edit1.text)))=1 then

{

    dif=dif-1

    else

      if (dayofweek(strtodate(edit1.text)))=7 then

          dif=dif-1

}

e depois criar uma tabela para feriados e verificar os feriados.... o que achais deste codigo?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Cybernavigator    0
Cybernavigator

Não sei se funciona mesmo com a syntax correcta.

Vou-te explicar uma coisa sobre o c++, só usas "=" se estiveres a atribuir valores, se queres comparar usas "=="

depois, (desmintam-me se tiver enganado) no c++ não usas then, e se apenas queres retirar uma unidade ao dif, podes fazer só dif--; ou --dif;

ainda que o código funciona-se, com tantos erros não executava, o código corrigido é

if (dayofweek(strtodate(edit1.text))==1)
    dif--;
else
    if (dayofweek(strtodate(edit1.text))==7)
        dif--;

Ainda assim acho que deverias ponderar usar apenas contas para o teu caso, se tens o  numero de dias retiras apenas fins de semana e feriados. Penso ser mais simples para uma futura compreensão.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
joao.palma    0
joao.palma

Se não estou em erro esta o que esta função faz é:

Da o numero da semana a partir de uma data. Retorna de 1 a 7, sendo que 1 é domingo e 7 é sábado...

Ex.  26/02/2009 retorna 5! ou seja quinta-feira...

http://publib.boulder.ibm.com/infocenter/iadthelp/v7r0/index.jsp?topic=/com.businessobjects.integration.eclipse.designer.doc/designer/Functions169.html

http://msdn.microsoft.com/en-us/library/system.dayofweek.aspx

http://docserver.userland.com/date/dayOfWeek

http://www.devmedia.com.br/articles/viewcomp.asp?comp=869

Nota: Também não sei bem como é pk foi um colega meu k me disse... Mas depois de uma pesquisa acho que ele tem razão...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
TheDark    0
TheDark

Nenhum dos links que indicaste tem relação com C++. O que mais se aproxima é o da MSDN, que no entanto se refere a um enumerado de .NET e não é uma função.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
joao.palma    0
joao.palma

Boas... desde já o meu muito obrigado a todos...

Já consegui fazer a parte dos fim de semanas agora só falta mesmo os feriados...

O código abaixo é copy & past do programa....

//Significados...
//Table1 = tabela
//DtAux = Variavel(uma terceira variavel que vai armazenar a data corrente....)
for (DtAux = Table1DtIni->AsDateTime ; DtAux <= Table1DtFin->AsDateTime; DtAux++) {
		if (DtAux.DayOfWeek() == 1){
			Table1DtDif->AsFloat=Table1DtDif->AsFloat-1;
			ttdflt=ttdflt-1;}
		else {
			if (DtAux.DayOfWeek()== 7){
				Table1DtDif->AsFloat=Table1DtDif->AsFloat-1;
				ttdflt=ttdflt-1;}}
	}

Agora só falta mesmo os feriados mas acho que isso é só mais uma tabela um for e um if e ta feito acho eu...

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


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade