Documente Academic
Documente Profesional
Documente Cultură
PARA
WINDOWS
Sumrio
Captulo 1. INTRODUO ................................................................................................................................................. 7
1.3 FORTRAN............................................................................................................................................................. 8
1.4 CONVENES...................................................................................................................................................... 8
11.3 UTILIZAO DO WGNUPLOT PARA FAZER GRFICO DE UM ARQUIVO DE DADOS ...................................... 133
6
Captulo 1. INTRODUO
OBJETIVOS DO CAPTULO
Conceitos de: linguagem de programao, FORTRAN, projeto, programa-fonte, programa-objeto,
programa-executvel, compilao, comando
Procedimentos bsicos para programar em linguagem FORTRAN
Comandos do FORTRAN: WRITE e END
1.2 BIBLIOGRAFIA
No objetivo deste texto entrar em detalhes sobre hardware e software de computadores. Aos
interessados nestes aspectos recomenda-se o livro de Ramalho (2000), que adotado neste texto como
referncia para termos tcnicos de informtica em portugus. Dois textos recomendados sobre algoritmos
so o livro de Forbellone e Eberspacher (2000) e a apostila de Moraes (2000). O material apresentado
aqui baseado no livro de Adams et al. (1997), que se constitui num manual completo sobre a linguagem
FORTRAN 95, padronizada pelas organizaes ISO (International Standadrs Organization) e ANSI
(American National Standards Institute).
7
1.3 FORTRAN
Existe uma infinidade de linguagens de programao, por exemplo, Assembly, Cobol, Visual
Basic, Pascal, Java, C++ etc (Ramalho, 2000, p. 114 e 124-30). Elas so usadas para criar os programas,
tambm denominados de softwares ou aplicativos, que so empregados nos computadores. A utilidade
das linguagens de programao pode ser percebida ao se lembrar para que so usados, por exemplo: os
sistemas operacionais Windows, Unix e Linux; os aplicativos Word, Excel, PowerPoint, FrontPage,
CorelDraw, Origin e Acrobat; os navegadores da internet Netscape e Explorer; e os programas dos caixas
automticos dos bancos.
A linguagem FORTRAN, contrao de FORmula TRANslation (Traduo de Frmulas), ainda a
principal linguagem de programao usada em engenharia e aplicaes cientficas (Adams, 2000, p. 1).
Foi criada em 1954. Sua primeira verso comercial surgiu em 1957. As verses do FORTRAN
padronizadas pela ANSI e ISO so:
1) Ano 1966 = FORTRAN 66
2) Ano 1978 = FORTRAN 77
3) Ano 1992 = FORTRAN 90
4) Ano 1997 = FORTRAN 95
1.4 CONVENES
8
1.5 INICIALIZAO DO APLICATIVO FORTRAN POWERSTATION 4.0
Para seguir este texto, no necessrio nenhum conhecimento anterior sobre linguagem de
programao. necessrio apenas ter conhecimentos bsicos sobre o sistema operacional Windows NT
4.0 ou verses mais recentes. Todos os programas em FORTRAN apresentados neste texto foram
editados e compilados com o aplicativo Fortran PowerStation 4.0, da Microsoft. Alm de seus manuais,
este aplicativo contm o livro de Hahn (1994) sobre FORTRAN 90 e o item Reference onde so descritos
todos os comandos do FORTRAN, incluindo exemplos.
Conforme mostrado na Figura 1.1, para iniciar o uso deste aplicativo, deve-se executar no
Windows: Start, Programs, Fortran PowerStation 4.0, Microsoft Developer Studio. Para facilitar a
edio dos programas, recomenda-se maximizar a janela principal do Fortran, clicando sobre o cone
central que fica no canto superior direito. Fazendo isso, o aspecto do Fortran dever ser semelhante
quele mostrado na Figura 1.2.
9
Figura 1.2 Janela principal do aplicativo Fortran PowerStation 4.0.
1) Na barra em azul, o cone do Fortran e o ttulo da janela principal: Microsoft Developer Studio.
2) Abaixo da barra em azul, o menu do Fortran, ou seja, as opes existentes para usar este aplicativo,
que so: File, Edit, View, Insert, Build, Tools, Window e Help.
3) A janela principal do Fortran dividida em trs partes ou subjanelas. Se no estiver aparecendo a
subjanela inferior, mostrada na Figura 1.2, deve-se executar: View, Output.
4) Na subjanela do lado esquerdo, tem-se o diretrio principal dos manuais do Fortran, destacando-se:
Reference, que uma lista de comandos do FORTRAN 90, incluindo explicaes e exemplos de uso;
e Fortran 90 for Scientists and Engineers, que um livro sobre a linguagem FORTRAN 90. Esta
subjanela tambm usada para mostrar os nomes dos programas editados na linguagem FORTRAN.
Quando um programa estiver sendo editado, para acessar os manuais, deve-se clicar sobre a opo ?
InfoView, mostrada na Figura 1.2, que fica na parte inferior da subjanela do lado esquerdo. E para
voltar ao programa que est sendo editado, basta clicar sobre a opo FileView.
5) Na subjanela inferior so apresentadas informaes sobre erros de programao e compilao.
Detalhes sero vistos no captulo 2.
6) A subjanela do lado direito, a maior das trs, usada para: apresentar o contedo dos manuais e para a
edio de programas em FORTRAN.
1
1.6 CRIAO DE UM PROJETO DO TIPO CONSOLE APPLICATION
O Fortran organiza todos os arquivos de um programa numa entidade chamada projeto. Em termos
prticos, a criao de um projeto resulta na criao de uma pasta ou diretrio dentro do Windows.
Existem diversos tipos de projetos que podem ser criados com o Fortran. A escolha do tipo depende da
finalidade do programa e dos recursos do Windows que se deseja empregar. No caso deste texto, em sua
parte bsica, que compreende os captulos 1 a 13, so empregados apenas projetos do tipo Console
Application. E na parte avanada, que corresponde aos captulos 14 a 20, so usados projetos do tipo
QuickWin Application, que permite utilizar diversos recursos do Windows.
Para criar um projeto do tipo Console Application, devem ser executados os seguintes passos:
1) No menu do Fortran, conforme mostrado na Figura 1.3: File, New.
2) Na janela New, mostrada na Figura 1.4, clicar sobre a opo Project Workspace. Depois, clicar
sobre o boto OK.
3) Na janela New Project Workspace, mostrada na Figura 1.5, necessrio executar o que segue:
1
Figura 1.4 Segundo passo na criao de um projeto no Fortran.
a) Entre os seis tipos de projetos apresentados na opo Type, clicar sobre Console Application no
caso deste tipo de projeto no estar selecionado (realado em azul).
b) Na opo Location estar indicado um diretrio (pasta) default, ou seja, um diretrio escolhido
pelo prprio Fortran em funo de sua configurao atual. possvel que no seja o diretrio
desejado. Neste caso, deve-se clicar sobre o boto Browse para indicar o diretrio onde se quer
criar o projeto. Ao se fazer isso, surgir a janela Choose Directory mostrada na Figura 1.6, na qual
deve-se executar:
Na opo Drives, clicando sobre o tringulo invertido, escolher C:
Na opo Directory name, digitar C:\MSDEV\Projects, conforme mostrado na Figura 1.7.
Clicar sobre o boto OK.
c) Estar de volta a janela New Project Workspace, mostrada na Figura 1.5. Clicar dentro do espao
de edio da opo Name. Escrever o nome do projeto, por exemplo, programa01. Depois disso,
a janela New Project Workspace dever ficar conforme a Figura 1.8. Deve-se perceber que o
nome do projeto, digitado na opo Name, aparece automaticamente na opo Location. Em
1
seguida, deve-se clicar sobre o boto Create. Aps isso, o Fortran criar um diretrio com o nome
do projeto indicado, dentro do diretrio j selecionado, conforme mostrado na Figura 1.9.
1
Figura 1.9 Fortran com o nome do diretrio criado para o projeto especificado.
Captulo 1. Introduo 14
b) Clicar sobre o boto OK
3) Na janela Microsoft Developer Studio, mostrada na Figura 1.13, clicar sobre o boto Yes
4) Na subjanela do lado esquerdo do Fortran, clicar sobre o sinal + ao lado do nome do projeto; dever
aparecer o nome do programa-fonte que foi inserido no projeto; no caso, programa01.f90
5) Clicar rapidamente duas vezes sobre o nome do programa-fonte que foi inserido
Captulo 1. Introduo 15
6) Na janela Microsoft Developer Studio, mostrada na Figura 1.14, clicar sobre o boto Yes
7) O programa-fonte inserido no projeto j est pronto para ser editado na subjanela do lado direito do
Fortran, conforme mostrado na Figura 1.15.
Figura 1.13.
Figura 1.14.
Captulo 1. Introduo 16
Figura 1.15 Fortran pronto para edio do programa-fonte.
Aps a criao e insero do programa-fonte dentro do projeto, o Fortran est pronto para ser
usado na edio do programa-fonte, conforme mostrado na Figura 1.15. Um exemplo de edio de
programa-fonte apresentado a seguir.
1) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto mostrado
abaixo em vermelho (para aparecerem as aspas, deve-se clicar sobre a tecla delas e, em seguida, clicar
sobre a tecla de espao em branco).
2) Para gravar ou salvar este texto, no menu do Fortran, executar: File, Save. Em seguida, na
extremidade inferior da janela principal do Fortran, surgir uma mensagem informando o diretrio e o
nome do programa-fonte que foi gravado ou salvo, como mostrado na Figura 1.16.
3) Comentrios sobre este programa:
Captulo 1. Introduo 17
a) Dentro do editor de textos do Fortran, os comandos da linguagem FORTRAN so mostrados na
cor azul, conforme pode ser visto na Figura 1.16. E o que criado ou definido pelo programador
mostrado na cor preta. Comandos so palavras-chave que tm uma funo especfica e devem ser
usados exatamente de acordo com suas normas.
b) Existem dezenas de comandos na linguagem FORTRAN. No caso do primeiro programa-fonte,
mostrado na Figura 1.16, so usados apenas dois comandos: WRITE e END.
c) Como ser visto aps a execuo deste programa, ele simplesmente ir mostrar numa janela duas
linhas de texto: na primeira, Meu primeiro programa em Fortran; e, na segunda, Ano 2004. Isso
conseguido com o comando WRITE. Qualquer texto colocado entre aspas aps o comando
WRITE(*,*) escrito numa janela.
d) O comando END necessrio para indicar o fim do programa.
Aps concluir a edio de um programa-fonte, ele deve ser compilado. O processo de compilao
traduz o programa-fonte (que um arquivo do tipo texto, isto , que as pessoas conseguem ler
naturalmente, como o programa01.f90) no chamado programa-objeto, que um arquivo do tipo binrio
Captulo 1. Introduo 18
(escrito na linguagem dos computadores, usando apenas os algarismos zero-0 e um-1). Uma linguagem de
programao de alto nvel (Ramalho, 2000) como o FORTRAN se constitui numa forma amigvel ou
relativamente fcil de se escrever programas. O aplicativo Fortran PowerStation 4.0, alm do editor de
programas, tambm tem junto um compilador de programas. Para compilar um programa-fonte que est
aberto no editor de textos do Fortran, deve-se executar o seguinte no menu do Fortran: Build, Compile
Aps a compilao, conforme mostrado na Figura 1.17, aparecero trs linhas com mensagens
na subjanela da parte inferior do Fortran:
1) A primeira informa que o Fortran est compilando (Compiling) o programa-fonte.
2) A segunda informa o nome e o diretrio do programa-fonte que est sendo compilado.
3) Finalmente, a terceira informa o nome do programa-objeto (no caso, programa01.obj) que foi gerado
e o nmero de erros (errors) e de avisos (warnings) relativos ao programa-fonte compilado. Se houver
algum erro, o programa-objeto no gerado. Avisos no impedem a gerao do programa-objeto. O
nome do programa-objeto igual ao nome do programa-fonte mas com extenso obj
Captulo 1. Introduo 19
seguinte no Windows: Start, Programs, Windows NT Explorer. Depois, deve-se acessar o diretrio do
projeto, que deve estar dentro do diretrio C:\Msdev\Projects
Captulo 1. Introduo 20
1) A primeira informa que o Fortran est gerando o programa-executvel, processo chamado de
lincagem (linking).
2) A segunda informa o nome do programa-executvel (no caso, programa01.exe) que foi gerado e o
nmero de erros (errors) e de avisos (warnings) relacionados a ele. O nome do programa-executvel
igual ao nome do projeto mas com extenso exe
O programa-executvel gravado automaticamente dentro do subdiretrio Debug, que fica dentro
do diretrio do projeto, alm de outros arquivos auxiliares. Isso pode ser visto com o aplicativo Windows
NT Explorer, como mostrado na Figura 1.19. Note nesta figura que no Windows NT Explorer a extenso
ou Type do programa-executvel aparece como Application.
Captulo 1. Introduo 22
1.13 EXERCIOS
Exerccio 1.1
1) Editar um programa-fonte em FORTRAN para escrever a data atual.
2) Compilar o programa-fonte
3) Gerar o programa-executvel
4) Executar o programa
Exerccio 1.2
1) Repetir o exerccio 1.1 para escrever em linhas diferentes cada um dos seguintes itens: nome, e-mail,
endereo e telefone de uma pessoa.
Captulo 1. Introduo 23
Captulo 2. VARIVEIS DO TIPO INTEIRO
OBJETIVOS DO CAPTULO
Conceitos de: variveis do tipo inteiro, atribuio, avisos e erros de compilao, erros de execuo,
comentrios dentro do programa-fonte
Operadores matemticos bsicos
Comandos do FORTRAN: INTEGER e READ
INTEGER A
WRITE(*,*) "A"
WRITE(*,*) A
END
c) A linha WRITE(*,*) "A" escreve o comentrio que est entre aspas; no caso a letra A.
d) A linha WRITE(*,*) A escreve o valor da varivel A que est armazenado na memria do
computador.
e) A linha END encerra o programa.
6) Ao se compilar o programa, executando Build, Compile, o resultado deve ser o mostrado na Figura
2.1. Deve-se notar na subjanela inferior um aviso (warning) mencionando que o valor da varivel A
no foi definido.
7) Gerar o programa-executvel fazendo Build, Build.
8) Ao se executar o programa, atravs de Build, Execute, surge uma janela, mostrada na Figura 2.2,
dentro da qual tem-se:
a) Na primeira linha, a letra A, resultado do comando WRITE(*,*) "A" do programa.
b) Na segunda linha, o valor zero, resultado do comando WRITE(*,*) A do programa. Isso ocorre
porque no foi definido um valor para a varivel A, conforme o prprio Fortran informou durante
a compilao do programa. Portanto, sempre necessrio definir o valor de cada varivel do
programa, caso contrrio, por default, assume-se valor nulo.
c) E na terceira linha, a frase Press any key to continue. Como diz este aviso, basta clicar em
qualquer tecla para continuar. Ao se fazer isso, a execuo do programa encerrada.
9) Deve-se perceber a diferena que existe entre os comandos WRITE(*,*) "A" e WRITE(*,*) A do
programa. No primeiro, A um comentrio. No segundo, A uma varivel utilizada para armazenar
um valor inteiro na memria do computador.
INTEGER A
A = 3
WRITE(*,*) "A"
WRITE(*,*) A
END
2) Comentrios sobre o programa: a nica diferena entre a verso anterior (A) e a atual (B) do
programa02.f90 a incluso da segunda linha, ou seja, A = 3. O sinal de igualdade dentro de um
programa escrito em linguagem FORTRAN utilizado para atribuir o valor que est do lado direito
varivel do lado esquerdo. Portanto, neste caso, o valor 3 atribudo varivel A. Em outras palavras,
o valor 3 armazenado num espao da memria do computador que identificado pelo nome ou
rtulo A, o nome da varivel. Este valor utilizado (3) apenas um exemplo; ele pode ser qualquer
nmero inteiro.
3) Nesta verso do programa, ao se executar Build, Compile, no haver aviso (warning) porque, neste
caso, o valor da varivel A est definido.
4) Gerar o programa-executvel fazendo Build, Build.
5) Ao se executar o programa, atravs de Build, Execute, surge uma janela, mostrada na Figura 2.3,
dentro da qual tem-se:
a) Na primeira linha, a letra A, resultado do comando WRITE(*,*) "A" do programa.
b) Na segunda linha, o valor 3, resultado do comando WRITE(*,*) A do programa e do comando
anterior, A = 3.
c) E na terceira linha, a frase Press any key to continue.
6) Deve-se perceber que o programa executado, linha por linha, da primeira (INTEGER A) at a ltima
(END).
7) Um exemplo de erro de compilao apresentado na Figura 2.4. Ele ocorre devido eliminao do
segundo asterisco da terceira linha do programa. Erros de compilao ocorrem quando os comandos
Captulo 2. Variveis do tipo inteiro 26
do FORTRAN so utilizados de forma incorreta. Na subjanela inferior do Fortran, geralmente haver
um comentrio indicando cada erro (error). Logo aps o nome do programa-fonte compilado, entre
parnteses, indicado o nmero da linha do programa-fonte aonde deve estar o erro. No exemplo da
Figura 2.4, o compilador do Fortran mostra o seguinte comentrio:
C:\marchi\programa02\programa02b.f90(3): error FOR3852: syntax error detected between , and ).
Portanto, este comentrio indica que na linha 3 h um erro de sintaxe (erro que resulta do uso
incorreto de um comando, no caso o WRITE) entre a vrgula e o sinal de fechamento de parnteses.
8) As linhas do programa-fonte so numeradas do topo para baixo, e as colunas, da esquerda para a
direita. Na extremidade inferior da janela principal do Fortran, do lado direito, sempre so indicados a
linha (Ln) e a coluna (Col) aonde o cursor se encontra dentro do programa-fonte.
INTEGER A
A = 3
WRITE(*,*) "Valor de A = ", A
2) Comentrios sobre o programa: a diferena bsica entre a verso anterior (B) e a atual (C) do
programa02.f90 a juno dos dois comandos WRITE num s, na terceira linha do programa, isto ,
WRITE(*,*) "Valor de A = ", A. Esta forma do comando WRITE usada quando se quer
escrever na mesma linha diversos elementos. No caso, so apenas dois elementos, ou seja, o
comentrio Valor de A = e a varivel A. Os elementos devem ser separados por vrgula.
3) Executar Build, Compile para compilar o programa.
4) Gerar o programa-executvel fazendo Build, Build.
5) Ao se executar o programa, atravs de Build, Execute, surge uma janela, mostrada na Figura 2.5,
dentro da qual tem-se:
a) Na primeira linha, como resultado do comando WRITE(*,*) "Valor de A = ", A do programa,
o comentrio Valor de A = e, na mesma linha, o valor da varivel A, cujo valor atribudo dentro
do programa foi 3.
b) E na segunda linha, a frase Press any key to continue.
INTEGER A
A = 4
A = 3
WRITE(*,*) "Valor de A = ", A
END
2) Comentrios sobre o programa: a nica diferena entre a verso anterior (C) e a atual (D) do
programa02.f90 a incluso da linha A = 4, que atribui o valor 4 varivel A.
3) Executar Build, Compile para compilar o programa.
4) Gerar o programa-executvel fazendo Build, Build.
1) Dentro do Fortran, editar exatamente o texto mostrado abaixo em vermelho, incluindo a linha em
branco.
! Programa02.f90
INTEGER A
2) Comentrios sobre o programa: em cada linha do programa-fonte, tudo que estiver direita do
smbolo ! (exclamao) no executado pelo programa. So apenas comentrios usados para
esclarecer o que faz cada parte do programa. Isso chamado de documentao interna. Dentro do
editor do Fortran, todos os comentrios ficam na cor verde, como mostrado na Figura 2.6. Um
comentrio pode envolver uma linha inteira do programa, como na primeira da verso E, ou apenas
uma parte, como na quarta linha do programa. Linhas em branco dentro do programa-fonte tambm
no so executadas. Elas equivalem a um comentrio em branco. Um exemplo a terceira linha do
programa02.f90, verso E, na Figura 2.6.
3) Executar Build, Compile para compilar o programa.
4) Gerar o programa-executvel fazendo Build, Build.
5) Ao se executar o programa, atravs de Build, Execute, o resultado o mesmo mostrado na Figura
2.5. Isso ocorre porque as diferenas entre a verso C e a atual (E) do programa02.f90 so apenas os
comentrios e uma linha em branco, que no so executados pelo programa.
6) Para maior clareza e facilidade de compreenso do programa-fonte, recomenda-se que dentro dele
sejam usados comentrios e linhas em branco.
INTEGER A, B, C, D, E, F, G
A = -6
B = 2
C = A + B
D = B - A
Captulo 2. Variveis do tipo inteiro 30
E = A * B
F = A / B
G = A ** B
END
1) Dentro do Fortran, alterar o programa03.f90, verso A, para que fique exatamente igual ao texto
mostrado abaixo em vermelho, incluindo as linhas em branco.
INTEGER A, B, C, D, E, F, G
C = A + B
D = B - A
E = A * B
F = A / B
G = A ** B
END
6) Executar novamente o programa, entrando com outros valores para A e B. Em seguida, analisar
cada resultado, comparando-o com o valor esperado obtido de um clculo mental.
7) Executar novamente o programa, com A = 6 e B = 0. Nenhum resultado apresentado porque o
programa no consegue dividir 6 por 0. Isso gera um erro que interrompe a execuo normal do
programa. Ao se implementar um programa, deve-se prepar-lo para que seja evitado qualquer
2.9 EXERCIOS
Exerccio 2.1
Executar novamente o programa03.f90, verso B, com A = 2 e B = 1. Em seguida, analisar cada
resultado, comparando-o com o valor esperado obtido de um clculo mental, especialmente o caso da
potenciao. No Fortran, para abrir um projeto j existente, como o programa03, basta executar File,
Open Workspace. Em seguida, indicar o diretrio do projeto e selecionar o arquivo que tem o nome
do projeto e extenso mdp, no caso programa03.mdp
Exerccio 2.2
Executar novamente o programa03.f90, verso B, usando nmeros reais, isto , A = 1.5 e B = 0.4.
Nmeros reais so representados com o sinal de ponto para separar a parte inteira da decimal.
Exerccio 2.3
1) Editar um programa-fonte em FORTRAN para executar o seguinte algoritmo (passos):
a) ler trs nmeros inteiros
b) calcular a mdia aritmtica deles
c) escrever os valores lidos e o valor da mdia aritmtica juntamente com comentrios para
identific-los
Captulo 2. Variveis do tipo inteiro 35
2) Compilar o programa-fonte
3) Gerar o programa-executvel
4) Executar o programa com os valores 1, 2 e 3. Em seguida, analisar o resultado da mdia fornecido
pelo programa comparando-o com o valor esperado obtido por um clculo mental.
5) Repetir o item 4 para os valores 1, 1 e 2.
Exerccio 2.4
1) Editar um programa-fonte em FORTRAN para executar o seguinte algoritmo (passos):
a) ler o primeiro valor (inteiro) de uma progresso aritmtica (P.A.), denotado por A1
b) ler a diferena (nmero inteiro) entre dois termos subseqentes da P.A., denotada por D
c) ler o nmero (inteiro) de termos da P.A., denotado por N
d) calcular o ltimo termo da P.A., denotado por AN
e) calcular a soma de todos os termos da P.A., denotado por SN
f) escrever os trs valores lidos e os dois calculados juntamente com comentrios para identific-los
2) Compilar o programa-fonte
3) Gerar o programa-executvel
4) Executar o programa para A1 = 1, D = 3 e N = 5. Os resultados devem ser AN = 13 e SN = 35.
OBJETIVOS DO CAPTULO
Conceitos de: variveis do tipo real, traduo de expresses algbricas em FORTRAN, mistura de
variveis do tipo inteiro com real, prioridade nas operaes matemticas
Operadores matemticos bsicos
Comando do FORTRAN: REAL
3.1 programa03c.f90
b) No FORTRAN, nmeros reais so representados com o sinal de ponto para separar a parte inteira
da decimal. Deve-se lembrar que em portugus se usa a vrgula com este fim.
c) A linha REAL A define a varivel A como sendo do tipo real. Este comando reserva um espao na
memria do computador, utilizando o nome ou rtulo A para armazenar um valor real. As demais
linhas do programa j foram comentadas no captulo 2.
9) Executar novamente o programa, atravs de Build, Execute, com A = 0.0031. Junto a um nmero
real, a letra E usada para representar nmeros muito grandes ou muito pequenos atravs da chamada
notao cientfica ou exponencial. Desta forma, o valor 3.100000E-03 da varivel A, mostrado na
Figura 3.3, significa 3.1x10-3, que igual a 0.0031.
10) Executar novamente o programa, atravs de Build, Execute, com A = 1.0E+2. Pode-se fornecer
dados ao programa usando a notao cientfica ou exponencial, como no exemplo mostrado na Figura
3.4, onde A = 1.0E+2 = 1.0x102 = 100 = 1.0E2 = 1E2.
3.2 programa03d.f90
1) Nesta seo ser usado um projeto j existente, no caso o projeto da seo anterior. Portanto, deve-se
executar o seguinte no Fortran:
a) Clicar sobre o nome do programa-fonte
b) Edit, Cut para retirar o programa-fonte do projeto.
2) No Fortran, seguindo o procedimento apresentado na seo 1.7 do captulo 1, criar e inserir no
projeto chamado programa03 o programa-fonte programa03d.f90
3) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 3.2.
D = A
B = 1 / D
C = 1.0 / D
END
3.3 programa03e.f90
Captulo 3. Variveis do tipo real 41
1) Nesta seo ser usado um projeto j existente, no caso o projeto da seo anterior. Portanto, deve-se
executar o seguinte no Fortran:
a) Clicar sobre o nome do programa-fonte
b) Edit, Cut para retirar o programa-fonte do projeto.
2) No Fortran, seguindo o procedimento apresentado na seo 1.7 do captulo 1, criar e inserir no
projeto chamado programa03 o programa-fonte programa03e.f90
3) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 3.3.
C = A + B
D = B - A
E = A * B
F = A / B
G = A ** B
END
7) Analisar cada resultado mostrado na Figura 3.6 comparando-o com o valor esperado obtido de um
clculo mental ou com o uso de uma calculadora.
8) Executar novamente o programa com outros valores para A e B. Analisar cada novo resultado
comparando-o com o valor esperado obtido de um clculo mental ou com o uso de uma calculadora.
H1 = A + B C (3.1)
B
H2 = A + (3.2)
C
B
H4 = A + D (3.4)
C
B
H5 = A + (3.5)
CD
H6 = A + BC D (3.6)
H9 = (C 3 ) 2 (3.7)
1
H 10 = B3 (3.8)
3
3.5 programa03f.f90
1) Nesta seo ser usado um projeto j existente, no caso o projeto da seo 3.3 deste captulo.
Portanto, deve-se executar o seguinte no Fortran:
a) Clicar sobre o nome do programa-fonte
b) Edit, Cut para retirar o programa-fonte do projeto.
2) No Fortran, seguindo o procedimento apresentado na seo 1.7 do captulo 1, criar e inserir no
projeto chamado programa03 o programa-fonte programa03f.f90
3) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 3.6.
4) Comentrios sobre o programa:
a) Nas duas primeiras linhas usado o comando REAL para definir as variveis do tipo real do
programa. Num mesmo programa, pode-se usar um ou mais comandos REAL ou INTEGER.
b) A linha READ(*,*) A, C, B, D do programa usada para ler os valores de quatro variveis. Um
nico comando READ pode ser usado para a leitura de diversos valores que so atribudos a
diversas variveis, que tm que estar separadas por vrgula.
c) As expresses em FORTRAN para as variveis H1 a H6, H9 e H10 correspondem
respectivamente s expresses algbricas dadas pelas Equaes (3.1) a (3.8).
H1 = A + B - C
H2 = A + B / C
H3 = (A + B) / C
H4 = A + B / C * D
H5 = A + B / (C * D)
H6 = A + B * C ** D
H7 = A + (B * (C ** D))
H8 = 1.0 + 1.0E-10
H9 = C ** 3 ** 2
END
3.6 EXERCCIOS
Exerccio 3.1
Escrever as expresses em linguagem FORTRAN que correspondem s seguintes expresses algbricas,
onde A, B e L so nmeros reais e I e J so nmeros inteiros:
Para verificar se a resposta de cada item est correta, basta implementar a expresso em FORTRAN num
programa e comparar seu resultado com o valor obtido com uma calculadora para a expresso algbrica
correspondente. Os dois resultados devem ser iguais. Isso tambm vale para o prximo exerccio.
Exerccio 3.3
1) Editar um programa-fonte em FORTRAN para executar o seguinte algoritmo (passos):
a) ler trs nmeros reais
b) calcular a mdia aritmtica deles
c) escrever os valores lidos e o valor da mdia aritmtica juntamente com comentrios para
identific-los
2) Compilar o programa-fonte
3) Gerar o programa-executvel
4) Executar o programa com os valores 1.0, 2.5 e 3.7. Em seguida, analisar o resultado da mdia
fornecido pelo programa comparando-o com o valor esperado obtido com uma calculadora.
5) Repetir o item 4 para os valores 10, 1E+3 e 2E-1.
Exerccio 3.4
1) Editar um programa-fonte em FORTRAN para executar o seguinte algoritmo (passos):
a) ler o primeiro valor (real) de uma progresso aritmtica (P.A.), denotado por A1
b) ler a diferena (nmero real) entre dois termos subseqentes da P.A., denotada por D
c) ler o nmero (inteiro) de termos da P.A., denotado por N
d) calcular o valor (real) do ltimo termo da P.A., denotado por AN
e) calcular a soma de todos os termos da P.A., denotado por SN
f) escrever os trs valores lidos e os dois calculados juntamente com comentrios para identific-los
2) Compilar o programa-fonte
3) Gerar o programa-executvel
4) Executar o programa para A1 = 1.3, D = 3.9 e N = 5. Os resultados devem ser AN = 16.9 e SN = 45.5.
OBJETIVOS DO CAPTULO
Conceitos de: variveis do tipo caracter, strings, funes intrnsecas
Funes intrnsecas do FORTRAN para variveis do tipo caracter: ADJUSTL, ADJUSTR, TRIM e
LEN
Comando do FORTRAN: CHARACTER
4.1 programa4a.f90
END
9) No FORTRAN, cada varivel do tipo caracter deve ser declarada com a dimenso adequada
quantidade mxima de letras, nmeros, espaos em branco e smbolos que ela poder conter. Quando
no se declara o tamanho, assume-se que seja apenas um caracter. Devido a isso, somente a letra U foi
apresentada como contedo da varivel A, na verso 1 do programa4a.f90, embora ela tenha sido
definida com muito mais caracteres.
10) Para declarar a dimenso de uma varivel do tipo caracter, basta colocar o tamanho entre parnteses
junto palavra character, como exemplificado na verso 2 do programa4a.f90, na Tabela 4.2.
END
11) Alterar a primeira linha do programa4a.f90 para ficar igual Tabela 4.2. Compilar novamente o
programa e gerar seu executvel. Executar o programa. Agora, conforme a Figura 4.3, apresentado
o contedo completo da varivel A, j que ele ocupa apenas 18 caracteres e a varivel A foi
dimensionada prevendo at 50 caracteres.
1) Nesta seo ser usado o mesmo projeto da seo anterior. Portanto, deve-se executar o seguinte no
Fortran:
a) Clicar sobre o nome do programa-fonte
b) Edit, Cut para retirar o programa-fonte do projeto.
2) No Fortran, seguindo o procedimento apresentado na seo 1.7 do captulo 1, criar e inserir no
projeto chamado programa04 o programa-fonte programa4b.f90
3) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 4.3.
4) Comentrios sobre o programa:
a) A linha CHARACTER(50) A declara a varivel A como sendo do tipo caracter. Este comando
reserva um espao na memria do computador, utilizando o nome ou rtulo A, para armazenar at
50 caracteres alfanumricos.
b) O comando READ do FORTRAN tambm pode ser usado para atribuir valor ou contedo a
uma varivel do tipo caracter, desde que o contedo esteja entre aspas. Um exemplo mostrado na
linha READ(*,*) A.
8) Executar novamente o programa, atravs de Build, Execute, testando outros contedos para a
varivel A e vendo o resultado. Testar, por exemplo, uma frase com pelo menos duas palavras mas
sem usar aspas para definir o contedo de A.
4.3 programa4c.f90
1) Nesta seo ser usado o mesmo projeto da seo anterior. Portanto, deve-se executar o seguinte no
Fortran:
a) Clicar sobre o nome do programa-fonte
b) Edit, Cut para retirar o programa-fonte do projeto.
2) No Fortran, seguindo o procedimento apresentado na seo 1.7 do captulo 1, criar e inserir no
projeto chamado programa04 o programa-fonte programa4c.f90
3) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 4.4.
4) Comentrios sobre o programa:
a) A linha CHARACTER(20) LOCAL, DIA declara duas variveis, LOCAL e DIA, como sendo do tipo
caracter, cada uma podendo armazenar at 20 caracteres alfanumricos.
b) A linha CHARACTER(10) HORA declara a varivel HORA como sendo do tipo caracter, podendo
armazenar at 10 caracteres alfanumricos.
c) A linha CHARACTER(90) FRASE declara a varivel FRASE como sendo do tipo caracter, podendo
armazenar at 90 caracteres alfanumricos.
d) A linha FRASE = "Frase: " // LOCAL // ", " // DIA // ", as " // HORA // " horas"
define o contedo da varivel FRASE com base em alguns comentrios que esto entre aspas e no
contedo das variveis LOCAL, DIA e HORA. Isso possvel devido ao uso do operador de
concatenao cujo smbolo composto por duas barras (//). Este operador permite juntar duas ou
mais variveis do tipo caracter.
FRASE = "Frase: " // LOCAL // ", " // DIA // ", as " // HORA // " horas"
END
8) Deve-se notar na Figura 4.5 que a escrita do contedo da varivel FRASE ocupou mais de uma linha.
Isso ocorre devido a sua extenso ser muito grande, isto , superior ao nmero disponvel de colunas
numa janela do tipo DOS.
9) No FORTRAN, se o contedo de uma varivel definido com menos caracteres do que o mximo
declarado, a diferena entre os caracteres ocupados e o mximo previsto preenchida com espaos
em branco, como no contedo da varivel FRASE. Por exemplo, a varivel LOCAL foi declarada
com tamanho mximo de 20 caracteres. Mas seu contedo foi definido com Curitiba, palavra que
ocupa apenas 8 caracteres. Neste caso, os demais 12 caracteres so preenchidos com espaos em
branco. O mesmo problema ocorre com as demais variveis. Formas de se resolver este problema so
abordadas na prxima seo.
10) Executar novamente o programa com outros contedos para as variveis LOCAL, DIA e HORA.
4.4 programa4d.f90
1) Nesta seo ser usado o mesmo projeto da seo anterior deste captulo. Portanto, deve-se executar o
seguinte no Fortran:
a) Clicar sobre o nome do programa-fonte
b) Edit, Cut para retirar o programa-fonte do projeto.
2) No Fortran, seguindo o procedimento apresentado na seo 1.7 do captulo 1, criar e inserir no
projeto chamado programa04 o programa-fonte programa4d.f90
Captulo 4. Variveis do tipo caracter 56
3) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 4.5.
L = LEN(A)
WRITE(*,*) "L de A = ", L
L = LEN(TRIM(ADJUSTL(A)))
WRITE(*,*) "L de A com TRIM e ADJUSTL = ", L
END
f) A funo ADJUSTL elimina os espaos em branco que esto esquerda de uma string e os passa
direita dela.
g) A funo ADJUSTR elimina os espaos em branco que esto direita de uma string e os passa
esquerda dela.
h) A funo TRIM elimina os espaos em branco que esto direita de uma string.
i) O resultado das funes ADJUSTL, ADJUSTR e TRIM so strings.
j) A funo LEN conta o nmero de caracteres de uma string ou varivel do tipo caracter. Seu
resultado um nmero inteiro.
k) Na instruo TRIM(ADJUSTL(A)) do programa, a funo TRIM opera sobre o resultado da funo
ADJUSTL sobre a varivel A.
l) Na linha L = LEN(A) do programa, a funo LEN opera sobre a varivel A e atribui o resultado
varivel inteira L.
4.5 EXERCCIO
Exerccio 4.1
1) Editar um programa-fonte em FORTRAN para executar o seguinte algoritmo (passos):
a) declarar quatro variveis do tipo caracter com dimenso de 5, 10, 20 e 30 caracteres
b) ler o contedo das quatro variveis
c) escrever o contedo de cada uma das quatro variveis
d) usando o operador de concatenao, escrever combinaes das quatro variveis lidas
e) aplicar e escrever o resultado da funo ADJUSTL a cada uma das quatro variveis lidas
f) aplicar e escrever o resultado da funo ADJUSTR a cada uma das quatro variveis lidas
g) aplicar e escrever o resultado da funo TRIM a cada uma das quatro variveis lidas
h) aplicar e escrever o resultado da funo TRIM(ADJUSTL) a cada uma das quatro variveis lidas
i) aplicar e escrever o resultado da funo LEN a cada uma das quatro variveis lidas
j) aplicar e escrever o resultado da funo LEN(TRIM(ADJUSTL)) a cada uma das quatro variveis
lidas
2) Compilar o programa-fonte
3) Gerar o programa-executvel
4) Executar o programa. Em seguida, comparar os resultados escritos com o esperado para cada caso.
OBJETIVOS DO CAPTULO
Conceitos de: arquivo de sada, biblioteca, funes matemticas intrnsecas
Criar e usar arquivos para mostrar resultados da execuo de um programa em FORTRAN
Usar o aplicativo Notepad do Windows para mostrar o contedo de um arquivo durante a execuo de
um programa em FORTRAN
Funes matemticas intrnsecas do FORTRAN
Comandos do FORTRAN: WRITE(nmero,*), OPEN, CLOSE, USE, SYSTEM
5.1 programa5a.f90
b) Na segunda linha, o programa pra e fica aguardando que seja fornecido o valor da varivel A,
resultado do comando READ(*,*) A do programa. Para que o programa continue sua execuo
necessrio digitar o valor 1 para a varivel A, por exemplo, e, em seguida, clicar na tecla
enter.
c) Na terceira linha, o comentrio Valor de A = e o valor da varivel A, resultado do comando
WRITE(6,*) "Valor de A = ", A do programa. Deve-se notar que foi fornecido um valor
inteiro para a varivel A, no caso 1. Mas o resultado do programa mostra o valor 1.000000
porque a varivel A do tipo real.
5.2 programa5b.f90
1) Nesta seo ser usado o mesmo projeto da seo anterior. Portanto, deve-se executar o seguinte no
Fortran:
a) Clicar sobre o nome do programa-fonte
b) Edit, Cut para retirar o programa-fonte do projeto.
2) No Fortran, seguindo o procedimento apresentado na seo 1.7 do captulo 1, criar e inserir no
projeto chamado programa05 o programa-fonte programa5b.f90
3) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 5.2.
OPEN(7, file="saida5b.txt")
WRITE(7,*) "Valor de A = ", A
CLOSE(7)
END
8) A existncia do arquivo saida5b.txt pode ser comprovada ao se executar Start, Programs, Windows
NT Explorer. Em seguida, indicar o diretrio do projeto, no caso, programa05. Finalmente, ao se
clicar duas vezes sobre o nome do arquivo, ele ser aberto, podendo-se ver o seu contedo.
9) Executar novamente o programa, atravs de Build, Execute, com A = 123. Neste caso, como j
existe o arquivo saida5b.txt ele ser usado para escrever o novo resultado do programa sobre o
resultado anterior, conforme mostrado na Figura 5.5. Ou seja, o resultado anterior, mostrado na
Figura 5.4 eliminado ou apagado. Para evitar isso, necessrio gravar os resultados em arquivos
diferentes a cada execuo do programa. Outra possibilidade alterar o nome do arquivo de
resultados antes do programa ser executado novamente. Executar o indicado no item anterior (8)
para ver o novo contedo do arquivo saida5b.txt.
10) No comando OPEN tambm possvel especificar todo o caminho ou o diretrio aonde o arquivo
deve ser criado ou aberto. Quando o diretrio no especificado, por default, usa-se o diretrio do
projeto ou o diretrio no qual o programa executado. Por exemplo, trocar a linha OPEN(7,
file="saida5b.txt"), pelo seguinte: OPEN(7, file="C:\Temp\saida5b.txt"). Compilar
novamente o programa5b.f90, gerar o seu executvel, executar o programa. Usar o aplicativo
11) Na prxima seo, apresentada uma forma de se automatizar a abertura do arquivo de sada. Isso
permite maior rapidez na visualizao dos resultados de um programa.
5.3 programa5c.f90
1) Nesta seo ser usado o mesmo projeto da seo anterior. Portanto, deve-se executar o seguinte no
Fortran:
a) Clicar sobre o nome do programa-fonte
b) Edit, Cut para retirar o programa-fonte do projeto.
2) No Fortran, seguindo o procedimento apresentado na seo 1.7 do captulo 1, criar e inserir no
projeto chamado programa05 o programa-fonte programa5c.f90
3) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 5.3.
4) Comentrios sobre o programa:
a) No programa5c.f90 so usados dois novos comandos do FORTRAN: USE e SYSTEM.
b) O comando USE biblio usado para incluir dentro do programa uma biblioteca chamada biblio,
onde biblio deve ser substitudo pelo nome da biblioteca desejada. Uma biblioteca, no presente
contexto, uma coleo de comandos que no existem automaticamente dentro da linguagem
FORTRAN. Todos os comandos usados at aqui, por exemplo WRITE, j existem
automaticamente dentro da linguagem FORTRAN, mas o comando SYSTEM, no. Para ele ser
usado necessrio incluir no programa a biblioteca aonde este comando est definido, no caso a
biblioteca chamada PORTLIB.
c) A linguagem FORTRAN permite a qualquer programador criar suas prprias bibliotecas, como
ser visto nos captulos avanados deste texto.
REAL A
INTEGER VER
END
d) No editor do aplicativo Fortran, o comando SYSTEM no fica na cor azul por no ser um dos
comandos bsicos da linguagem FORTRAN. O comando SYSTEM utilizado para executar
comandos que interagem com o sistema operacional Windows. Isso permite que, durante a
execuo do programa escrito em FORTRAN, seja realizado o seguinte: executar outros
programas ou aplicativos; criar ou deletar diretrios ou arquivos; e qualquer outro comando
possvel de se executar numa janela do tipo DOS. Para utilizar o comando SYSTEM deve-se
definir uma varivel do tipo inteiro. Depois, usar esta varivel na linha do programa aonde se
deseja executar o comando SYSTEM. Dentro de parnteses e aspas, deve-se incluir a seqncia
de comandos que se deseja executar no Windows.
e) A linha USE PORTLIB declara que a biblioteca chamada PORTLIB ser acrescentada ao programa.
f) A linha VER = SYSTEM ("Notepad saida5c.txt") executa o comando SYSTEM para que o
aplicativo NOTEPAD do Windows abra o arquivo chamado saida5c.txt. A varivel VER, usada
nesta linha, foi definida como uma varivel do tipo inteiro na linha INTEGER VER do programa.
5) Executar Build, Compile para compilar o programa.
6) Gerar o programa-executvel fazendo Build, Build.
7) Ao se executar o programa, atravs de Build, Execute, ocorrer exatamente o mesmo j explicado na
seo anterior para o programa5b.f90. A nica diferena que quase no final da execuo do
programa, o arquivo de resultados, que foi denominado de saida5c.txt, ser aberto automaticamente
pelo aplicativo Notepad para mostrar o seu contedo. Ao se fechar o Notepad, a execuo do
programa5c.f90 ser encerrada.
8) No caso do comando OPEN ser usado para especificar todo o caminho ou o diretrio aonde o arquivo
deve ser criado ou aberto, o comando SYSTEM tambm deve ser adaptado. Por exemplo, se o arquivo
5.4 programa5d.f90
1) Nesta seo ser usado o mesmo projeto da seo anterior deste captulo. Portanto, deve-se executar o
seguinte no Fortran:
a) Clicar sobre o nome do programa-fonte
b) Edit, Cut para retirar o programa-fonte do projeto.
2) No Fortran, seguindo o procedimento apresentado na seo 1.7 do captulo 1, criar e inserir no
projeto chamado programa05 o programa-fonte programa5d.f90
3) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 5.4.
4) Comentrios sobre o programa:
a) Conforme pode-se ver na Figura 5.6, ABS, LOG10, ACOS, COS e COSH esto escritos em azul
dentro do Fortran. Elas so chamadas de funes intrnsecas do FORTRAN, ou seja, so funes
ou comandos que existem dentro da linguagem FORTRAN. Elas so funes matemticas usadas
em clculos que envolvem variveis do tipo real. Outras funes so apresentadas nas Tabelas
5.5 e 5.6.
b) A lista completa de funes matemticas intrnsecas do FORTRAN pode ser vista no manual do
Fortran. Para acess-lo, dentro da subjanela do lado esquerdo, deve-se executar: clicar uma vez
sobre o smbolo ?InfoView; e acessar as opes Reference, Procedures, Numeric Procedures e
as opes Reference, Procedures, Trigonometric, Exponential, Root, and Logathmic
Procedures.
5) Executar Build, Compile para compilar o programa.
6) Gerar o programa-executvel fazendo Build, Build.
7) Ao se executar o programa, atravs de Build, Execute, surge uma janela, mostrada na Figura 5.7,
dentro da qual tem-se:
a) Na primeira linha, o comentrio Entre com o valor de A =, resultado do comando WRITE(*,*)
"Entre com o valor de A =" do programa.
b) Na segunda linha, o programa pra e fica aguardando que seja fornecido o valor da varivel A,
resultado do comando READ(*,*) A do programa. Para que o programa continue sua execuo
necessrio digitar o valor 10 para a varivel A, por exemplo, e, em seguida, clicar na tecla
enter.
Captulo 5. Arquivos e funes matemticas intrnsecas 62
c) Em seguida ocorrer a criao do arquivo saida5d.txt, dentro do diretrio do projeto, como
resultado do comando OPEN(8, file="saida5d.txt") do programa, uma vez que este arquivo
ainda no existe quando o programa5d.f90 for executado pela primeira vez. Este comando
tambm declara que ser usado o nmero 8 no programa como referncia ao arquivo saida5d.txt.
d) Os resultados das funes aplicadas no programa5d.f90 so mostrados na Figura 5.8.
REAL A, B, C, Pi
INTEGER VER
OPEN(8, file="saida5d.txt")
B = ABS(A)
WRITE(8,*) "B = Mdulo de A =", B
C = LOG10(B)
WRITE(8,*) "C: Logaritmo decimal de B =", C
Pi = ACOS(-1.0)
WRITE(8,*) "Pi =", Pi
D = COS(Pi)
WRITE(8,*) "Cosseno de Pi =", D
D = COSH(Pi)
WRITE(8,*) "Cosseno hiperblico de Pi =", D
CLOSE(8)
END
8) Comparar cada resultado mostrado na Figura 5.8 com o resultado obtido de uma calculadora.
5.5 EXERCCIOS
Exerccio 5.1
1) Editar um programa-fonte em FORTRAN para executar o seguinte algoritmo (passos):
a) ler o primeiro valor (real) de uma progresso aritmtica (P.A.), denotado por A1
b) ler a diferena (nmero real) entre dois termos subseqentes da P.A., denotada por D
c) ler o nmero (inteiro) de termos da P.A., denotado por N
d) calcular o valor (real) do ltimo termo da P.A., denotado por AN
e) calcular a soma de todos os termos da P.A., denotado por SN
f) escrever no arquivo chamado saida_5p1.txt os trs valores lidos e os dois calculados juntamente
com comentrios para identific-los
2) Compilar o programa-fonte
3) Gerar o programa-executvel
4) Executar o programa para A1 = 1.3, D = 3.9 e N = 5. Os resultados devem ser AN = 16.9 e SN = 45.5.
Exerccio 5.2
1) Editar um programa-fonte em FORTRAN para executar o seguinte algoritmo (passos):
a) ler algumas variveis do tipo real
b) aplicar as funes matemticas da Tabela 5.5 sobre as variveis lidas
c) escrever no arquivo chamado saida_5p2.txt os valores lidos e os resultados calculados com as
funes juntamente com comentrios para identific-los
2) Compilar o programa-fonte
3) Gerar o programa-executvel
4) Executar o programa. Em seguida, comparar os resultados escritos com aqueles obtidos de uma
calculadora.
OBJETIVOS DO CAPTULO
Conceitos e comandos de formatos de edio para variveis do tipo inteiro, caracter e real
Regras de edio de programas-fonte em FORTRAN
Seqncia obrigatria dos comandos dentro de programas-fonte em FORTRAN
Comandos do FORTRAN: WRITE(nmero,nmero) e FORMAT
C = A // B
WRITE(9,22) A
22 FORMAT ( A5, "= A no formato A5" )
WRITE(9,23) A
23 FORMAT ( A10, "= A no formato A10" )
WRITE(9,24) A
24 FORMAT("10X", 10X, "Contedo de A =", A10, 1/)
WRITE(9,25) A
25 FORMAT("T10", T10, "Contedo de A =", A10, 1/)
WRITE(9,10) A, B, C
10 FORMAT(5X, "A =", A10, 1/, 5X, "B =", A10, 1/, 5X, "C =", A20, 2/)
WRITE(9,11) A, B, C
11 FORMAT( 5X, "A =", A10, 1/, &
5X, "B =", A10, 1/, &
5X, "C =", A20, 2/ )
WRITE(9,12) A, B
12 FORMAT ( 2(A10), "= variveis A e B no formato 2(A10)" )
CLOSE(9)
VER = SYSTEM("Notepad saida6a.txt")
END
c) O comando FORMAT usado para especificar o formato com que comentrios e contedos
(strings ou nmeros) de variveis so escritos numa janela ou num arquivo. Tambm usado na
leitura de dados.
d) A sintaxe, isto , a forma com que se deve usar o comando FORMAT : nmero2 FORMAT
(formatos). O nmero2 deve ser o mesmo utilizado no comando WRITE. Dentro de parnteses,
deve-se especificar os formatos de edio que sero usados, separados por vrgula. Um exemplo
a linha 21 FORMAT ( A2, "= A no formato A2" ) do programa, que especifica o formato A2
para escrever a varivel A, do tipo caracter, chamada na linha WRITE(9,21) A do programa.
e) Os comandos FORMAT podem ser includos em qualquer lugar dentro do programa-fonte, desde
que seja abaixo de comandos USE e acima do comando END. Eles podem ser aglomerados num
nico lugar ou cada um pode estar abaixo ou acima do seu respectivo comando WRITE. No
necessrio seguir qualquer ordenamento para os nmeros usados nos comandos FORMAT, nem
para suas posies relativas dentro do programa-fonte. E no existe qualquer relao entre os
nmeros usados em comandos OPEN e os nmeros usados nos comandos FORMAT. Eles at
podem ser iguais.
f) Cada tipo de varivel (caracter, inteiro ou real) tem identificadores especiais para escrever seu
contedo na forma desejada. Alm disso, existem identificadores que facilitam a escrita de
comentrios e da forma ou disposio esttica com que se escreve algo.
g) O identificador de variveis do tipo caracter a letra A seguida de um nmero que especifica a
quantidade mxima de caracteres para escrever cada varivel. Dentro deste espao, o contedo de
cada varivel do tipo caracter escrito da esquerda para a direita. Se o contedo da varivel ocupa
mais espao do que o reservado para escrev-la, a parte excedente no escrita, desconsiderada.
Um exemplo de uso deste identificador A2, citado no item d, acima. Neste caso, reservou-se
duas colunas ou caracteres para escrever uma varivel do tipo caracter.
h) Dentro de um comando FORMAT, isto , entre parnteses, pode-se escrever um ou mais
comentrios, cada um devendo ficar entre aspas, como na linha 22 FORMAT ( A5, "= A no
Captulo 6. Formatos de edio 70
formato A5" ) do programa.
i) O identificador X usado para deixar espaos em branco entre dois formatos de edio. Ele
usado na forma NX, onde N um nmero que representa a quantidade de espaos em branco. Um
exemplo a linha 24 FORMAT("10X", 10X, "Contedo de A =", A10, 1/) do programa,
onde usou-se o formato 10X.
j) Nesta mesma linha do programa h o formato de edio N/, onde N um nmero que representa a
quantidade de linhas que o cursor descer quando encontrar este formato. Neste caso, uma linha,
devido ao formato 1/.
k) O identificador T, de tabulao, usado para se escrever algo a partir de uma coluna especfica,
onde a coluna 1 fica na margem esquerda. Ele usado na forma TN, onde N o nmero da coluna
a partir da qual se escrever algo que vem a seguir dentro de um comando FORMAT. Um
exemplo a linha 25 FORMAT("T10", T10, "Contedo de A =", A10, 1/) do programa,
onde usou-se o formato T10.
l) Pode-se usar um nico comando WRITE, com seu respectivo comando FORMAT, para se
escrever diversas variveis. Neste caso, cada varivel ser escrita com o formato que estiver na
mesma seqncia dos comandos WRITE e FORMAT. Por exemplo, na linha WRITE(9,10) A, B,
C do programa, escreve-se as variveis A, B e C com o formato nmero 10, que corresponde
linha 10 FORMAT(5X, "A =", A10, 1/, 5X, "B =", A10, 1/, 5X, "C =", A20, 2/) do
programa. Portanto, a primeira varivel (A) ser escrita com o formato A10, que o primeiro
formato de edio de variveis que aparece no comando FORMAT. E as variveis B e C sero
escritas com os formatos A10 e A20, respectivamente, que so o segundo e o terceiro formatos de
variveis no comando FORMAT.
m) O comando FORMAT identificado pelo nmero 10 no programa tem exatamente a mesma funo
que o comando FORMAT identificado pelo nmero 11. A nica diferena na edio do
programa-fonte. No 10 FORMAT, todos os formatos de edio usam apenas uma linha do
programa-fonte. J no 11 FORMAT, so usadas trs linhas. Neste caso, quando um mesmo
comando precisa ou se quer empregar mais de uma linha por motivos estticos, usa-se o smbolo
&, ao final de cada linha do programa-fonte, para indicar que o comando continua na linha
seguinte. Isso vale para qualquer comando do FORTRAN.
n) O formato M(AN) equivalente a M vezes o formato AN, onde N o nmero de caracteres
reservados para se escrever uma varivel do tipo caracter. Por exemplo, na linha 12 FORMAT (
2(A10), "= variveis A e B no formato 2(A10)" ) do programa usa-se duas vezes o
formato A10 para se escrever duas variveis do tipo caracter.
6) Executar Build, Compile para compilar o programa.
7) Gerar o programa-executvel fazendo Build, Build.
8) Ao se executar o programa, atravs de Build, Execute, surge uma janela do DOS, mostrada na Figura
Captulo 6. Formatos de edio 71
6.1, dentro da qual tem-se:
a) Na primeira linha, o comentrio Variaveis do tipo caracter, resultado do comando WRITE(*,*)
"Variaveis do tipo caracter" do programa.
b) Na segunda linha, o comentrio Entre com os conteudos de A e B, resultado do comando
WRITE(*,*) "Entre com os conteudos de A e B" do programa.
c) Na terceira linha, o programa pra e fica aguardando que sejam fornecidos os contedos das
variveis A e B, resultado do comando READ(*,*) A, B do programa. Para que o programa
continue sua execuo necessrio digitar Rio 45, Teste, por exemplo, e, em seguida, clicar
na tecla enter.
d) Em seguida ocorrer a criao do arquivo saida6a.txt, dentro do diretrio do projeto, como
resultado do comando OPEN(9, file="saida6a.txt") do programa, uma vez que este arquivo
ainda no existe quando o programa6a.f90 for executado pela primeira vez. Este comando tambm
declara que ser usado o nmero 9 no programa como referncia ao arquivo saida6a.txt.
e) Como resultado da linha VER = SYSTEM("Notepad saida6a.txt") do programa, o aplicativo
Notepad abre automaticamente o arquivo saida6a.txt cujo contedo mostrado na Figura 6.2. Na
segunda e terceira linha do arquivo saida6a.txt o contedo da varivel A (Rio 45) foi cortado
parcialmente devido aos poucos caracteres usados para escrev-la, no caso 2 e 5, definidos por A2
e A5. Para evitar este tipo de problema, sempre se deve superdimensionar o espao para escrever
o contedo de cada varivel.
1) Nesta seo ser usado o mesmo projeto da seo anterior. Portanto, deve-se executar o seguinte no
Fortran:
a) Clicar sobre o nome do programa-fonte
b) Edit, Cut para retirar o programa-fonte do projeto.
2) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte
programa6b.f90
3) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 6.2.
C = A + B
OPEN(9, file="saida6b.txt")
WRITE(9,9) A, B, C CLOSE(9)
END
8) At entender, comparar o resultado de cada comando WRITE, e seu respectivo comando FORMAT
no programa6b.f90, mostrado em cada linha da Figura 6.4 ou no arquivo saida6b.txt.
9) Executar novamente o programa com outros valores para as variveis A e B. Analisar os novos
resultados.
1) Nesta seo ser usado o mesmo projeto da seo anterior. Portanto, deve-se executar o seguinte no
Fortran:
Captulo 6. Formatos de edio 76
a) Clicar sobre o nome do programa-fonte
b) Edit, Cut para retirar o programa-fonte do projeto.
2) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte
programa6c.f90
3) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 6.3.
4) Comentrios sobre o programa:
a) O objetivo do programa6c.f90 explicar alguns formatos de edio utilizados com variveis do tipo
real.
b) No caso do programa6c.f90, os comandos FORMAT foram todos aglomerados no incio do
programa-fonte, antes mesmo de seus respectivos comandos WRITE.
c) Os dois principais identificadores de variveis do tipo real so representados pelas letras F e E.
d) O formato de ponto flutuante usado para nmeros reais. Ele denotado por FX.Y, onde Y um
nmero que equivale quantidade de algarismos usados para representar a parte decimal do valor
da varivel. X um nmero que equivale quantidade total de colunas usadas para representar o
valor da varivel, incluindo seu sinal, o ponto decimal e a parte decimal. O nmero X sempre tem
que ser maior do que Y. No programa, por exemplo, so usados os formatos F5.2 e F5.0.
REAL A, B, C
INTEGER VER
C = A + B
OPEN(9, file="saida6c.txt")
formato"
WRITE(9,21) A, A, A, A
WRITE(9,11) A, B, C
WRITE(9,12) A, B, C
CLOSE(9)
VER = SYSTEM("Notepad
saida6c.txt") END
e) O formato exponencial tambm usado para nmeros reais. Ele denotado por EX.Y, onde Y um
nmero que equivale quantidade de algarismos usados para representar a parte decimal do valor
da varivel. X um nmero que equivale quantidade total de colunas usadas para representar o
valor da varivel, incluindo seu sinal, o ponto decimal, a parte decimal, a letra E, o sinal do
expoente e dois algarismos para o valor do expoente. O nmero X sempre tem que ser maior do que
Y. No programa, por exemplo, usado o formato E15.3.
f) No formato EX.Y, nenhum algarismo usado na parte inteira. Para que seja usado um algarismo na
parte inteira do nmero real, pode-se usar o formato 1PEX.Y. No programa, por exemplo, usado o
formato 1PE15.3.
g) Dentro das X colunas dos formatos FX.Y, EX.Y e 1PEX.Y, o contedo de cada varivel do tipo
Captulo 6. Formatos de edio 78
real escrito da direita para a esquerda. Os valores de X e Y so definidos pelo programador.
h) Os identificadores X, para espaos em branco, T, para tabulao, e N/, para o cursor descer N
linhas, explicados na seo 6.1 para variveis do tipo caracter, tambm se aplicam com variveis do
tipo real, conforme pode-se ver no programa6c.f90.
i) O formato M(1PEX.Y) equivalente a M vezes o formato 1PEX.Y. Por exemplo, na linha 12
FORMAT ( 3(1PE15.3), "= variveis A, B e C no formato 3(1PE15.3)" ) do programa
usa-se trs vezes o formato 1PE15.3 para se escrever trs variveis do tipo real.
5) Executar Build, Compile para compilar o programa.
6) Gerar o programa-executvel fazendo Build, Build.
7) Ao se executar o programa, atravs de Build, Execute, surge uma janela do DOS, mostrada na
Figura 6.5, dentro da qual tem-se:
a) Na primeira linha, o comentrio Variaveis do tipo real, resultado do comando WRITE(*,*)
"Variaveis do tipo real" do programa.
b) Na segunda linha, o comentrio Entre com os valores de A e B, resultado do comando
WRITE(*,*) "Entre com os valores de A e B" do programa.
c) Na terceira linha, o programa pra e fica aguardando que sejam fornecidos os valores das
variveis A e B, resultado do comando READ(*,*) A, B do programa. Para que o programa
continue sua execuo necessrio digitar 1.234 2.22, por exemplo, e, em seguida, clicar na
tecla enter.
d) Em seguida ocorrer a criao do arquivo saida6c.txt, dentro do diretrio do projeto, como
resultado do comando OPEN(9, file="saida6c.txt") do programa, uma vez que este arquivo
ainda no existe quando o programa6c.f90 for executado pela primeira vez. Este comando tambm
declara que ser usado o nmero 9 no programa como referncia ao arquivo saida6c.txt.
e) Como resultado da linha VER = SYSTEM("Notepad saida6c.txt") do programa, o aplicativo
Notepad abre automaticamente o arquivo saida6c.txt cujo contedo mostrado na Figura 6.6.
Dependendo do formato empregado, alguns algarismos do nmero real so truncados, como se
pode ver da segunda quarta linha do arquivo saida6c.txt.
8) At entender, comparar o resultado de cada comando WRITE, e seu respectivo comando FORMAT
no programa6c.f90, mostrado em cada linha da Figura 6.6 ou no arquivo saida6c.txt.
9) Executar novamente o programa com outros valores para as variveis A e B. Analisar os novos
resultados.
10) Num mesmo comando FORMAT, podem ser usados identificados de variveis do tipo inteiro,
caracter e real, alm de comentrios, e dos formatos NX, N/ e TN.
1) Em cada linha do programa, tudo que estiver aps o smbolo de exclamao (!) no executado pelo
programa. Serve apenas como comentrio usado para esclarecer o que faz cada parte do programa.
Dentro do Fortran PowerStation 4.0, todos os comentrios ficam na cor verde. Linhas em branco so
equivalentes a ter o smbolo (!) de comentrio na primeira coluna de cada linha em branco.
2) Tudo que criado ou definido pelo programador fica na cor preta dentro do Fortran PowerStation 4.0.
3) Todos os comandos intrnsecos da linguagem FORTRAN ficam na cor azul dentro do Fortran
PowerStation 4.0.
4) O smbolo & usado ao final de uma linha de programa para indicar que o comando iniciado numa
linha contnua na linha seguinte.
5) Cada linha de programa pode usar at 132 colunas, incluindo os espaos em branco.
6) Em geral, espaos em branco tm apenas funo esttica no programa, no afetando os comandos ou
as instrues do programador. Os espaos em branco so considerados quando usados dentro de
comentrios nos comandos WRITE e FORMAT.
7) Nos comandos da linguagem FORTRAN e em nomes de variveis, no existe distino entre letras
maisculas ou minsculas. Por exemplo, WRITE, write, Write e wRiTe so equivalentes. A distino
entre letras minsculas e maisculas existe dentro de comentrios nos comandos WRITE e FORMAT.
At este captulo foram vistos comandos da linguagem FORTRAN que podem ser divididos em
cinco tipos:
1) Comando para incluso de biblioteca no programa-fonte: USE
2) Comandos para declarar tipos de variveis: INTEGER, REAL e CHARACTER
3) Outros comandos intrnsecos (WRITE, READ, OPEN, CLOSE) ou no do FORTRAN (SYSTEM),
funes intrnsecas (LOG, TRIM etc) e qualquer outro comando criado pelo programador, por
exemplo, clculos e operaes com strings
4) Comando de encerramento do programa-fonte: END
5) Comando de edio: FORMAT
Se todos os cinco tipos de comandos forem usados simultaneamente num programa-fonte, a
seqncia obrigatria entre eles exatamente a apresentada acima, exceto para o quinto tipo. O comando
FORMAT pode ficar em qualquer lugar do programa-fonte entre os comandos USE e END.
Para os comandos do tipo 2 (INTEGER, REAL e CHARACTER), a ordem entre eles pode ser
qualquer. O mesmo se aplica para os comandos do tipo 3, exceto com arquivos nos quais para um arquivo
especfico a seqncia obrigatria : OPEN, WRITE e outros comandos, CLOSE.
6.6 EXERCCIOS
Exerccio 6.1
Editar um programa-fonte em FORTRAN para realizar um clculo de interpolao linear executando o
seguinte algoritmo (passos):
1) Ler os valores de duas variveis do tipo real, chamadas X1 e X2, que correspondem a dois dados
tabelados de uma varivel independente
2) Ler os valores de duas variveis do tipo real, chamadas Y1 e Y2, que correspondem a dois dados
tabelados de uma varivel dependente de X
3) Ler o valor de uma varivel do tipo real, chamada X, para o qual se deseja realizar a interpolao
Captulo 6. Formatos de edio 81
4) Calcular o valor da varivel Y, em funo do valor de X, usando interpolao linear
5) Utilizando comandos FORMAT, escrever no arquivo chamado saida_6p1.txt os cinco valores lidos e
o resultado de Y, juntamente com comentrios para identific-los
6) Executar o programa para X1 = 10, X2 = 20, Y1 = 100, Y2 = 20 e X = 12. O resultado deve ser Y =
76.
Exerccio 6.2
Editar um programa-fonte em FORTRAN para realizar clculos com uma progresso geomtrica (P.G.)
executando o seguinte algoritmo (passos):
1) Ler o primeiro valor (real) da P.G., denotado por a1
2) Ler a razo (nmero real) entre dois termos subseqentes da P.G., denotada por q
3) Ler o nmero (inteiro) de termos da P.G., denotado por N
4) Calcular o valor (real) do ltimo termo da P.G., denotado por an
5) Calcular a soma de todos os termos da P.G., denotado por Sn
6) Utilizando comandos FORMAT, escrever no arquivo chamado saida_6p2.txt os trs valores lidos e os
dois calculados, juntamente com comentrios para identific-los
7) Executar o programa para a1 = 1.5, q = 1.1 e N = 20. Os resultados devem ser aproximadamente an
9.174 e Sn 85.91.
OBJETIVOS DO CAPTULO
Conceitos de: deciso, condio, operadores relacionais e lgicos, e opo
Comandos do FORTRAN: IF THEN ELSE END IF, SELECT CASE CASE END SELECT
7.1 programa7a.f90
END
IF ( condies ) COMANDO
onde condies representa uma ou vrias condies que devem ser satisfeitas para
que COMANDO seja executado.
8) Ao se executar o programa, atravs de Build, Execute, surge uma janela, mostrada na Figura 7.1,
dentro da qual tem-se:
a) Na primeira linha, o comentrio Entre com os valores de A e B, resultado do comando
WRITE(*,*) "Entre com os valores de A e B" do programa.
12) Executar novamente o programa com outros valores para A e B. At entender, comparar os novos
resultados com cada linha do programa-fonte onde exista um comando IF.
7.2 programa7b.f90
1) Nesta seo ser usado o mesmo projeto da seo anterior. Portanto, deve-se executar o seguinte no
Fortran:
a) Clicar sobre o nome do programa-fonte
b) Edit, Cut para retirar o programa-fonte do projeto.
2) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte
programa7b.f90
3) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 7.5.
4) Comentrios sobre o programa:
a) Este programa foi escrito para extrair as duas razes de uma equao do 2o grau.
D = (B**2) - 4.0 * A * C
X1 = ( -B + SQRT(D) ) / ( 2.0 * A ) X2 = (
-B - SQRT(D) ) / ( 2.0 * A ) WRITE(*,*) "A
primeira raiz real eh = ", X1
WRITE(*,*) "A segunda raiz real eh = ", X2
ELSE
X1 = -B / ( 2.0 * A )
X2 = SQRT(ABS(D)) / ( 2.0 * A )
WRITE(*,*) "A primeira raiz complexa eh = ", X1, " + ", X2, " i"
WRITE(*,*) "A segunda raiz complexa eh = ", X1, " - ", X2, " i"
END IF
END
c) Se no existir necessidade de comandos entre o ELSE e o END IF, pode-se usar a estrutura do
comando IF mostrada na Tabela 7.7.
d) Recomenda-se identar, isto , deslocar para a direita os comandos entre o IF (SE) e o ELSE
(SENO), e entre o ELSE e o END IF, para que sejam facilmente visualizados os comandos que
so ou no executados. Um exemplo desta recomendao mostrado no programa7b.f90, na
Tabela 7.5.
IF ( condies ) THEN
BLOCO 1 (uma ou vrias linhas de programa com comandos)
ELSE
BLOCO 2 (uma ou vrias linhas de programa com comandos)
END IF
onde condies representa uma ou vrias condies que devem ser satisfeitas para
que o bloco 1 seja executado;
se as condies no forem satisfeitas, o bloco 2 executado.
IF ( condies ) THEN
BLOCO (uma ou vrias linhas de programa com comandos)
END IF
onde condies representa uma ou vrias condies que devem ser satisfeitas para
que o bloco de linhas de programa seja executado.
10) Executar novamente o programa com outros valores para A, B e C. At entender, comparar os
novos resultados com cada linha do programa-fonte.
7.3 programa7c.f90
1) Nesta seo ser usado o mesmo projeto da seo anterior. Portanto, deve-se executar o seguinte no
Fortran:
a) Clicar sobre o nome do programa-fonte
b) Edit, Cut para retirar o programa-fonte do projeto.
2) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte
programa7c.f90
SELECT CASE ( A )
CASE ( -1000:1 )
WRITE(*,*) "Valor de A estah entre -1000 e 1"
CASE ( 2, 4 )
WRITE(*,*) "Valor de A eh 2 ou 4"
CASE ( 3 )
WRITE(*,*) "Valor de A eh 3"
CASE ( 5:2000 )
WRITE(*,*) "Valor de A estah entre 5 e 2000"
CASE DEFAULT
WRITE(*,*) "Valor de A eh menor do que -1000 ou maior do que 2000"
END SELECT
END
CASE ( valor1 )
BLOCO 1
CASE ( valor2 )
BLOCO 2
CASE DEFAULT
BLOCO DEFAULT
END SELECT
onde valor representa um valor inteiro, alguns valores separados por vrgula ou,
ainda, um intervalo de valores separados por dois pontos;
apenas o bloco de comandos correspondente ao valor da varivel executado.
A varivel de seleo pode ser do tipo inteiro ou caracter. No caso de varivel
caracter, os valores devem ser strings entre aspas.
7.4 EXERCCIOS
Exerccio 7.1
Editar um programa-fonte em FORTRAN para executar o seguinte algoritmo (passos):
1) Ler os valores inteiros de trs variveis, denotadas por A, B e C
2) Determinar qual das variveis tem o menor e o maior valor
Exerccio 7.2
Alterar o programa7b.f90 para que no ocorra erro de execuo quando o usurio entrar com valor nulo
para a varivel A, e que seja calculado e escrito o valor da nica raiz deste caso.
Exerccio 7.3
Editar um programa-fonte em FORTRAN para calcular as razes de uma equao algbrica cbica.
Exerccio 7.4
Editar um programa-fonte em FORTRAN para executar o seguinte algoritmo (passos):
Captulo 7. Decises e opes 92
1) Mostrar na tela uma lista com pelo menos 4 opes de clculo: 1 = mdulo de A; 2 = raiz quadrada de
A; 3 = exponencial de A; 4 = logaritmo de A
2) Ler o valor da opo de clculo desejada
3) Ler o valor real da varivel A
4) Calcular o resultado de A para a opo escolhida pelo usurio
5) Mostrar o resultado de A
OBJETIVOS DO CAPTULO
Conceito de ciclo
Comandos do FORTRAN: DO END DO, EXIT
8.1 programa8a.f90
A = 20
WRITE(*,*) "Valor de A antes do ciclo =", A
DO A = 1, 10, 1
WRITE(*,*) "Valor de A dentro do ciclo =", A
END DO
END
5) Neste programa so usados dois novos comandos do FORTRAN: DO e END DO, que definem um
ciclo. Ele so usados para executar vrias vezes uma ou mais linhas do programa. Explicaes gerais
sobre o seu funcionamento so apresentadas na prxima seo.
6) Executar Build, Compile para compilar o programa. 7) Gerar o programa-executvel fazendo Build,
Build.
Captulo 8. Ciclos 94
8) Ao se executar o programa, atravs de Build, Execute, surge uma janela, mostrada na Figura 8.1,
dentro da qual tem-se:
a) Na primeira linha, o valor corrente ou atual da varivel A na memria do computador, resultado
do comando WRITE(*,*) "Valor de A antes do ciclo =", A do programa. O valor escrito,
20, resultado da linha anterior do programa, A = 20.
b) Da segunda dcima-primeira linha, o programa executa 10 vezes a linha WRITE(*,*) "Valor
de A dentro do ciclo =", A porque ela est dentro de um ciclo definido pelos comandos DO
e END DO. Deve-se notar que o valor da varivel A muda a cada repetio do ciclo.
c) Na dcima-segunda linha, o programa escreve o valor da varivel A como resultado da linha
WRITE(*,*) "Valor de A depois do ciclo =", A , que j est fora do ciclo.
8.2 programa8b.f90
1) Nesta seo ser usado o mesmo projeto da seo anterior. Portanto, deve-se executar o seguinte no
Fortran:
a) Clicar sobre o nome do programa-fonte
b) Edit, Cut para retirar o programa-fonte do projeto.
2) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte
programa8b.f90
3) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 8.2.
Captulo 8. Ciclos 95
Tabela 8.2 Programa8b.f90.
INTEGER A, INICIO, FIM, PASSO, B, C
C = MAX ( B, 0 )
END
Captulo 8. Ciclos 96
b.4) No caso de no se entrar no ciclo, a execuo do programa passa diretamente linha
que estiver abaixo do comando END DO
onde os valores das variveis INICIO, FIM e PASSO devem ter sido definidos antes da
execuo do programa chegar ao comando DO.
c) O nmero de execues (varivel C) do ciclo depende das variveis do tipo inteiro INICIO, FIM e
PASSO, calculado atravs de
C = MAX ( B, 0 ) (8.2)
onde o resultado da funo MAX(B,0) o maior valor entre a varivel B e o valor zero. O
resultado de C pode ser 0, 1, 2, 3 etc. Portanto, o ciclo pode ser executado uma vez, diversas vezes
ou nenhuma vez.
d) O valor da varivel PASSO pode ser positivo ou negativo; nulo, no. Portanto, pode-se ter um
ciclo cujo valor de A progressivo (PASSO > 0) ou regressivo (PASSO < 0). Se PASSO = 1, seu
valor no precisa ser declarado no comando DO.
e) O valor da varivel A no pode ser alterado nas linhas que esto entre os comando DO e END
DO. Se isso for feito, resultar num erro de compilao.
f) Recomenda-se identar, isto , deslocar para a direita todas as linhas do programa que esto entre
os comandos DO e END DO para que facilmente se perceba os comandos que compem o ciclo.
Exemplos desta recomendao so mostrados no programa8a.f90 (Tabela 8.1) e no
programa8b.f90 (Tabela 8.2).
5) Executar Build, Compile para compilar o programa.
6) Gerar o programa-executvel fazendo Build, Build.
Captulo 8. Ciclos 97
7) Ao se executar o programa, atravs de Build, Execute, surge uma janela do DOS, mostrada na
Figura 8.2, dentro da qual tem-se:
a) Na primeira linha, o comentrio Entre com os valores inteiros de A, INICIO, FIM e PASSO,
resultado do comando WRITE(*,*) "Entre com os valores inteiros de A, INICIO, FIM
e PASSO" do programa.
b) Na segunda linha, o programa pra e fica aguardando que sejam fornecidos os valores das
variveis A, INICIO, FIM e PASSO, resultado do comando READ(*,*) A, INICIO, FIM,
PASSO do programa. Para que o programa continue sua execuo necessrio digitar 20 1 10 1,
por exemplo, e, em seguida, clicar na tecla enter.
c) Em seguida so apresentados os resultados correspondentes execuo do programa.
Captulo 8. Ciclos 98
Figura 8.3 Resultado do programa8b.f90 para A = 20, INICIO = 5, FIM = 5 e PASSO = 1.
Figura 8.4 Resultado do programa8b.f90 para A = 20, INICIO = 20, FIM = 11 e PASSO = 1.
11) Executar novamente o programa com A = 20, INICIO = 12, FIM = 15 e PASSO = 2. Neste caso
tem-se um ciclo progressivo, pois PASSO > 0. At entender, analisar os novos resultados, mostrados
na Figura 8.5, considerando cada linha do programa-fonte e as explicaes descritas no item 4 acima.
12) Executar novamente o programa com A = 20, INICIO = 11, FIM = 20 e PASSO = 1. Neste caso
tem-se um ciclo regressivo, pois PASSO < 0. At entender, analisar os novos resultados, mostrados
na Figura 8.6, considerando cada linha do programa-fonte e as explicaes descritas no item 4 acima.
8.3 programa8c.f90
1) Nesta seo ser usado o mesmo projeto da seo anterior. Portanto, deve-se executar o seguinte no
Fortran:
Captulo 8. Ciclos 99
a) Clicar sobre o nome do programa-fonte
b) Edit, Cut para retirar o programa-fonte do projeto.
Figura 8.5 Resultado do programa8b.f90 para A = 20, INICIO = 12, FIM = 15 e PASSO = 2.
Figura 8.6 Resultado do programa8b.f90 para A = 20, INICIO = 11, FIM = 20 e PASSO = 1.
SOMA = 0
CUBO = 0
END
8.4 EXERCCIOS
Exerccio 8.1
Editar um programa-fonte em FORTRAN para executar o seguinte algoritmo (passos):
1) Ler o valor inteiro de uma varivel, denotada por N
2) Determinar se N um nmero primo
3) Mostrar o resultado, isto , se N um nmero primo ou no.
Exerccio 8.2
Editar um programa-fonte em FORTRAN para executar o seguinte algoritmo (passos):
Captulo 8. Ciclos 102
1) Ler o valor inteiro de uma varivel, denotada por N
2) Calcular o fatorial de N apenas para N 0
3) Mostrar o resultado do fatorial de N
Exerccio 8.3
Editar um programa-fonte em FORTRAN para calcular e escrever num arquivo o valor de cada termo de
uma progresso aritmtica, cujo problema est definido no exerccio 5.1
Exerccio 8.4
Editar um programa-fonte em FORTRAN para calcular e escrever num arquivo o valor de cada termo de
uma progresso geomtrica, cujo problema est definido no exerccio 6.2
OBJETIVOS DO CAPTULO
Conceitos de: conjunto, elemento, alocao dinmica de memria
Comandos do FORTRAN: DIMENSION, ALLOCATABLE, ALLOCATE, MINVAL, MAXVAL,
SUM
9.1 programa9a.f90
DO NOTA = 1, QUANTIDADE_NOTAS
READ(*,*) NOTAS(NOTA)
END DO
MINIMO = NOTAS(1)
MAXIMO = NOTAS(1)
SOMA = NOTAS(1)
DO NOTA = 2, QUANTIDADE_NOTAS
IF ( NOTAS(NOTA) < MINIMO ) MINIMO = NOTAS(NOTA)
IF ( NOTAS(NOTA) > MAXIMO ) MAXIMO = NOTAS(NOTA)
SOMA = SOMA + NOTAS(NOTA)
END DO
END
e) O comando ALLOCATABLE usado para definir uma varivel do tipo alocvel, isto , uma
varivel do tipo conjunto cuja quantidade de elementos que a compe definida posteriormente
dentro do programa em funo de alguma outra varivel.
f) O comando ALLOCATE usado para definir quantos elementos compem uma varivel do tipo
conjunto e reservar o espao de memria correspondente no computador. No se pode atribuir
Captulo 9. Conjuntos 105
valores aos componentes de uma varivel do tipo conjunto antes do comando ALLOCATE ter
sido usado com ela.
g) Na linha REAL, ALLOCATABLE, DIMENSION(:) :: NOTAS do programa, define-se a varivel
chamada NOTAS com as seguintes caractersticas: do tipo conjunto, devido ao comando
DIMENSION(:); do tipo alocvel, devido ao comando ALLOCATABLE; e do tipo real, ou seja,
cada elemento da varivel NOTAS poder conter nmeros reais, devido ao comando REAL. O
duplo dois pontos que aparece nesta linha deve ser usado quando existe mais de uma definio
para uma varivel, onde cada definio deve ser separada por vrgula.
h) Na linha ALLOCATE ( NOTAS (QUANTIDADE_NOTAS) ) do programa, utilizando-se o comando
ALLOCATE e a varivel QUANTIDADE_NOTAS, que um dado do programa, define-se
quantos elementos compem a varivel NOTAS e reserva-se o espao de memria
correspondente.
i) Cada elemento de uma varivel do tipo conjunto referenciado por um nmero inteiro, chamado
ndice, que corresponde ordem dele dentro do conjunto. Este ndice deve ficar entre parnteses
aps o nome da varivel do tipo conjunto. O ndice ou o nmero do elemento pode ser
representado por uma varivel, por exemplo, na linha READ(*,*) NOTAS(NOTA) do programa, que
est dentro de um ciclo. Neste ciclo, a varivel NOTA corresponde a cada elemento da varivel
NOTAS.
j) Na linha MINIMO = NOTAS(1) do programa, est sendo inicializado o valor da varivel MINIMO
atribuindo a ela o valor do primeiro elemento da varivel NOTAS. O mesmo ocorre nas duas
linhas seguintes com as variveis MAXIMO e SOMA.
9.2 programa9b.f90
1) Nesta seo ser usado o programa9a.f90, da seo anterior, como base para um novo programa.
Portanto, deve-se executar o seguinte no Fortran:
a) Selecionar todas as linhas do programa9a.f90 com o boto esquerdo do mouse
b) Edit, Copy para salvar este programa-fonte na memria do computador
2) Nesta seo ser usado o mesmo projeto da seo anterior. Portanto, deve-se executar o seguinte no
Fortran:
a) Clicar sobre o nome do programa9a.f90
b) Edit, Cut para retirar o programa9a.f90 do projeto.
3) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte
programa9b.f90
4) No Fortran, executar Edit, Paste para inserir o programa9a.f90 dentro do programa9b.f90.
5) Dentro do espao de edio do Fortran, na subjanela maior, alterar o programa9a.f90 para que fique
exatamente igual ao texto em vermelho mostrado na Tabela 9.3.
6) Objetivos do programa:
a) Utilizar trs novas funes matemticas intrnsecas do FORTRAN: MINVAL, MAXVAL e SUM,
que so utilizadas com variveis do tipo conjunto
b) Determinar os valores mnimo e mximo e a mdia de um conjunto de variveis do tipo real
7) Comentrios sobre o programa:
a) Neste programa emprega-se exatamente o mesmo algoritmo do programa anterior, isto , os dois
programas fazem exatamente o mesmo. A diferena que neste programa os valores mnimo e
mximo e a mdia de um conjunto de variveis do tipo real so obtidos atravs de trs novas
funes matemticas intrnsecas do FORTRAN: MINVAL, MAXVAL e SUM, que so utilizadas
Captulo 9. Conjuntos 108
com variveis do tipo conjunto. A sintaxe delas, isto , a forma de utiliz-las exemplificada na
Tabela 9.3. Com isso, o que foi realizado com oito linhas de programa-fonte no programa9a.f90,
empregando um ciclo e comandos IF, reduziu-se a trs linhas no programa9b.f90.
DO NOTA = 1, QUANTIDADE_NOTAS
READ(*,*) NOTAS(NOTA)
END DO
MINIMO = MINVAL(NOTAS)
MAXIMO = MAXVAL(NOTAS)
SOMA = SUM(NOTAS)
END
9.3 programa9c.f90
1) Nesta seo ser usado o mesmo projeto da seo anterior. Portanto, deve-se executar o seguinte no
Fortran:
a) Clicar sobre o nome do programa9b.f90
b) Edit, Cut para retirar o programa9b.f90 do projeto.
2) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte
programa9c.f90
3) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 9.4.
4) Objetivos do programa:
a) Mostrar como realizar operaes com todos os elementos de um conjunto num nico comando
b) Mostrar o uso de funes matemticas intrnsecas do FORTRAN com variveis do tipo conjunto
c) Mostrar duas formas de escrever o contedo de variveis do tipo conjunto
5) Comentrios sobre o programa:
a) Na linha REAL, ALLOCATABLE, DIMENSION(:) :: CONJUNTO_A, CONJUNTO_B, CONJUNTO_C do
programa, esto sendo definidas trs variveis (CONJUNTO_A, CONJUNTO_B e
CONJUNTO_C) com as seguintes caractersticas: do tipo conjunto, devido ao comando
DIMENSION(:); do tipo alocvel, devido ao comando ALLOCATABLE; e do tipo real, ou seja,
cada elemento das trs variveis poder conter nmeros reais, devido ao comando REAL.
b) Na linha CONJUNTO_B = CONJUNTO_A + 10 do programa, soma-se o valor 10 ao valor de cada
elemento da varivel CONJUNTO_A e atribui-se o resultado a cada elemento da varivel
CONJUNTO_B. Portanto, num nico comando esto sendo feitos clculos com todos os
elementos de um conjunto. Para que isso seja possvel, as duas variveis do tipo conjunto tm que
ter exatamente o mesmo nmero de elementos. Esta linha do programa poderia ser substituda de
forma equivalente ao seguinte:
DO ELEMENTO = 1, QUANTIDADE_ELEMENTOS
CONJUNTO_B(ELEMENTO) = CONJUNTO_A(ELEMENTO) + 10
END DO
DO ELEMENTO = 1, QUANTIDADE_ELEMENTOS
READ(*,*) CONJUNTO_A(ELEMENTO)
END DO
CONJUNTO_B = CONJUNTO_A + 10
CONJUNTO_C = EXP(CONJUNTO_A)
DO ELEMENTO = 1, QUANTIDADE_ELEMENTOS
WRITE(*,20) ELEMENTO, CONJUNTO_C(ELEMENTO)
20 FORMAT(10X, "CONJUNTO_C(", I2, ") = ", 1PE15.3 )
END DO
END
d) H duas formas de escrever os valores dos elementos de uma varivel do tipo conjunto. A
primeira agir da mesma forma que no caso de uma varivel simples. Por exemplo, como
resultado da linha WRITE(*,*) "CONJUNTO_B = ", CONJUNTO_B do programa, sero escritos os
valores de todos os elementos da varivel CONJUNTO_B, na seqncia do primeiro ao ltimo
CONJUNTO_A" do programa.
b) Na segunda linha, o programa pra e fica aguardando que seja fornecido o valor da varivel
QUANTIDADE_ELEMENTOS, resultado do comando READ(*,*) QUANTIDADE_ELEMENTOS do
programa. Para que o programa continue sua execuo necessrio digitar 6, por exemplo, e, em
seguida, clicar na tecla Enter.
c) Na terceira linha, o comentrio Entre com os valores do CONJUNTO_A, resultado do comando
WRITE(*,*) "Entre com os valores do CONJUNTO_A" do programa.
d) Na quarta linha, o programa pra e fica aguardando que sejam fornecidos os valores de todos os
elementos da varivel CONJUNTO_A, resultado do comando READ(*,*)
10) At entender, analisar os resultados do programa9c.f90, mostrados na Figura 9.2, considerando cada
linha do programa-fonte e as explicaes descritas no item 5 acima.
11) Executar novamente o programa com outros dados. At entender, analisar os novos resultados
considerando cada linha do programa-fonte e as explicaes descritas no item 5 acima.
9.4 programa9d.f90
1) Nesta seo ser usado o mesmo projeto da seo anterior. Portanto, deve-se executar o seguinte no
Fortran:
a) Clicar sobre o nome do programa9c.f90
b) Edit, Cut para retirar o programa9c.f90 do projeto.
2) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte
programa9d.f90
3) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 9.5.
4) Objetivo do programa: aplicar os conceitos j vistos nas sees anteriores deste captulo ao caso de
uma progresso aritmtica (P.A.) onde os valores dos elementos da varivel do tipo conjunto so
inteiros.
5) Algoritmo do programa:
a) Definir os tipos de todas as variveis
b) Ler o nmero de termos da progresso aritmtica (P.A.)
c) Alocar a memria para a varivel do tipo conjunto chamada A
Captulo 9. Conjuntos 113
d) Ler os valores do primeiro termo da P.A. e a diferena entre dois termos subseqentes
e) Calcular os valores dos termos da P.A. e atribu-los varivel A
f) Calcular a soma dos valores de todos os elementos da P.A.
g) Escrever os valores de todos os elementos da P.A. e a soma deles
ALLOCATE ( A(N) )
DO TERMO = 2, N
A(TERMO) = A(1) + (TERMO - 1) * D
END DO
SN = N * ( A(1) + A(N) ) / 2
DO TERMO = 1, N
WRITE(*,10) TERMO, A(TERMO)
10 FORMAT(3X, "A(", I3, ") = ", I8 )
END DO
END
9.5 EXERCCIOS
Exerccio 9.1
Adaptar o programa9d.f90 para escrever os valores dos termos da progresso aritmtica num arquivo,
bem como a soma dos valores de todos os termos
Exerccio 9.2
Adaptar o programa9d.f90 para calcular e escrever os valores dos termos de uma progresso geomtrica
num arquivo, bem como a soma dos valores de todos os termos
Exerccio 9.3
Editar um programa-fonte em FORTRAN para executar o seguinte algoritmo (passos):
1) Definir os tipos de todas as variveis, sendo uma delas do tipo conjunto para caracteres, chamada
NOMES
Captulo 9. Conjuntos 115
2) Ler a quantidade de elementos da varivel NOMES
3) Alocar a memria para a varivel NOMES
4) Ler os contedos de todos os elementos da varivel NOMES
5) Escrever num arquivo o contedo de cada elemento da varivel NOMES
Exerccio 9.4
Adaptar o programa9b.f90 para:
1) Escrever num arquivo os valores das notas e os resultados calculados
2) Calcular e escrever o desvio-padro (D) das notas, definido por
(N
i =1
m Ni )2
D =
N
Exerccio 9.5
Editar um programa-fonte em FORTRAN para executar o seguinte algoritmo (passos):
1) Ler os valores inteiros de cinco variveis
2) Ordenar e escrever as cinco variveis em ordem crescente de valor
3) Ordenar e escrever as cinco variveis em ordem decrescente de valor
Exerccio 9.6
Editar um programa-fonte em FORTRAN para executar o seguinte algoritmo (passos):
1) Ler os valores inteiros de cinco variveis
2) Determinar e escrever quais variveis tm valor par
3) Determinar e escrever quais variveis tm valor mpar
4) Calcular a soma dos valores pares
5) Calcular a soma dos valores mpares
OBJETIVOS DO CAPTULO
Conceitos de: conjunto multidimensional (matriz), ciclo implcito, ciclo duplo
Comandos do FORTRAN: DIMENSION(:,:), MATMUL
10.1 programa10a.f90
DO LINHA = 1, LINHAS
WRITE(*,*) "Entre com os valores dos elementos da matriz da linha =", LINHA
DO COLUNA = 1, COLUNAS
READ(*,*) MATRIZ(LINHA,COLUNA)
END DO
END DO
END
Tabela 10.2 Sintaxe de comandos para variveis do tipo matriz (conjunto bidimensional).
i) Cada elemento de uma varivel do tipo conjunto bidimensional referenciado por dois nmeros
inteiros, chamado ndices, que correspondem ordem dele dentro do conjunto. O primeiro ndice
corresponde linha que o elemento ocupa dentro da matriz e o segundo, coluna. Estes ndices
devem ficar dentro de parnteses, e separados por vrgula, aps o nome da varivel do tipo
conjunto bidimensional. Os ndices ou os nmeros do elemento podem ser representados por
variveis, por exemplo, na linha READ(*,*) MATRIZ(LINHA,COLUNA) do programa, que est
dentro de um ciclo duplo.
f) Na sexta linha, o programa pra e fica aguardando que sejam fornecidos os valores de todos os
elementos da primeira linha da matriz, resultado dos comandos
DO COLUNA = 1, COLUNAS
READ(*,*) MATRIZ(LINHA,COLUNA)
END DO
do programa, que contm um ciclo que comea no elemento da primeira coluna e vai at a ltima.
Deve-se perceber que o comando READ usado para ler o valor de apenas um elemento a cada
vez; assim necessrio digitar cada valor e, em seguida, clicar na tecla Enter antes de se digitar
10.2 programa10b.f90
1) Nesta seo ser usado o programa10a.f90, da seo anterior, como base para um novo programa.
Portanto, deve-se executar o seguinte no Fortran:
a) Selecionar todas as linhas do programa10a.f90 com o boto esquerdo do mouse
b) Edit, Copy para salvar este programa-fonte na memria do computador
2) Nesta seo ser usado o mesmo projeto da seo anterior. Portanto, deve-se executar o seguinte no
Fortran:
a) Clicar sobre o nome do programa10a.f90
b) Edit, Cut para retirar o programa10a.f90 do projeto.
3) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte
programa10b.f90
4) No Fortran, executar Edit, Paste para inserir o programa10a.f90 dentro do programa10b.f90.
5) Dentro do espao de edio do Fortran, na subjanela maior, alterar o programa10a.f90 para que
fique exatamente igual ao texto em vermelho mostrado na Tabela 10.3.
6) Objetivos do programa:
a) Aplicar os comandos DIMENSION, ALLOCATABLE e ALLOCATE a conjuntos bidimensionais
(matrizes) do tipo real
b) Ler valores de elementos de matrizes e escrev-los num arquivo utilizando ciclos simples e
implcitos
c) Realizar operaes matemticas com matrizes
7) Comentrios sobre o programa:
consegue-se ler os valores de todos os elementos de cada linha da MATRIZ_A. Isso possvel
porque: existe um ciclo externo, definido pela linha DO LINHA = 1, LINHAS do programa, que a
cada execuo percorre uma linha da matriz; e tambm existe um ciclo chamado de implcito na
linha READ(*,*) ( MATRIZ_A(LINHA,COLUNA), COLUNA = 1, COLUNAS ) do programa, que a
cada execuo percorre todas as colunas da matriz.
b) O chamado ciclo implcito ou aninhado utilizado sem os comandos DO e END DO, conforme
exemplificado na leitura e escrita da MATRIZ_A e na escrita da MATRIZ_B e da MATRIZ_C no
programa10b.f90.
DO LINHA = 1, LINHAS
WRITE(*,*) "Entre com os valores dos elementos da MATRIZ_A da linha =", LINHA
READ(*,*) ( MATRIZ_A(LINHA,COLUNA), COLUNA = 1, COLUNAS )
END DO
DO LINHA = 1, LINHAS
DO COLUNA = 1, COLUNAS
MATRIZ_B(LINHA,COLUNA) = CONSTANTE * MATRIZ_A(LINHA,COLUNA)
DO LINHA = 1, LINHAS
DO COLUNA = 1, COLUNAS
MATRIZ_C(LINHA,COLUNA) = MATRIZ_A(LINHA,COLUNA) + MATRIZ_B(LINHA,COLUNA)
END DO
END DO
OPEN(10, FILE="SAIDA10B.TXT")
WRITE(10,31) CONSTANTE
31 FORMAT("CONSTANTE = ", I5, /)
WRITE(10,32)
32 FORMAT(3X, "*** MATRIZ_A (dados) ***")
DO LINHA = 1, LINHAS
WRITE(10,33) ( MATRIZ_A(LINHA,COLUNA), COLUNA = 1, COLUNAS )
33 FORMAT( 10 (3X, 1PE10.3 ) )
END DO
WRITE(10,41)
41 FORMAT(1/, 3X, "*** MATRIZ_B (CONSTANTE * MATRIZ_A) ***")
DO LINHA = 1, LINHAS
WRITE(10,33) ( MATRIZ_B(LINHA,COLUNA), COLUNA = 1, COLUNAS )
END DO
WRITE(10,51)
51 FORMAT(1/, 3X, "*** MATRIZ_C (MATRIZ_A + MATRIZ_B) ***")
DO LINHA = 1, LINHAS
WRITE(10,33) ( MATRIZ_C(LINHA,COLUNA), COLUNA = 1, COLUNAS )
END DO
CLOSE(10)
END
c) Na terceira linha, o comentrio Entre com o numero de linhas das matrizes (inteiro), resultado do
comando WRITE(*,*) "Entre com o numero de linhas das matrizes (inteiro)" do
programa.
d) Na quarta linha, o programa pra e fica aguardando que seja fornecido o valor da varivel
LINHAS, resultado do comando READ(*,*) LINHAS do programa. Para que o programa continue
sua execuo necessrio digitar 3, por exemplo, e, em seguida, clicar na tecla Enter.
e) Na quinta linha, o comentrio Entre com o numero de colunas das matrizes (inteiro), resultado do
comando WRITE(*,*) "Entre com o numero de colunas das matrizes (inteiro)" do
programa.
10.3 EXERCCIOS
Exerccio 10.1
Editar um programa-fonte em FORTRAN para executar o seguinte algoritmo (passos):
1) Ler o valor de uma constante
2) Ler os valores reais da Matriz_A
3) Dividir pela constante o valor de cada elemento da Matriz_A e atribuir o resultado Matriz_B
4) Escrever num arquivo a Matriz_B identificando os ndices de cada elemento
Exerccio 10.2
Editar um programa-fonte em FORTRAN para executar o seguinte algoritmo (passos):
1) Ler os valores reais da Matriz_A
2) Calcular a exponencial do valor de cada elemento da Matriz_A e atribuir o resultado Matriz_B
3) Escrever num arquivo a Matriz_B identificando os ndices de cada elemento
Exerccio 10.3
Editar um programa-fonte em FORTRAN para calcular o produto de duas matrizes [A] x [B], executando
o seguinte algoritmo (passos):
1) Ler os seguintes dados (suficientes para resolver o problema):
a) nmero de linhas da Matriz_A
b) nmero de colunas da Matriz_A
c) nmero de colunas da Matriz_B
d) Valores dos elementos da Matriz_A
e) Valores dos elementos da Matriz_B
2) Calcular o valor de cada elemento da Matriz_C que resulta do produto da Matriz_A pela Matriz_B;
para fazer isso, sugere-se analisar o produto literal entre uma matriz 2x2 com outra 2x1; depois, uma
3x2 com outra 2x2; deduzir o algoritmo e implement-lo
3) Escrever num arquivo todos os dados lidos e a Matriz_C identificando todas as variveis e elementos
4) Calcular a Matriz_D atravs da seguinte linha inserida dentro do programa-fonte:
Matriz_D = MATMUL ( Matriz_A, Matriz_B )
Captulo 10. Matrizes 128
onde o comando MATMUL uma funo intrnseca do FORTRAN que calcula o produto de duas
matrizes
5) Escrever num arquivo a Matriz_D identificando seus elementos; ela deve ser idntica Matriz_C
OBJETIVOS DO CAPTULO
Aprender a utilizar o aplicativo Wgnuplot para fazer grficos
Aprender a utilizar o aplicativo Wgnuplot interativamente com um programa em FORTRAN
1) O Wgnuplot um software livre utilizado para fazer grficos bi e tridimensionais. Um manual bsico
sobre ele est disponvel em ftp://ftp.demec.ufpr.br/Disciplinas/Tm102/Marchi/Wgnuplot.pdf
2) Para iniciar sua utilizao, basta clicar duas vezes sobre o arquivo Wgnuplot.exe ou Application.
O resultado deve ser o mostrado na Figura 11.1.
3) Informaes detalhadas sobre a utilizao do Wgnuplot podem ser vistas no menu principal do
programa, na opo Help, Index
4) Informaes detalhadas sobre os comandos do Wgnuplot podem ser vistas no menu principal do
programa, na opo Help, Index, commands. Escolher, por exemplo, o comando plot.
5) Para gerar um grfico, devem ser executados os comandos adequados na chamada linha de
comando do aplicativo Wgnuplot, que a linha indicada por gnuplot> na Figura 11.1, e onde o
cursor fica aps ser acionado o programa.
Captulo 11. Grficos com Wgnuplot 130
6) O comando plot usado para mostrar o grfico de funes definidas atravs de um arquivo de dados
ou de funes pr-definidas no Wgnuplot ou, ainda, de funes criadas pelo usurio. Por exemplo,
para visualizar o grfico da funo seno, deve-se digitar plot sin(x) na linha de comando do
Wgnuplot, conforme mostrado na Figura 11.2, e, em seguida, clicar na tecla Enter. Surgir uma
nova janela com o grfico da funo seno, mostrado na Figura 11.3. Nas abscissas apresentado x em
radianos, e nas ordenadas, o valor da funo seno.
Figura 11.2 Insero do comando plot sin(x) na linha de comando do aplicativo Wgnuplot.
Figura 11.3 Grfico da funo seno conforme o comando do item 6 da seo 11.2.
8) O comando set yrange[y1:y2] usado para definir o intervalo dos valores das ordenadas, isto , y,
mostrado no grfico, onde y1 e y2 so os valores mnimo e mximo, respectivamente. Por exemplo,
para definir o intervalo dos valores de y entre os nmeros 0 e 1, na linha de comando do Wgnuplot,
deve-se digitar set yrange[0:1]. Em seguida, clicar na tecla Enter. Para visualizar o resultado,
digitar replot e, em seguida, clicar na tecla Enter.
1) O aplicativo Wgnuplot pode ser usado para fazer grfico de um arquivo de dados. Isso ser
exemplificado com o arquivo dados.txt. Para cri-lo com o aplicativo Notepad, executar o seguinte:
a) Start, Programs, Accessories, Notepad
b) Dentro do espao de edio do Notepad, digitar os seguintes nmeros em duas colunas separadas
por pelo menos um espao em branco:
0 0
1 1
2 4
3 9
4 7
5 0
c) File, Save
d) Na janela Save As, dentro do campo File Name, digitar dados.txt
e) Ainda na janela Save As, dentro do campo Save in:, selecionar o diretrio do projeto. Em
seguida, clicar sobre o boto Save.
f) No aplicativo Notepad, executar File, Exit
2) Num arquivo de dados, o aplicativo Wgnuplot interpreta a primeira coluna como os dados do eixo x
(abscissas) e a segunda, do eixo y (ordenadas).
3) Inicializar o aplicativo Wgnuplot clicando duas vezes sobre o arquivo Wgnuplot.exe ou Application
Figura 11.5 Grfico resultante dos comandos usados nos itens 6 a 13 da seo 11.2.
5) O comando set data style linespoints utilizado para colocar um smbolo (crculo, quadrado etc) em
cada par x-y dos dados e unir os pontos com retas entre eles. Na linha de comando do aplicativo
Wgnuplot, digitar set data style linespoints e, em seguida, clicar na tecla Enter.
6) Para gerar o grfico com as coordenadas x-y do arquivo dados.txt, na linha de comando do aplicativo
Wgnuplot, digitar plot dados.txt e, em seguida, clicar na tecla Enter. Dever surgir o grfico
correspondente aos comandos usados nesta seo, que mostrado na Figura 11.6.
7) Encerrar o Wgnuplot com File, Exit
1) O aplicativo Wgnuplot tambm pode ser usado para fazer grfico de um arquivo de dados utilizando
um arquivo com os comandos do prprio Wgnuplot. Isso facilita muito a gerao de grficos de forma
automatizada. A seguir, este novo procedimento aplicado ao mesmo exemplo da seo anterior
utilizando o arquivo comandos.txt. Para cri-lo com o aplicativo Notepad, executar o seguinte:
a) Start, Programs, Accessories, Notepad
b) Dentro do espao de edio do Notepad, digitar os seguintes comandos do Wgnuplot:
set xlabel x
set ylabel y
set title Teste do Wgnuplot
set grid
set data style linespoints
plot dados.txt
c) File, Save
d) Na janela Save As, dentro do campo File Name, digitar comandos.txt
Captulo 11. Grficos com Wgnuplot 136
e) Ainda na janela Save As, dentro do campo Save in:, selecionar o diretrio do projeto. Em
seguida, clicar sobre o boto Save.
f) No aplicativo Notepad, executar File, Exit
2) Inicializar o aplicativo Wgnuplot clicando duas vezes sobre o arquivo Wgnuplot.exe ou
Application
3) Para gerar o grfico utilizando um arquivo de comandos, deve-se usar o comando load nome, onde
nome representa o nome do arquivo com comandos do Wgnuplot, que deve ficar entre aspas.
Portanto, na linha de comando do aplicativo Wgnuplot, digitar load comandos.txt e clicar na
tecla Enter. Em seguida, dever surgir o mesmo grfico da seo anterior, j mostrado na Figura
11.6. Deve-se notar que este novo grfico foi gerado sem qualquer comando ser digitado na linha de
comando do Wgnuplot, exceto o comando load.
4) Encerrar o Wgnuplot com File, Exit
5) Com o que foi visto nesta seo, pode-se, agora, gerar arquivos (dados.txt) com curvas de resultados
(os pares coordenados x-y) obtidos de programas em FORTRAN. E, dentro dos programas em
FORTRAN, chamar o aplicativo Wgnuplot para gerar os grficos correspondentes utilizando
arquivos de comandos (comandos.txt) do Wgnuplot. Na prxima seo mostrado como fazer isso.
11.5 programa11.f90
1) Nesta seo ser usado o mesmo projeto criado na seo 11.1. Portanto, no Fortran, seguindo o
procedimento-padro, criar e inserir no projeto o programa-fonte programa11.f90
2) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 11.1.
3) Objetivos do programa:
a) Gerar um arquivo com as coordenadas x e y de uma curva
b) Plotar esta curva com o aplicativo Wgnuplot
4) Comentrios sobre o programa:
a) O uso dos comandos USE e SYSTEM j foi explicado na seo 5.3 do captulo 5.
b) O comando SYSTEM vinha sendo usado para que o aplicativo Notepad abrisse arquivos com
resultados dos programas. No programa11.f90 ele tambm usado para acionar o aplicativo
Wgnuplot e gerar um grfico, com o procedimento visto na seo 11.4.
c) O arquivo de comandos do Wgnuplot utilizado no programa aquele criado na seo anterior,
chamado comandos.txt.
5) Algoritmo do programa:
a) Unir a biblioteca PORTLIB ao programa para usar o comando SYSTEM
Captulo 11. Grficos com Wgnuplot 137
b) Definir os tipos de todas as variveis
c) Ler o nmero de pontos a usar para gerar o grfico
d) Calcular as coordenadas x e y, onde y = x3, e grav-las num arquivo chamado DADOS.TXT
e) Com o aplicativo Notepad, mostrar o contedo do arquivo DADOS.TXT
f) Com o aplicativo Wgnuplot, gerar um grfico com os dados do arquivo DADOS.TXT utilizando
os comandos do arquivo COMANDOS.TXT.
REAL X, Y
INTEGER PONTO, PONTOS, VER
DO PONTO = 1, PONTOS
X = PONTO - 1
Y = X**3
WRITE(7,40) X, Y
40 FORMAT( 2 ( 1PE10.2 ) )
END DO
CLOSE(7)
END
d) Fechar o aplicativo Notepad, com File, Exit. Deve surgir o grfico mostrado na Figura 11.9.
9) At entender, analisar os resultados do programa11.f90, mostrados nas Figura 11.7 a 11.9,
considerando cada linha do programa-fonte e as explicaes descritas nas sees anteriores deste
captulo.
10) Executar novamente o programa com outro nmero de pontos.
11) Encerrar a sesso seguindo o procedimento-padro.
Exerccio 11.1
Adaptar o programa11.f90 para que ele gere o grfico y versus x onde y = logaritmo decimal de x
Exerccio 11.2
Adaptar o programa11.f90 para que ele gere o grfico y versus x onde y = cosseno hiperblico de x
OBJETIVOS DO CAPTULO
Conceitos de: sub-rotina, programa-principal, projeto com diversos programas-fonte, passagem de
argumentos
Comandos do FORTRAN: PROGRAM, EXTERNAL, SUBROUTINE, CALL, CONTAINS
12.1 programa12a
EXTERNAL ROTINA1
REAL A, B, C
CALL SOMA ( A, B, C )
REAL X, Y, Z
Z = X + Y
12.2 programa12b
EXTERNAL ROTINAS2
INTEGER INTEIRO
REAL A, B, C
CALL SOMA ( A, B, C )
REAL X, Y, Z
Z = X + Y
SUBROUTINE FATORIAL ( N )
INTEGER I, N, FAT
FAT = 1
IF ( N < 0 ) THEN
WRITE(*,*) "Nao existe fatorial de ", N
ELSE
DO I = 2, N
FAT = FAT * I
END DO
END IF
6) Objetivos do programa:
a) Implementar um programa-fonte com duas sub-rotinas
b) Utilizar duas sub-rotinas externas ao programa-principal
7) Comentrios sobre o programa:
a) Um programa-fonte pode ser constitudo por uma ou vrias sub-rotinas. Um exemplo o
programa-fonte rotinas2.f90 que contm duas sub-rotinas.
12.3 programa12c
EXTERNAL ROTINA3
CALL OUTRAS
EXTERNAL ROTINAS2
INTEGER INTEIRO
REAL A, B, C
CALL SOMA ( A, B, C )
12.4 programa12d
USE MSIMSLMS
CALL OUTRAS
CONTAINS
! -------------------------------------------------------------------
SUBROUTINE OUTRAS
INTEGER INTEIRO
REAL A, B, C
CALL SOMA ( A, B, C )
! -------------------------------------------------------------------
SUBROUTINE SOMA ( X, Y, Z )
REAL X, Y, Z
Z = X + Y
! -------------------------------------------------------------------
SUBROUTINE FATORIAL ( N )
INTEGER I, N, FAT
FAT = 1
IF ( N < 0 ) THEN
WRITE(*,*) "Nao existe fatorial de ", N
ELSE
DO I = 2, N
FAT = FAT * I
END DO
END IF
! -------------------------------------------------------------------
12.5 EXERCCIO
Exerccio 12.1
Alterar o programa12d, da seo 12.4, da seguinte forma:
1) Adaptar a sub-rotina FATORIAL e sua chamada na sub-rotina OUTRAS para que o valor do fatorial
seja passado a sub-rotina OUTRAS
2) Implementar a sub-rotina ESCREVE para escrever num arquivo os resultados das variveis A, B, C,
INTEIRO e fatorial. Esta nova sub-rotina dever ser chamada dentro da sub-rotina OUTRAS.
3) Implementar a sub-rotina ARQUIVO para mostrar, com o aplicativo Notepad, o contedo do arquivo
criado pela sub-rotina ESCREVE. A sub-rotina ARQUIVO dever ser chamada pela sub-rotina
OUTRAS, aps a chamada da sub-rotina ESCREVE.
OBJETIVOS DO CAPTULO
Conceitos de: variveis de preciso simples e dupla, variveis do tipo real simples e dupla, mistura de
variveis do tipo inteiro com real simples e real dupla
Funes matemticas intrnsecas e formatos de edio para variveis do tipo real dupla
Comandos do FORTRAN: REAL, REAL*4, REAL(4), REAL*8, REAL(8), DOUBLE PRECISION e
IMPLICIT NONE
Para inicializar as atividades deste captulo, deve-se acessar o programa Fortran, no Windows
atravs de: Start, Programs, Fortran PowerStation 4.0, Microsoft Developer Studio
13.1 programa13a.f90
1) Objetivos do programa:
a) Definir uma varivel do tipo real de dupla preciso usando o comando REAL*8
b) Comparar a preciso de variveis do tipo real simples e dupla
2) No Fortran, seguindo o procedimento-padro, criar um projeto com o nome programa13a
3) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte
programa13a.f90
4) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 13.1.
5) Comentrios sobre o programa:
a) No captulo 3 foram abordadas as variveis do tipo real. Elas so usadas para definir variveis do
tipo real, isto , variveis que podem guardar ou armazenar na memria do computador nmeros
reais, positivos ou negativos, como 1.0, 1.0, 1.1, 3.1416 ou 0.003. Para definir uma varivel do
tipo real num programa usa-se o comando REAL. As variveis definidas com o comando REAL
podem guardar na memria do computador valores no intervalo aproximado de 1.17e-38 a
3.40e+38 e a preciso de 6 casas decimais. Estas variveis tambm podem ser chamadas de reais
simples ou de preciso simples.
b) O novo comando REAL*8 usado para definir variveis do tipo real dupla ou de preciso dupla.
As variveis definidas com o comando REAL*8 podem guardar na memria do computador
Em geral, estas variveis so mais adequadas em computao cientfica. Entretanto elas exigem o
dobro da memria computacional em relao s variveis reais simples.
c) A linha REAL A define a varivel A como sendo do tipo real simples.
d) A linha REAL*8 B define a varivel B como sendo do tipo real dupla.
END
9) Executar novamente o programa com o valor 123456789 para as duas variveis e analisar os
resultados.
13.2 programa13b.f90
1) Objetivos do programa:
a) Usar diversas formas para definir variveis reais simples e dupla
b) Realizar clculos elementares envolvendo variveis do tipo inteiro, real simples e real dupla
2) No Fortran, seguindo o procedimento-padro, criar um projeto com o nome programa13b
3) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte
programa13b.f90
4) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 13.2.
5) Comentrios sobre o programa:
a) As variveis do tipo real simples podem ser definidas atravs dos comandos REAL, REAL*4 e
REAL(4). Exemplos so as definies das variveis A, B e C.
b) As variveis do tipo real dupla podem ser definidas atravs dos comandos REAL*8, REAL(8) e
DOUBLE PRECISION. Exemplos so as definies das variveis E, F e G.
c) Os clculos das variveis D, B e C so exatamente os mesmos mostrados no programa03d.f90 do
captulo 3, seo 3.2, para explicar as conseqncias de misturar variveis do tipo inteiro e real
simples num clculo. Estas mesmas explicaes valem para as variveis reais dupla F e G.
d) Quando se atribui uma varivel real simples a uma real dupla, esta tem sua preciso deteriorada
para real simples. Um exemplo o clculo da varivel E. Isso deve sempre ser evitado. Se o
objetivo usar preciso dupla num programa, todas as variveis e os clculos devem envolver
preciso dupla, exceto em alguns tipos de clculo com variveis inteiras.
6) Executar Build, Compile para compilar o programa
7) Gerar o programa-executvel fazendo Build, Build.
8) Executar o programa, atravs de Build, Execute, com o valor 6.9 para a varivel A.
9) Analisar os resultados mostrados na Figura 13.2. Deve-se notar a diferena de preciso no
arredondamento do clculo das variveis C e G. Tambm deve-se notar a deteriorao da preciso da
REAL A
REAL*4 B
REAL(4) C
REAL*8 E
REAL(8) F
DOUBLE PRECISION G
D = A
B = 1 / D
C = 1.0 / D
E = A
F = 1 / D
G = 1.0 / D
END
10) Executar novamente o programa com outros valores para a varivel A e analisar os resultados.
11) No Fortran, para fechar o projeto atual, executar File, Close Workspace
13.3 programa13c.f90
1) Objetivos do programa:
a) Mostrar a importncia de serem definidas todas as variveis de um programa
b) Utilizar o comando IMPLICIT NONE
2) No Fortran, seguindo o procedimento-padro, criar um projeto com o nome programa13c
3) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte
programa13c.f90
4) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 13.2, isto , copiar o programa13b.f90 do projeto anterior.
5) Eliminar a primeira linha do programa, ou seja, INTEGER D.
6) Executar Build, Compile para compilar o programa. Mesmo a varivel D no tendo sido definida,
no ocorre erro de compilao. Quando uma varivel no definida, por default, assume-se que todas
as variveis iniciadas pelas letras I at N, em ordem alfabtica, so do tipo inteiro, e as demais so do
tipo real simples.
7) Gerar o programa-executvel fazendo Build, Build.
8) Executar o programa, atravs de Build, Execute, com o valor 6.9 para a varivel A. Em princpio,
os mesmos resultados mostrados na Figura 13.2 deveriam ser obtidos. Porm, pode-se notar na
Figura 13.3 que isso no ocorre, ressaltando-se: a varivel D passou a ser uma varivel real simples;
com isso, foram alterados os valores das variveis B, C, F e G.
9) Incluir na primeira linha do programa13c.f90 o comando IMPLICIT NONE. Ele deve ser
colocado antes de qualquer declarao de tipo de varivel. Recomenda-se fortemente sempre usar o
comando IMPLICIT NONE porque ele obriga o programador a declarar explicitamente os tipos de
10) Executar Build, Compile para compilar a nova verso do programa. Deve-se notar que agora
ocorrer erro de compilao, apontando que a varivel D no foi declarada.
11) Incluir a declarao da varivel D como sendo do tipo inteiro, conforme mostrado na Tabela
13.3.
12) Executar Build, Compile para compilar o programa.
13) Gerar o programa-executvel fazendo Build, Build.
14) Executar o programa, atravs de Build, Execute, com o valor 6.9 para a varivel A. Agora os
resultados so os mesmos mostrados na Figura 13.2, conforme esperado.
15) No Fortran, para fechar o projeto atual, executar File, Close Workspace
INTEGER D
REAL A
REAL*4 B
REAL(4) C
REAL*8 E
REAL(8) F
DOUBLE PRECISION G
E = A
F = 1 / D
G = 1.0 / D
END
13.4 programa13d.f90
1) Objetivos do programa:
a) Usar funes matemticas intrnsecas do FORTRAN com variveis reais do tipo dupla
b) Usar formatos de edio com variveis reais do tipo dupla
2) No Fortran, seguindo o procedimento-padro, criar um projeto com o nome programa13d
3) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte
programa13d.f90
4) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 13.4.
A4 = A8
WRITE(9,*) "A4 = A8 =", A4
B4 = ABS(A4)
B8 = DABS(A8)
WRITE(9,*) "B4 = Mdulo com ABS(A4) =", B4
WRITE(9,*) "B8 = Mdulo com DABS(A8) =", B8
C4 = LOG10(B4)
C8 = DLOG10(B8)
WRITE(9,*) "C4: Logaritmo decimal com LOG10(B4) =", C4
WRITE(9,*) "C8: Logaritmo decimal com DLOG10(B8) =", C8
Pi4 = ACOS(-1.0e0)
Pi8 = DACOS(-1.0d0)
WRITE(9,*) "Pi com ACOS(-1.0e0) = ", Pi4
WRITE(9,*) "Pi com DACOS(-1.0d0) = ", Pi8
CLOSE(9)
END
c) A lista completa de funes matemticas intrnsecas do FORTRAN pode ser vista no manual do
Fortran. Para acess-lo, dentro da subjanela do lado esquerdo, deve-se executar: clicar uma vez
sobre o smbolo ?InfoView; e acessar as opes Reference, Procedures, Numeric Procedures e
as opes Reference, Procedures, Trigonometric, Exponential, Root, and Logathmic
Procedures.
d) Os tipos de formatos de edio usados com variveis do tipo real simples tambm podem ser
usados com variveis do tipo real dupla. Estes formatos foram vistos no captulo 6, seo 6.3. Um
outro formato que pode ser conveniente 1PEX.YEZ, onde a terminao EZ indica expoente e Z
o nmero de algarismos para o expoente. Por exemplo, no programa13d.f90 usa-se o formato
1PE15.2E3.
e) Nos argumentos de funes intrnsecas para variveis do tipo real dupla deve-se definir os
nmeros usando-se a letra D (ou d) em vez de E (ou e) (das variveis reais simples) para
13.5 EXERCCIOS
Exerccio 13.1
Para testar as operaes matemticas bsicas, refazer o programa03e.f90, do captulo 3, seo 3.3, usando
variveis do tipo real dupla em vez de real simples.
Captulo 13. Variveis do tipo real dupla 163
Exerccio 13.2
Para testar o uso da escala de prioridades entre os operadores matemticos e as regras adotadas nas
operaes matemticas, descritas nas Tabelas 3.4 e 3.5, refazer o programa03f.f90, do captulo 3, seo
3.5, usando, onde pertinente, variveis do tipo real dupla em vez de real simples.
Exerccio 13.3
Escrever as expresses em linguagem FORTRAN que correspondem s seguintes expresses algbricas,
onde A, B e L so nmeros reais de preciso dupla, e I e J so nmeros inteiros:
OBJETIVOS DO CAPTULO
Conceitos de: arquivo de entrada, arquivo interno, arquivo texto, arquivo binrio, dispositivo e nome
de arquivo genricos
Comandos do FORTRAN: uso avanado de OPEN, WRITE e SYSTEM
No comando OPEN, usar os parmetros FORMATTED, UNFORMATTED, REWIND e APPEND
Para inicializar as atividades deste captulo, deve-se acessar o programa Fortran, no Windows,
atravs de: Start, Programs, Fortran PowerStation 4.0, Microsoft Developer Studio
14.1 programa14a.f90
Pi = DACOS(-1.0d0)
OPEN(9,file="saida14a.txt")
WRITE(9,11) UNIT, Pi
CLOSE(9)
END
14.2 programa14b.f90
1) Objetivos do programa:
(a) Entrada de dados atravs de janela DOS;
(b) escrever resultados num arquivo cujo nome e o nmero do dispositivo so genricos e definidos
pelo usurio atravs dos dados do programa; e
(c) abrir o arquivo de resultados de nome genrico com o aplicativo Notepad.
2) No Fortran, seguindo o procedimento-padro, criar um projeto com o nome programa14b
Captulo 14. Arquivos de sada, de entrada e internos 166
3) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte
programa14b.f90
4) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 14.2.
Pi = DACOS(-1.0d0)
CLOSE(UNIT)
END
14.3 programa14c.f90
14.4 programa14d.f90
1) Objetivos do programa:
(a) ler os dados do programa de um arquivo, em vez de usar a janela DOS; e
Captulo 14. Arquivos de sada, de entrada e internos 170
(b) abrir o arquivo de dados com o aplicativo Notepad.
READ(1,*) UNIT
CLOSE(1)
Pi = DACOS(-1.0d0)
CLOSE(UNIT)
END
(c) Nas linhas READ(1,*) UNIT e READ(1,*) SAIDA os dois dados so lidos, variveis UNIT e
SAIDA. Deve-se notar que so dois comandos READ, cada um sendo usado para ler uma nica
varivel. Assim, aps o programa ler o contedo da varivel UNIT na primeira linha do arquivo
dados.txt, tudo que estiver nesta linha aps o valor de UNIT no considerado pelo programa.
Portanto, podem ser inseridos comentrios nos arquivos de dados para ficar claramente definido
ao que corresponde cada dado. O mesmo se aplica ao valor da varivel SAIDA na segunda linha
do arquivo dados.txt; o que est aps este dado, na mesma linha, no considerado pelo
programa.
(d) Recomenda-se sempre fazer isso: um dado por linha e, em seguida, na mesma linha, um
comentrio para informar o que significa a varivel. Alm disso, nunca se deve usar formato para
ler dados; este o motivo do asterisco nos dois comandos READ. Os formatos devem ser usados
apenas para escrever resultados.
(e) Todos os comentrios j feitos nos captulos anteriores e neste sobre o comando OPEN, para
arquivos de resultados ou de sada, tambm valem para arquivos de entrada ou de dados.
6) Executar Build, Compile para compilar o programa.
7) Gerar o programa-executvel fazendo Build, Build.
WRITE(TEXTO2,*) UNIT
WRITE(TEXTO3,*) Pi
READ(TEXTO3,*) TEXTO5
CLOSE(UNIT)
END
9) Executar novamente o programa atravs de Build, Execute com outros dados. Analisar o novo
resultado.
10) Encerrar a sesso seguindo o procedimento-padro.
14.6 EXERCCIOS
Exerccio 14.1
Seguindo o algoritmo do programa14d.f90, Tabela 14.3, refazer o exerccio 13.1 atendendo:
(a) um arquivo para entrar os dados do programa;
(b) no incio da execuo do programa, abrir automaticamente o arquivo de dados com o aplicativo
Notepad;
(c) um arquivo para escrever os resultados do programa, com o nome do arquivo sendo definido pelo
usurio;
(d) no final da execuo do programa, abrir automaticamente o arquivo de resultados com o aplicativo
Notepad.
Exerccio 14.2
Seguindo o algoritmo do programa14d.f90, Tabela 14.3, refazer o exerccio 13.2 atendendo aos mesmos 4
itens do exerccio 14.1.
Exerccio 14.4
Seguindo o algoritmo do programa14d.f90, Tabela 14.3, refazer o programa da seo 12.4, Tabela 12.7,
atendendo aos mesmos 4 itens do exerccio 14.1.
Exerccio 14.5
Implementar uma nova verso do programa14d.f90 para que:
(a) o nome do arquivo de dados seja definido pelo usurio; e
(b) no incio da execuo do programa, o arquivo de dados seja aberto automaticamente com o aplicativo
Notepad.
OBJETIVOS DO CAPTULO
Inicializar variveis e constantes junto com suas definies
Verses DEBUG e RELEASE de um programa-executvel
Comandos do FORTRAN: PARAMETER, Formato A<X>
Funo do FORTRAN: TIMEF
Comandos do DOS: MKDIR, COPY, ERASE, CD, RENAME, arquivo.BAT
Para inicializar as atividades deste captulo, deve-se acessar o programa Fortran, no Windows,
atravs de: Start, Programs, Fortran PowerStation 4.0, Microsoft Developer Studio
15.1 programa15a.f90
1) Objetivos do programa:
(a) usar os novos comandos do FORTRAN: PARAMETER e formato A<X>
(b) ao definir variveis, inicializar seus valores; e
(c) escrever variveis do tipo caracter com tamanho exato de seu contedo, usando o comando
FORMAT.
2) No Fortran, seguindo o procedimento-padro, criar um projeto com o nome programa15a
3) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte
programa15a.f90
4) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 15.1.
USE PORTLIB
IMPLICIT NONE
INTEGER VER, X
CHARACTER(50) SAIDA, TEXTO, COMENTARIO
INTEGER :: UNIT = 20
REAL*8, PARAMETER :: Pi = 3.14159E+00
READ(1,*) COMENTARIO
READ(1,*) SAIDA
CLOSE(1)
WRITE(UNIT,10) UNIT, Pi
10 FORMAT( /, 5X, "UNIT = ", I4, &
2/, 5X, "Pi = ", 1PE25.15 )
WRITE(UNIT,11) COMENTARIO
11 FORMAT( /, A50, " = COMENTARIO" )
X = LEN(TRIM(ADJUSTL(COMENTARIO)))
WRITE(UNIT,12) TRIM(ADJUSTL(COMENTARIO))
12 FORMAT( /, A<X>, " = COMENTARIO" )
CLOSE(UNIT)
END
9) Executar o programa atravs de Build, Execute. O resultado deve ser o mostrado na Figura 15.2.
10) Executar novamente o programa com outros dados e analisar os novos resultados.
11) No Fortran, para fechar o projeto atual, executar File, Close Workspace.
15.2 programa15b.f90
INTEGER :: UNIT = 20
READ(1,*) PASSOS
READ(1,*) SAIDA
T1 = TIMEF()
SOMA = 0.0D0
DO I = 1, PASSOS
SOMA = SOMA + I
END DO
T2 = TIMEF()
T1 = TIMEF()
SOMA = 0.0D0
DO I = 1, PASSOS
SOMA = SOMA + I
END DO
T2 = TIMEF()
CLOSE(UNIT)
END
Figura 15.4 Resultado do programa15b.f90 para os dados da Figura 15.3, verso DEBUG.
10) Executar novamente o programa com outros dados e analisar os novos resultados. Utilizar, por
exemplo, PASSOS = 10 milhes, 1 milho e 1 bilho.
11) Verificar se dentro do diretrio do projeto existe um subdiretrio chamado DEBUG. Se no,
isto , se o diretrio existente for chamado RELEASE, onde se l DEBUG, nos itens 12 a 14, abaixo,
deve-se ler RELEASE e vice-versa.
12) Mudar a verso do programa para RELEASE. Para fazer isso, executar Build, Set Default
Configuration..., escolher a opo RELEASE, clicar no boto OK. Depois, executar Build,
Figura 15.5 Resultado do programa15b.f90 para os dados da Figura 15.3, verso RELEASE.
15) Executar novamente o programa com outros dados e analisar os novos resultados. Utilizar, por
exemplo, PASSOS = 10 milhes, 1 milho e 1 bilho.
16) No Fortran, para fechar o projeto atual, executar File, Close Workspace.
15.3 programa15c.f90
READ(1,*) COMENTARIO
READ(1,*) SAIDA
CLOSE(1)
CLOSE(UNIT)
CLOSE (UNIT)
! fim
END
15.4 EXERCCIOS
Exerccio 15.1
Adaptar o programa15a.f90, Tabela 15.1, para:
Exerccio 15.2
Adaptar o programa15b.f90, Tabela 15.2, para usar a funo DTIME junto com TIMEF e comparar o
tempo de CPU medido por cada funo.
Exerccio 15.3
Adaptar o programa15b.f90, Tabela 15.2, para que a varivel SOMA seja do tipo inteiro. Notar a reduo
do tempo de CPU que ocorre.
Exerccio 15.4
Adaptar o programa15b.f90, Tabela 15.2, para obter e escrever o tempo de CPU gasto entre a primeira e a
ltima chamada da funo TIMEF.
Exerccio 15.5
Adaptar o programa15b.f90, Tabela 15.2, para incluir, antes da ltima chamada da funo TIMEF, a
instruo
READ(*,*) Espere alguns segundos e pressione a tecla ENTER
Analisar o efeito desta instruo vazia no tempo de CPU.
Exerccio 15.6
Adaptar o programa15c.f90, Tabela 15.3, visando generalizar o nome do diretrio
C:\TEMP\FORTRAN\
para qualquer nome que o usurio defina atravs do arquivo de dados.
OBJETIVOS DO CAPTULO
Estimar e verificar a memria computacional necessria para executar um programa
Utilizar sub-rotina recursiva
Controlar o fluxo de informaes para dentro e para fora de sub-rotinas
Comandos do FORTRAN: DEALLOCATE, RECURSIVE, INTENT(IN,OUT,INOUT)
Para inicializar as atividades deste captulo, deve-se acessar o programa Fortran, no Windows,
atravs de: Start, Programs, Fortran PowerStation 4.0, Microsoft Developer Studio
16.1 programa16a.f90
1) Objetivos do programa:
(a) mostrar como estimar a memria computacional necessria para executar um programa; e
(b) usar um novo comando do FORTRAN: DEALLOCATE.
2) No Fortran, seguindo o procedimento-padro, criar um projeto com o nome programa16a
3) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte
programa16a.f90
4) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 16.1.
5) Comentrios sobre o programa:
(a) O comando DEALLOCATE usado para eliminar da memria do computador variveis para as
quais foi reservado memria por meio do comando ALLOCATE. Para us-lo basta a palavra
DEALLOCATE e, dentro de parnteses, as diversas variveis separadas por vrgula. No
necessrio indicar novamente o tamanho das variveis, pois isso j conhecido do comando
ALLOCATE. O comando DEALLOCATE s pode ser usado com variveis cuja memria foi
alocada com o comando ALLOCATE.
(b) Na linha DEALLOCATE ( A ) a varivel A, do tipo inteiro, com N elementos, est sendo
eliminada da memria do computador.
(c) A estimativa da memria necessria para executar um programa pode ser obtida atravs da
onde Ninteiro, Nreal simples e Nreal dupla representam o nmero total de elementos de conjuntos ou
matrizes de variveis do tipo inteiro, real simples e real dupla, respectivamente; Ncaracter
representa o nmero total de elementos de variveis do tipo caracter que tem comprimento ou
nmero de caracteres igual a L. Dentro do ltimo parnteses devem ser includos os produtos de
outras variveis do tipo caracter com outros comprimentos. Os valores 4, 8 e 1 representam o
nmero de bytes que cada um dos tipos de variveis ocupa de memria para um nico elemento.
O valor 1024 um fator usado para converter o nmero de bytes em kilobytes (kB).
READ(1,*) N
READ(1,*) SAIDA
CLOSE(1)
A = 1
M1 = N*4.0 / 1024
M2 = N*8.0 / 1024
M3 = N*1.0*10 / 1024
M4 = M1 + M2 + M3
CLOSE(UNIT)
DEALLOCATE ( A )
DEALLOCATE ( B )
DEALLOCATE ( C )
END
13) A Figura 16.4 mostra a memria estimada com a Eq. (16.1) para as variveis A, B e C do
programa16a.exe. Na Tabela 16.2 tem-se a comparao entre a memria estimada (Figura 16.4) e a
memria efetivamente usada, que foi obtida do Task Manager, nos subitens (d) a (g) do item 12,
acima.
14) Executar novamente o programa com outros valores para N e analisar os novos resultados.
15) No Fortran, para fechar o projeto atual, executar File, Close Workspace.
16.2 programa16b.f90
1) Objetivos do programa:
(a) utilizar sub-rotina recursiva; e
(b) usar um novo comando do FORTRAN: RECURSIVE
2) No Fortran, seguindo o procedimento-padro, criar um projeto com o nome programa16b
3) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte
programa16b.f90
Captulo 16. Memria e sub-rotinas 2 197
4) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 16.3.
5) Comentrios sobre o programa:
(a) Em algumas aplicaes pode ser necessrio que uma sub-rotina tenha que chamar ela prpria.
Neste caso, na definio da sub-rotina necessrio usar o comando RECURSIVE antes do
nome da sub-rotina. Um exemplo dado no programa16b.f90 na linha RECURSIVE SUBROUTINE
TESTE
(b) A chamada da sub-rotina feita da forma j descrita no captulo 12, isto , usando o comando
CALL seguido do nome da sub-rotina. Um exemplo dado no programa16b.f90 na linha CALL
TESTE
SOMA = 0
MENOS = 0
DO I = 1, 2
WRITE(*,*) "MAIN/ciclo: I,K,SOMA,MENOS=", I, K, SOMA, MENOS
K = 4
CALL TESTE
END DO
CONTAINS
! -------------------------------------------------------------------
IF ( K == 1 ) THEN
ELSE
SOMA = SOMA + 1
END IF
! -------------------------------------------------------------------
16.3 programa16c.f90
1) Objetivos do programa:
(a) controlar o fluxo de informaes para dentro e para fora de sub-rotinas; e
(b) usar um novo comando do FORTRAN: INTENT com parmetros IN, OUT e INOUT.
4) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 16.4.
5) Comentrios sobre o programa:
(a) O uso do comando IMPLICIT NONE no programa-principal obriga que sejam declaradas
explicitamente todas as variveis usadas no programa-principal e em todas as sub-rotinas do
mesmo programa. Caso contrrio, ocorrer erro de compilao.
(b) Todas as variveis definidas no programa-principal so vlidas dentro das sub-rotinas do
programa. Elas so chamadas de variveis globais. Por exemplo, as variveis A, B, C, D, E e F
do programa16c.f90, definidas na linha INTEGER A, B, C, D, E, F, so variveis globais do
programa.
(c) As variveis definidas dentro de uma sub-rotina so vlidas somente dentro da prpria sub-
rotina. Elas so chamadas de variveis locais. Seus valores ou contedos podem ser passados
para outras sub-rotinas ou para o programa-principal atravs dos argumentos da sub-rotina. Por
exemplo, as variveis R e S do programa16c.f90, definidas na linha INTEGER R, S, so
variveis locais da sub-rotina TESTE.
(d) Todas as atribuies feitas a variveis globais so reconhecidas dentro das sub-rotinas do
programa.
(e) Todas as atribuies feitas a variveis locais no so reconhecidas fora das sub-rotinas do
programa.
IMPLICIT NONE
INTEGER A, B, C, D, E, F
C = 100
D = A
E = B
F = A + B
CALL SOMA ( A, B, C, D, E )
! -------------------------------------------------------------------
CONTAINS
! -------------------------------------------------------------------
SUBROUTINE SOMA ( X, Y, Z, T, R )
INTEGER, INTENT(IN) :: X, Y
INTEGER, INTENT(OUT) :: Z
INTEGER, INTENT(INOUT) :: T
INTEGER R, S
S = 50
Z = X + Y
T = T + 10
R = R + 10
F = 2 * F
! -------------------------------------------------------------------
(f) O comando INTENT usado para controlar o fluxo de informaes para dentro e para fora das
sub-rotinas. Ele usado quando se define cada varivel empregada como argumento das sub-
rotinas.
(g) O comando INTENT utilizado com trs parmetros (IN, OUT e INOUT) que definem o sentido
do fluxo da informao.
(h) O comando INTENT(IN) permite que a varivel apenas receba informao de fora da sub-rotina.
Um exemplo dado no programa16c.f90 na linha INTEGER, INTENT(IN) :: X, Y. As
variveis X e Y s podem receber informao de fora da sub-rotina TESTE. A tentativa de
atribuir valor a elas dentro da sub-rotina gerar erro de compilao. Mas elas podem ser
empregadas em expresses dentro da sub-rotina, como na linha Z = X + Y
(i) O comando INTENT(OUT) permite que a varivel apenas envie informao para fora da sub-
rotina. Um exemplo dado no programa16c.f90 na linha INTEGER, INTENT(OUT) :: Z. A
varivel Z s pode enviar informao para fora da sub-rotina TESTE.
Exerccio 16.1
Estimar e verificar a memria computacional necessria para usar uma matriz bidimensional, cujos
elementos so do tipo inteiro, com X1 por Y1 elementos.
Exerccio 16.2
Estimar e verificar a memria computacional necessria para usar uma matriz bidimensional, cujos
elementos so do tipo real dupla, com X2 por Y2 elementos.
Exerccio 16.3
Estimar e verificar a memria computacional necessria para usar uma matriz bidimensional, cujos
elementos so do tipo caracter, cada um com 100 caracteres, com X3 por Y3 elementos.
Exerccio 16.4
Juntar as matrizes dos exerccios 16.1 a 16.3 num nico programa para estimar e verificar a memria
computacional total que necessria para as trs matrizes.
Exerccio 16.5
Adaptar a sub-rotina FATORIAL, da Tabela 12.4, do captulo 12, para ser uma sub-rotina do tipo
recursiva. E implementar um programa-principal para ela.
Exerccio 16.6
Adaptar o programa12d, Tabela 12.7, do captulo 12, para:
(a) usar onde pertinente o comando INTENT com IN, OUT e INOUT;
(b) usar o comando IMPLICIT NONE no programa-principal;
(c) ter uma sub-rotina com a finalidade de ler os dados de um arquivo;
(d) ter uma sub-rotina com a finalidade de escrever os resultados num arquivo; e
(e) ter uma sub-rotina com a finalidade de abrir os arquivos de dados e de sada com o aplicativo
Notepad.
OBJETIVOS DO CAPTULO
Utilizar mdulos
Comandos do FORTRAN: MODULE, END MODULE, PRIVATE, PUBLIC
Para inicializar as atividades deste captulo, deve-se acessar o programa Fortran, no Windows,
atravs de: Start, Programs, Fortran PowerStation 4.0, Microsoft Developer Studio
17.1 programa17a.f90
1) Objetivos do programa:
(a) exemplificar o uso e as caractersticas bsicas de mdulos em FORTRAN; e
(b) usar dois novos comandos do FORTRAN: MODULE, END MODULE.
2) No Fortran, seguindo o procedimento-padro, criar um projeto com o nome programa17a
3) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte dados.f90
4) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 17.1.
5) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte saida.f90
6) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 17.2.
7) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte
principal.f90
8) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho
mostrado na Tabela 17.3.
9) Comentrios sobre o programa:
(a) Um mdulo praticamente igual a um programa-principal. A maior diferena que num mdulo
no se pode ter comandos executveis antes do comando CONTAINS, ao contrrio do que
ocorre num programa-principal.
(b) A definio de mdulo em FORTRAN deve seguir a sintaxe mostrada na Tabela 17.4. O nome
do mdulo segue as regras vlidas para variveis em FORTRAN, no podendo ser igual a
nenhum outro nome de mdulo, varivel ou sub-rotina do programa. No caso de no haver sub-
IMPLICIT NONE
REAL*8 I, J
CONTAINS
SUBROUTINE LE_DADOS
USE DADOS
IMPLICIT NONE
REAL*8 K
CONTAINS
SUBROUTINE CALCULOS
K = I + J
SUBROUTINE RESULTADOS
USE PORTLIB
INTEGER VER
INTEGER C
CHARACTER(20) B
B = "teste de fortran"
C = 7
WRITE(1,3) I, J, K
3 FORMAT( 2/, "I = ", 1PE10.3, &
2/, "J = ", 1PE10.3, &
2/, "K = ", 1PE10.3 )
CLOSE(1)
USE SAIDA
IMPLICIT NONE
CALL LE_DADOS
CALL CALCULOS
CALL RESULTADOS
17.2 programa17b.f90
1) Objetivo do programa: entender o uso de mdulos num programa composto por quatro mdulos.
Captulo 17. Mdulos 209
2) No Fortran, seguindo o procedimento-padro, criar um projeto com o nome programa17b
3) Acessar o site ftp://ftp.demec.ufpr.br/Disciplinas/Tm784/programa17b/
17.3 programa17c.f90
1) Objetivos do programa:
(a) definir variveis pblicas e privadas em mdulos;
(b) usar dois novos comandos do FORTRAN: PUBLIC e PRIVATE; e
(c) entender o uso de mdulos com variveis pblicas e privadas num programa-exemplo.
2) No Fortran, seguindo o procedimento-padro, criar um projeto com o nome programa17c
3) Acessar o site ftp://ftp.demec.ufpr.br/Disciplinas/Tm784/programa17c/
4) Clicar com o boto do lado direito do mouse sobre o arquivo base.f90
5) Escolher a opo Save Target As
6) Na opo Save in, localizar o diretrio do projeto
7) Clicar no boto Save
8) Repetir os itens 4 a 7, acima, para os arquivos base2.f90 e main.f90
9) Comentrios sobre o programa:
(a) Dois novos comandos do FORTRAN, associados ao uso de mdulos, so usados neste programa:
PUBLIC e PRIVATE.
(b) O comando PRIVATE empregado para definir uma varivel como privativa do mdulo no qual
ela definida. Ou seja, ela s reconhecida pelas sub-rotinas definidas dentro do prprio
mdulo. Ela no reconhecida como varivel dentro de outros mdulos ou do programa-
principal que utilizem o mdulo no qual ela est definida. Um exemplo dado na linha
integer,private :: N do mdulo PRIMEIRO: a varivel N s reconhecida como tal dentro
do mdulo PRIMEIRO; o mesmo ocorre com a varivel R. As variveis R e N do mdulo
SEGUNDO so diferentes das variveis R e N do mdulo PRIMEIRO.
(c) O comando PUBLIC empregado para definir uma varivel como global. Isto , ela
reconhecida pelas sub-rotinas definidas dentro do prprio mdulo, e tambm dentro de outros
mdulos ou do programa-principal que utilizem o mdulo no qual ela est definida. Um exemplo
dado na linha integer,public :: K do mdulo PRIMEIRO: a varivel K reconhecida
como tal dentro do mdulos PRIMEIRO e SEGUNDO, e do programa-principal.
(d) Todas as variveis definidas num mdulo antes do comando CONTAINS so assumidas como
PUBLIC, a menos que sejam explicitamente definidas como PRIVATE. Um exemplo dado na
linha integer :: L do mdulo PRIMEIRO: a varivel L entendida como PUBLIC.
Captulo 17. Mdulos 212
(e) Mas todas as variveis definidas numa sub-rotina so assumidas como PRIVATE.
10) Estudar os dois mdulos e o programa-principal considerando os comentrios do item 9 desta
seo e da seo 17.1.
11) Executar Build, Compile para compilar o programa-fonte base.f90. Repetir para base2.f90 e
main.f90, nesta ordem.
12) Gerar o programa-executvel fazendo Build, Build.
13) Executar o programa atravs de Build, Execute. O resultado deve ser o mostrado na Figura 17.5.
14) Analisar os resultados.
15) Encerrar a sesso seguindo o procedimento-padro.
17.4 EXERCCIOS
Exerccio 17.1
(a) Transformar o programa12d.f90 num mdulo.
(b) Fazer o mesmo para o programa16c.f90.
(c) Criar um programa-principal para executar as rotinas destes dois mdulos.
OBJETIVOS DO CAPTULO
Calcular o resultado de sries infinitas
Aplicar os mtodos de iterao linear, bisseo e Newton para determinar razes de equaes
Revisar o uso de arquivos de dados e de resultados, Notepad e Wgnuplot
Alterar dinamicamente arquivo de comandos do programa de grficos Wgnuplot e usar novos
comandos
Para inicializar as atividades deste captulo, deve-se acessar o programa Fortran, no Windows,
atravs de: Start, Programs, Fortran PowerStation 4.0, Microsoft Developer Studio
18.1 programa18a.f90
1) Objetivos do programa:
(a) exemplificar o clculo do resultado de sries infinitas;
(b) revisar o uso de arquivos de dados e de resultados, Notepad e Wgnuplot; e
(c) alterar dinamicamente arquivo de comandos do programa de grficos Wgnuplot e usar novos
comandos.
2) No Fortran, seguindo o procedimento-padro, criar um projeto com o nome projeto_18
3) Acessar o site ftp://ftp.demec.ufpr.br/Disciplinas/Tm784/projeto_18
4) Clicar com o boto do lado direito do mouse sobre o arquivo programa18a.f90
5) Escolher a opo Copiar para pasta... (Save Target As)
6) Localizar a pasta do projeto
7) Clicar no boto OK
8) Repetir os itens 3 a 7, acima, para os arquivos dados18a.txt, comandos18a.gnu, Wgnuplot.exe
9) No Fortran, seguindo o procedimento-padro, inserir no projeto o programa-fonte
programa18a.f90, mostrado na Tabela 18.1.
10) Estudar o programa-principal considerando os comentrios do item 11, abaixo.
11) Comentrios sobre o programa:
(a) O programa18a.f90 composto pelo programa-principal e seis sub-rotinas.
(b) A sub-rotina DADOS usada para ler os dados do programa do arquivo dados18a.txt.
Captulo 18. Soluo de sries e razes de equaes 212
(c) A sub-rotina SERIE_1 usada para calcular a soma dos N termos da seguinte srie geomtrica
infinita:
(18.1)
(d) A sub-rotina SERIE_2 usada para calcular o valor de atravs da soma dos N termos da
seguinte srie infinita:
(e) A sub-rotina SERIE_3 usada para calcular o valor do nmero e atravs da soma dos N termos
da seguinte srie infinita, onde cada termo envolve a sub-rotina FATORIAL:
(f) As sub-rotinas das trs sries tambm calculam o erro para a soluo exata e escrevem no
arquivo saida18a.txt o nmero e valor de cada termo da srie, a soma dos termos e o erro.
(g) A sub-rotina GRAFICO: abre o arquivo comandos18a.gnu; pula as sete primeiras linhas deste
arquivo; na oitava linha, escreve um comentrio para representar o ttulo do grfico de acordo
com a srie escolhida para clculo; na nona linha, escreve outro comentrio, que o comando
replot do Wgnuplot; finalmente, esta sub-rotina executa o programa Wgnuplot para fazer o
grfico semilog do erro do clculo da srie escolhida, em funo do nmero de termos N usado.
(h) O programa-principal: chama a sub-rotina DADOS; cria o arquivo saida18a.txt; escreve nele um
comentrio na primeira linha para indicar o significado de cada coluna de resultados; o smbolo
# usado para informar ao Wgnuplot que a linha apenas um comentrio, e no dados para o
grfico; dependendo do tipo de srie escolhida pelo usurio chamada a sub-rotina adequada; o
Notepad abre o arquivo de sada; e, chamada a sub-rotina para fazer o grfico do erro.
12) Executar Build, Compile para compilar o programa.
13) Gerar o programa-executvel fazendo Build, Build.
14) Executar o programa atravs de Build, Execute. Usar, os dados mostrados na Figura 18.1.
Figura 18.2 Parte do arquivo de resultados do programa18a.f90 para os dados da Fig. 18.1.
Figura 18.3. Grfico com resultados do programa18a.f90 para os dados da Fig. 18.1.
1) Objetivo do programa: para uma equao quadrtica especfica, aplicar os mtodos de iterao linear,
bisseo e Newton para determinar suas razes.
2) Nesta seo ser usado o mesmo projeto da seo anterior. Portanto, deve-se executar o seguinte no
Fortran:
a) Clicar sobre o nome do programa-fonte.
b) Edit, Cut para retirar o programa-fonte do projeto.
c) Clicar dentro do campo de edio de programa-fonte.
d) File, Close.
3) Acessar o site ftp://ftp.demec.ufpr.br/Disciplinas/Tm784/projeto_18
4) Clicar com o boto do lado direito do mouse sobre o arquivo programa18b.f90
5) Escolher a opo Copiar para pasta... (Save Target As)
6) Localizar a pasta do projeto
7) Clicar no boto OK
8) Repetir os itens 3 a 7, acima, para os arquivos dados18b.txt e comandos18b.gnu
9) No Fortran, seguindo o procedimento-padro, inserir no projeto o programa-fonte programa18b.f90,
mostrado na Tabela 18.2.
10) Estudar o programa-principal considerando os comentrios do item 11, abaixo.
11) Comentrios sobre o programa:
(a) O programa18b.f90 composto pelo programa-principal e cinco sub-rotinas.
(b) Para as sub-rotinas DADOS e GRAFICO e o programa-principal valem os mesmos comentrios
da seo anterior, exceto que os arquivos envolvidos so agora dados18b.txt, comandos18b.gnu
e saida18b.txt.
(c) As sub-rotinas LINEAR, BISSECAO e NEWTON resolvem a equao
x2 5x + 6 = 0 (18.4)
atravs dos mtodos de iterao linear, bisseo e Newton para determinar suas razes. Detalhes
sobre estes mtodos podem ser encontrados na maioria dos livros de clculo numrico.
12) Executar Build, Compile para compilar o programa.
13) Gerar o programa-executvel fazendo Build, Build.
14) Executar o programa atravs de Build, Execute. Usar, os dados mostrados na Figura 18.4.
15) Analisar os resultados mostrados nas Figuras 18.5 e 18.6.
use portlib
implicit none
integer :: i, n, ver, tipo_metodo
real*8 :: exato, erro, xo, x, r
call dados
x = xo
open(6,file="saida18b.txt")
write(6,10)
10 format("# i", t17,"x", t47,"erro")
erro = dabs(exato - x)
write(6,11) 0, x, erro
11 format( i8, 2(1pe30.15e3) )
close(6)
!-------------------------------------------------
contains
!-------------------------------------------------
subroutine dados
open(5,file="dados18b.txt")
read(5,*) tipo_metodo
read(5,*) n
read(5,*) exato
read(5,*) xo
read(5,*) r
close(5)
!-------------------------------------------------
subroutine linear
do i = 1, n
x = ( ( x ** 2 ) + 6 ) / 5
erro = dabs(exato - x)
write(6,10) i, x, erro
10 format( i8, 2(1pe30.15e3) )
end do
!-------------------------------------------------
subroutine bissecao
a = xo - r
b = xo + r
do i = 1, n
fx = x**2 - 5*x + 6
fa = a**2 - 5*a + 6
if ( fx*fa < 0 ) then
b = x
else
a = x
end if
x = (a + b) / 2
erro = dabs(exato - x)
write(6,10) i, x, erro
10 format( i8, 2(1pe30.15e3) )
end do
!-------------------------------------------------
subroutine newton
real*8 f, fl
do i = 1, n
f = x**2 - 5*x + 6
fl = 2*x - 5
x = x - f / fl
erro = dabs(exato - x)
write(6,10) i, x, erro
10 format( i8, 2(1pe30.15e3) )
end do
!-------------------------------------------------
subroutine grafico
open(9,file="comandos18b.gnu")
do k = 1, 7
read(9,*)
end do
write(9,*) "replot"
close(9)
!-------------------------------------------------
Exerccio 18.1
Adaptar o programa18a.f90 para incluir as seguintes opes de sries:
Figura 18.5 Parte do arquivo de resultados do programa18b.f90 para os dados da Fig. 18.4.
Exerccio 18.2
Adaptar o programa18a.f90 para usar preciso simples em todos os clculos com nmeros reais.
Comparar os resultados com a verso original do programa18a.f90 na qual usa-se preciso dupla.
Exerccio 18.4
Adaptar o programa18b.f90 para resolver a seguinte equao:
x2 x 6 = 0 (18.9)
Figura 18.6 Grfico com resultados do programa18b.f90 para os dados da Fig. 18.4.
OBJETIVOS DO CAPTULO
Calcular derivadas numricas com quatro tipos de aproximaes numricas do mtodo de diferenas
finitas: UDS, DDS, CDS-2 e CDS-4.
Calcular integrais numricas com trs tipos de aproximaes numricas: regras do retngulo, trapzio
e Simpson.
Para inicializar as atividades deste captulo, deve-se acessar o programa Fortran, no Windows,
atravs de: Start, Programs, Fortran PowerStation 4.0, Microsoft Developer Studio
19.1 programa19a.f90
1) Objetivo do programa: calcular derivadas numricas com quatro tipos de aproximaes numricas do
mtodo de diferenas finitas: UDS, DDS, CDS-2 e CDS-4.
2) No Fortran, seguindo o procedimento-padro, criar um projeto com o nome projeto_19
3) Acessar o site ftp://ftp.demec.ufpr.br/Disciplinas/Tm784/projeto_19
4) Clicar com o boto do lado direito do mouse sobre o arquivo programa19a.f90
5) Escolher a opo Copiar para pasta... (Save Target As)
6) Localizar a pasta do projeto
7) Clicar no boto OK
8) Repetir os itens 3 a 7, acima, para os arquivos dados19a.txt, comandos19a.gnu, Wgnuplot.exe
9) No Fortran, seguindo o procedimento-padro, inserir no projeto o programa-fonte
programa19a.f90, mostrado na Tabela 19.1.
10) Estudar o programa-principal considerando os comentrios do item 11, abaixo.
11) Comentrios sobre o programa:
(a) O programa19a.f90 composto pelo programa-principal e quatro sub-rotinas.
(b) A sub-rotina DADOS usada para ler os dados do programa do arquivo dados19a.txt.
(c) A sub-rotina EXPONENCIAL usada para calcular a derivada numrica da funo f = ex com
quatro tipos de aproximaes numricas do mtodo de diferenas finitas:
program derivadas
use portlib
implicit none
close(6)
call grafico
!-------------------------------------------------
contains
!-------------------------------------------------
open(5,file="dados19a.txt")
read(5,*) tipo_funcao
read(5,*) hmax
read(5,*) r
read(5,*) L
read(5,*) X
close(5)
!-------------------------------------------------
subroutine exponencial
real*8 :: xw, h, fp, fw, fl_UDS, fl_DDS, xe, fe, fl_CDS2, &
xww, xee, fww, fee, fl_CDS4
exato = dexp(X)
do i = 0, L
h = hmax / ( r ** i )
xw = X - h
xe = X + h
xww = X - 2*h
xee = X + 2*h
fp = dexp(x)
fw = dexp(xw)
fe = dexp(xe)
fww = dexp(xww)
fee = dexp(xee)
fl_UDS = ( fp - fw ) / h
fl_DDS = ( fe - fp ) / h
fl_CDS2 = ( fe - fw ) / (2 * h)
end do
!-------------------------------------------------
subroutine potencia
real*8 :: xw, h, fp, fw, fl_UDS, fl_DDS, xe, fe, fl_CDS2, &
xww, xee, fww, fee, fl_CDS4
h = hmax / ( r ** i )
xw = X - h
xe = X + h
xww = X - 2*h
xee = X + 2*h
fp = x**5
fw = xw**5
fe = xe**5
fww = xww**5
fee = xee**5
fl_UDS = ( fp - fw ) / h
fl_DDS = ( fe - fp ) / h
fl_CDS2 = ( fe - fw ) / (2 * h)
fl_CDS4 = ( 8*fe - 8*fw + fww - fee ) / (12 * h)
end do
!-------------------------------------------------
subroutine grafico
integer k
open(9,file="comandos19a.gnu")
do k = 1, 12
read(9,*)
end do
write(9,*) "replot"
close(9)
ver = system ("Wgnuplot comandos19a.gnu")
15) Analisar os resultados mostrados nas Figuras 19.3 e 19.4. Exceto nos maiores valores de h, as
aproximaes UDS e DDS apresentam quase os mesmos valores de erro. Conforme previsto pela
teoria, as aproximaes CDS-2 e CDS-4 apresentam os menores valores de erro para um mesmo h.
Teoricamente, o erro de cada aproximao deveria sempre se reduzir com a reduo de h, e deveria
19.2 programa19b.f90
1) Objetivo do programa: calcular integrais numricas com trs tipos de aproximaes numricas:
regras do retngulo, trapzio e Simpson.
2) Nesta seo ser usado o mesmo projeto da seo anterior. Portanto, deve-se executar o seguinte no
Fortran:
a) Clicar sobre o nome do programa-fonte.
b) Edit, Cut para retirar o programa-fonte do projeto.
c) Clicar dentro do campo de edio de programa-fonte.
d) File, Close.
3) Acessar o site ftp://ftp.demec.ufpr.br/Disciplinas/Tm784/projeto_19
4) Clicar com o boto do lado direito do mouse sobre o arquivo programa19b.f90
5) Escolher a opo Copiar para pasta... (Save Target As)
6) Localizar a pasta do projeto
7) Clicar no boto OK
8) Repetir os itens 3 a 7, acima, para os arquivos dados19b.txt e comandos19b.gnu
9) No Fortran, seguindo o procedimento-padro, inserir no projeto o programa-fonte programa19b.f90,
mostrado na Tabela 19.2.
10) Estudar o programa-principal considerando os comentrios do item 11, abaixo.
use portlib
implicit none
open(6,file="saida19b.txt") !
write(6,10)
10 format("#", t5,"h", t20,"E(retngulo)", t35,"E(trapzio)", t50,"E(simpson)")
close(6)
call grafico
!-------------------------------------------------
contains
!-------------------------------------------------
open(5,file="dados19b.txt")
read(5,*) tipo_funcao
read(5,*) Nmin
read(5,*) r
read(5,*) L
close(5)
!-------------------------------------------------
subroutine exponencial
exato = dexp(1.0d0) - 1
do i = 0, L
h = 1.0d0 / ( Nmin * (r ** i) )
ret = 0.0d0
trap = 0.0d0
do j = 1, Nmin*(r**i)
xp = h*(j-0.5d0)
fp = dexp(xp)
ret = ret + fp * h
xp = h*j
xw = xp - h
fw = dexp(xw)
fp = dexp(xp)
trap = trap + h*(fw+fp)/2
end do
do j = 2, Nmin*(r**i), 2
xp = h*(j-1)
xw = xp - h
xe = xp + h
fw = dexp(xw)
fe = dexp(xe)
fp = dexp(xp)
simp = simp + h*(fw+4*fp+fe)/3
end do
10 format( 4(1pe15.5) )
end do
!-------------------------------------------------
subroutine potencia
exato = 1 / 6.0d0
do i = 0, L
h = 1.0d0 / ( Nmin * (r ** i) )
ret = 0.0d0
trap = 0.0d0
do j = 1, Nmin*(r**i)
xp = h*(j-0.5d0)
xp = h*j
xw = xp - h
fw = xw**5
fp = xp**5
trap = trap + h*(fw+fp)/2
end do
simp = 0.0d0
do j = 2, Nmin*(r**i), 2
xp = h*(j-1)
xw = xp - h
xe = xp + h
fw = xw**5
fe = xe**5
fp = xp**5
simp = simp + h*(fw+4*fp+fe)/3
end do
10 format( 4(1pe15.5) )
end do
!-------------------------------------------------
subroutine grafico
integer k
open(9,file="comandos19b.gnu")
do k = 1, 11
read(9,*)
end do
select case ( tipo_funcao )
write(9,*) "replot"
close(9)
!-------------------------------------------------
19.3 EXERCCIOS
Exerccio 19.1
Acrescentar uma sub-rotina no programa19a.f90 para calcular a derivada de f = 3ex. Incluir a nova opo
de funo no arquivo de dados e no programa. Apresentar arquivo com o erro dos quatro tipos de
aproximaes e respectivo grfico.
Figura 19.8. Grfico com resultados do programa19b.f90 para os dados da Fig. 19.6.
Exerccio 19.3
Acrescentar uma sub-rotina no programa19b.f90 para calcular a integral de f = 3ex. Incluir a nova opo
de funo no arquivo de dados e no programa. Apresentar arquivo com o erro dos trs tipos de
aproximaes e respectivo grfico.
Exerccio 19.4
Acrescentar uma sub-rotina no programa19b.f90 para calcular a integral de f = x4. Incluir a nova opo de
funo no arquivo de dados e no programa. Apresentar arquivo com o erro dos trs tipos de aproximaes
e respectivo grfico.
OBJETIVOS DO CAPTULO
Aplicar, num nico programa, diversos recursos e comandos do FORTRAN vistos nos captulos
anteriores.
Resolver sistemas de equaes lineares com mtodos diretos e iterativos.
Para inicializar as atividades deste captulo, deve-se acessar o programa Fortran, no Windows,
atravs de: Start, Programs, Fortran PowerStation 4.0, Microsoft Developer Studio
20.1 programa20a.f90
AT = B (20.1)
R = B AT (20.2)
O valor da norma usado para comparar com uma tolerncia especificada pelo usurio visando
interromper o processo iterativo do mtodo de Gauss-Seidel.
(d) O mdulo DADOS, contido no programa-fonte dados.f90, tem duas sub-rotinas. Uma usada
para ler os dados do programa, do arquivo programa20a.ent. A outra usada para escrever os
dados lidos num arquivo de sada de nome genrico.
(e) O mdulo COEFICIENTES, contido no programa-fonte coeficientes.f90, tem duas sub-rotinas.
Uma usada para definir os valores dos coeficientes da matriz A e do termo independente B do
sistema de equaes das N variveis T. So definidos os valores dos coeficientes apenas em trs
diagonais da matriz A. Isso ocorre porque estes coeficientes so originados da discretizao de
uma equao diferencial que modela a conduo de calor unidimensional em regime
permanente; e a aproximao usada, do mtodo de diferenas finitas, a diferena central de 2
ordem, CDS-2, vista no captulo 19. O valor de B depende da definio do usurio no arquivo de
dados, gerando valores nulos ou no-nulos. A outra sub-rotina usada para escrever os valores
dos coeficientes e do termo independente num arquivo de sada de nome genrico.
(f) O mdulo RESULTADOS, contido no programa-fonte resultados.f90, tambm tem duas sub-
rotinas. A primeira usada para: (1) chamar a sub-rotina de clculo de coeficientes e termos
independentes; (2) escrever os coeficientes; (3) resolver a Eq. (20.1) com um dos trs mtodos
Captulo 20. Soluo de sistemas de equaes 244
disponveis, de acordo com a escolha do usurio no arquivo de dados; (4) cronometrar o tempo
de CPU; (5) chamar a segunda sub-rotina do mdulo; e (6) escrever o tempo de CPU num
arquivo de sada de nome genrico. A segunda sub-rotina deste mdulo usada para: (1) criar o
arquivo T.dat; (2) escrever neste arquivo a soluo analtica e numrica de T, e seu erro; (3)
escrever um ttulo no arquivo comandos20a.gnu; e (4) chamar o aplicativo Wgnuplot para fazer
o grfico de T com os comandos mostrados na Figura 20.1.
(g) O programa-principal: (1) apresenta comentrios descrevendo um resumo das caractersticas do
programa; (2) obtm a data e a hora do sistema operacional; (3) chama a sub-rotina de leitura dos
dados do programa; (4) cria o arquivo de sada de nome genrico; (5) escreve nele o ttulo da
simulao, a data e hora; (6) faz a alocao de memria; (7) calcula a coordenada X
correspondente a T em N pontos; (8) chama a sub-rotina que escreve os dados; (9) chama a sub-
rotina que resolve a Eq. (20.1); (10) com o aplicativo Notepad, mostra o contedo do arquivo de
sada.
(h) Os campos de coeficientes, T e grfico so escritos com uma freqncia (w) definida pelo
usurio.
use portlib
implicit none
integer :: i ! nmero do n
! i = 1, n no contorno esquerdo
! i = N, n no contorno direito
! 2 <= i <= N-1, ns internos
coeficiente central de u
real*8,dimension(:),allocatable :: aW ! coeficiente esquerdo de u
real*8,dimension(:),allocatable :: aE ! coeficiente direito de u
end
use variaveis
contains
!-------------------------------------------------
subroutine EG (N,ap,b,c,d,T)
implicit none
integer :: i ! nmero do n
integer :: ii, j
real*8 :: mji, S
integer,intent(in) :: N ! nmero de ns
real*8,intent(out),dimension(N) :: T ! incgnita
allocate ( A(N,N+1) )
A = 0.0d0
do i = 1,N
A(i,i) = ap(i)
A(i,N+1) = d(i)
! Escalonamento
do i = 1,N-1
do ii = i+1,N
do j = i,N+1
end do
end do
end do
!Substituicao retroativa
do i = N-1,1,-1
S = 0
do j = i+1,N
S = S + A(i,j)*T(j)
end do
end do
deallocate ( A )
end subroutine EG
subroutine GS (N,ite,tol,a,b,c,d,T)
implicit none
integer :: i ! nmero do n
integer :: it ! nmero da iterao
integer :: ite ! nmero de iteraes
integer,intent(in) :: N ! nmero de ns
real*8,intent(out),dimension(N) :: T ! incgnita
T = 0.0d0
do it = 1, ite
do i = 2, N-1
end do
end do
end subroutine GS
!-------------------------------------------------
implicit none
coeficiente aP
real*8,intent(in), dimension(N) :: b ! coeficiente aW
real*8,intent(in), dimension(N) :: c ! coeficiente aE
real*8,intent(in), dimension(N) :: d ! termo fonte bP
real*8,intent(out),dimension(N) :: T ! incgnita
R = 0.0d0
do i = 2, N-1
end do
R = R / N
!-------------------------------------------------
implicit none
integer :: i ! nmero do n
real*8 :: div ! varivel auxiliar
integer,intent(in) :: N ! nmero de ns
real*8,intent(out),dimension(N) :: T ! incgnita
allocate(P(N),Q(N))
do i = 2, N
div = a(i) - b(i)*P(i-1)
P(i) = c(i) / div
Q(i) = (d(i) + b(i)*Q(i-1))/div
T(N) = Q(N)
do i = N-1, 1, -1
T(i) = P(i)*T(i+1) + Q(i)
end do
deallocate(P,Q)
!-------------------------------------------------
use variaveis
!-------------------------------------------------
implicit none
contains
!-------------------------------------------------
subroutine le_dados
open(7,file='programa20a.ent')
read(7,*) caso
read(7,*) N
read(7,*) matriz
read(7,*) solver
read(7,*) iteracao
close(7)
!-------------------------------------------------
subroutine mostra_dados
integer :: comp
comp = len(trim(adjustl(caso)))
1 format(/,5x,'DADOS',//, &
a<comp>,' = caso',/, &
i6,' = nmero de ns',/, &
i6,' = tipo de matriz: 1 = fonte nulo; 2 = fonte no-nulo',/, &
i6,' = tipo de solver: 1=El.Gauss; 2=GS; 3=TDMA',/, &
i6,' = nmero de iteraes para o GS',/, &
1pe10.2,' = tolerncia sobre o resduo para o GS')
!-------------------------------------------------
use dados
implicit none
!-------------------------------------------------
subroutine lista_coeficientes
write(10,4)
4 format(/,5x,'COEFICIENTES E FONTES',//, &
t6,'n',t16,'X',t36,'oeste',t56,'central', &
t76,'leste',t96,'fonte',/)
do i = 1, N
if ( i==1 .or. i==n .or. mod(i,w)==0 ) &
write(10,2) i, X(i), aw(i), aP(i), ae(i), bP(i)
end do
2 format(i6,4x,5(1pe20.9))
!-------------------------------------------------
subroutine coeficientes_e_fontes
! volumes internos
do i = 2, N-1
aw(i) = 1.0d0
ae(i) = 1.0d0
aP(i) = aw(i) + ae(i)
end do
! contorno esquerdo
aw(1) = 0.0d0
ae(1) = 0.0d0
aP(1) = 1.0d0
bP(1) = 0.0d0
!-------------------------------------------------
!-------------------------------------------------
use coeficientes
use solvers_1D
implicit none
contains
! -----------------------------------------------
subroutine solucao_numerica
call EG (N,aP,aw,ae,bP,T)
case ( 2 ) ! Gauss-Seidel
call GS (N,iteracao,Tol,aP,aw,ae,bP,T)
case ( 3 ) ! TDMA
end select
tcpu = timef()
write(10,1) tcpu
1 format(/, f14.3, ' = tempo de processamento (segundos)')
!-------------------------------------------------
subroutine escreve_T
write(10,1)
1 format(/,t4,'X',t28,'T (analtico)',t52,'T (numrico)',t76,'erro',/)
do i = 1, N
end do
close(7)
! mostra o grfico de T
ver = system('wgnuplot comandos20a.gnu')
!-------------------------------------------------
program programa20a
! -----------------------------------------------
use resultados
! -----------------------------------------------
implicit none
integer :: comp
!-------------------------------------------------
call date_and_time(vardate,vartime,varzone,var)
write(aux,*) var(3)
aux1 = trim(adjustl(aux))
write(aux,*) var(2)
aux2 = trim(adjustl(aux))
write(aux,*) var(1)
aux3 = trim(adjustl(aux))
dia = '('//trim(aux1)//'/'//trim(aux2)//'/'//aux3//')'
write(aux,*) var(5)
aux1 = trim(adjustl(aux))
write(aux,*) var(6)
aux2 = trim(adjustl(aux))
write(aux,*) var(7)
aux3 = trim(adjustl(aux))
hora = trim(aux1)//':'//trim(aux2)//':'//aux3
call le_dados
open(10,file=caso)
comp = len(trim(adjustl(title)))
do i = 1, N
X(i) = (i-1.0d0) / (N-1)
end do
call mostra_dados
call solucao_numerica
close (10)
! -----------------------------------------------
End
13) Executar Build, Compile para compilar o programa-fonte variaveis.f90. Em seguida, executar
Build, Compile para compilar os demais programas-fonte na seguinte ordem: solvers_1D.f90,
dados.f90, coeficientes.f90, resultados.f90 e programa20a.f90.
14) Gerar o programa-executvel fazendo Build, Build.
15) Executar o programa atravs de Build, Execute. Usar os dados mostrados na Figura 20.2.
16) Analisar os resultados mostrados nas Figuras 20.3 e 20.4. O erro apresentado pela soluo na
Figura 20.4 deve-se aos erros de arredondamento.
17) Executar novamente o programa usando os mesmos dados da Figura 20.2, exceto, matriz = 1 e
analisar os novos resultados.
Figura 20.3. Grfico com resultados do programa20a.f90 para os dados da Fig. 20.2.
20.2 EXERCCIOS
Exerccio 20.2
Executar novamente o programa20a.f90 usando os mesmos dados da Figura 20.2, exceto, matriz = 2 e
solver = 2. Por tentativa e erro, usar um valor para a varivel iteracao que seja suficiente para satisfazer
a tolerncia (Tol) estipulada na Figura 20.2. Comparar o tempo de CPU resultante neste caso, para o
mtodo de Gauss-Seidel, quele do mtodo TDMA (item 19) e do mtodo de Eliminao de Gauss (item
16).
Para criar um projeto do tipo Console Application, devem ser executados os seguintes passos:
1) No menu do Fortran: File, New.
2) Na janela New, clicar sobre a opo Project Workspace. Depois, clicar sobre o boto OK.
3) Na janela New Project Workspace, necessrio executar o que segue:
a) Entre os seis tipos de projetos apresentados na opo Type, clicar sobre Console Application no
caso deste tipo de projeto no estar selecionado (realado em azul).
b) Na opo Location estar indicado um diretrio (pasta) default, ou seja, um diretrio escolhido
pelo prprio Fortran em funo de sua configurao atual. possvel que no seja o diretrio
desejado. Neste caso, deve-se clicar sobre o boto Browse para indicar o diretrio onde se quer
criar o projeto. Ao se fazer isso, surgir a janela Choose Directory na qual deve-se executar:
Na opo Drives, escolher Z:\\SERVER1\Alunos2004_1
Na opo Directory name, clicar duas vezes sobre o nome do diretrio que idntico ao
user name usado para acessar a rede Windows do DEMEC/UFPR
Clicar sobre o boto OK.
c) Estar de volta a janela New Project Workspace. Clicar dentro do espao de edio da opo
Name. Escrever o nome do projeto. Deve-se perceber que o nome do projeto, digitado na opo
Name, aparece automaticamente na opo Location. Em seguida, deve-se clicar sobre o boto
Create. Aps isso, o Fortran criar um diretrio com o nome do projeto indicado, dentro do
diretrio j selecionado.
ADAMS, J. C.; BRAINERD, W. S.; MARTIN, J. T.; SMITH, B. T.; WAGENER, J. L. FORTRAN 95
Handbook; Complete ISO/ANSI Reference. London : MIT Press, 1997.
HAHN, B. Fortran 90 for Scientists and Engineers. New York : Chapman & Hall, 1994.
Referncias bibliogrficas 1