• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

pdneves

Ajuda urgente Fortran

1 mensagem neste tópico

Bom dia,

o problema é o seguinte, a minha esposa está a tirar Biologia e agora com as mudanças para o Bolonha ouve equivalências em disciplinas assim como novas, uma delas Programação, visto ela não ter quaisquer base  sente uma enorme dificuladade em realizar qualquer exercico proposto. Por isso que queria pedir uma ajuda em relação a este problema:

Conversões de Calendário para dia da semana

Um algoritmo para converter datas do calendário gregoriano na forma mês - dia - ano para dia da semana é o seguinte. Vamos assumir as definições:

Sejam M, D e Y o mês, dia e o ano do calendário gregoriano.

Seja m o numero do mês tal que: m=M-2 se M>=3 e m=M+10 em caso contrário

d é o dia do mês

y é o ano de um determinado século

c é o século

O algoritmo é o seguinte:

a) A é a parte inteira de 13 (m-1) / 5

:thumbsup: B é a parte inteira de y/4

c) C é a parte inteira de c/4

d) D=A+B+C+d+y-2c

e) Fazer R igual ao resto de D/7

f) Interpretar R da seguinte forma:

R=0 - Domingo

R=1 - Segunda Feira

etc.

Faça um programa em fortran que implemente o algoritmo descrito.

E o que "fizemos" foi:

REAL:: M,D,Y,nm,A,B,C,dm,ny,s,R !ny= o ano de um determinado seculo, s= seculo,dm= dia do mes,nm=numero de mes

Integer::resto,divisao

WRITE (*,*) "introduza o Mes"

READ (*,*) M

WRITE (*,*) "introduza o Dia"

READ (*,*) D

WRITE (*,*) "introduza o Ano"

READ (*,*) Y

If (M>=3) then

nm= M-2

ELSE

nm= M+10

end if

A= INT((13*(nm-1))/5)

B= INT (ny/4)

C= INT ((Y/100+1)/4)

s= INT(Y/100+1)

divisao= INT(Y/100+1)

resto= (Y-(100+1)*divisao)

D= A+B+C+dm+ny-2*s

divisao= INT(D/7)

resto= (D-7*divisao)

R=resto

WRITE (*,*) R

IF (R==0) then

WRITE (*,*) "Domingo"

else if (R==1) then

WRITE (*,*) "Segunda"

else if (R==2) then

WRITE (*,*) "Terça"

else if (R==3) then

WRITE (*,*) "Quarta"

else if (R==4) then

WRITE (*,*) "Quinta"

else if (R==5) then

WRITE (*,*) "Sexta"

else if (R==6) then

WRITE (*,*) "Sabádo"

END IF

END PROGRAM

Alterando as variáveis, mas ao se compilar dá os seguintes avisos:

--------------------Configuration: calendário2 - Win32 Debug--------------------

Compiling Fortran...

G:\calendário2.f90

G:\calendário2.f90(29) : Warning: Variable NY is used before its value has been defined

B= INT (ny)/(4)

--------^

G:\calendário2.f90(32) : Warning: Variable S is used before its value has been defined

D= A+B+C+dm+ny-2*s

-----------------^

G:\calendário2.f90(32) : Warning: Variable DM is used before its value has been defined

D= A+B+C+dm+ny-2*s

---------^

calendário2.obj - 0 error(s), 3 warning(s)

ainda não se consegui perceber o porquê desses 3,  e ao se executar em vez do dia da semana que se pretende saber dá um valor como -4.000000. Não pode usar "nomes" tais como trunc e print, porque ainda n deu nada disso. Agradecia mesmo uma ajuda visto o trabalho ser para entregar na 5ªfeira.

Obrigado.

0

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