• Nenhum resultado encontrado

Introdução ao Fortran 90-3

N/A
N/A
Protected

Academic year: 2021

Share "Introdução ao Fortran 90-3"

Copied!
31
0
0

Texto

(1)

ufpellogo

Introdução ao Fortran 90 - 3

Alexandre Diehl

(2)

ufpellogo

Controles de Fluxo de Execução

Definição

Estruturas (ou blocos) de programação que permitem controlar

o fluxo de execução de um programa, além da construção

sequencial, incluindo

decisão

,

seleção

e

repetição.

Tipos de Controles de Fluxo

Estrutura de

Decisão

do tipo

IF

Estrutura de

Seleção

do tipo

CASE

Estrutura de

Repetição

do tipo

DO

(3)

ufpellogo

Estrutura de Decisão IF

Definição

A estrutura de

decisão IF

fornece um mecanismo para controle

de desvio de fluxo, dependendo de uma

condição relacional

e/ou lógica

.

(4)

ufpellogo

Estrutura de Decisão IF

Caso 1:

Comando

IF

IF

(<expressão relacional e/ou lógica>) <comando executável>

→ Se o valor da<expressão relacional e/ou lógica>forverdadeira, umúnico comando executável é realizado LOGICAL : : f l a g = .t r u e. , n o f l a g = .f a l s e. REAL : : x = 1 . 0 , Y = −0.5 I F ( f l a g ) p r i n t∗ ,’ f l a g = ’, f l a g I F ( X − Y > 0 . 0 ) X = 0 . 0 I F ( ( X − Y > 0 . 0 ) .AND. ( .NOT. n o f l a g ) ) p r i n t∗ ,’ oi ’ END

→ Se a condição relacional e/ou lógica não for verdadeira, o comando na sequência da estruturaIFé executado.

(5)

ufpellogo

Estrutura de Decisão IF

Caso 2:

Construto

IF ... END IF

IF

(<expressão relacional e/ou lógica>)

THEN

<bloco de comandos>

END IF

→ Se o valor da<expressão relacional e/ou lógica>forverdadeira, um bloco de comandos (mais de um comando) ou apenas um comando é executado.

REAL : : x = 1 . 0 , Y = −0.5 I F ( X > Y) THEN p r i n t∗ ,’XmaiordoqueY ’ STOP END I F END

→ Se a condição relacional e/ou lógica não for verdadeira, o comando na sequência da estruturaIF ... END IFé executado.

(6)

ufpellogo

Estrutura de Decisão IF

Caso 3:

Construto

IF ... ELSE ... END IF

IF

(

<expressão relacional e/ou lógica>)

THEN

<bloco de comandos 1>

ELSE

<bloco de comandos 2>

END IF

→ Se o valor da<expressão relacional e/ou lógica>forverdadeira, obloco de comandos 1é executado; se forfalso, obloco de comandos 2é executado (sem qualquer teste).

REAL : : x = 1 . 0 , Y = −0.5 I F ( X > Y) THEN p r i n t∗ ,’XmaiordoqueY ’ STOP ELSE p r i n t∗ ,’XmenordoqueY ’ STOP END I F END

(7)

ufpellogo

Estrutura de Decisão IF

Caso 4:

Construto

IF ... ELSE IF ... END IF

IF

(<expressão relacional e/ou lógica 1>)

THEN

<bloco de comandos 1>

ELSE IF

(<expressão relacional e/ou lógica 2>)

THEN

<bloco de comandos 2>

END IF

→ Se o valor da<expressão relacional e/ou lógica 1>forverdadeira, obloco de comandos 1é executado; se forfalso, a<expressão relacional e/ou lógica 2>é testada para que obloco de comandos 2seja executado em casoverdadeiro.

r e a l : : x = 1 . 0 i f ( X < 0 . 0 ) then

p r i n t∗ ,’Xmenordoque zero ’; s t o p e l s e i f ( X >= 0 . 0 ) then

p r i n t∗ ,’X igual oumaiorque zero ’; s t o p end i f

(8)

ufpellogo

Estrutura de Decisão IF

Caso 5:

Construto

IF ... ELSE IF ... ELSE ... END IF

IF

(

<expressão relacional e/ou lógica 1>)

THEN

<bloco de comandos 1>

ELSE IF

(<expressão relacional e/ou lógica 2>)

THEN

<bloco de comandos 2>

ELSE

<bloco de comandos 3>

END IF

→ Se o valor da<expressão relacional e/ou lógica 1>forverdadeira, obloco de comandos 1é executado; se forfalso, a<expressão relacional e/ou lógica 2>é testada para que obloco de comandos 2seja executado em caso verdadeiro; se forfalsaobloco de comandos 3é executado (sem teste).

(9)

ufpellogo

Estrutura de Decisão IF

Caso 5:

Construto

IF ... ELSE IF ... ELSE ... END IF

IF

(<expressão relacional e/ou lógica 1>)

THEN

<bloco de comandos 1>

ELSE IF

(<expressão relacional e/ou lógica 2>)

THEN

<bloco de comandos 2>

ELSE

<bloco de comandos 3>

END IF

r e a l : : x = 1 . 0 i f ( X < 0 . 0 ) then p r i n t∗ ,’XmenordoqueY ’; s t o p e l s e i f ( X == 0 . 0 ) then

p r i n t∗ ,’X igual a zero ’; s t o p e l s e

p r i n t∗ ,’Xmaiorque zero ’; s t o p end i f

(10)

ufpellogo

Estrutura de Seleção CASE

Definição

A estrutura de

seleção CASE

fornece um mecanismo para

controle de

desvio de fluxo para diversas opções

, a partir do

teste

de uma

única expressão

, do tipo

inteiro,

lógico

ou de

carateres

(não pode ser do tipo real).

Formas de uso

SELECT CASE(<expressão>) CASE(<seletor 1>) <bloco de comandos 1> CASE(<seletor 2>) <bloco de comandos 2> ... CASE(<seletor n>) <bloco de comandos n> CASE DEFAULT <bloco de comandos> END SELECT

<expressão>: seletor da estrutura CASE. Deve ser escalar, do tipo inteiro, lógico ou caractere.Não pode ser real

seletor: opções de seleção para a expressão, com o mesmo tipo da expressão

CASE DEFAULT: caso selecionado se a expressão não pertencer a nenhum dos seletores.

(11)

ufpellogo

Estrutura de Seleção CASE

Definição

A estrutura de

seleção CASE

fornece um mecanismo para

controle de

desvio de fluxo para diversas opções

, a partir do

teste

de uma

única expressão

, do tipo

inteiro,

lógico

ou de

carateres

(não pode ser do tipo real).

Formas de uso

SELECT CASE(<expressão>) CASE(<seletor 1>) <bloco de comandos 1> CASE(<seletor 2>) <bloco de comandos 2> ... CASE(<seletor n>) <bloco de comandos n> CASE DEFAULT <bloco de comandos> END SELECT

CASE (<inf> : <sup>): para<expressões> inteiras ou de caracteres, um intervalo pode ser especificado, separando os limites inferior<inf>e superior<sup>por dois pontos:

CASE (:<sup>): o limite inferior pode estar ausente (mas não ambos)

CASE (<inf> :): o limite superior pode estar ausente (mas não ambos)

(12)

ufpellogo

Estrutura de Seleção CASE

Definição

A estrutura de

seleção CASE

fornece um mecanismo para

controle de

desvio de fluxo para diversas opções

, a partir do

teste

de uma

única expressão

, do tipo

inteiro,

lógico

ou de

carateres

(não pode ser do tipo real).

Formas de uso

SELECT CASE(<expressão>) CASE(<seletor 1>) <bloco de comandos 1> CASE(<seletor 2>) <bloco de comandos 2> ... CASE(<seletor n>) <bloco de comandos n> CASE DEFAULT <bloco de comandos> END SELECT

A forma geral do<seletor>é umalista de valores

e deintervalos não sobrepostos, todos do mesmo tipo que<expressão>, entre parênteses, tal como

(13)

ufpellogo

Estrutura de Seleção CASE

Exemplo de uso

program t e s t a _ c a s e i m p l i c i t none c h a r a c t e r(l e n=1) : : nome p r i n t∗ ," D i g i t eum ca ra c er  (1  d i g i t o ) : " read∗ , nome s e l e c t c a s e ( nome ) c a s e (’ a ’ : ’ z ’) p r i n t∗ ," c a r a c t e rminusculo : ", nome c a s e ("A" : "Z") p r i n t∗ ," c a r a c t e r maiusculo  : " c a s e (" 0 " : " 9 ") p r i n t∗ ," c a r a c t e rnumeral : ", nome c a s e d e f a u l t p r i n t∗ ," c a r a c t e r e s p e c i a l  : ", nome end s e l e c t end program t e s t a _ c a s e

(14)

ufpellogo

Estrutura de Seleção CASE

Exemplo: conversor de temperaturas

Faça um programa em

FORTRAN 90

que converta uma

temperatura fornecida pelo usuário, entre as escalas Celsius

(C), Fahrenheit (F) e Kelvin (K). O programa deve ter as

seguintes características:

A entrada da temperatura deve ser clara para o usuário: a identificação da escala, usando um caracter de comprimento 1, e do valor a ser convertido. A saída deve apresentar a temperatura fornecida nas 3 escalas.

O uso do construto CASE.

O uso do construto IF para evitar a conversão de valores de temperaturas não permitados (por exemplo, temperaturas negativas na escala Kelvin).

(15)

ufpellogo

Estrutura de Seleção CASE

PROGRAM temperatura

IMPLICIT NONE

REAL : : c e l s i u s , f a h r e n h e i t , k e l v i n , T CHARACTER : : e s c a l a

PRINT∗ ," I n s i r aa temperatura : "

READ∗ , T

PRINT∗ ," I n s i r aa e s c a l a  desejada  (C, FouK ) : "

READ∗ , e s c a l a SELECT CASE ( e s c a l a ) CASE (" c ", "C") [ . . . ] CASE (" k ","K") [ . . . ] CASE (" f "," F ") [ . . . ] CASE DEFAULT [ . . . ] END SELECT

(16)

ufpellogo

Estrutura de Seleção CASE

PROGRAM temperatura [ . . . ] SELECT CASE ( e s c a l a ) CASE (" c ", "C") c e l s i u s = T f a h r e n h e i t = ( 9 ∗ c e l s i u s / 5 . 0 ) + 32 k e l v i n = c e l s i u s + 273.15 I F ( k e l v i n < 0) THEN

PRINT∗ ,"AVISO : temperatura <0K"

STOP END I F

PRINT∗ ,"A temperatura em c e l s i u s :  ", c e l s i u s ,"C"

PRINT∗ ,"A temperatura em f a r e n h e i t :  ", f a h r e n h e i t ,"F "

PRINT∗ ,"A temperatura em kelvin :  ", k e l v i n ,"K"

CASE (" k ","K") [ . . . ] CASE (" f "," F ") [ . . . ] CASE DEFAULT [ . . . ] END SELECT

(17)

ufpellogo

Estrutura de Seleção CASE

PROGRAM temperatura [ . . . ] SELECT CASE ( e s c a l a ) CASE (" c ", "C") [ . . . ] CASE (" k ","K") k e l v i n = T c e l s i u s = kelvin − 273.15 f a h r e n h e i t = ( 9 ∗ c e l s i u s / 5 . 0 ) + 32 I F ( k e l v i n < 0) THEN

PRINT∗ ,"AVISO : temperatura <0K"

STOP END I F

PRINT∗ ,"A temperatura em Celsius :  ", c e l s i u s ,"C"

PRINT∗ ,"A temperatura em Farenheit :  ", f a h r e n h e i t ,"F "

PRINT∗ ,"A temperatura em Kelvin :  ", k e l v i n ,"K"

CASE (" f "," F ") [ . . . ] CASE DEFAULT

[ . . . ] END SELECT

(18)

ufpellogo

Estrutura de Seleção CASE

PROGRAM temperatura [ . . . ] SELECT CASE ( e s c a l a ) CASE (" c ", "C") [ . . . ] CASE (" k ","K") [ . . . ] CASE (" f "," F ") f a h r e n h e i t = T c e l s i u s = ( f a h r e n h e i t − 3 2 ) ∗ 5 / 9 . 0 k e l v i n = c e l s i u s + 273.15 I F ( k e l v i n < 0) THEN

PRINT∗ ,"AVISO : temperatura <0K"

STOP END I F

PRINT∗ ,"A temperatura em Celsius :  ", c e l s i u s ,"C"

PRINT∗ ,"A temperatura em Farenheit :  ", f a h r e n h e i t ,"F "

PRINT∗ ,"A temperatura em Kelvin :  ", k e l v i n ,"K"

CASE DEFAULT [ . . . ] END SELECT

(19)

ufpellogo

Estrutura de Seleção CASE

PROGRAM temperatura [ . . . ] SELECT CASE ( e s c a l a ) CASE (" c ", "C") [ . . . ] CASE (" k ","K") [ . . . ] CASE (" f "," F ") [ . . . ] CASE DEFAULT p r i n t∗ ," e s c a l a nao e x i s t e n t e :  d i g i t e C, FouK" END SELECT

(20)

ufpellogo

Estrutura de Repetição DO

Definição

A estrutura de

repetição DO

fornece um mecanismo para

controle de desvio de fluxo, que permite que um

bloco de

comandos

seja

executado

de forma

repetida

, através de um

número

finito

ou

infinito

de

repetições

.

(21)

ufpellogo

Estrutura de Repetição DO

Caso 1:

Comando

DO ... END DO

finito

→ Permite que sejam feitas umnúmero finito de iterações, onde a cada iteração os comandos listados dentro do bloco serão executados.

DO

<controle> = <início>, <fim>

,

[,

<passo>]

<comando 1>

...

<comando n>

END DO

1 A variável<controle>, do tipoINTEGER, é inicializada com o valor da expressão<início>:

→ se<controle>for um valor contido entre<inicio>e<fim>, os comandos listados dentro da estrutura serão executados.

→ caso contrário, o próximo comando imediatamente posterior aoEND DO será executado.

2 Após a execução dos comandos, o<passo>é adicionado à variável<controle>e o fluxo de execução é desviado para o item 1 acima, com os testes listados feitos novamente.

(22)

ufpellogo

Estrutura de Repetição DO

Caso 1:

Comando

DO ... END DO

finito

→ Permite que sejam feitas umnúmero finito de iterações, onde a cada iteração os comandos listados dentro do bloco serão executados.

DO

<controle> = <início>, <fim>

<comando 1>

...

<comando n>

END DO

Se o<passo>éomitido, seráadicionado o valor 1à variável<controle>: → neste caso,<inicio>deve ser menor do que<fim>;

(23)

ufpellogo

Estrutura de Repetição DO

Caso 1:

Comando

DO ... END DO

finito

→ Permite que sejam feitas umnúmero finito de iterações, onde a cada iteração os comandos listados dentro do bloco serão executados.

DO

<controle> = <início>, <fim>, <passo>

<comando 1>

...

<comando n>

END DO

Se o<passo>émaior do que zero, seráadicionadoo valor do<passo>à variável

<controle>:

→ neste caso<inicio>deve sermenordo que<fim>

(24)

ufpellogo

Estrutura de Repetição DO

Caso 1:

Comando

DO ... END DO

finito

→ Permite que sejam feitas umnúmero finito de iterações, onde a cada iteração os comandos listados dentro do bloco serão executados.

DO

<controle> = <início>, <fim>, <passo>

<comando 1>

...

<comando n>

END DO

Se o<passo>émenor do que zero, seráadicionadoo valor do<passo>à variável<controle>:

→ neste caso<inicio>deve sermaiordo que<fim>

(25)

ufpellogo

Estrutura de Repetição DO

Caso 1:

Comando

DO ... END DO

finito

→ Permite que sejam feitas umnúmero finito de iterações, onde a cada iteração os comandos listados dentro do bloco serão executados.

DO

<controle> = <início>, <fim>, <passo>

<comando 1>

...

<comando n>

END DO

O<passo>não pode ser igual a zero.

Nunca mude o valor das variáveis<controle>,<início>,<fim>e<passo>

dentro da estrutura de repetição.

NoFortran 77é permitido o uso de uma variável<controle>do tipoREAL. No Fortran 90não é permitido.

(26)

ufpellogo

Estrutura de Repetição DO

Caso 1:

Comando

DO ... END DO

finito

Exemplo: Cálculo do fatorial de um inteiro N

INTEGER : : i , N, f a t o r i a l PRINT∗ ,’ D i g i t eo valor deN: ’

READ∗ ,N f a t o r i a l = 1 DO i = 1 , N

f a t o r i a l = f a t o r i a l ∗ i END DO

p r i n t∗ ,’O f a t o r i a l deN= ’,N,’ vale  ’, f a t o r i a l END

(27)

ufpellogo

Estrutura de Repetição DO

Caso 2:

Comando

DO WHILE ... END DO

finito

→ Permite que sejam feitas umnúmero finito de iterações, enquanto umacondição lógicafor atendida; a cada iteração os comandos listados dentro do bloco serão executados.

DO WHILE

(

<condição> )

<comando 1>

...

<comando n>

END DO

1 Se a<condição>for avaliada como.TRUE.os comandos listados dentro da estrutura são executados.

2 Se a<condição>for avaliada como.FALSE.o comando imediatamente posterior aoEND DOserá executado.

(28)

ufpellogo

Estrutura de Repetição DO

Caso 2:

Comando

DO WHILE ... END DO

finito

Exemplo: Cálculo do fatorial de um inteiro N

INTEGER : : i , N, f a t o r i a l PRINT∗ ,’ D i g i t eo valor deN: ’

READ∗ ,N f a t o r i a l = 1 i = 2 DO WHILE ( i <= N) f a t o r i a l = f a t o r i a l ∗ i i = i + 1 END DO

p r i n t∗ ,’O f a t o r i a l deN= ’,N,’ vale  ’, f a t o r i a l END

(29)

ufpellogo

Estrutura de Repetição DO

Caso 3:

Comando

DO ... END DO

infinito

→ Permite que sejam feitas umnúmero infinito de iterações; a cada iteração os comandos listados dentro do bloco serão executados.

DO

<comando 1>

...

<comando n>

END DO

1 Ofluxode execução serádesviadoparafora da estruturausando o comando

EXIT:

(30)

ufpellogo

Estrutura de Repetição DO

Caso 3:

Comando

DO ... END DO

infinito

Exemplo: Cálculo do fatorial de um inteiro N

INTEGER : : i , N, f a t o r i a l PRINT∗ ,’ D i g i t eo valor deN: ’

READ∗ ,N f a t o r i a l = 1 i = 2 DO I F ( i > N) EXIT f a t o r i a l = f a t o r i a l ∗ i i = i + 1 END DO

p r i n t∗ ,’O f a t o r i a l deN= ’,N,’ vale  ’, f a t o r i a l END

(31)

ufpellogo

Estrutura de Repetição DO

Caso 3:

Comando

DO ... END DO

infinito

→ Permite que sejam feitas umnúmero infinito de iterações; a cada iteração os comandos listados dentro do bloco serão executados.

DO

<comando 1>

...

<comando n>

END DO

1 Ofluxode execução serádesviado dentro da estruturausando o comando

CYCLE:

→ neste caso, nenhum dos comandos entreCYCLEeEND DOé executado e uma nova iteração dentro do laço é executada.

Referências

Documentos relacionados

c.4) Não ocorrerá o cancelamento do contrato de seguro cujo prêmio tenha sido pago a vista, mediante financiamento obtido junto a instituições financeiras, no

- Remover as pastilhas usadas e retornar todo o parafuso de regulagem em seguida montar uma pastilha nova do lado da roda, empurrando com a mão a pinça no sentido do cilindro de

Os autores relatam a primeira ocorrência de Lymnaea columella (Say, 1817) no Estado de Goiás, ressaltando a importância da espécie como hospedeiro intermediário de vários parasitos

Verificada a efetividade da proposta, a Comissão de Licitações declarou vencedor o licitante Francisco Souza Lima Helm, sendo o total do item 14 licitado o valor de

Principais fontes de financiamento disponíveis: Autofinanciamento: (corresponde aos fundos Principais fontes de financiamento disponíveis: Autofinanciamento: (corresponde aos

A meta prevista para este indicador era garantir a realização de exames complementares em dia a 100% de hipertensos e diabéticos do programa, por tanto não foi atingida,

Local de realização da avaliação: Centro de Aperfeiçoamento dos Profissionais da Educação - EAPE , endereço : SGAS 907 - Brasília/DF. Estamos à disposição

Mediante o impacto do paciente com o ambiente do centro cirúrgico, a equipe de enfermagem deve estar voltada para o aspecto humano do atendimento, centrando suas