Você está na página 1de 5

************************************************************************

*
* Testar se 'n' nmero primo
*
************************************************************************
*
program ehprimo
implicit none
*
integer*8 n, candidato, max
logical restozero, naomaiscandidatos
write( 0, * ) 'N eh primo? '
read ( *, * ) n
if( n .eq. 1 ) then
write( 0, * ) '1 nao eh primo '
stop
end if
* Limite de busca
max = int(sqrt(real(n)))
candidato = 2
restozero = .false.
naomaiscandidatos = .false.
C
C Construo da repetio: Enquanto ainda no satisfizer condico de parada
C do while( .not. condio_de_parada )
C
do while ( .not. (restozero .or. naomaiscandidatos ) )
restozero = mod( n, candidato ) .eq. 0
naomaiscandidatos = candidato .gt. max
if( .not. restozero ) candidato = candidato+1
end do
write( 0, * ) 'Primo: ', .not.restozero
if( restozero ) write(*,*) "Divisivel por ", candidato
end program ehprimo
************************************************************************
*
* Mximo divisor comum de dois inteiros positivos m e n.
* Algoritmo de Euclides
*
************************************************************************
*
program mdcom
implicit none
*
integer n, m, divisor, dividendo, mdc, resto
write( 0,
read ( *,
dividendo
divisor =

* ) 'Calcular maximo divisor comum de M e N ? '


* ) m, n
= m
n

resto = mod( dividendo, divisor )


do while ( resto .ne. 0 )

dividendo = divisor
divisor = resto
resto = mod( dividendo, divisor )
end do
mdc = divisor
write( 0, * ) 'MDC de ', m, ' e ', n, ' = ', mdc
end program mdcom
C***********************************************************************
C
C converso de moedas
C impresso formatada, repetio usando 'do'
C
C***********************************************************************
C
program moedas
implicit none
C
integer i
real reais, dollar, euro, dlrrl, eurrl
C relaes dolar por real e euro por real
data dlrrl, eurrl / 0.42768, 0.48715 /
C
constante do tipo real
C
C strings representando especificadores de formato
character *30 form1, form2, sep *(*), line
parameter ( sep = " ======== " )
data form1
/ "(1x,2(a12,5x,'|'),a12)" /
data form2
/ "(1x,2(f12.3,5x,'|'),f12.3)" /
data line / "(1x,49('-'))" /
C
write (*,*) sep, "Tabela de conversao de moedas", sep
write (*, line)
write (*, form1 ) "Real","Dollar", "Euro"
write (*, line)
C
C SINTAXE Fortran 77 puro:
C
do 100 i = 1, 10
C
do i = 1, 10
reais = i * 1.0
dollar = reais * dlrrl
euro
= reais * eurrl
write (*, form2 ) reais, dollar, euro
C
C SINTAXE Fortran 77 puro:
C 100 continue
C
end do
end program moedas
C***********************************************************************
C
C Clculo da rea e do permetro de crculo
C Impresso formatada usando format, write, print
C Autor: Thomas W. Rauber trauber@gmail.com
C

C***********************************************************************
C
program circ
implicit none
C
real pi, area, perim, raio
C
Constante do tipo real
parameter ( pi = 3.14159 )
C
C Strings representando especificadores de formato
character *40 form1, form2
data form1
/ '(1X, A5, F12.5, 2X, A, F12.5)' /
C Aspas em vez de apstrofo limitando string
data form2
/ "(1X, A, F9.5, 2X, A, F4.2)" /
C
C
write (*,*) 'raio?'
read (*,*) raio
C
perim = 2.0 * pi * raio
area = pi * raio * raio ! melhor que pi*raio**2
write (*,*) "raio =", raio, " perimetro =", perim, " area =", area
C
C
C
FORMATAO
C===========================================================
C Caracteres de controle de linha
C (Comportamento dependente da mquina !!!)
C DESCRITOR
EFEITO
C -------------------------------C ' ' ou '1X' Avana uma linha antes da impresso
C '0'
Avana duas linha antes da impresso
C '1'
Avana para o incio da prxima pgina
C '+'
No avana antes da impresso
C===========================================================
C
16 format (1X,A7)
17 format (1X, A5, F12.5, 2X, A, F12.5)
18 format (1X, A, F9.5, 2X, A, F4.2)
C Usando repetio e strings constantes dentro do especificador de formato
19 format (1X, 2(A15,' = ',F12.2,' --- '))
print 16, '--- RESULTADOS ---'
print *,
"--- RESULTADOS ---"
write (*,*) '--- RESULTADOS ---'
print 17, 'perimetro =', perim, 'area =', area
print 18, 'perimetro =', perim, 'area =', area
C
C Formas equivalentes para imprimir
C
write (*,'(1X,A5,F12.5,2X,A,F12.5)')
+ 'perimetro =', perim, 'area =', area
write (*,"(1X,A,F9.5,2X,A,F4.2)")
+ 'perimetro =', perim, 'area =', area
write (*,18) 'perimetro =', perim, 'area =', area
write (*,19) 'perimetro', perim, 'area', area
write (*,"(1X, 2(A15,' = ',F12.2,' --- '))")
+ 'perimetro', perim, 'area', area
C
C Aqui tem uma particularidade: o apstrofo tem que ser duplicado
C dentro da string

C
write (*,'(1X, 2(A15,'' = '',F12.2,'' --- ''))')
+ 'perimetro', perim, 'area', area
print '(1X,A,F9.5,2X,A,F4.2)',
+ 'perimetro =', perim, 'area =', area
write (*, form1) 'perimetro =', perim, 'area =', area
write (*, form2) 'perimetro =', perim, 'area =', area
C
end program circ
************************************************************************
*
* Estruturas de seleo
* Maximo de trs numeros
*
************************************************************************
*
program estrut
implicit none
*
real a, b, c, max
write( 0, "(1X,A,/,1X,A)" ) 'Determinacao do maximo ',
'de tres numeros a b c?'
read( *, * ) a, b, c
write( 0, "(1X,A,3F10.2)" ) 'Recebi' , a, b, c

if ( a .gt. b ) then
if ( a .gt. c ) then
max = a
else
max = c
end if
else
if ( b .gt. c ) then
max = b
else
max = c
end if
end if
write( 0, "(1X,A,F7.2)" ) 'O maximo e:' , max
*
*
*
* If simples
if ( a .gt. b ) write( 0, * ) 'a maior que b'
end program estrut
**************************************************************************
*Programa Pergunta e Resposta
**************************************************************************
MDULO QuestionModule
SUBROUTINE Venda (pergunta, correctAnswer)
CHARACTER (LEN = 50): causa, correctAnswer, userAnswer
CHARACTER (LEN = 5):: continueQuestions
PRINT * questo,
READ *, userAnswer

IF (userAnswer == correctAnswer)
ENTO
PRINT *, "Correto"
ELSE
PRINT *, "Wrong"
END IF
PRINT *, "Deseja continuar?"
READ *, continueQuestions
IF (continueQuestions == "no")
STOP
END SUBROUTINE Pergunte
End Module QuestionModule
Perguntas PROGRAMA
USO QuestionModule
CALL Venda ( "Qual a capital da Dinamarca?", "Copenhagen")
CALL Venda ( "Qual a capital da Sucia?", "Stockholm")
CALL Venda ( "Qual Aztek Deus frequentemente descrito como um beija-flor?", "H
uitzilopochtli")
PROGRAMA Perguntas FIM