![Page 1: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/1.jpg)
Programação de Computadores
Instituto de Computação UFFDepartamento de Ciência da Computação
Otton Teixeira da Silveira Filho
![Page 2: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/2.jpg)
Conteúdo
● Alguns Conceitos sobre Linguagens
● Conceito de Algoritmo
● Pseudocódigo
● Tipos de Variáveis
● Operadores
● Estruturas de Controle
● Estruturas de Dados
● Subprogramação
![Page 3: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/3.jpg)
Variáveis
Caracteres - 1 B
![Page 4: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/4.jpg)
Variáveis
Em FORTRAN as variáveis que usaremos são do tipo
LOGICAL – Representa dois estados: .TRUE. e .FALSE.
CHARACTER – Podemos representar os caracteres convencionados na tabela ASCII, embora haja alternativa
INTEGER – Representamos um subconjunto dos inteiros com sinal [-32 768, 32767]
INTEGER*4 – Representamos um subconjunto dos inteiros com sinal [- 2 147 483 648, 2 147 483 647]
REAL ou REAL*4 – Representamos um subconjunto dos reais com aproximadamente 7 algarismos significativos [10-38, 1038]
DOUBLE PRECISION ou REAL*8 - Representamos um subconjunto dos reais com aproximadamente 16 algarismos significativos [ 10-308, 10308]
![Page 5: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/5.jpg)
Variáveis
● Em FORTRAN especificaremos as variáveis usando os caracteres do alfabeto A-Z mais os caracteres dos algarismos 0-9
● Uma variável não poderá começar por um numeral
● FORTRAN não distingue letras maiúsculas de minúsculas
● O nome da variável será reconhecível até 6 caracteres
● Convencionalmente variáveis que começam pelas letras i, j, k, l, m e n são do tipo inteiro mas isto pode ser alterado
![Page 6: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/6.jpg)
Operadores
Operadores aritméticos
Se a e b INTEGER e a = 3 e b = 5
a+b resulta em 8
a-b resulta em -2
a/b resulta em 0
b/a resulta em 1
b ** a resulta em 125
![Page 7: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/7.jpg)
Operadores
Operadores aritméticos
Se a e b REAL e a = 3.0 e b = 5.0
a+b resulta em 8.0
a-b resulta em -2.0
a/b resulta em 0.6
b/a resulta em 1.6666666
b ** a resulta em 125.0
![Page 8: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/8.jpg)
Operadores
Observem a distinção entre INTEGER e REAL que apresentamos nos exemplos do uso dos operadores
● REAL é marcado pela existência do ponto de separação decimal.
● Como os computadores foram primeiramente desenvolvidos na Inglaterra e nos Estados Unidos da América, nas linguagens de computação se usa o ponto como separador decimal e não vírgula como no Brasil, Portugal, Alemanha, França, Rússia e outros países.
![Page 9: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/9.jpg)
Operadores
E se a e b forem de tipos diferentes?
● Tome cuidado com estas operações
● Tome como referência a tabela de “fraqueza“
![Page 10: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/10.jpg)
Operadores
Subconjunto da tabela de fraqueza
● Na operação de tipos mistos o valor mais “fraco“ é convertido ao tipo mais “forte“
● Não é toda linguagem que faz este tipo de conversão
Tipo Fraqueza relativa
INTEGER 1
INTEGER*4 2
REAL 3
REAL*8 4
![Page 11: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/11.jpg)
Operadores
Operadores lógicos
Caracteres Operação Exemplo
.NOT. não .NOT.b
.AND. e a.AND.b
.OR. ou a.OR.b
![Page 12: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/12.jpg)
Operadores
Tabela verdade para o operador lógico NÃO
NÃO Operando Resultado
V F
F V
![Page 13: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/13.jpg)
Operadores
Tabela verdade para o operador lógico E
E Operando 1 Operando 2 Resultado
F F F
F V F
V F F
V V V
![Page 14: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/14.jpg)
Operadores
Tabela verdade para o operador lógico OU
OU Operando 1 Operando 2 Resultado
F F F
F V V
V F V
V V V
![Page 15: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/15.jpg)
Operadores
Operadores relacionais
O resultado da comparação será verdadeiro ou falso
Caracteres Operação Exemplo
.EQ. Igual a a.EQ.b
.NE. Não igual a.NE.b
.LT. Menor que a.LT.b
.LE. Menor ou igual a a.LE.b
.GT. Maior que a.GT.b
.GE. Maior ou igual a a.GE.b
![Page 16: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/16.jpg)
Operadores
Os operadores tem prioridades
Operador Prioridade
** 1
* e / 2
+ e - 3
.EQ. 4
.NE. 4.LT. 4
.LE. 4
.GT. 4
.GE. 4
.NOT. 5
.AND. 6
.OR. 7
![Page 17: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/17.jpg)
Operadores
Os operadores tem prioridades
As prioridades podem ser alteradas
pelo uso de parênteses
Operador Prioridade
** 1
* e / 2
+ e - 3
.EQ. 4
.NE. 4.LT. 4
.LE. 4
.GT. 4
.GE. 4
.NOT. 5
.AND. 6
.OR. 7
![Page 18: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/18.jpg)
Alguns “comandos“ úteis
● Comando de Leitura
READ (*, *) variável1, variável2, …
Lê as variáveis apresentadas no dispositivo padrão de entrada, em geral o teclado
● Comando de escrita
WRITE( *,*) variável1, variável2, ...
Escreve as variáveis apresentadas no dispositivo padrão de saída, em geral a tela
![Page 19: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/19.jpg)
Alguns “comandos“ úteis
● Comando de escrita
WRITE( *,*) ‘um texto’
Escreve literalmente o que for encontrado entre aspas simples
![Page 20: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/20.jpg)
Estrutura de um programa em FORTRAN
Um programa em FORTRAN tem uma estrutura para a linha
● As primeiras cinco colunas são reservadas para índices de referência para laços de repetição e formatos de impressão e indicação de comentários (C, * ou ! Na primeira coluna)
● A coluna seis é para indicar que é uma continuação da linha anterior
● Nas colunas de 7 até 72 se escrevem os comandos
● As colunas de 73 até 80 são reservadas para numeração do cartão
![Page 21: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/21.jpg)
Estrutura de um programa em FORTRAN
Um cartão correspondia a uma linha do programa
![Page 22: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/22.jpg)
Estrutura de um programa em FORTRAN
Estrutura geral
PROGRAM nome
declaração 1
declaração 2
…
comando 1
comando 2
STOP
END
![Page 23: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/23.jpg)
Uma nota
Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos
No entanto, tais transgressões são comuns à maioria dos compiladores FORTRAN 77, em particular o Force (que é o recomendado aqui no curso) que foi baseado no G77 do Projeto GNU
No ambiente Linux há o gfortran, descendente do G77 mas que também compila códigos em FORTRAN 95
![Page 24: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/24.jpg)
Testes em FORTRAN
Apresentemos uma estrutura condicional do FORTRAN que pode ser usado de várias formas
i) IF (condição lógica) comando comando
Exemplo: … IF (x .LT. y) x = x + 1 asq = sin(x) ...
![Page 25: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/25.jpg)
Testes em FORTRAN
Apresentemos uma estrutura condicional do FORTRAN que pode ser usado de várias formas
ii) IF (condição lógica) THEN comando(s) ENDIF
Exemplo: … IF (x .GT. y) THEN asq = sin(x) isq = cos(y) ENDIF sisc = x ...
![Page 26: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/26.jpg)
Testes em FORTRAN
Apresentemos uma estrutura condicional do FORTRAN que pode ser usado de várias formas
iii) IF (condição lógica) THEN comando(s) ELSE comando(s) ENDIF
Exemplo: … IF (x .GT. y) THEN asq = sin(x) isq = cos(y) ELSE sisc = x ENDIF …
![Page 27: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/27.jpg)
E mais um exemplo...
Serão lidos a, b e c que são não nulos. Estes valores correspondem aos tamanhos dos lados de um triângulo. Determine se o triângulo é equilátero, isósceles ou retângulo.
Examinemos o problema:
● Um triângulo isósceles tem dois lados iguais
● Um triângulo equilátero é também isósceles
● Um triângulo é retângulo se , onde h é a hipotenusa e os outros valores são os catetos
h2=c1
2+c2
2
![Page 28: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/28.jpg)
E mais um exemplo...
Serão lidos a, b e c que são não nulos. Estes valores correspondem aos tamanhos dos lados de um triângulo. Determine se o triângulo é equilátero, isósceles ou retângulo.
Examinemos o problema:
● Um triângulo isósceles tem dois lados iguais
● Um triângulo equilátero é também isósceles
● Um triângulo é retângulo se , onde h é a hipotenusa e os outros valores são os catetos
Examinemos o problema por partes
h2=c1
2+c2
2
![Page 29: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/29.jpg)
E mais um exemplo...
Podemos detectar se um triângulo é isósceles com o fragmento de pseudocódigo
SE (a = b) OU (b = c) OU (a = c) ENTÃO IMPRIMA ‘triangulo isósceles‘ FIM SE
Em FORTRAN seria
IF ((a.EQ.b).OR.(b.EQ.c).OR.(a.EQ.c)) THEN WRITE(*,*) ‘triangulo isosceles‘ ENDIF
![Page 30: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/30.jpg)
E mais um exemplo...
Podemos detectar se um triângulo é equilátero com o fragmento de pseudocódigo
SE (a = b) E (b = c) E (a = c) ENTÃO IMPRIMA ‘triangulo equilátero‘ FIM SE
Em FORTRAN seria
IF ((a.EQ.b).AND.(b.EQ.c).AND.(a.EQ.c)) THEN WRITE(*,*) ‘triangulo equilatero‘ ENDIF
![Page 31: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/31.jpg)
E mais um exemplo...
Podemos detectar se um triângulo é retângulo com o fragmento de pseudocódigo
SE (a*a = b*b + c*c) OU (b*b = a*a + c*c) OU (c*c = a*a + b*b) ENTÃO IMPRIMA ‘triangulo retângulo‘ FIM SE
Em FORTRAN seria
IF (((a*a).EQ.(b*b + c*c)).OR.((b*b).EQ.(a*a + c*c)).OR.((c*c) .EQ.(a*a + b*b)) THEN WRITE(*,*) ‘triangulo retangulo‘ ENDIF
![Page 32: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/32.jpg)
E mais um exemplo...
Podemos detectar se um triângulo é retângulo com o fragmento de pseudocódigo
SE (a*a = b*b + c*c) OU (b*b = a*a + c*c) OU (c*c = a*a + b*b) ENTÃO IMPRIMA ‘triangulo retângulo‘ FIM SE
Em FORTRAN seria
IF (((a*a).EQ.(b*b + c*c)).OR.((b*b).EQ.(a*a + c*c)).OR.((c*c) .EQ.(a*a + b*b)) THEN WRITE(*,*) ‘triangulo retangulo‘ ENDIF
● Certamente não é um código inteligente mas cumpre a tarefa
![Page 33: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/33.jpg)
E mais um exemplo...
Juntemos as partes observando que o tipo de variável que aqui tem sentido é REAL
![Page 34: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/34.jpg)
E mais um exemplo...
PROGRAM triangulos REAL a, b, c WRITE(*,*) ‘Entre com os lados do triangulo‘ READ(*,*) a, b, c IF (a.EQ.b).OR.(b.EQ.c).OR.(a.EQ.c) THEN WRITE(*,*) ‘triangulo isosceles‘ ENDIF IF (a.EQ.b).AND.(b.EQ.c).AND.(a.EQ.c) THEN WRITE(*,*) ‘triangulo equilatero‘ ENDIF
IF ((a*a).EQ.(b*b + c*c)).OR.((b*b).EQ.(a*a + c*c)).OR.((c*c) .EQ.(a*a + b*b)) THEN WRITE(*,*) ‘triangulo retangulo‘ ENDIF STOP END
![Page 35: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/35.jpg)
E mais um exemplo...
PROGRAM triangulos REAL a, b, c WRITE(*,*) ‘Entre com os lados do triangulo‘ READ(*,*) a, b, c IF (a.EQ.b).OR.(b.EQ.c).OR.(a.EQ.c) THEN WRITE(*,*) ‘triangulo isosceles‘ ENDIF IF (a.EQ.b).AND.(b.EQ.c).AND.(a.EQ.c) THEN WRITE(*,*) ‘triangulo equilatero‘ ENDIF
IF ((a*a).EQ.(b*b + c*c)).OR.((b*b).EQ.(a*a + c*c)).OR.((c*c) .EQ.(a*a + b*b)) THEN WRITE(*,*) ‘triangulo retangulo‘ ENDIF STOP END
● Repare que o código tem uma série de problemas
![Page 36: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/36.jpg)
E mais um exemplo...
● Nenhuma mensagem será emitida se o dado triângulo não for isósceles, equilátero ou retângulo
● Embora se afirme que a, b e c são lados de um triângulo, seria bom que houvesse uma crítica dos valores pois o usuário pode cometer enganos
![Page 37: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/37.jpg)
E mais um exemplo...
● Nenhuma mensagem será emitida se o dado triângulo não for isósceles, equilátero ou retângulo
● Embora se afirme que a, b e c são lados de um triângulo, seria bom que houvesse uma crítica dos valores pois o usuário pode cometer enganos
● Tente criar soluções para estas situações
![Page 38: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/38.jpg)
E mais um exemplo...
PROGRAM triangulos REAL a, b, c WRITE(*,*) ‘Entre com os lados do triangulo‘ READ(*,*) a, b, c IF ((a + b).GT.c).OR.(b + c).GT.a).OR.((a+c).GT.b) THEN IF (a.EQ.b).OR.(b.EQ.c).OR.(a.EQ.c) THEN WRITE(*,*) ‘triangulo isosceles‘ ENDIF IF (a.EQ.b).AND.(b.EQ.c).AND.(a.EQ.c) THEN WRITE(*,*) ‘triangulo equilatero‘ ENDIF
IF ((a*a).EQ.(b*b + c*c)).OR.((b*b).EQ.(a*a + c*c)).OR.((c*c) .EQ.(a*a + b*b)) THEN WRITE(*,*) ‘triangulo retangulo‘ ENDIF ELSE WRITE(*,*) ‘Os valores dados nao formam um triangulo’ ENDIF STOP END
![Page 39: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/39.jpg)
Alguns fatos sobre computação numérica
Façamos um programa:
atribua a uma variável INTEGER*2 o valor 32767. Atribua a uma outra variável a variável anterior somada com 1. Imprima o resultado
PROGRAM inteiro1 INTEGER*2 i, j i = 32767 j = i + 1 WRITE(*,*) j STOP END
● Experimente usar INTEGER*4 ou apenas INTEGER
![Page 40: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/40.jpg)
Alguns fatos sobre computação numérica
Façamos outro programa:
atribua a uma variável REAL o valor 1/3. Atribua a uma outra variável a variável anterior multiplicada por 3. Imprima o resultado
PROGRAM flutuante1 REAL x, y x = 1/3 y = 3 * x WRITE(*,*) y STOP END
![Page 41: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/41.jpg)
Laços de repetição
FORTRAN 77 tem um comando clássico de repetição que tem a forma
DO rótulo variável = início da contagem, fim da contagem, passo da contagem
comando(s)
rótulo CONTINUE
rótulo é um INTEGER. Tanto a variável quanto o início da contagem, o fim da contagem e o passo da contagem podem ser INTEGER ou REAL
● A omissão do passo de contagem suporá o uso de passo 1
● Não é recomendável o uso de variáveis do tipo REAL. Isto raramente é de fato útil e tem o potencial de gerar confusões
![Page 42: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/42.jpg)
Laços de repetição
Exemplo: PROGRAM exemploDO1 INTEGER I DO 100 i = 1, 10, 2 WRITE(*,*) i 100 CONTINUE STOP END
provocará a impressão dos números 1, 3, 5, 7, 9, um por linha.
![Page 43: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/43.jpg)
Laços de repetição
Exemplo: PROGRAM exemploDO2 INTEGER*2 i, s s = 0 DO 100 i = 1, 1000 s = s + i 100 CONTINUE WRITE(*,*) ‘A soma dos numeros de 1 a 1000 e igual a ‘, s STOP END
![Page 44: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/44.jpg)
Laços de repetição
Exemplo: PROGRAM exemploDO2 INTEGER*2 i, s s = 0 DO 100 i = 1, 1000 s = s + i 100 CONTINUE WRITE(*,*) ‘A soma dos numeros de 1 a 1000 e igual a ‘, s STOP END
● Experimente trocar INTEGER*2 por INTEGER
![Page 45: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/45.jpg)
Laços de repetição
Usaremos um outro laço de repetição
DO WHILE (condição lógica)
comando(s)
ENDDO
o laço repetirá as operações até o ENDDO enquanto a condição lógica for verdadeira
● Podemos criar um “laço eterno“ se a condição lógica for sempre .TRUE.
![Page 46: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/46.jpg)
Laços de repetição
Some os números a partir de 1 até que a soma seja maior que 1000. Imprima o valor para o qual isto ocorreu e o resultado final.
PROGRAM exemplodowhile INTEGER i,s s = 0 i = 0 DO WHILE (s.LT.1000) i = i + 1 s = s + i ENDDO WRITE(*,*) i, s STOP END
● Experimente não inicializar s
![Page 47: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/47.jpg)
Alguns fatos sobre computação numérica
Façamos um programa:
atribua a uma variável REAL o valor 0,01. Inicialize uma variável com zero e acumule nela 100 vezes. 0 valor da outra variável. Imprima o resultado.
PROGRAM flutuante2 REAL x, s s = 0 x = 0.01 DO 100 i = 1, 100 s = s + x 100 CONTINUE WRITE(*,*) s STOP END
![Page 48: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/48.jpg)
Alguns fatos sobre computação numérica
Façamos um programa:
atribua a uma variável REAL o valor 0,01. Inicialize uma variável com zero e acumule nela 100 vezes. 0 valor da outra variável. Imprima o resultado.
PROGRAM flutuante2 REAL x, s s = 0 x = 0.01 DO 100 i = 1, 100 s = s + x 100 CONTINUE WRITE(*,*) s STOP END
● Coloque em x 0.0078125 e some até 128
![Page 49: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/49.jpg)
Laços de repetição
Calcule o enésimo termo da sequência de Fibonacci
![Page 50: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/50.jpg)
Laços de repetição
Calcule o enésimo termo da sequência de Fibonacci
A sequencia de Fibonacci é dada aqui da seguinte forma:
dados como primeiros termos F1=1 e F2=1, geramos os próximos elementos usando a equação
Fn= Fn-1+Fn-2
![Page 51: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/51.jpg)
Laços de repetição
Calcule o enésimo termo da sequência de Fibonacci
A sequencia de Fibonacci é dada aqui da seguinte forma:
dados como primeiros termos F1=1 e F2=1, geramos os próximos elementos usando a equação
Fn= Fn-1+Fn-2
Então teríamos a sequência
1, 1, 2, 3, 5, 8, 13, 21, 34, 55...
![Page 52: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/52.jpg)
Laços de repetição
Calcule o enésimo termo da sequência de Fibonacci
PROGRAM fibonacci INTEGER a, b, n, cont, s n = 6 a = 1 b = 1 DO WHILE (cont.LT.n) s = a + b a = b b = s cont = cont + 1 ENDDO WRITE(*,*) 'O ' , n, '-esimo termo da Sequencia de Fibonacci = ', b STOP END
![Page 53: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/53.jpg)
Exemplo: fatorial
Obtenha o fatorial de um número inteiro não negativo n
![Page 54: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/54.jpg)
Exemplo: fatorial
programa fatorial
inteiro fat, i, n
leia n
fat ←1
para i ← 1 até n
fat ←fat * i
fim parafim para
imprima fatimprima fat
fimfim
i ← 1até n
fat ← fat * i
início
fat←1
fat
fim
n
![Page 55: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/55.jpg)
Exemplo: fatorial
programa fatorial PROGRAM fatorial
inteiro fat, i, n INTEGER fat, i, n
leia n READ(*,*) n
fat ←1 fat = 1
para i ← 1 até n DO 100 i = 1, n
fat ←fat * i fat = fat * i
fim para 100 CONTINUEfim para 100 CONTINUE
imprima fat WRITE(*,*) fatimprima fat WRITE(*,*) fat
fim STOPfim STOP
ENDEND
![Page 56: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/56.jpg)
Exemplo: cálculo de e
Calcule o valor da função exponencial no ponto x=1 usando a série de Taylor truncada em n termos que é dada por
e x
=1+x1!
+x2
2!+
x3
3 !+⋯+
xn
n!
![Page 57: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/57.jpg)
Exemplo: cálculo de e
Programa exponencial
real exp inteiro fat, i, j, n
leia n
exp ← 1
para i ← 1 até n fat ←1 para j ← 1 até i fat ←fat * j fim para
exp ← exp + 1/fat fim para
imprima exp
fim
...
![Page 58: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/58.jpg)
Exemplo: cálculo de e
Programa exponencial
real exp inteiro fat, i, j, n
leia n
exp ← 1
para i ← 1 até n fat ←1 para j ← 1 até i fat ←fat * j fim para
exp ← exp + 1/fat fim para
imprima exp
fim
PROGRAM e2
REAL exp INTEGER fat, i, j, n, ntermos
READ(*,*) n
exp = 1
DO 1 i = 1, ntermos fat = 1 DO 2 j = 1, i fat = fat * j 2 CONTINUE exp = exp + 1.0/fat 1 CONTINUE
WRITE(*,*) exp
STOP END
![Page 59: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/59.jpg)
Mais alguns aspectos de computação numérica
Calcule o valor da função exponencial no ponto x=1 usando a série de Taylor truncada em n termos que é dada por
mas some a partir do termo de mais alta ordem.
e x=1+
x1!
+x2
2!+
x3
3 !+⋯+
xn
n!
![Page 60: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/60.jpg)
Mais alguns aspectos de computação numérica
PROGRAM e2
REAL exp INTEGER fat, i, j, n, ntermos
READ(*,*) n
exp = 1
DO 1 i = 1, ntermos fat = 1 DO 2 j = 1, i fat = fat * j 2 CONTINUE exp = exp + 1.0/fat 1 CONTINUE
WRITE(*,*) exp
STOP END
![Page 61: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/61.jpg)
Mais alguns aspectos de computação numérica
PROGRAM e2
REAL exp INTEGER fat, i, j, n, ntermos
READ(*,*) n
exp = 1
DO 1 i = 1, ntermos fat = 1 DO 2 j = 1, i fat = fat * j 2 CONTINUE exp = exp + 1.0/fat 1 CONTINUE
WRITE(*,*) exp
STOP END
PROGRAM e2inv
REAL exp INTEGER fat, i, j, n, ntermos
READ(*,*) n
exp = 1
DO 1 i = ntermos, 1, -1 fat = 1 DO 2 j = 1, i fat = fat * j 2 CONTINUE exp = exp + 1.0/fat 1 CONTINUE
WRITE(*,*) exp
STOP END
![Page 62: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/62.jpg)
Mais alguns aspectos de computação numérica
Como você pode constatar somar a série
do termo maior em valor para o de menor valor dá um valor diferente de somarmos de menor valor para o maior
e=1+11!
+12!
+13 !
+⋯+19 !
![Page 63: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/63.jpg)
Funções implícitas
O FORTRAN contém funções pré-definidas que correspondem em certo sentido a algumas funções matemáticas
![Page 64: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/64.jpg)
Funções implícitas
O FORTRAN contém funções pré-definidas que correspondem em certo sentido a algumas funções matemáticas
Veremos mais tarde que o conceito de funções em linguagens de programação não correspondem totalmente ao que é chamado de função na matemática
![Page 65: Programação de Computadores - UFFotton/graduacao/programacao/Fortran_2.pdf · Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos No entanto, tais transgressões](https://reader031.vdocuments.com.br/reader031/viewer/2022040806/5e46baee364aea3ed5164814/html5/thumbnails/65.jpg)
Funções implícitas
Vejamos algumas da funções implícitas no FORTRAN
Nome Definição Argumento Tipo de função
SIN(x) Seno REAL em radianos REAL, REAL*8
ASIN(x) Arcosseno REAL REAL, REAL*8
COS(x) cosseno REAL em radianos REAL, REAL*8
ACOS(x) arcocosseno REAL REAL, REAL*8
TAN(x) tangente REAL em radianos REAL, REAL*8
ATAN(x) arcotangente REAL em radianos REAL, REAL*8
EXP(x) exponencial REAL REAL, REAL*8
LOG(x) logaritmo nepleriano REAL REAL, REAL*8
LOG10(X) logaritmo base 10 REAL RELA, REAL*8
ABS(x) valor absoluto INTEGER, REAL, INTEGER*4, REAL*8 REAL, REAL*8
SQRT(x) raiz quadrada REAL, REAL*8 REAL, REAL*8