Anda di halaman 1dari 152

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.1 USO DESTE TEXTO EM DISCIPLINAS O objetivo deste texto ensinar a implementar programas com a linguagem FORTRAN 95 e, implicitamente, a desenvolver algoritmos para resolver problemas bsicos de matemtica e fsica. Os captulos 1 a 13 deste texto so recomendados para disciplinas introdutrias de programao em cursos de engenharia. J os captulos 14 a 20 podem ser usados em cursos avanados de programao em nvel de graduao. Cada captulo foi estruturado para ser lecionado em aulas com durao de duas horas. Uma disciplina de 30 horas vem sendo ministrada no primeiro perodo semestral do curso de graduao em engenharia mecnica da Universidade Federal do Paran. Esta disciplina envolve os captulos 1 a 13 mais duas provas. Outra disciplina, envolvendo os captulos 1 a 20, com 45 horas, est prevista para ser lecionada em nvel de ps-graduao. 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).

Captulo 1. Introduo

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 Para melhor entendimento deste texto, as seguintes convenes so adotadas: 1) So mostrados na cor azul links para endereos de sites da internet ou para arquivos que definem termos e procedimentos importantes para este texto. 2) Comandos de programas ou aplicativos que devem ser executados ao longo do texto so mostrados em negrito. A vrgula usada para separar uma seqncia de comandos.
3) So apresentados na cor vermelha: os programas, seus dados (entradas) e seus resultados (sadas).

4) Qualquer referncia ao sistema operacional Windows NT 4.0 abreviado para Windows. 5) Qualquer referncia ao aplicativo Fortran PowerStation 4.0, da Microsoft, abreviado para Fortran. 6) Qualquer referncia linguagem FORTRAN abreviado para FORTRAN, tudo em maisculo para distinguir do aplicativo Fortran PowerStation 4.0. 7) Devido grande quantidade de termos em ingls, no feito qualquer distino para palavras em portugus. 8) Comandos, isto , palavras-chave da linguagem FORTRAN so apresentados em letras maisculas.

Captulo 1. Introduo

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.

Figura 1.1 Inicializao do aplicativo Fortran PowerStation 4.0. Na janela principal do Fortran, mostrada na Figura 1.2, pode-se perceber:

Captulo 1. Introduo

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.

Captulo 1. Introduo

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.

Figura 1.3 Incio da criao de um projeto no Fortran. 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:

Captulo 1. Introduo

Figura 1.4 Segundo passo na criao de um projeto no Fortran.

Figura 1.5 Janela para definio do tipo, diretrio e nome do projeto. 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

Captulo 1. Introduo

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.

Figura 1.6 Definio do drive do projeto.

Figura 1.7 Definio do diretrio para criao do projeto.

Figura 1.8 Tipo, nome e diretrio do projeto j definidos.


Captulo 1. Introduo 7

Figura 1.9 Fortran com o nome do diretrio criado para o projeto especificado. 1.7 CRIAO E INSERO DO PROGRAMA-FONTE DENTRO DO PROJETO O processo de edio ou criao de um programa semelhante redao de uma carta com o aplicativo Word, que um editor de textos. So necessrios dois componentes: um editor de textos para escrever o programa computacional e um arquivo para guardar o texto no hard disk (HD) do computador. No caso dos programas computacionais, a carta chamada de programa-fonte e pode ser aberta, editada ou redigida dentro do Fortran ou em qualquer outro editor de textos. Ao longo deste texto, as palavras edio, digitao e implementao sero usadas como sinnimos. Para iniciar a edio ou escrita de um programa-fonte em linguagem FORTRAN necessrio criar e inserir um arquivo dentro do projeto. Isso feito atravs dos seguintes passos: 1) No menu do Fortran, conforme mostrado na Figura 1.10, executar: Insert, Files into Project 2) Na janela Insert Files into Project, mostrada na Figura 1.11, executar o seguinte: a) Na opo File Name, digitar o nome do programa-fonte a ser criado; por exemplo, como mostrado na Figura 1.12, programa01.f90 Sempre deve-se usar f90 como extenso dos nomes dos arquivos do tipo programa-fonte. Ele indica que o programa est ou ser escrito na linguagem FORTRAN 90 ou 95. b) Clicar sobre o boto OK
Captulo 1. Introduo 8

Figura 1.10 Incio da criao do programa-fonte.

Figura 1.11 Janela para definio do nome do programa-fonte a inserir no projeto. 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
Captulo 1. Introduo 9

5) Clicar rapidamente duas vezes sobre o nome do programa-fonte que foi inserido 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.12 Nome do programa-fonte j definido.

Figura 1.13.

Figura 1.14.

Captulo 1. Introduo

10

Figura 1.15 Fortran pronto para edio do programa-fonte. 1.8 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).
WRITE(*,*) "Meu primeiro programa em FORTRAN" WRITE(*,*) "Ano 2004" END

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

11

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.

Figura 1.16 Programa-fonte escrito na linguagem FORTRAN. 1.9 COMPILAO E GERAO DO PROGRAMA-OBJETO 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 12

(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

Figura 1.17 Compilao do programa-fonte. A compilao cria automaticamente um subdiretrio chamado Debug dentro do diretrio do projeto. Dentro deste subdiretrio que se encontra o programa-objeto bem como outros arquivos auxiliares. Pode-se ver isso com o aplicativo Windows NT Explorer, que acessado executando o
Captulo 1. Introduo 13

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 1.10 GERAO DO PROGRAMA-EXECUTVEL Aps o processo de compilao, necessrio gerar o programa-executvel, que um arquivo possvel de ser executado ou rodado pelo computador, como qualquer outro programa ou aplicativo; por exemplo, os aplicativos Word, Excel, PowerPoint, FrontPage, CorelDraw, Acrobat, e o navegador Internet Explorer. O programa-executvel resulta da unio do programa-objeto, que foi gerado na compilao do programa-fonte, com outros programas-objeto da prpria linguagem FORTRAN, que contm a traduo dos comandos do FORTRAN, como o WRITE e END usados no primeiro programafonte (Figura 1.17). Para gerar o programa-executvel, deve-se fazer o seguinte no menu do Fortran: Build, Build. Em seguida, conforme mostrado na Figura 1.18, aparecero duas linhas com mensagens na subjanela da parte inferior do Fortran:

Figura 1.18 Gerao do programa-executvel.

Captulo 1. Introduo

14

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.

Figura 1.19 Diretrio do projeto programa01 e seu subdiretrio Debug. 1.11 EXECUO DO PROGRAMA Aps gerar o programa-executvel, para execut-lo ou rod-lo, isto , para coloc-lo em funcionamento, basta fazer o seguinte no menu do Fortran: Build, Execute. Como resultado deste comando, deve ocorrer o seguinte: 1) Aparecer uma janela do tipo DOS, conforme a Figura 1.20. Isso ocorre porque na seo 1.6 foi criado um projeto do tipo Console Application.
Captulo 1. Introduo 15

2) No ttulo desta janela, com fundo em azul, aparece o nome do programa que est sendo executado e o diretrio no qual ele se encontra, no caso C:\MSDEV\Projects\programa01\Debug\programa01.exe 3) Dentro desta janela, com fundo em preto, aparece o resultado da execuo do programa. No caso, as frases Meu primeiro programa em Fortran e Ano 2004. A ordem das duas frases a mesma em que elas foram colocadas no programa-fonte. Isso ocorre, porque o programa executado do topo para baixo, linha por linha do programa-fonte. 4) Alm disso, tambm aparece a frase Press any key to continue. Como diz este aviso, basta clicar em qualquer tecla para continuar. Ao fazer isso, a execuo do programa encerrada.

Figura 1.20 Resultado da execuo do programa01. 1.12 FIM DA SESSO Para concluir o uso do Fortran e do Windows, deve-se executar o seguinte: 1) Para encerrar as atividades com um projeto, basta executar no menu do Fortran: File, Close Workspace 2) Na janela Microsoft Developer Studio, clicar sobre o boto Yes 3) Para fechar o aplicativo Fortran, basta fazer o seguinte em seu menu: File, Exit 4) Para fechar o Windows, executar: Start, Shut Down 5) Na janela Shut Down Windows, escolher a opo Close all programs and log on as a different user?. Clicar sobre o boto Yes

Captulo 1. Introduo

16

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

17

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

2.1 programa02.f90, verso A Para inicializar as atividades deste captulo, deve-se executar: 1) No Windows, seguindo o procedimento apresentado na seo 1.5 do captulo 1: Start, Programs, Fortran PowerStation 4.0, Microsoft Developer Studio 2) No Fortran, seguindo o procedimento apresentado na seo 1.6 do captulo 1, criar um projeto do tipo Console Application com o nome programa02 no diretrio Z:\\SERVER1\Alunos2004_1\login, onde login deve ser substitudo pelo user name do usurio, isto , a conta particular na rede Windows do DEMEC/UFPR. 3) No Fortran, seguindo o procedimento apresentado na seo 1.7 do captulo 1, criar e inserir no projeto o programa-fonte programa02.f90 4) Conforme mostrado na Figura 2.1, dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto mostrado abaixo em vermelho.
INTEGER A WRITE(*,*) "A" WRITE(*,*) A END

5) Comentrios sobre o programa: a) No captulo 1 foram usados os comandos WRITE e END da linguagem FORTRAN. No programa02.f90, h um novo comando: INTEGER. Ele usado para definir variveis do tipo inteiro, isto , variveis que podem guardar ou armazenar na memria do computador nmeros inteiros, positivos ou negativos, como 2, 5, 0, 54367 ou 3. b) A linha INTEGER A define a varivel A como sendo do tipo inteiro. Este comando reserva um espao na memria do computador, utilizando o nome ou rtulo A para armazenar um valor inteiro.
Captulo 2. Variveis do tipo inteiro 18

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.

Figura 2.1 Resultado da compilao do programa02.f90, verso A. 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.

Captulo 2. Variveis do tipo inteiro

19

Figura 2.2 Resultado da execuo do programa02.f90, verso A. 2.2 programa02.f90, verso B 1) Dentro do Fortran, editar exatamente o texto mostrado abaixo em vermelho.
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 20

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.

Figura 2.3 Resultado da execuo do programa02.f90, verso B.

Figura 2.4 Exemplo de erro de compilao. 2.3 programa02.f90, verso C 1) Dentro do Fortran, editar exatamente o texto mostrado abaixo em vermelho.
INTEGER A A = 3 WRITE(*,*) "Valor de A = ", A

Captulo 2. Variveis do tipo inteiro

21

END

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.

Figura 2.5 Resultado da execuo do programa02.f90, verso C. 2.4 programa02.f90, verso D 1) Dentro do Fortran, editar exatamente o texto mostrado abaixo em vermelho.
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.

Captulo 2. Variveis do tipo inteiro

22

5) Ao se executar o programa, atravs de Build, Execute, o resultado o mesmo mostrado na Figura 2.5. Isso ocorre porque o programa executado, linha por linha, da primeira (INTEGER A) at a ltima (END). Assim, embora tenha sido atribudo o valor 4 varivel A na segunda linha do programa, na linha seguinte atribui-se o valor 3 mesma varivel, e, na quarta linha do programa, escreve-se o valor de A. O valor escrito 3 porque o ltimo valor que foi armazenado na memria do computador. A denominao varivel usada justamente porque seu valor pode ser alterado ao longo da execuo do programa. 2.5 programa02.f90, verso E 1) Dentro do Fortran, editar exatamente o texto mostrado abaixo em vermelho, incluindo a linha em branco.
! Programa02.f90 INTEGER A A = 3 ! atribui o valor 3 varivel A WRITE(*,*) "Valor de A = ", A END

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.

Captulo 2. Variveis do tipo inteiro

23

Figura 2.6 Programa02.f90, verso E. 2.6 programa03.f90, verso A Para inicializar as atividades com o prximo programa, deve-se executar: 1) No Fortran, para fechar o projeto atual: File, Close Workspace 2) Na janela Microsoft Developer Studio, clicar sobre o boto Yes 3) No Fortran, seguindo o procedimento apresentado na seo 1.6 do captulo 1, criar um projeto do tipo Console Application com o nome programa03 no diretrio Z:\\SERVER1\Alunos2004_1\login, onde login deve ser substitudo pelo user name do usurio, isto , a conta particular na rede Windows do DEMEC/UFPR. 4) No Fortran, seguindo o procedimento apresentado na seo 1.7 do captulo 1, criar e inserir no projeto o programa-fonte programa03.f90 5) Dentro do Fortran, editar exatamente o texto mostrado abaixo em vermelho, incluindo as 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 24

E = A * B F = A / B G = A ** B WRITE(*,*) "A = ", A WRITE(*,*) "B = ", B WRITE(*,*) "A + B = ", C WRITE(*,*) "B - A = ", D WRITE(*,*) "A * B = ", E WRITE(*,*) "A / B = ", F WRITE(*,*) "A ** B = ", G END

6) Comentrios sobre o programa: a) A linha INTEGER A, B, C, D, E, F, G define as variveis A, B, C, D, E, F e G como sendo do tipo inteiro. Este comando reserva espao na memria do computador para diversas variveis com apenas um comando INTEGER. Entretanto, as variveis devem estar separadas por vrgula. b) As linhas A = -6 e B = 2 atribuem os valores inteiros 6 e 2 s variveis A e B. Estes valores so apenas exemplos; eles podem ser quaisquer nmeros inteiros. c) As variveis C, D, E, F e G so calculadas em funo dos valores das variveis A e B, usando os cinco operadores matemticos bsicos definidos na Tabela 2.1, conforme explicado a seguir. Tabela 2.1 Operadores matemticos bsicos em FORTRAN. Smbolo do operador matemtico em FORTRAN + * / ** Sinal mais Sinal menos Asterisco Barra Duplo asterisco Nome do smbolo Operao matemtica correspondente Adio Subtrao Multiplicao Diviso Potenciao

d) A linha C = A + B adiciona os valores das variveis A e B e atribui o resultado varivel C. e) A linha D = B - A subtrai o valor da varivel A do valor da varivel B e atribui o resultado varivel D. f) A linha E = A * B multiplica os valores das variveis A e B e atribui o resultado varivel E. g) A linha F = A / B divide o valor da varivel A pelo valor da varivel B e atribui o resultado varivel F.
Captulo 2. Variveis do tipo inteiro 25

h) A linha G = A ** B eleva o valor da varivel A ao valor da varivel B e atribui o resultado varivel G. 7) Executar Build, Compile para compilar o programa. 8) Gerar o programa-executvel fazendo Build, Build. 9) Ao se executar o programa, atravs de Build, Execute, surge uma janela, mostrada na Figura 2.7, dentro da qual tem-se: os valores das variveis A e B; e os valores resultantes das cinco operaes matemticas bsicas da Tabela 2.1 efetuadas com as variveis A e B. Analisar cada resultado, comparando-o com o valor esperado obtido de um clculo mental. 10) Dentro do programa-fonte, fazer A = 1 e B = 2. Compilar e gerar o executvel do programa com esta alterao. Executar o programa cujo resultado deve ser aquele mostrado na Figura 2.8. Analisar cada resultado, comparando-o com o valor esperado obtido de um clculo mental. O resultado da diviso pode parecer incorreto mas no . Isso se deve ao seguinte: o valor que resulta de um clculo envolvendo dois nmeros inteiros tambm um nmero inteiro, que corresponde parte inteira do nmero real equivalente ao clculo realizado. Portanto, o resultado de 1 dividido por 2 resulta em 0,5, que um nmero real. Mas como o clculo envolve dois nmeros inteiros, a parte inteira do nmero real 0,5 0, que o resultado da diviso mostrado na Figura 2.8. Este tema ser explorado com mais detalhes no Captulo 3.

Figura 2.7 Resultado da execuo do programa03.f90, verso A, com A = 6 e B = 2.

Figura 2.8 Resultado da execuo do programa03.f90, verso A, com A = 1 e B = 2.

Captulo 2. Variveis do tipo inteiro

26

11) Atribuir valores s variveis dentro do prprio programa-fonte no recomendvel. Pois, para alterar os valores, necessrio ter o programa-fonte, alm de recompil-lo e gerar o programa-executvel a cada vez. O procedimento mais indicado utilizar o comando READ, apresentado na prxima seo. 2.7 programa03.f90, verso B 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 WRITE(*,*) "Entre com o valor de A" READ(*,*) A WRITE(*,*) "Entre com o valor de B" READ(*,*) B C = A + B D = B - A E = A * B F = A / B G = A ** B WRITE(*,*) "A = ", A WRITE(*,*) "B = ", B WRITE(*,*) "A + B = ", C WRITE(*,*) "B - A = ", D WRITE(*,*) "A * B = ", E WRITE(*,*) "A / B = ", F WRITE(*,*) "A ** B = ", G END

2) Comentrios sobre o programa: a) A nica diferena entre a verso anterior (A) e a atual (B) do programa03.f90 est no nicio do programa. a incluso de 4 linhas novas no lugar de se atribuir valores s variveis A e B. b) At aqui, os comandos da linguagem FORTRAN que foram usados so: WRITE, END e INTEGER. Na verso B do programa03.f90, h um novo comando: READ. Ele usado para atribuir (fornecer) valores s variveis durante a execuo de um programa. Isto , o comando READ empregado para LER os dados de um programa.
Captulo 2. Variveis do tipo inteiro 27

c) A linha WRITE(*,*) "Entre com o valor de A" escreve o comentrio que est entre aspas. d) A linha READ(*,*) A l um valor digitado dentro da janela DOS, aberta durante a execuo do programa, e o atribui varivel A. 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 do tipo DOS 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 6 para a varivel A e, em seguida, clicar na tecla enter. c) Na terceira linha, o comentrio Entre com o valor de B, resultado do comando WRITE(*,*)
"Entre com o valor de B" do programa.

d) Na quarta linha, o programa pra e fica aguardando que seja fornecido o valor da varivel B, resultado do comando READ(*,*) B do programa. Para que o programa continue sua execuo necessrio digitar o valor 2 para a varivel B e, em seguida, clicar na tecla enter. e) Em seguida, so apresentados os mesmos resultados da verso A do programa03.f90, conforme a Figura 2.9.

Figura 2.9 Resultado da execuo do programa03.f90, verso B, com A = 6 e B = 2. 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

Captulo 2. Variveis do tipo inteiro

28

diviso por zero. Isso pode ser feito atravs de comentrios que informem ao usurio do programa, na janela da execuo do programa ou no manual do programa, por exemplo, quais as variveis que no podem ter valor nulo. Outra forma mais efetiva de evitar diviso por zero ser vista em captulo futuro. 2.8 FIM DA SESSO Para concluir o uso do Fortran e do Windows, deve-se executar o seguinte: 1) Para encerrar as atividades com um projeto, basta executar no menu do Fortran: File, Close Workspace 2) Na janela Microsoft Developer Studio, clicar sobre o boto Yes 3) Para fechar o aplicativo Fortran, basta fazer o seguinte em seu menu: File, Exit 4) Para fechar o Windows, executar: Start, Shut Down 5) Na janela Shut Down Windows, escolher a opo Close all programs and log on as a different user?. Clicar sobre o boto Yes 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 2) Compilar o programa-fonte
Captulo 2. Variveis do tipo inteiro 29

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.

Captulo 2. Variveis do tipo inteiro

30

Captulo 3. VARIVEIS DO TIPO REAL

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 Para inicializar as atividades deste captulo, deve-se executar: 1) No Windows: Start, Programs, Fortran PowerStation 4.0, Microsoft Developer Studio 2) Neste captulo ser usado um projeto j existente, no caso o projeto do fim do captulo 2. Para abri-lo, deve-se executar o seguinte no Fortran: a) File, Open Workspace b) Indicar o diretrio do projeto chamado programa03 c) Selecionar o arquivo que tem o nome do projeto e extenso mdp, no caso programa03.mdp d) Na subjanela do lado esquerdo do Fortran, clicar sobre o sinal + ao lado do nome do projeto; dever aparecer o nome do ltimo programa-fonte que foi inserido neste projeto e) Clicar sobre o nome do programa-fonte f) Edit, Cut para retirar o programa-fonte do projeto. Este comando no deletar o programa-fonte. Ele apenas o retirar do projeto. Quando se quiser, ele poder ser inserido no projeto novamente, bastando para isso selecionar o programa-fonte desejado dentro do seu diretrio e usar o comando Insert, Files into Project. 3) No Fortran, seguindo o procedimento apresentado na seo 1.7 do captulo 1, criar e inserir no projeto chamado programa03 o programa-fonte programa03c.f90 4) Conforme mostrado na Figura 3.1, dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho mostrado na Tabela 3.1. 5) Comentrios sobre o programa: a) Nos captulos 1 e 2 foram usados os comandos WRITE, END, INTEGER e READ da linguagem FORTRAN. No programa03c.f90 h um novo comando: REAL. Ele usado 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.

Captulo 3. Variveis do tipo real

31

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. Tabela 3.1 Programa03c.f90.
REAL A WRITE(*,*) "Entre com o valor de A =" READ(*,*) A WRITE(*,*) "Valor de A = ", A END

Figura 3.1 Programa03c.f90. 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, mostrada na Figura 3.2, 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.

Captulo 3. Variveis do tipo real

32

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(*,*) "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. d) Na quarta 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.

Figura 3.2 Resultado da execuo do programa03c.f90 com A = 1. 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.

Figura 3.3 Resultado da execuo do programa03c.f90 com 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.

Captulo 3. Variveis do tipo real

33

Figura 3.4 Resultado da execuo do programa03c.f90 com A = 1.0E+2. 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. Tabela 3.2 Programa03d.f90.
INTEGER D REAL A, B, C WRITE(*,*) "Entre com o valor de A =" READ(*,*) A D = A B = 1 / D C = 1.0 / D WRITE(*,*) "Valor de D = ", D WRITE(*,*) "Valor de B = ", B WRITE(*,*) "Valor de C = ", C END

4) Executar Build, Compile para compilar o programa 5) Gerar o programa-executvel fazendo Build, Build.

Captulo 3. Variveis do tipo real

34

6) Ao se executar o programa, atravs de Build, Execute, surge uma janela, mostrada na Figura 3.5, 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 2.9 para a varivel A, por exemplo, e, em seguida, clicar na tecla enter. c) Nas linhas seguintes, os resultados das variveis D, B e C.

Figura 3.5 Resultado da execuo do programa03d.f90. 7) Comentrios sobre os resultados do programa03d.f90 mostrados na Figura 3.5: a) Na linha D = A do programa, o valor da varivel real A atribudo varivel inteira D. Portanto, apenas a parte inteira do nmero A passada varivel D, desprezando-se a parte decimal. b) Na linha B = 1 / D do programa, o resultado da diviso do nmero 1 (inteiro) pela varivel inteira D atribudo varivel real B. Conforme visto no captulo 2, o valor que resulta de um clculo envolvendo dois nmeros inteiros tambm um nmero inteiro, que corresponde parte inteira do nmero real equivalente ao clculo realizado. Portanto, o resultado de 1 dividido por 2 (varivel D) resulta em 0.5, que um nmero real. Mas como o clculo envolve dois nmeros inteiros, a parte inteira do nmero real 0.5 0, que o resultado da varivel B mostrado na Figura 3.5. Assim, apenas a parte inteira da diviso 1 / D passada varivel real B, desprezando-se a parte decimal. c) Na linha C = 1.0 / D do programa, o resultado da diviso do nmero 1.0 (real) pela varivel inteira D atribudo varivel real C. Neste caso, o clculo envolve a diviso de um nmero real (1.0) por um nmero inteiro (D). O resultado da varivel C mostrado na Figura 3.5 igual a 0.5, que um nmero real. Isso ocorre porque o valor que resulta de um clculo envolvendo um nmero inteiro e um nmero real um nmero real. 3.3 programa03e.f90
Captulo 3. Variveis do tipo real 35

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. Tabela 3.3 Programa03e.f90.
REAL A, B, C, D, E, F, G WRITE(*,*) "Entre com o valor de A" READ(*,*) A WRITE(*,*) "Entre com o valor de B" READ(*,*) B C = A + B D = B - A E = A * B F = A / B G = A ** B WRITE(*,*) "A = ", A WRITE(*,*) "B = ", B WRITE(*,*) "A + B = ", C WRITE(*,*) "B - A = ", D WRITE(*,*) "A * B = ", E WRITE(*,*) "A / B = ", F WRITE(*,*) "A ** B = ", G END

4) Executar Build, Compile para compilar o programa 5) Gerar o programa-executvel fazendo Build, Build. 6) Ao se executar o programa, atravs de Build, Execute, surge uma janela, mostrada na Figura 3.6, dentro da qual tem-se:

Captulo 3. Variveis do tipo real

36

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 1.5 para a varivel A, por exemplo, e, em seguida, clicar na tecla enter. c) Na terceira linha, o comentrio Entre com o valor de B, resultado do comando WRITE(*,*)
"Entre com o valor de B" do programa.

d) Na quarta linha, o programa pra e fica aguardando que seja fornecido o valor da varivel B, resultado do comando READ(*,*) B do programa. Para que o programa continue sua execuo necessrio digitar o valor 0.4 para a varivel B, por exemplo, e, em seguida, clicar na tecla enter. e) Nas linhas seguintes, os resultados das variveis C, D, E, F e G.

Figura 3.6 Resultado da execuo do programa03e.f90. 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. 3.4 ESCALA DE PRIORIDADES ENTRE OS OPERADORES MATEMTICOS Na linguagem FORTRAN, as operaes matemticas so executadas numa seqncia lgica de acordo com uma escala de prioridades entre elas, que apresentada na Tabela 3.4. Alm disso so consideradas as regras descritas na Tabela 3.5. importante conhecer estas prioridades e regras para se fazer corretamente a traduo de expresses algbricas em expresses na linguagem FORTRAN, dentro
Captulo 3. Variveis do tipo real 37

de um programa-fonte. Alguns exemplos de expresses algbricas so apresentados abaixo nas Equaes (3.1) a (3.8). Tabela 3.4 Escala de prioridades entre os operadores matemticos bsicos em FORTRAN. Prioridade 1a 2a 3a 4a Smbolo ( ) ** * / + Nome do smbolo Parnteses Duplo asterisco Asterisco Barra Sinal mais Sinal menos Operao Qualquer Potenciao Multiplicao Diviso Adio Subtrao

Tabela 3.5 Regras adotadas nas operaes matemticas em FORTRAN. Item 1 2 3 4 5 6 7 8 Regra No caso de operaes matemticas que tm a mesma prioridade (multiplicao e diviso ou adio e subtrao), executa-se primeiro o clculo mais esquerda Parnteses so usados para que os clculos sejam executados na ordem que se deseja. Com eles, a ordem de execuo do parnteses mais interno para o mais externo. Com duas ou mais potenciaes consecutivas, a ordem de execuo da direita para a esquerda. O valor que resulta de um clculo envolvendo dois nmeros inteiros tambm um nmero inteiro, que corresponde parte inteira do nmero real equivalente ao clculo realizado. Uma operao envolvendo um nmero real com um nmero inteiro resulta num nmero real. A atribuio de um nmero real a uma varivel do tipo inteiro resulta num nmero inteiro que trunca a parte decimal do nmero real. A atribuio de um nmero inteiro a uma varivel do tipo real resulta num nmero real. Quando se somam ou se subtraem dois nmeros com magnitudes muito diferentes, possvel que o valor menor seja desprezado. A isso se denomina de erro de arredondamento ou de truncamento. 9 Espaos em branco entre variveis, sinais de igualdade, parnteses, nmeros ou operadores matemticos no interferem no resultado dos clculos. Eles tm apenas funo esttica.
H1 = A + B C

(3.1)

H2

A +

B C

(3.2)

Captulo 3. Variveis do tipo real

38

H3

A + C

(3.3)

H4

A +

B D C
B CD

(3.4)

H5

A +

(3.5)

H6

A +

BC D

(3.6)

H9

= (C 3 ) 2

(3.7)

H 10

1 B3 3

(3.8)

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).

Captulo 3. Variveis do tipo real

39

Tabela 3.6 Programa03f.f90.


REAL A, C, B, D REAL H1, H2, H3, H4, H5, H6, H7, H8, H9, H10, H11, H12 WRITE(*,*) "Entre com os valores de A, C, B e D" READ(*,*) A, C, B, D 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 H10 = (1.0 / 3 H12 = (1 / 3 ) * ( (B**3) ** (1 ) * ( (B**3) ** (1 = ", H1 = ", H2 = ", H3 = ", H4 = ", H5 = ", H6 = ", H7 = ", H8 = ", H9 / 2.0) ) / 2 ) )

H11 = (1.0 / 3.0) * ( (B**3) ** (1.0 / 2.0) )

WRITE(*,*) "H1 WRITE(*,*) "H2 WRITE(*,*) "H3 WRITE(*,*) "H4 WRITE(*,*) "H5 WRITE(*,*) "H6 WRITE(*,*) "H7 WRITE(*,*) "H8 WRITE(*,*) "H9

WRITE(*,*) "H10 = ", H10 WRITE(*,*) "H11 = ", H11 WRITE(*,*) "H12 = ", H12 END

Captulo 3. Variveis do tipo real

40

d) A expresso em FORTRAN para a varivel H7 corresponde expresso algbrica dada pela Equao (3.6). e) As expresses em FORTRAN para as variveis H11 e H12 correspondem expresso algbrica dada pela Equao (3.8). Porm, na expresso de H12 so usados apenas nmeros inteiros nas divises. f) A expresso em FORTRAN para a varivel H8 corresponde a uma simples soma de dois nmeros reais, um muito pequeno em relao ao outro. 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 3.7, dentro da qual tem-se:

Figura 3.7 Resultado da execuo do programa03f.f90. a) Na primeira linha, o comentrio Entre com os valores de A, C, B e D, resultado do comando
WRITE(*,*) "Entre com os valores de A, C, B e D" do programa.

b) Na segunda linha, o programa pra e fica aguardando que sejam fornecidos os valores da variveis A, C, B e D, resultado do comando READ(*,*) A, C, B, D do programa. Para que o programa continue sua execuo necessrio digitar quatro valores. Cada valor digitado ser atribudo respectivamente a uma das quatro variveis, na mesma seqncia. H vrias formas de se entrar com diversos valores para um nico comando READ: digitando tudo na mesma linha, com cada valor separado por vrgula ou espao em branco; digitando cada valor e, em seguida, clicando na tecla enter; ou misturas das trs formas anteriores. A primeira forma foi usada no exemplo da Figura 3.7 para se entrar com os valores 1, 2, 3 e 4, respectivamente, para as variveis A, C, B e D. c) Nas linhas seguintes, os resultados das variveis H1 a H12.
Captulo 3. Variveis do tipo real 41

8) Analisar cada resultado mostrado na Figura 3.7 comparando-o com o valor esperado obtido de um clculo mental ou com o uso de uma calculadora. Para tanto, devem ser consideradas a escala de prioridades da Tabela 3.4 e as regras descritas na Tabela 3.5. 9) Executar novamente o programa com outros valores para as variveis A, C, B e D. Analisar cada novo resultado comparando-o com o valor esperado obtido de um clculo mental ou com o uso de uma calculadora. 10) Para concluir o uso do Fortran e do Windows, deve-se executar os passos mostrados na seo 2.8 do captulo 2.
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:

a)

A =

+ 5 100

b)

A =

1 10

c)

L =

1 3 I

I2 +

1 J3
1

d)

1 2 J 3 I + L = 1 I3 2 1+ I

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.2

Escrever as expresses algbricas que correspondem s seguintes expresses em linguagem FORTRAN: a) b) A = ( ( B**(1.0/2) ) + 5) / 100 A = (1.0/10) + ( B**(1/3.0) )
42

Captulo 3. Variveis do tipo real

c) d)
Exerccio 3.3

L = (1.0/(3.0I)) * ( ( (I**2) + (1.0/(J**3)) ) ** (1.0/2) ) L = ( 1.0 / ( 1.0 + (1.0/I) ) ) * ( ( (I**2) + ( J / ( (I**3) 2 ) ) ) ** (1.0/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.

Captulo 3. Variveis do tipo real

43

Captulo 4. VARIVEIS DO TIPO CARACTER

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 Para inicializar as atividades deste captulo, deve-se executar: 1) No Windows: Start, Programs, Fortran PowerStation 4.0, Microsoft Developer Studio 2) No Fortran, seguindo o procedimento apresentado na seo 1.6 do captulo 1, criar um projeto do tipo Console Application com o nome programa04 no diretrio Z:\\SERVER1\Alunos2004_1\login, onde login deve ser substitudo pelo user name do usurio, isto , a conta particular na rede Windows do DEMEC/UFPR. 3) No Fortran, seguindo o procedimento apresentado na seo 1.7 do captulo 1, criar e inserir no projeto o programa-fonte programa4a.f90 4) Conforme mostrado na Figura 4.1, dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho mostrado na Tabela 4.1. 5) Comentrios sobre o programa: a) Nos captulos 1 a 3 foram usados os comandos WRITE, END, INTEGER, READ e REAL da linguagem FORTRAN. No programa4a.f90 h um novo comando: CHARACTER. Ele usado para definir variveis do tipo caracter ou string, isto , variveis que podem guardar ou armazenar comentrios na memria do computador. Estes comentrios podem incluir palavras, nmeros, smbolos, espaos em branco ou frases. Alguns exemplos so (os contedos das variveis esto separados por vrgula): UFPR, 5 de abril de 2004, teste de hoje, TM-102, U-20/5%, L&L. As variveis do tipo caracter tambm so chamadas de alfanumricas porque envolvem letras e nmeros. b) No FORTRAN, o contedo ou string de uma varivel do tipo caracter definido entre aspas. c) A linha CHARACTER 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 um nico caracter alfanumrico.

Captulo 4. Variveis do tipo caracter

44

d) A linha A = "UFPR, Curitiba, PR" atribui o contedo entre aspas varivel A. Tabela 4.1 Programa4a.f90, verso 1.
CHARACTER A A = "UFPR, Curitiba, PR" WRITE(*,*) "Conteudo de A = ", A END

Figura 4.1 Programa4a.f90, verso 1. 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, mostrada na Figura 4.2, dentro da qual tem-se: a) Na primeira linha, o comentrio Conteudo de A =, e, em seguida, a letra U, resultado do comando
WRITE(*,*) "Conteudo de A = ", A do programa.

b) Na segunda 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.

Captulo 4. Variveis do tipo caracter

45

Figura 4.2 Resultado da execuo do programa4a.f90, verso 1. 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. Tabela 4.2 Programa4a.f90, verso 2.
CHARACTER(50) A A = "UFPR, Curitiba, PR" WRITE(*,*) "Conteudo de A = ", A 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.

Figura 4.3 Resultado da execuo do programa4a.f90, verso 2.

Captulo 4. Variveis do tipo caracter

46

4.2 programa4b.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 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. Tabela 4.3 Programa4b.f90.
CHARACTER(50) A WRITE(*,*) "Entre com o conteudo de A =" READ(*,*) A WRITE(*,*) "Conteudo de A = ", A END

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 4.4, dentro da qual tem-se: a) Na primeira linha, o comentrio Entre com o conteudo de A =, resultado do comando WRITE(*,*)
"Entre com o conteudo de A =" do programa.

b) Na segunda linha, o programa pra e fica aguardando que seja fornecido o contedo da varivel A, resultado do comando READ(*,*) A do programa. Para que o programa continue sua execuo necessrio digitar, entre aspas, um contedo para a varivel A, por exemplo, Teste de hoje e, em seguida, clicar na tecla enter. c) Na terceira linha, o contedo da varivel A.
Captulo 4. Variveis do tipo caracter 47

Figura 4.4 Resultado da execuo do programa4b.f90. 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.

Captulo 4. Variveis do tipo caracter

48

Tabela 4.4 Programa4c.f90.


CHARACTER(20) LOCAL, DIA CHARACTER(10) HORA CHARACTER(90) FRASE WRITE(*,*) "Entre com o local =" READ(*,*) LOCAL WRITE(*,*) "Entre com o dia =" READ(*,*) DIA WRITE(*,*) "Entre com a hora =" READ(*,*) HORA FRASE = "Frase: " // LOCAL // ", " // DIA // ", as " // HORA // " horas" WRITE(*,*) "Conteudo de FRASE = ", FRASE END

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 4.5, dentro da qual tem-se: a) Na primeira linha, o comentrio Entre com o local =, resultado do comando WRITE(*,*) "Entre
com o local =" do programa.

b) Na segunda linha, o programa pra e fica aguardando que seja fornecido o contedo da varivel LOCAL, resultado do comando READ(*,*) LOCAL do programa. Para que o programa continue sua execuo necessrio digitar o contedo da varivel LOCAL, por exemplo, Curitiba e, em seguida, clicar na tecla enter. c) Na terceira linha, o comentrio Entre com o dia =, resultado do comando WRITE(*,*) "Entre
com o dia =" do programa.

d) Na quarta linha, o programa pra e fica aguardando que seja fornecido o contedo da varivel DIA, resultado do comando READ(*,*) DIA do programa. Para que o programa continue sua execuo necessrio digitar o contedo da varivel DIA, por exemplo, 5 de abril de 2004 e, em seguida, clicar na tecla enter. e) Na quinta linha, o comentrio Entre com a hora =, resultado do comando WRITE(*,*) "Entre
com a hora =" do programa.

f) Na sexta linha, o programa pra e fica aguardando que seja fornecido o contedo da varivel HORA, resultado do comando READ(*,*) HORA do programa. Para que o programa continue sua
Captulo 4. Variveis do tipo caracter 49

execuo necessrio digitar o contedo da varivel HORA, por exemplo, 10:58 e, em seguida, clicar na tecla enter. g) Na stima linha, o comentrio Contedo de FRASE = e, em seguida, o contedo da varivel FRASE, resultado do comando WRITE(*,*) "Conteudo de FRASE = ", FRASE do programa e da linha anterior aonde se definiu a varivel FRASE.

Figura 4.5 Resultado da execuo do programa4c.f90. 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 50

3) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho mostrado na Tabela 4.5. Tabela 4.5 Programa4d.f90.
CHARACTER(9) A INTEGER L WRITE(*,*) "Entre com o conteudo de A =" WRITE(*,*) "0123456789" READ(*,*) A WRITE(*,*) " WRITE(*,*) "A WRITE(*,*) "Com ADJUSTL WRITE(*,*) "Com ADJUSTR WRITE(*,*) "Com TRIM 0123456789" =(", A, ")" =(", ADJUSTL(A), ")" =(", ADJUSTR(A), ")" =(", TRIM(A), ")"

WRITE(*,*) "Com ADJUSTL e TRIM =(", TRIM(ADJUSTL(A)), ")" L = LEN(A) WRITE(*,*) "L de A = ", L L = LEN(TRIM(ADJUSTL(A))) WRITE(*,*) "L de A com TRIM e ADJUSTL = ", L END

4) Comentrios sobre o programa: a) A linha CHARACTER(9) A declara a varivel A como sendo do tipo caracter, podendo armazenar at 9 caracteres alfanumricos. b) A linha INTEGER L declara a varivel L como sendo do tipo inteiro. c) Conforme pode-se ver na Figura 4.6, ADJUSTL, ADJUSTR, TRIM e LEN 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. Estas funes so usadas para manipular strings, isto , contedos de variveis do tipo caracter. d) A lista completa das funes para variveis do tipo caracter 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, Character Procedures. e) A linha WRITE(*,*) "A
=(", A, ")" escreve em seqncia o contedo de =(; 51

trs strings que esto separadas por vrgula. A primeira o comentrio A


Captulo 4. Variveis do tipo caracter

a segunda, o contedo da varivel A; e a terceira, ). As quatro linhas seguintes do programa fazem o mesmo, isto , cada uma escreve trs strings em seqncia. Mas, nestes casos, em vez de escrever o contedo da varivel A, escreve-se o resultado de alguma funo operando sobre A, conforme as explicaes a seguir.

Figura 4.6 Programa4d.f90. 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.
Captulo 4. Variveis do tipo caracter 52

m) Na linha L = LEN(TRIM(ADJUSTL(A))) do programa, a funo LEN opera sobre o resultado da funo TRIM, que opera sobre o resultado da funo ADJUSTL sobre a varivel A. Finalmente, o resultado da funo LEN atribudo varivel inteira L. 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 4.7, dentro da qual tem-se: a) Na primeira linha, o comentrio Entre com o conteudo de A =, resultado do comando WRITE(*,*)
"Entre com o conteudo de A =" do programa.

Figura 4.7 Resultado da execuo do programa4d.f90. b) Na segunda linha, o comentrio 0123456789, resultado do comando WRITE(*,*) "0123456789" do programa. Este comentrio uma espcie de rgua para se perceber claramente o nmero de caracteres usados para definir a varivel A, e quantos espaos em branco existem antes da string de A e depois dela. O zero usado porque a definio da varivel A exige o sinal de aspas, que no conta em seu contedo. c) Na terceira linha, o programa pra e fica aguardando que seja fornecido o contedo da varivel A, resultado do comando READ(*,*) A do programa. Para que o programa continue sua execuo necessrio digitar o contedo da varivel A, por exemplo, Rio 45 e, em seguida, clicar na tecla enter . Deve-se perceber que h um espao em branco antes da palavra Rio. d) Na quarta linha, 20 espaos em branco seguidos pelo comentrio 0123456789, resultado do comando WRITE(*,*) "
0123456789" do programa. Este comentrio

uma espcie de rgua para se perceber claramente os resultados a seguir. e) Nas linhas seguintes, so apresentados os resultados do contedo da varivel A e das funes ADJUSTL, ADJUSTR, TRIM e LEN operando sobre a varivel A. Os sinais ( e ) marcam o nicio e o fim de cada string.
Captulo 4. Variveis do tipo caracter 53

8) Analisar cada resultado mostrado na Figura 4.7, considerando o contedo da varivel A e as definies apresentadas acima, nesta seo, para as funes ADJUSTL, ADJUSTR, TRIM e LEN. 9) Executar novamente o programa com outros contedos para a varivel A. Analisar os resultados de cada nova execuo do programa. 10) Para concluir o uso do Fortran e do Windows, deve-se executar os passos mostrados na seo 2.8 do captulo 2. 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.

Captulo 4. Variveis do tipo caracter

54

Captulo 5. ARQUIVOS E FUNES MATEMTICAS INTRNSECAS

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 Para inicializar as atividades deste captulo, deve-se executar: 1) No Windows: Start, Programs, Fortran PowerStation 4.0, Microsoft Developer Studio 2) No Fortran, seguindo o procedimento apresentado na seo 1.6 do captulo 1, criar um projeto do tipo Console Application com o nome programa05 no diretrio Z:\\SERVER1\Alunos2004_1\login, onde login deve ser substitudo pelo user name do usurio, isto , a conta particular na rede Windows do DEMEC/UFPR. 3) No Fortran, seguindo o procedimento apresentado na seo 1.7 do captulo 1, criar e inserir no projeto o programa-fonte programa5a.f90 4) Conforme mostrado na Figura 5.1, dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho mostrado na Tabela 5.1. 5) Comentrios sobre o programa: a) At aqui o comando WRITE foi utilizado com dois asteriscos dentro do parnteses, isto , foi usado na forma WRITE(*,*). O primeiro asterisco do comando WRITE representa o local ou dispositivo que usado para escrever algum comentrio ou resultado do programa. Este asterisco pode ser substitudo por um nmero. O nmero 6 representa uma janela do DOS, como aquela que vem sendo usada at aqui para apresentar os resultados dos programas; por exemplo, a janela mostrada na Figura 5.2. Portanto, o uso de asterisco no comando WRITE equivale a empregar o nmero 6. b) A nica diferena entre o programa5a.f90 e o programa3c.f90, da seo 3.1 do captulo 3, o uso do nmero 6 no lugar do primeiro asterisco dos comandos WRITE. 6) Executar Build, Compile para compilar o programa.

Captulo 5. Arquivos e funes matemticas intrnsecas

55

7) Gerar o programa-executvel fazendo Build, Build. 8) Ao se executar o programa, atravs de Build, Execute, surge uma janela, mostrada na Figura 5.2, dentro da qual tem-se: a) Na primeira linha, o comentrio Entre com o valor de A =, resultado do comando WRITE(6,*)
"Entre com o valor de A =" do programa.

Tabela 5.1 Programa5a.f90.


REAL A WRITE(6,*) "Entre com o valor de A =" READ(*,*) A WRITE(6,*) "Valor de A = ", A END

Figura 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.

Captulo 5. Arquivos e funes matemticas intrnsecas

56

d) Na quarta 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) O resultado da execuo do programa5a.f90 exatamente igual a do programa3c.f90, da seo 3.1 do captulo 3. Conforme explicado no item 5a, acima, isso ocorre devido equivalncia completa entre os comandos WRITE(*,*) e WRITE(6,*).

Figura 5.2 Resultado da execuo do programa5a.f90. 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. Tabela 5.2 Programa5b.f90.
REAL A WRITE(6,*) "Entre com o valor de A =" READ(*,*) A OPEN(7, file="saida5b.txt") WRITE(7,*) "Valor de A = ", A CLOSE(7) END

4) Comentrios sobre o programa:

Captulo 5. Arquivos e funes matemticas intrnsecas

57

a) No programa5b.f90 so usados dois novos comandos do FORTRAN: OPEN e CLOSE. Ambos devem ser usados em conjunto. b) A forma do comando OPEN que ser usada neste texto OPEN(nmero, file=nome). O comando OPEN usado para: definir um nmero que ser usado como referncia a um arquivo; e para abrir o arquivo chamado nome. O nmero pode ser de 1 a 99 e 105 a 299. A utilizao deste nmero num comando WRITE(nmero,*) resulta na escrita de comentrios ou variveis no arquivo que corresponde ao nmero definido no comando OPEN. O nome do arquivo pode ser qualquer um mas deve ficar entre aspas. Quando se declara um nome de arquivo num comando OPEN, se o arquivo no existir, ele criado dentro do diretrio do projeto. c) A forma do comando CLOSE que ser usada neste texto CLOSE(nmero). O comando CLOSE usado para fechar ou encerrar o uso de um arquivo aberto anteriormente com o comando OPEN. d) Todos arquivos abertos com o comando OPEN so fechados ao final da execuo do programa, existindo ou no o comando CLOSE. e) Dentro de um programa, para um mesmo nmero ou arquivo, a seqncia obrigatria dos comandos a seguinte: OPEN, WRITE, CLOSE. Para um mesmo arquivo, deve existir apenas um comando OPEN e um CLOSE dentro do programa, e podem existir diversos comandos WRITE. f) Podem ser usados vrios arquivos simultaneamente num programa. g) A principal vantagem de se usar um arquivo ter um registro permanente dos resultados do programa para posterior anlise. Isso fica mais evidente quanto maior for a quantidade de resultados de um 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, surge uma janela do DOS, mostrada na Figura 5.3, dentro da qual tem-se:

Figura 5.3 Resultado da execuo do programa5b.f90 na janela DOS com A = 1. 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 contedo da varivel A, resultado do comando READ(*,*) A do programa. Para que o programa continue sua execuo
Captulo 5. Arquivos e funes matemticas intrnsecas 58

necessrio digitar o valor 1 para a varivel A, por exemplo, e, em seguida, clicar na tecla enter. c) Em seguida ocorrer a criao do arquivo saida5b.txt, dentro do diretrio do projeto, como resultado do comando OPEN(7, file="saida5b.txt") do programa, uma vez que este arquivo ainda no existe quando o programa5b.f90 for executado pela primeira vez. Este comando tambm declara que ser usado o nmero 7 no programa como referncia ao arquivo saida5b.txt. d) Conforme mostrado na Figura 5.4, na primeira linha do arquivo saida5b.txt est escrito o comentrio Valor de A = e o valor da varivel real A como resultado do comando WRITE(7,*)
"Valor de A = ", A do programa.

e) O arquivo saida5b.txt fechado, isto , nada mais pode ser escrito nele aps o comando CLOSE(7) do programa.

Figura 5.4 Resultado da execuo do programa5b.f90 no arquivo saida5b.txt com A = 1. 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

Captulo 5. Arquivos e funes matemticas intrnsecas

59

Windows NT Explorer para encontrar e abrir o arquivo saida5b.txt, que agora dever estar no diretrio C:\Temp.

Figura 5.5 Resultado da execuo do programa5b.f90 no arquivo saida5b.txt com A = 123. 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.

Captulo 5. Arquivos e funes matemticas intrnsecas

60

Tabela 5.3 Programa5c.f90.


USE PORTLIB REAL A INTEGER VER WRITE(6,*) "Entre com o valor de A =" READ(*,*) A OPEN(7, file="saida5c.txt") WRITE(7,*) "Valor de A = ", A CLOSE(7) VER = SYSTEM ("Notepad saida5c.txt") 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

Captulo 5. Arquivos e funes matemticas intrnsecas

61

saida5c.txt

for

criado

no

diretrio

C:\Temp

com

comando

OPEN(7,

file="C:\Temp\saida5c.txt"), o comando correspondente para abrir automaticamente o arquivo

saida5c.txt VER = SYSTEM ("Notepad C:\Temp\saida5c.txt"). 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. Tabela 5.4 Programa5d.f90.
USE PORTLIB REAL A, B, C, Pi INTEGER VER WRITE(*,*) "Entre com o valor de A =" READ(*,*) A OPEN(8, file="saida5d.txt") WRITE(8,*) "Valor de A = ", A 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) VER = SYSTEM ("Notepad saida5d.txt") END

8) Comparar cada resultado mostrado na Figura 5.8 com o resultado obtido de uma calculadora.
Captulo 5. Arquivos e funes matemticas intrnsecas 63

9) Executar novamente o programa com outro valor para a varivel A. Comparar cada novo resultado com o obtido de uma calculadora. 10) Os programas-executveis tambm podem ser executados, rodados ou postos para funcionar fora do aplicativo Fortran. Para testar isso, primeiro, fechar o aplicativo Fortran. Em seguida, utilizando o aplicativo Windows NT Explorer, copiar o programa-executvel chamado programa05.exe ou programa05.application para o diretrio C:\Temp. Para executar o programa, basta clicar duas vezes sobre o arquivo copiado. Como resultado, surgir o arquivo saida5d.txt. O diretrio C:\Temp apenas um exemplo. O programa-executvel pode ser copiado para qualquer outro diretrio e ser executado l.

Figura 5.6 Programa5d.f90.


Captulo 5. Arquivos e funes matemticas intrnsecas 64

Tabela 5.5 Algumas funes matemticas do FORTRAN. Funo Mdulo ou valor absoluto Raiz quadrada Exponencial: Y Logaritmo natural Logaritmo decimal Sinal Mnimo Mximo = eX Comando Y = ABS(X) Y = SQRT(X) Y = EXP(X) Y = LOG(X) Y = LOG10(X) Y = SIGN(X,Z) Y = MIN(X,Z,W) Y = MAX(X,Z,W) Y = valor absoluto de X vezes o sinal de Z Y = valor mnimo entre X, Z e W; o argumento pode conter 2 ou mais variveis Y = valor mximo entre X, Z e W; o argumento pode conter 2 ou mais variveis Observao

Tabela 5.6 Algumas funes trigonomtricas do FORTRAN. Funo Seno Cosseno Tangente Arco-seno Arco-cosseno Arco-tangente Seno hiperblico Cosseno hiperblico Tangente hiperblica Comando Y = SIN(X) Y = COS(X) Y = TAN(X) Y = ASIN(X) Y = ACOS(X) Y = ATAN(X) Y = SINH(X) Y = COSH(X) Y = TANH(X) Observao X em radianos X em radianos X em radianos Y em radianos Y em radianos Y em radianos

Figura 5.7 Janela DOS do programa5d.f90.

Captulo 5. Arquivos e funes matemticas intrnsecas

65

Figura 5.8 Arquivo saida5d.txt do programa5d.f90. 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.

Captulo 5. Arquivos e funes matemticas intrnsecas

66

Exerccio 5.3 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.6 sobre as variveis lidas c) escrever no arquivo chamado saida_5p3.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.

Captulo 5. Arquivos e funes matemticas intrnsecas

67

Captulo 6. FORMATOS DE EDIO

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

6.1 FORMATOS DE EDIO PARA VARIVEIS DO TIPO CARACTER: programa6a.f90 Para inicializar as atividades deste captulo, deve-se executar: 1) Para acessar o programa Fortran, no Windows: Start, Programs, Fortran PowerStation 4.0, Microsoft Developer Studio 2) No Fortran, seguindo o procedimento-padro, criar um projeto com o nome programa06 3) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte programa6a.f90 4) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho mostrado na Tabela 6.1. Tabela 6.1 Programa6a.f90.
USE PORTLIB CHARACTER(10) A, B CHARACTER(20) C INTEGER VER WRITE(*,*) "Variaveis do tipo caracter" WRITE(*,*) "Entre com os conteudos de A e B" READ(*,*) A, B C = A // B OPEN(9, file="saida6a.txt") WRITE(9,*) A, "= A sem formato"

Captulo 6. Formatos de edio

68

WRITE(9,21) A 21 FORMAT ( A2, "= A no formato A2" ) 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 & & )

5) Comentrios sobre o programa: a) O objetivo do programa6a.f90 explicar alguns formatos de edio utilizados com variveis do tipo caracter. b) No captulo 5, alm de um asterisco, o comando WRITE foi utilizado com um nmero para identificar o local (janela ou arquivo) onde seria escrito algo, isto , ele foi usado na forma WRITE(nmero1,*). Um exemplo a linha WRITE(9,*) A, "= A sem formato" do programa. Agora, no programa6a.f90, o comando WRITE utilizado com dois nmeros, ou seja, na forma WRITE(nmero1,nmero2), por exemplo, a linha WRITE(9,21) A do programa. O nmero2 est associado a um novo comando do FORTRAN chamado de FORMAT.
Captulo 6. Formatos de edio 69

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
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/.

Captulo 6. Formatos de edio

70

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 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
Captulo 6. Formatos de edio 71

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.

Figura 6.1 Janela DOS do programa6a.f90.

Figura 6.2 Arquivo saida6a.txt do programa6a.f90.


Captulo 6. Formatos de edio 72

9) At entender, comparar o resultado de cada comando WRITE, e seu respectivo comando FORMAT no programa6a.f90, mostrado em cada linha da Figura 6.2 ou no arquivo saida6a.txt. 10) Executar novamente o programa com outros contedos para as variveis A e B. Analisar os novos resultados. 6.2 FORMATOS DE EDIO PARA VARIVEIS DO TIPO INTEIRO: programa6b.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 programa6b.f90 3) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho mostrado na Tabela 6.2. Tabela 6.2 Programa6b.f90.
USE PORTLIB INTEGER A, B, C INTEGER VER WRITE(*,*) "Variaveis do tipo inteiro" WRITE(*,*) "Entre com os valores de A e B" READ(*,*) A, B C = A + B OPEN(9, file="saida6b.txt") WRITE(9,*) A, "= A sem formato" WRITE(9,21) A WRITE(9,22) A WRITE(9,23) A WRITE(9,24) A WRITE(9,25) A WRITE(9,10) A, B, C WRITE(9,11) A, B, C Captulo 6. Formatos de edio 73

WRITE(9,9) A, B, C CLOSE(9) VER = SYSTEM("Notepad saida6b.txt") 21 FORMAT ( I2, "= A no formato I2" ) 22 FORMAT ( I5, "= A no formato I5" ) 23 FORMAT ( I10, "= A no formato I10" ) 24 FORMAT("10X", 10X, "Valor de A =", I10, 1/) 25 FORMAT("T10", T10, "Valor de A =", I10, 1/) 10 FORMAT(5X, "A =", I10, 1/, 5X, "B =", I10, 1/, 5X, "C =", I10, 2/) 11 FORMAT( 5X, "A =", I10, 1/, 5X, "B =", I10, 1/, 5X, "C =", I10, 2/ & & )

9 FORMAT ( 3(I10), "= variveis A, B e C no formato 3(I10)" ) END

4) Comentrios sobre o programa: a) O objetivo do programa6b.f90 explicar alguns formatos de edio utilizados com variveis do tipo inteiro. b) No caso do programa6b.f90, os comandos FORMAT foram todos aglomerados no final do programa-fonte, na mesma ordem de seus respectivos comandos WRITE. c) O identificador de variveis do tipo inteiro a letra I seguida de um nmero que especifica a quantidade mxima de algarismos ou colunas para escrever cada varivel. Dentro deste espao, o contedo de cada varivel do tipo inteiro escrito da direita para a esquerda. Uma coluna usada para o sinal do nmero inteiro. Se o valor inteiro da varivel ocupar mais espao, colunas ou algarismos do que o reservado para escrev-la, no lugar do nmero sero apresentados apenas asteriscos. Isso significa que o formato utilizado incompatvel com o valor da varivel. Um exemplo de uso deste identificador I5 na linha 22 FORMAT ( I5, "= A no formato I5" ) do programa. d) 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 inteiro, conforme pode-se ver no programa6b.f90. e) O formato M(IN) equivalente a M vezes o formato IN, onde N o nmero de colunas ou algarismos reservados para se escrever uma varivel do tipo inteiro. Por exemplo, na linha 9

Captulo 6. Formatos de edio

74

FORMAT ( 3(I10), "= variveis A, B e C no formato 3(I10)" ) do programa usa-se trs

vezes o formato I10 para se escrever trs variveis do tipo inteiro. 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.3, dentro da qual tem-se: a) Na primeira linha, o comentrio Variaveis do tipo inteiro, resultado do comando WRITE(*,*)
"Variaveis do tipo inteiro" 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 111 222, por exemplo, e, em seguida, clicar na tecla enter. d) Em seguida ocorrer a criao do arquivo saida6b.txt, dentro do diretrio do projeto, como resultado do comando OPEN(9, file="saida6b.txt") do programa, uma vez que este arquivo ainda no existe quando o programa6b.f90 for executado pela primeira vez. Este comando tambm declara que ser usado o nmero 9 no programa como referncia ao arquivo saida6b.txt. e) Como resultado da linha VER = SYSTEM("Notepad saida6b.txt") do programa, o aplicativo Notepad abre automaticamente o arquivo saida6b.txt cujo contedo mostrado na Figura 6.4. Na segunda linha do arquivo saida6b.txt o valor da varivel A (111) foi trocado por dois asteriscos. Isso ocorre porque o formato usado (I2) incompatvel para se escrever o valor da varivel A, que neste caso precisa de pelo menos trs colunas, ou seja, o formato mnimo seria I3. Para evitar este tipo de problema, sempre se deve superdimensionar o espao para escrever o valor de cada varivel.

Figura 6.3 Janela DOS do programa6b.f90. 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.
Captulo 6. Formatos de edio 75

9) Executar novamente o programa com outros valores para as variveis A e B. Analisar os novos resultados.

Figura 6.4 Arquivo saida6b.txt do programa6b.f90. 6.3 FORMATOS DE EDIO PARA VARIVEIS DO TIPO REAL: programa6c.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 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.
Captulo 6. Formatos de edio 76

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. Tabela 6.3 Programa6c.f90.
USE PORTLIB REAL A, B, C INTEGER VER 11 FORMAT( 5X, "A =", 1PE15.3, 1/, 5X, "B =", 1PE15.3, 1/, 5X, "C =", 1PE15.3, 1/ 21 FORMAT ("A no formato F5.2 "A no formato F5.0 "A no formato E15.3 & & ) 1/, & 1/, & 1/, & )

12 FORMAT ( 3(1PE15.3), "= variveis A, B e C no formato 3(1PE15.3)" ) =", F5.2, =", F5.0, =", E15.3,

"A no formato 1PE15.3 =", 1PE15.3, 1/ WRITE(*,*) "Variaveis do tipo real" WRITE(*,*) "Entre com os valores de A e B" READ(*,*) A, B C = A + B OPEN(9, file="saida6c.txt") WRITE(9,*) A, "= A sem 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

Captulo 6. Formatos de edio

77

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 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.
Captulo 6. Formatos de edio 78

Dependendo do formato empregado, alguns algarismos do nmero real so truncados, como se pode ver da segunda quarta linha do arquivo saida6c.txt.

Figura 6.5 Janela DOS do programa6c.f90.

Figura 6.6 Arquivo saida6c.txt do programa6c.f90. 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. 6.4 RESUMO DE REGRAS GERAIS DE EDIO DE PROGRAMAS EM FORTRAN 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.

Captulo 6. Formatos de edio

79

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. 8) Na linguagem FORTRAN, os nomes de variveis podem ter at 31 caracteres que incluem combinaes das 26 letras do alfabeto, dos algarismos 0, 1, 2, 3 a 9, e o trao de sublinhado. No permitido acentuao e todas as variveis devem comear por uma letra. Exemplos de nomes de variveis (separadas por vrgula): v, va, variavel, variavel_2, variavel_31, nome03, nome_03, nome_da_rua. 6.5 SEQNCIA OBRIGATRIA DE COMANDOS EM FORTRAN 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.

Captulo 6. Formatos de edio

80

Encerrar a sesso seguindo o procedimento-padro.

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 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.

Captulo 6. Formatos de edio

81

Captulo 7. DECISES E OPES

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 Para inicializar as atividades deste captulo, deve-se executar: 1) Para acessar o programa Fortran, no Windows: Start, Programs, Fortran PowerStation 4.0, Microsoft Developer Studio 2) No Fortran, seguindo o procedimento-padro, criar um projeto com o nome programa7 3) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte programa7a.f90 4) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho mostrado na Tabela 7.1. 5) Comentrios sobre o programa: a) Nesta e na prxima seo so vistas trs formas de uso do comando IF (SE). A primeira mostrada na Tabela 7.2 e usada em diversas linhas do programa7a.f90. O comando IF usado para tomar decises com base em condies. Se as condies so satisfeitas, executa-se o comando que est na mesma linha do IF, caso contrrio, no. b) Por exemplo, na linha IF ( A <
B ) WRITE(*,*) "A eh MENOR do que B" do programa, se o

valor de A for menor do que o valor de B, executado o comando que est aps o parnteses, no caso, escrever um comentrio. Aquilo que est dentro de parnteses chamado de condio, que pode ser simples ou composta. Para definir as condies, so usados os chamados operadores relacionais (Tabela 7.3) e lgicos (Tabela 7.4). c) Na linha IF ( (A < 0) .AND. (B < 0) ) WRITE(*,*) "A E B sao numeros NEGATIVOS" do programa, tem-se um exemplo de condio composta. Cada condio simples unida pelos operadores lgicos .AND. e .OR., que em portugus significam E e OU. d) Nas condies, alm de variveis, podem ser usados diretamente valores ou expresses envolvendo valores e variveis. e) Nas demais linhas do programa, so testados todos os operadores relacionais e lgicos. 6) Executar Build, Compile para compilar o programa.

Captulo 7. Decises e opes

82

7) Gerar o programa-executvel fazendo Build, Build. Tabela 7.1 Programa7a.f90.


REAL A, B WRITE(*,*) "Entre com os valores de A e B" READ(*,*) A, B IF ( A < B ) WRITE(*,*) "A eh MENOR do que B"

IF ( A <= B ) WRITE(*,*) "A eh MENOR OU IGUAL a B" IF ( A > B ) WRITE(*,*) "A eh MAIOR do que B"

IF ( A >= B ) WRITE(*,*) "A eh MAIOR OU IGUAL a B" IF ( A == B ) WRITE(*,*) "A eh IGUAL a B" IF ( A /= B ) WRITE(*,*) "A eh DIFERENTE de B" IF ( (A < 0) .AND. (B < 0) ) WRITE(*,*) "A E B sao numeros NEGATIVOS" IF ( (A > 0) .AND. (B > 0) ) WRITE(*,*) "A E B sao numeros POSITIVOS" IF ( (A > 0) .OR. END (B > 0) ) WRITE(*,*) "A OU B eh um numero POSITIVO"

Tabela 7.2 Sintaxe 1 do comando IF.


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.

Captulo 7. Decises e opes

83

b) Na segunda 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.0 2.0, por exemplo, e, em seguida, clicar na tecla enter. c) Em seguida so apresentados os comentrios correspondentes aos comandos IF cujas condies foram satisfeitas para os valores de A e B. Tabela 7.3 Operadores relacionais do FORTRAN. Operador < <= > >= == /= Significado menor menor ou igual maior maior ou igual igual diferente

Tabela 7.4 Operadores lgicos do FORTRAN. Operador .AND. .OR. Significado e ou

Figura 7.1 Resultado do programa7a.f90 para A = 1.0 e B = 2.0. 9) At entender, comparar os resultados da execuo do programa7a.f90, mostrados na Figura 7.1, com cada linha do programa-fonte onde exista um comando IF. 10) Executar novamente o programa com A = 1 e B = 1. At entender, comparar os novos resultados, mostrados na Figura 7.2, com cada linha do programa-fonte onde exista um comando IF.

Captulo 7. Decises e opes

84

Figura 7.2 Resultado do programa7a.f90 para A = 1 e B = 1. 11) Executar novamente o programa com A = 1 e B = 2. At entender, comparar os novos resultados, mostrados na Figura 7.3, com cada linha do programa-fonte onde exista um comando IF.

Figura 7.3 Resultado do programa7a.f90 para A = 1 e B = 2. 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.

Captulo 7. Decises e opes

85

b) Nesta seo mostrada e testada a segunda forma de uso do comando IF (SE), cuja sintaxe apresentada na Tabela 7.6 e usada no programa7b.f90. Esta estrutura do comando IF permite que, se as condies so satisfeitas, sejam executados diversos comandos do programa escritos em vrias linhas. Se as condies no so satisfeitas, so executados os comandos que esto entre o comando ELSE e o END IF. Tabela 7.5 Programa7b.f90.
REAL A, B, C REAL D, X1, X2 WRITE(*,*) "Entre com os valores de A, B e C, onde" WRITE(*,*) "A*(X**2) + B*X + C = 0" READ(*,*) A, B, C D = (B**2) - 4.0 * A * C IF ( D >= 0.0 ) THEN X1 = ( -B + SQRT(D) ) / ( 2.0 * A ) X2 = ( -B - SQRT(D) ) / ( 2.0 * A ) WRITE(*,*) "A primeira raiz real eh = ", X1 WRITE(*,*) "A segunda 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 END IF END raiz complexa eh = ", X1, " - ", X2, " i" raiz real eh = ", X2

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.
Captulo 7. Decises e opes 86

e) As trs formas de uso do comando IF, mostradas nas Tabelas 7.2, 7.6 e 7.7, podem ser combinadas entre si, cada uma podendo ser inserida dentro das estruturas das outras. Tabela 7.6 Sintaxe 2 do comando IF.
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.

Tabela 7.7 Sintaxe 3 do comando IF.


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.

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 7.4, dentro da qual tem-se: a) Na primeira linha, o comentrio Entre com os valores de A, B e C, onde, resultado do comando
WRITE(*,*) "Entre com os valores de A, B e C, onde" do programa.

b) Na segunda linha, o comentrio A*(X**2) + B*X + C = 0, resultado do comando WRITE(*,*)


"A*(X**2) + B*X + C = 0" do programa.

c) Na terceira linha, o programa pra e fica aguardando que sejam fornecidos os valores das variveis A, B e C, resultado do comando READ(*,*) A, B, C do programa. Para que o programa continue sua execuo necessrio digitar 1 5 6, por exemplo, e, em seguida, clicar na tecla enter.
Captulo 7. Decises e opes 87

d) Em seguida so apresentados os resultados correspondentes ao bloco do programa selecionado em funo da condio testada no comando IF.

Figura 7.4 Resultado do programa7b.f90 para A = 1, B = 5 e C = 6. 8) At entender, comparar os resultados da execuo do programa7b.f90, mostrados na Figura 7.4, com cada linha do programa-fonte. 9) Executar novamente o programa com A = 1, B = 6 e C = 10. At entender, comparar os novos resultados, mostrados na Figura 7.5, com cada linha do programa-fonte.

Figura 7.5 Resultado do programa7b.f90 para A = 1, B = 6 e C = 10. 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

Captulo 7. Decises e opes

88

3) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho mostrado na Tabela 7.8. Tabela 7.8 Programa7c.f90.
INTEGER A WRITE(*,*) "Entre com o valor inteiro de A" READ(*,*) A 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

4) Comentrios sobre o programa: a) No programa7c.f90 usado um novo comando do FORTRAN: SELECT CASE. Este comando empregado para escolher apenas uma opo entre vrias e executar o bloco de linhas ou comandos do programa correspondente opo escolhida. A opo feita em funo de uma varivel do tipo inteiro ou caracter, chamada de varivel seletora. Cada bloco pode conter uma ou vrias linhas de programa. A sintaxe deste comando apresentada na Tabela 7.9. b) O nmero de opes existentes depende de cada caso ou programa em particular. c) A opo CASE DEFAULT executada se nenhuma das anteriores for satisfeita.

Captulo 7. Decises e opes

89

d) Recomenda-se identar, isto , deslocar para a direita cada opo (CASE) e cada bloco para que sejam facilmente visualizados os comandos ligados a cada opo. Um exemplo desta recomendao mostrado no programa7c.f90, na Tabela 7.8. e) Deve-se notar que em todos os comandos WRITE no usado o valor da varivel A. Tabela 7.9 Sintaxe do comando SELECT CASE.
SELECT CASE ( variavel ) 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.

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 7.6, dentro da qual tem-se: a) Na primeira linha, o comentrio Entre com o valor inteiro de A, resultado do comando
WRITE(*,*) "Entre com o valor inteiro 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 7. Decises e opes

90

c) Na terceira linha, mostrado um comentrio correspondente opo selecionada em funo do valor da varivel A. 8) At entender, verificar se o resultado da execuo do programa7c.f90, mostrado na Figura 7.6, est correto em funo do valor da varivel A e o comentrio correspondente opo selecionada. 9) Executar novamente o programa com A = 2. At entender, verificar se o novo resultado da execuo do programa7c.f90 est correto em funo do valor da varivel A e o comentrio correspondente opo selecionada. 10) Repetir o item 9 com A = 50. 11) Repetir o item 9 com A = 2345. 12) Repetir o item 9 com outro valor qualquer. 13) Encerrar a sesso seguindo o procedimento-padro.

Figura 7.6 Resultado do programa7c.f90 para A = 10. 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 91

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

Captulo 7. Decises e opes

92

Captulo 8. CICLOS

OBJETIVOS DO CAPTULO Conceito de ciclo Comandos do FORTRAN: DO END DO, EXIT

8.1 programa8a.f90 Para inicializar as atividades deste captulo, deve-se executar: 1) Para acessar o programa Fortran, no Windows: Start, Programs, Fortran PowerStation 4.0, Microsoft Developer Studio 2) No Fortran, seguindo o procedimento-padro, criar um projeto com o nome programa8 3) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte programa8a.f90 4) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho mostrado na Tabela 8.1. Tabela 8.1 Programa8a.f90.
INTEGER A 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 WRITE(*,*) "Valor de A depois do ciclo =", A 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.

Captulo 8. Ciclos

93

7) Gerar o programa-executvel fazendo Build, Build. 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.

Figura 8.1 Resultado do programa8a.f90. 9) Explicaes gerais sobre o funcionamento de um ciclo em FORTRAN so apresentadas a seguir. 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

94

Tabela 8.2 Programa8b.f90.


INTEGER A, INICIO, FIM, PASSO, B, C WRITE(*,*) "Entre com os valores inteiros de A, INICIO, FIM e PASSO" READ(*,*) A, INICIO, FIM, PASSO WRITE(*,*) "Valor de A antes do ciclo =", A B = (FIM - INICIO + PASSO) / PASSO C = MAX ( B, 0 ) WRITE(*,*) "O ciclo deve ser executado", C, " vezes" DO A = INICIO, FIM, PASSO WRITE(*,*) "Valor de A dentro do ciclo =", A END DO WRITE(*,*) "Valor de A depois do ciclo =", A END

4) Comentrios sobre o programa: a) Neste programa so usados dois novos comandos do FORTRAN: DO e END DO, que definem um ciclo. A sintaxe deles, isto , a forma de utiliz-los mostrada na Tabela 8.3. Todas as linhas do programa que esto entre os comandos DO e END DO so executadas diversas vezes. b) A definio de um ciclo envolve quatro variveis do tipo inteiro: A, INICIO, FIM e PASSO. Os nomes delas podem ser outros quaisquer. Quando a execuo do programa chega a um comando DO, a seqncia a seguinte: b.1) A varivel A assume o valor da varivel INICIO b.2) Verifica-se se deve-se entrar ou no no ciclo em funo dos valores das variveis INICIO, FIM e PASSO, conforme explicao do item c abaixo b.3) No caso de se entrar no ciclo: b.3.1) So executadas todas as linhas do programa at se chegar ao comando END DO b.3.2) Retorna-se linha do comando DO b.3.3) O valor da varivel A passa a ser A = A + PASSO b.3.4) Retorna-se ao item b.2 acima

Captulo 8. Ciclos

95

b.4) No caso de no se entrar no ciclo, a execuo do programa passa diretamente linha que estiver abaixo do comando END DO Tabela 8.3 Sintaxe do comando DO.
DO A = INICIO, FIM, PASSO BLOCO (uma ou vrias linhas de programa com comandos) 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

FIM

INICIO + PASSO

PASSO

(8.1)

= 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

96

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.

Figura 8.2 Resultado do programa8b.f90 para A = 20, INICIO = 1, FIM = 10 e PASSO = 1. 8) At entender, analisar os resultados do programa8b.f90, mostrados na Figura 8.2, considerando cada linha do programa-fonte e as explicaes descritas no item 4 acima. Deve-se notar que o ciclo do programa8b.f90 idntico ao do programa8a.f90, Figura 8.1, devido aos valores usados para as variveis INICIO, FIM e PASSO. Neste caso tem-se um ciclo progressivo, pois PASSO > 0. 9) Executar novamente o programa com A = 20, INICIO = 5, FIM = 5 e PASSO = 1. Neste caso tem-se um ciclo progressivo, pois PASSO > 0. At entender, analisar os novos resultados, mostrados na Figura 8.3, considerando cada linha do programa-fonte e as explicaes descritas no item 4 acima. 10) Executar novamente o programa com A = 20, INICIO = 20, FIM = 11 e PASSO = 1. Neste caso tem-se um ciclo regressivo, pois PASSO < 0. At entender, analisar os novos resultados, mostrados na Figura 8.4, considerando cada linha do programa-fonte e as explicaes descritas no item 4 acima.

Captulo 8. Ciclos

97

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

98

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. 2) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte
programa8c.f90

3) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho mostrado na Tabela 8.4. 4) Comentrios sobre o programa: a) No programa8c.f90 usado um novo comando do FORTRAN: EXIT. Este comando empregado para que a execuo de um ciclo seja interrompida e a execuo do programa continue na linha seguinte ao comando END DO. b) No programa8c.f90 tambm exemplificado o uso da varivel A em operaes ou clculos dentro de um ciclo. Conforme j foi mencionado, o valor de A no pode ser alterado por comandos dentro do ciclo. Mas o valor que a varivel A assume a cada execuo do ciclo pode ser usado em outros clculos ou variveis. c) No caso, a varivel SOMA zerada antes do incio do ciclo. A cada execuo do ciclo, seu valor alterado com o valor atual da varivel A. O mesmo ocorre com a varivel CUBO.

Captulo 8. Ciclos

99

d) Quando a condio estipulada na linha IF ( SOMA > FIM ) EXIT do programa for satisfeita, o comando EXIT ser executado. Em seguida, a execuo do programa transferida para a linha
WRITE(*,*) "Valor de A depois do ciclo =", A do programa, que a linha seguinte ao

comando END DO. Tabela 8.4 Programa8c.f90.


INTEGER A, INICIO, FIM, PASSO, SOMA, CUBO WRITE(*,*) "Entre com os valores inteiros de INICIO, FIM e PASSO" READ(*,*) INICIO, FIM, PASSO SOMA = 0 CUBO = 0 DO A = INICIO, FIM, PASSO SOMA = SOMA + A CUBO = CUBO + A**3 WRITE(*,*) "A, SOMA, CUBO =", A, SOMA, CUBO IF ( SOMA > FIM ) EXIT END DO WRITE(*,*) "Valor de A depois do ciclo =", A END

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 8.7, dentro da qual tem-se: a) Na primeira linha, o comentrio Entre com os valores inteiros de INICIO, FIM e PASSO, resultado do comando WRITE(*,*) "Entre com os valores inteiros de INICIO, FIM e
PASSO" do programa.

b) Na segunda linha, o programa pra e fica aguardando que sejam fornecidos os valores das variveis INICIO, FIM e PASSO, resultado do comando READ(*,*) INICIO, FIM, PASSO do programa. Para que o programa continue sua execuo necessrio digitar 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

100

8) At entender, analisar os resultados do programa8c.f90, mostrados na Figura 8.7, considerando cada linha do programa-fonte e as explicaes descritas no item 4 acima. 9) Executar novamente o programa com INICIO = 5, FIM = 5 e PASSO = 2. At entender, analisar os novos resultados, mostrados na Figura 8.8, considerando cada linha do programa-fonte e as explicaes descritas no item 4 acima. 10) Encerrar a sesso seguindo o procedimento-padro.

Figura 8.7 Resultado do programa8c.f90 para INICIO = 1, FIM = 10 e PASSO = 1.

Figura 8.8 Resultado do programa8c.f90 para INICIO = 5, FIM = 5 e PASSO = 2.


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 101

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

Captulo 8. Ciclos

102

Captulo 9. CONJUNTOS

OBJETIVOS DO CAPTULO Conceitos de: conjunto, elemento, alocao dinmica de memria Comandos do FORTRAN: DIMENSION, ALLOCATABLE, ALLOCATE, MINVAL, MAXVAL, SUM 9.1 programa9a.f90 Para inicializar as atividades deste captulo, deve-se executar: 1) Para acessar o programa Fortran, no Windows: Start, Programs, Fortran PowerStation 4.0, Microsoft Developer Studio 2) No Fortran, seguindo o procedimento-padro, criar um projeto com o nome programa9 3) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte programa9a.f90 4) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho mostrado na Tabela 9.1. 5) Objetivos do programa: a) Utilizar trs novos comandos do FORTRAN: DIMENSION, ALLOCATABLE e ALLOCATE b) Determinar os valores mnimo e mximo e a mdia de um conjunto de variveis do tipo real 6) Comentrios sobre o programa: a) Todas as variveis do tipo inteiro, real e caracter que foram empregadas at o captulo 8 podem ser denominadas de variveis simples. Mas tambm existem as chamadas variveis compostas ou do tipo conjunto, que so o tema deste captulo 9. b) Neste programa so usados trs novos comandos do FORTRAN: DIMENSION, ALLOCATABLE e ALLOCATE, que so empregados com variveis do tipo conjunto. A sintaxe deles, isto , a forma de utiliz-los mostrada na Tabela 9.2. c) Em FORTRAN, conjunto uma coleo de variveis do mesmo tipo que so agrupadas numa nica varivel. Cada varivel que compe o conjunto denominada de elemento ou componente. Uma varivel do tipo conjunto tambm chamada de vetor ou varivel subscrita. As variveis do tipo conjunto podem ser compostas por variveis do tipo inteiro, real ou caracter. Por exemplo, as diversas notas de uma prova podem ser agrupadas num nico conjunto ou varivel (NOTAS) para represent-las, conforme mostrado na Tabela 9.1.

Captulo 9. Conjuntos

103

d) O comando DIMENSION(:) usado para definir uma varivel do tipo conjunto. Tabela 9.1 Programa9a.f90.
INTEGER NOTA, QUANTIDADE_NOTAS REAL, ALLOCATABLE, DIMENSION(:) :: NOTAS REAL MINIMO, MAXIMO, SOMA, MEDIA WRITE(*,*) "Entre com a quantidade de notas" READ(*,*) QUANTIDADE_NOTAS ALLOCATE ( NOTAS (QUANTIDADE_NOTAS) ) WRITE(*,*) "Entre com as notas" 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 MEDIA = SOMA / QUANTIDADE_NOTAS WRITE(*,*) "Nota minima = ", MINIMO WRITE(*,*) "Nota maxima = ", MAXIMO WRITE(*,*) "Nota media END = ", MEDIA

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 104

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. Tabela 9.2 Sintaxe de comandos para variveis do tipo conjunto.
PARA DEFINIR O TIPO DE VARIAVL: REAL, ALLOCATABLE, DIMENSION(:) :: A, B INTEGER, ALLOCATABLE, DIMENSION(:) :: A, B CHARACTER(X), ALLOCATABLE, DIMENSION(:) :: A, B PARA ALOCAR A MEMRIA DOS CONJUNTOS: ALLOCATE ( A(N1), B(N2) ) onde X um valor inteiro que define o nmero de caracteres, e N1 e N2 so variveis do tipo inteiro que definem a quantidade de elementos de cada conjunto.

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.

Captulo 9. Conjuntos

105

k) No ciclo definido pela linha DO NOTA = 2, QUANTIDADE_NOTAS do programa, com o emprego de comandos IF, so determinados os valores MINIMO e MAXIMO dos elementos da varivel NOTAS, assim como a SOMA dos valores de todos os elementos. 7) Algoritmo do programa: a) Definir os tipos de todas as variveis b) Ler a quantidade de elementos da varivel NOTAS, que do tipo conjunto ou vetor c) Alocar a memria para a varivel NOTAS d) Ler os valores de todos os elementos da varivel NOTAS e) Determinar os valores mnimo e mximo e a mdia da varivel NOTAS f) Escrever e identificar os valores mnimo e mximo e a mdia da varivel NOTAS 8) Executar Build, Compile para compilar o programa. 9) Gerar o programa-executvel fazendo Build, Build. 10) Ao se executar o programa, atravs de Build, Execute, surge uma janela, mostrada na Figura 9.1, dentro da qual tem-se: a) Na primeira linha, o comentrio Entre com a quantidade de notas, resultado do comando
WRITE(*,*) "Entre com a quantidade de notas" do programa.

b) Na segunda linha, o programa pra e fica aguardando que seja fornecido o valor da varivel QUANTIDADE_NOTAS, resultado do comando READ(*,*) QUANTIDADE_NOTAS do programa. Para que o programa continue sua execuo necessrio digitar 5, por exemplo, e, em seguida, clicar na tecla Enter. c) Na terceira linha, o comentrio Entre com as notas, resultado do comando WRITE(*,*) "Entre
com as notas" do programa.

d) Na quarta linha, o programa pra e fica aguardando que sejam fornecidos os valores de todos os elementos da varivel NOTAS, resultado do comando READ(*,*) NOTAS(NOTA) do programa, que est dentro de um ciclo que comea no primeiro elemento e vai at o ltimo do conjunto. Deve-se perceber que o comando READ usado para ler o valor de apenas um elemento a cada vez; assim necessrio digitar cada nota e, em seguida, clicar na tecla Enter antes de se digitar uma nova nota. Usar, por exemplo, os valores 7, 8.5, 5.7, 4.9 e 9. e) Em seguida so apresentados os resultados correspondentes execuo do programa. 11) At entender, analisar os resultados do programa9a.f90, mostrados na Figura 9.1, considerando cada linha do programa-fonte, as explicaes descritas no item 6 acima e a mdia obtida com o uso de uma calculadora. 12) Executar novamente o programa com outros valores. At entender, analisar os novos resultados do programa9a.f90 considerando cada linha do programa-fonte, as explicaes descritas no item 6 acima e a mdia obtida com o uso de uma calculadora.
Captulo 9. Conjuntos 106

Figura 9.1 Resultado do programa9a.f90. 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 107

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. Tabela 9.3 Programa9b.f90.
INTEGER NOTA, QUANTIDADE_NOTAS REAL, ALLOCATABLE, DIMENSION(:) :: NOTAS REAL MINIMO, MAXIMO, SOMA, MEDIA WRITE(*,*) "Entre com a quantidade de notas" READ(*,*) QUANTIDADE_NOTAS ALLOCATE ( NOTAS (QUANTIDADE_NOTAS) ) WRITE(*,*) "Entre com as notas" DO NOTA = 1, QUANTIDADE_NOTAS READ(*,*) NOTAS(NOTA) END DO MINIMO = MINVAL(NOTAS) MAXIMO = MAXVAL(NOTAS) SOMA = SUM(NOTAS)

MEDIA = SOMA / QUANTIDADE_NOTAS WRITE(*,*) "Nota minima = ", MINIMO WRITE(*,*) "Nota maxima = ", MAXIMO WRITE(*,*) "Nota media END = ", MEDIA

b) O comando B = MINVAL(A) determina o valor mnimo entre todos os elementos da varivel do tipo conjunto A e atribui o resultado varivel simples B. c) O comando B = MAXVAL(A) determina o valor mximo entre todos os elementos da varivel do tipo conjunto A e atribui o resultado varivel simples B. d) O comando B = SUM(A) calcula a soma dos valores de todos os elementos da varivel do tipo conjunto A e atribui o resultado varivel simples B. 8) Executar Build, Compile para compilar o programa. 9) Gerar o programa-executvel fazendo Build, Build.
Captulo 9. Conjuntos 108

10) Ao se executar o programa, atravs de Build, Execute, ocorre o mesmo j explicado no item 10 da seo 9.1 deste captulo, e o resultado obtido o mesmo j mostrado na Figura 9.1. 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

c) Na linha CONJUNTO_C = EXP(CONJUNTO_A) do programa, calcula-se a exponencial do valor de cada elemento da varivel CONJUNTO_A e atribui-se o resultado a cada elemento da varivel CONJUNTO_C. Assim, num nico comando esto sendo feitos clculos com todos os elementos de um conjunto envolvendo uma funo matemtica intrnseca do FORTRAN, no caso a funo
Captulo 9. Conjuntos 109

exponencial (EXP). Mas tambm podem ser usadas outras funes como aquelas apresentadas nas Tabelas 5.5 e 5.6. Esta linha do programa tambm poderia ser substituda de forma equivalente ao seguinte:
DO ELEMENTO = 1, QUANTIDADE_ELEMENTOS CONJUNTO_C(ELEMENTO) = EXP(CONJUNTO_A(ELEMENTO)) END DO

Tabela 9.4 Programa9c.f90.


INTEGER ELEMENTO, QUANTIDADE_ELEMENTOS REAL, ALLOCATABLE, DIMENSION(:) :: CONJUNTO_A, CONJUNTO_B, CONJUNTO_C WRITE(*,*) "Entre com a quantidade de elementos do CONJUNTO_A" READ(*,*) QUANTIDADE_ELEMENTOS ALLOCATE ( CONJUNTO_A(QUANTIDADE_ELEMENTOS), & CONJUNTO_B(QUANTIDADE_ELEMENTOS), & CONJUNTO_C(QUANTIDADE_ELEMENTOS) ) WRITE(*,*) "Entre com os valores do CONJUNTO_A" DO ELEMENTO = 1, QUANTIDADE_ELEMENTOS READ(*,*) CONJUNTO_A(ELEMENTO) END DO CONJUNTO_B = CONJUNTO_A + 10 CONJUNTO_C = EXP(CONJUNTO_A) WRITE(*,*) "CONJUNTO_B = ", CONJUNTO_B 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
Captulo 9. Conjuntos 110

elemento, no formato default do FORTRAN. A segunda forma escrever o valor de cada elemento atravs de um ciclo, com ou sem formato de edio. Um exemplo disso apresentado no ltimo ciclo do programa9c.f90. 6) Algoritmo do programa: a) Definir os tipos de todas as variveis b) Ler a quantidade de elementos das variveis do tipo conjunto c) Alocar a memria para as trs variveis do tipo conjunto chamadas CONJUNTO_A, CONJUNTO_B e CONJUNTO_C d) Ler os valores de todos os elementos da varivel CONJUNTO_A e) Somar o valor 10 ao valor de cada elemento da varivel CONJUNTO_A e atribuir o resultado a cada elemento da varivel CONJUNTO_B f) calcular a exponencial do valor de cada elemento da varivel CONJUNTO_A e atribuir o resultado a cada elemento da varivel CONJUNTO_C g) Escrever os valores de todos os elementos das variveis CONJUNTO_B e CONJUNTO_C 7) Executar Build, Compile para compilar o programa. 8) Gerar o programa-executvel fazendo Build, Build. 9) Ao se executar o programa, atravs de Build, Execute, surge uma janela, mostrada na Figura 9.2, dentro da qual tem-se: a) Na primeira linha, o comentrio Entre com a quantidade de elementos do CONJUNTO_A, resultado do comando
WRITE(*,*) "Entre com a quantidade de elementos do 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(*,*) CONJUNTO_A(ELEMENTO) do programa, que est dentro de um ciclo que comea no primeiro

elemento e vai at o ltimo do conjunto. 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 um novo valor. Usar, por exemplo, os valores 1, 2, 3, 4, 5 e 6. e) Em seguida so apresentados os resultados correspondentes execuo do programa.
Captulo 9. Conjuntos 111

Figura 9.2 Resultado do programa9c.f90. 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 112

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 Tabela 9.5 Programa9d.f90.
INTEGER TERMO, N, SN, D INTEGER, ALLOCATABLE, DIMENSION(:) :: A WRITE(*,*) "Todas as variaveis sao do tipo inteiro" WRITE(*,*) "Entre com o numero de termos da P.A." READ(*,*) N ALLOCATE ( A(N) ) WRITE(*,*) "Entre com o primeiro termo da P.A." READ(*,*) A(1) WRITE(*,*) "Entre com a diferenca entre dois termos subsequentes" READ(*,*) D 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 WRITE(*,*) "Soma dos termos = ", SN END

6) Executar Build, Compile para compilar o programa. 7) Gerar o programa-executvel fazendo Build, Build.

Captulo 9. Conjuntos

113

8) Ao se executar o programa, atravs de Build, Execute, surge uma janela, mostrada na Figura 9.3, dentro da qual so solicitados os dados (usar, por exemplo, 10, 1 e 2) e, em seguida, apresentados os resultados da execuo do programa. 9) At entender, analisar os resultados do programa9d.f90, mostrados na Figura 9.3, considerando cada linha do programa-fonte. 10) Executar novamente o programa com outros dados. At entender, analisar os novos resultados considerando cada linha do programa-fonte. 11) Encerrar a sesso seguindo o procedimento-padro.

Figura 9.3 Resultado do programa9d.f90. 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 114

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

Ni )2

onde N o nmero de notas, Nm a mdia das notas, e Ni cada nota.


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

Captulo 9. Conjuntos

115

Captulo 10. MATRIZES

OBJETIVOS DO CAPTULO Conceitos de: conjunto multidimensional (matriz), ciclo implcito, ciclo duplo Comandos do FORTRAN: DIMENSION(:,:), MATMUL

10.1 programa10a.f90 Para inicializar as atividades deste captulo, deve-se executar: 1) Para acessar o programa Fortran, no Windows: Start, Programs, Fortran PowerStation 4.0, Microsoft Developer Studio 2) No Fortran, seguindo o procedimento-padro, criar um projeto com o nome programa10 3) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte programa10a.f90 4) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho mostrado na Tabela 10.1. 5) Objetivos do programa: a) Aplicar os comandos DIMENSION, ALLOCATABLE e ALLOCATE a um conjunto bidimensional (matriz) do tipo inteiro b) Ler os elementos da matriz e escrev-los utilizando ciclos duplos 6) Comentrios sobre o programa: a) Neste programa os comandos DIMENSION, ALLOCATABLE e ALLOCATE so aplicados a uma varivel do tipo conjunto bidimensional, que tambm chamada de matriz. A sintaxe deles, isto , a forma de utiliz-los mostrada na Tabela 10.2. b) Em FORTRAN, conjunto bidimensional um conjunto no qual so necessrios dois ndices para localizar cada elemento em sua estrutura. Portanto, os conjuntos empregados no captulo 9 podem ser classificados como conjuntos unidimensionais pois basta um nico ndice para localizar cada elemento dentro deles. c) Generalizando, existem os conjuntos multidimensionais, isto , aqueles nos quais so necessrios diversos ndices (2, 3, etc) para localizar cada elemento dentro deles. Em FORTRAN, os conjuntos podem ter at sete dimenses ou ndices. Um exemplo de conjunto tridimensional aquele onde se armazenam as coordenadas X, Y e Z de um slido tridimensional.

Captulo 10. Matrizes

116

d) Todos os conceitos vistos no captulo 9 para conjuntos unidimensionais tambm so vlidos para conjuntos multidimensionais. e) O comando DIMENSION(:,:) usado para definir uma varivel do tipo conjunto bidimensional. Tabela 10.1 Programa10a.f90.
INTEGER LINHA, LINHAS, COLUNA, COLUNAS INTEGER, ALLOCATABLE, DIMENSION(:,:) :: MATRIZ WRITE(*,*) "Entre com o numero de linhas da matriz" READ(*,*) LINHAS WRITE(*,*) "Entre com o numero de colunas da matriz" READ(*,*) COLUNAS ALLOCATE ( MATRIZ ( LINHAS, COLUNAS ) ) 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 WRITE(*,*) "Escrita da MATRIZ sem formato" WRITE(*,*) MATRIZ WRITE(*,*) "Escrita da MATRIZ na mesma sequencia dos dados" DO LINHA = 1, LINHAS DO COLUNA = 1, COLUNAS WRITE(*,1) LINHA, COLUNA, MATRIZ(LINHA,COLUNA) 1 FORMAT( 3X, "MATRIZ(", I1, ",", I1, ") = ", I5) END DO END DO END

f) Uma das principais aplicaes de conjuntos uni e bidimensionais a resoluo de sistemas de equaes algbricas representados por

[A][X ]

[B]

(10.1)

Captulo 10. Matrizes

117

onde [A] a matriz (conjunto bidimensional) dos coeficientes do sistema de equaes; [X] o vetor (conjunto unidimensional) incgnita, isto , representa as variveis a determinar com a resoluo do sistema; e [B] o vetor (conjunto unidimensional) independente, ou seja, ele contm valores conhecidos. g) Na linha INTEGER, ALLOCATABLE, DIMENSION(:,:) :: MATRIZ do programa, define-se a varivel chamada MATRIZ com as seguintes caractersticas: do tipo conjunto bidimensional (matriz), devido ao comando DIMENSION(:,:); do tipo alocvel, devido ao comando ALLOCATABLE; e do tipo inteiro, ou seja, cada elemento da varivel MATRIZ poder conter nmeros inteiros, devido ao comando INTEGER. h) Na linha ALLOCATE ( MATRIZ ( LINHAS, COLUNAS ) ) do programa, utilizando-se o comando ALLOCATE e as variveis LINHAS e COLUNAS, que so dados do programa, define-se, respectivamente, quantos elementos existem em cada linha e em cada coluna da varivel MATRIZ e reserva-se o espao de memria correspondente. Tabela 10.2 Sintaxe de comandos para variveis do tipo matriz (conjunto bidimensional).
PARA DEFINIR O TIPO DE VARIAVL: REAL, ALLOCATABLE, DIMENSION(:,:) :: A, B INTEGER, ALLOCATABLE, DIMENSION(:,:) :: A, B CHARACTER(X), ALLOCATABLE, DIMENSION(:,:) :: A, B PARA ALOCAR A MEMRIA DOS CONJUNTOS: ALLOCATE ( A(L,C), B(L,C) ) onde X um valor inteiro que define o nmero de caracteres, L e C so variveis do tipo inteiro que definem, respectivamente, a quantidade de elementos numa linha e numa coluna das matrizes A e B.

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.

Captulo 10. Matrizes

118

j) Ciclo duplo quando tem-se um ciclo dentro de outro. So usados dois ciclos duplos no programa10a.f90. Um deles
DO LINHA = 1, LINHAS DO COLUNA = 1, COLUNAS WRITE(*,1) LINHA, COLUNA, MATRIZ(LINHA,COLUNA) 1 FORMAT( 3X, "MATRIZ(", I1, ",", I1, ") = ", I5) END DO END DO

Recomenda-se identar, isto , deslocar para a direita todas as linhas do programa que esto entre os comandos DO e END DO. Assim, facilmente se percebe os comandos que compem o ciclo. No caso de ciclos duplos, deve-se usar uma identao para cada ciclo, conforme o exemplo mostrado neste item, acima. k) So usadas duas formas para escrever os valores dos elementos de uma varivel do tipo conjunto bidimensional. A primeira agir da mesma forma que no caso de uma varivel simples, por exemplo, a linha WRITE(*,*) MATRIZ do programa. Nesta forma a matriz escrita no formato default do FORTRAN que : primeiro, escrever os valores de todos os elementos da primeira coluna, indo da primeira ltima linha; repetir o procedimento para a segunda coluna, e assim por diante at a ltima coluna. A segunda forma escrever o valor de cada elemento atravs de um ciclo duplo, com ou sem formato de edio. Um exemplo disso apresentado no final do programa10a.f90 7) Algoritmo do programa: a) Definir os tipos de todas as variveis b) Ler a quantidade de elementos em cada linha e coluna da varivel MATRIZ, que do tipo conjunto bidimensional c) Alocar a memria para a varivel MATRIZ d) Ler os valores de todos os elementos da varivel MATRIZ e) Escrever o contedo da varivel MATRIZ sem utilizar formato de edio f) Escrever os dois ndices e o valor correspondente a cada elemento da varivel MATRIZ utilizando formatos de edio 8) Executar Build, Compile para compilar o programa. 9) Gerar o programa-executvel fazendo Build, Build. 10) Ao se executar o programa, atravs de Build, Execute, surge uma janela, mostrada na Figura 10.1, dentro da qual tem-se: a) Na primeira linha, o comentrio Entre com o numero de linhas da matriz, resultado do comando
WRITE(*,*) "Entre com o numero de linhas da matriz" do programa.

Captulo 10. Matrizes

119

b) Na segunda 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. c) Na terceira linha, o comentrio Entre com o numero de colunas da matriz, resultado do comando
WRITE(*,*) "Entre com o numero de colunas da matriz" do programa.

d) Na quarta linha, o programa pra e fica aguardando que seja fornecido o valor da varivel COLUNAS, resultado do comando READ(*,*) COLUNAS do programa. Para que o programa continue sua execuo necessrio digitar 2, por exemplo, e, em seguida, clicar na tecla Enter. e) Na quinta linha, o comentrio Entre com os valores dos elementos da matriz da linha = 1, resultado do comando WRITE(*,*) "Entre com os valores dos elementos da matriz da
linha =", LINHA do programa.

Figura 10.1 Resultado do programa10a.f90. 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

Captulo 10. Matrizes

120

um novo valor. Usar, por exemplo, os valores 1, 4, 2, 5, 3 e 6. Estes dados, nesta seqncia, correspondem seguinte matriz:
1 4 2 5 3 6

(10.2)

g) Em seguida so apresentados os resultados correspondentes execuo do programa. 11) At entender, analisar os resultados do programa10a.f90, mostrados na Figura 10.1, considerando cada linha do programa-fonte e as explicaes descritas no item 6 acima. 12) Executar novamente o programa com outros dados. At entender, analisar os novos resultados do programa10a.f90 considerando cada linha do programa-fonte e as explicaes descritas no item 6 acima. 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:

Captulo 10. Matrizes

121

a) Com os ciclos usados no programa da seo anterior, programa10a.f90, consegue-se ler apenas um elemento da matriz por vez, isto , a cada comando Enter. J neste programa10b.f90, com o bloco de linhas do programa
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

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. Tabela 10.3 Programa10b.f90.
USE PORTLIB INTEGER LINHA, LINHAS, COLUNA, COLUNAS, CONSTANTE, VER REAL,ALLOCATABLE,DIMENSION(:,:) :: MATRIZ_A, MATRIZ_B, MATRIZ_C WRITE(*,*) "Entre com o valor da CONSTANTE (inteiro)" READ(*,*) CONSTANTE WRITE(*,*) "Entre com o numero de linhas das matrizes (inteiro)" READ(*,*) LINHAS WRITE(*,*) "Entre com o numero de colunas das matrizes (inteiro)" READ(*,*) COLUNAS ALLOCATE ( MATRIZ_A(LINHAS,COLUNAS), MATRIZ_B(LINHAS,COLUNAS), & MATRIZ_C(LINHAS,COLUNAS) ) 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)

Captulo 10. Matrizes

122

END DO END DO 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) VER = SYSTEM("Notepad SAIDA10B.TXT") END

c) Com o bloco de linhas do programa


DO LINHA = 1, LINHAS DO COLUNA = 1, COLUNAS

Captulo 10. Matrizes

123

MATRIZ_B(LINHA,COLUNA) = CONSTANTE * MATRIZ_A(LINHA,COLUNA) END DO END DO

o valor de cada elemento da MATRIZ_A multiplicado pela varivel CONSTANTE e o resultado atribudo a cada elemento da MATRIZ_B. d) Com o bloco de linhas do programa
DO LINHA = 1, LINHAS DO COLUNA = 1, COLUNAS MATRIZ_C(LINHA,COLUNA) = MATRIZ_A(LINHA,COLUNA) + MATRIZ_B(LINHA,COLUNA) END DO END DO

o valor de cada elemento da MATRIZ_A adicionado ao valor de cada elemento da MATRIZ_B e o resultado atribudo a cada elemento da MATRIZ_C. e) Com o bloco de linhas do programa
DO LINHA = 1, LINHAS WRITE(10,33) ( MATRIZ_A(LINHA,COLUNA), COLUNA = 1, COLUNAS ) 33 FORMAT( 10 (3X, 1PE10.3 ) ) END DO

escreve-se o contedo da varivel MATRIZ_A em formato de matriz atravs de um ciclo simples (externo) e um ciclo implcito (interno). O formato de edio empregado 10 (3X, 1PE10.3 ) permite que sejam escritos at 10 elementos a cada linha com trs colunas entre cada um (3X), utilizando o formato 1PE10.3 para nmeros reais. f) Com conjuntos multidimensionais, tambm se pode fazer simultaneamente operaes com todos os elementos, conforme j visto no programa9c.f90 do captulo 9 para conjuntos unidimensionais. Por exemplo, as cinco linhas de programa mostradas no item c acima podem ser substitudas de forma equivalente a apenas
MATRIZ_B = CONSTANTE * MATRIZ_A

E as cinco linhas de programa mostradas no item d acima podem ser substitudas de forma equivalente a apenas
MATRIZ_C = MATRIZ_A + MATRIZ_B

g) Com conjuntos multidimensionais, tambm se pode utilizar as funes intrnsecas das Tabelas 5.5 e 5.6, conforme j visto no programa9c.f90 do captulo 9 para conjuntos unidimensionais. 8) Algoritmo do programa: a) Definir os tipos de todas as variveis b) Ler o valor do tipo inteiro de uma constante e a quantidade de elementos em cada linha e coluna das variveis MATRIZ_A, MATRIZ_B e MATRIZ_C, que so do tipo conjunto bidimensional c) Alocar memria para as trs variveis do tipo matriz d) Ler os valores de todos os elementos da varivel MATRIZ_A no formato de matriz
Captulo 10. Matrizes 124

e) calcular o valor de cada elemento da MATRIZ_B atravs da multiplicao do valor de cada elemento da MATRIZ_A pela varivel CONSTANTE f) calcular o valor de cada elemento da MATRIZ_C atravs da adio do valor de cada elemento da MATRIZ_A pelo valor de cada elemento da MATRIZ_B g) Escrever num arquivo o valor da CONSTANTE e o contedo das variveis MATRIZ_A, MATRIZ_B e MATRIZ_C em formato de matriz com os dois ndices de cada elemento 9) Executar Build, Compile para compilar o programa. 10) Gerar o programa-executvel fazendo Build, Build. 11) Ao se executar o programa, atravs de Build, Execute, surge uma janela, mostrada na Figura 10.2, dentro da qual tem-se: a) Na primeira linha, o comentrio Entre com o valor da CONSTANTE (inteiro), resultado do comando WRITE(*,*) "Entre com o valor da CONSTANTE (inteiro)" do programa. b) Na segunda linha, o programa pra e fica aguardando que seja fornecido o valor da varivel CONSTANTE, resultado do comando READ(*,*) CONSTANTE do programa. Para que o programa continue sua execuo necessrio digitar 5, por exemplo, e, em seguida, clicar na tecla Enter.

Figura 10.2 Janela DOS do programa10b.f90. 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.
Captulo 10. Matrizes 125

f) Na sexta linha, o programa pra e fica aguardando que seja fornecido o valor da varivel COLUNAS, resultado do comando READ(*,*) COLUNAS do programa. Para que o programa continue sua execuo necessrio digitar 2, por exemplo, e, em seguida, clicar na tecla Enter. g) Na stima linha, o comentrio Entre com os valores dos elementos da MATRIZ_A da linha = 1, resultado do comando WRITE(*,*) "Entre com os valores dos elementos da MATRIZ_A
da linha =", LINHA do programa.

h) Na oitava linha, o programa pra e fica aguardando que sejam fornecidos os valores de todos os elementos da primeira linha da matriz; digitar 1 4, por exemplo, e, em seguida, clicar na tecla Enter. Para a segunda linha da matriz, digitar 2 5, por exemplo, e, em seguida, clicar na tecla Enter. Para a terceira linha da matriz, digitar 3 6, por exemplo, e, em seguida, clicar na tecla Enter. Estes dados, nesta seqncia, correspondem seguinte matriz:
1 4 2 5 3 6

(10.3)

i) Em seguida, o aplicativo Notepad apresenta os resultados correspondentes execuo do programa no arquivo SAIDA10B.TXT, mostrado na Figura 10.3.

Figura 10.3 Arquivo SAIDA10B.TXT do programa10b.f90. 12) At entender, analisar os resultados do programa10b.f90, mostrados na Figura 10.3, considerando cada linha do programa-fonte e as explicaes descritas no item 7 acima.

Captulo 10. Matrizes

126

13) Executar novamente o programa com outros dados. At entender, analisar os novos resultados do programa10b.f90 considerando cada linha do programa-fonte e as explicaes descritas no item 7 acima. 14) Encerrar a sesso seguindo o procedimento-padro. 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

127

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

Captulo 10. Matrizes

128

Captulo 11. GRFICOS COM WGNUPLOT

OBJETIVOS DO CAPTULO Aprender a utilizar o aplicativo Wgnuplot para fazer grficos Aprender a utilizar o aplicativo Wgnuplot interativamente com um programa em FORTRAN

11.1 INSERO DO APLICATIVO WGNUPLOT NUM PROJETO Para inicializar as atividades deste captulo, deve-se executar: 1) Para acessar o programa Fortran, no Windows: Start, Programs, Fortran PowerStation 4.0, Microsoft Developer Studio 2) No Fortran, seguindo o procedimento-padro, criar um projeto com o nome programa11 3) Acessar o site da disciplina em ftp://ftp.demec.ufpr.br/Disciplinas/Tm102/Marchi/ 4) Clicar com o boto do lado direito do mouse sobre o arquivo WGNUPLOT.EXE 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 3 a 7 acima para os arquivos WGNUPLOT.HLP e WGNUPLOT.MNU 11.2 UTILIZAO BSICA DO WGNUPLOT 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

129

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.1 Janela inicial do aplicativo Wgnuplot, verso 3.5.

Figura 11.2 Insero do comando plot sin(x) na linha de comando do aplicativo Wgnuplot.

Captulo 11. Grficos com Wgnuplot

130

7) O comando set xrange[x1:x2] usado para definir o intervalo dos valores das abscissas, isto , x, mostrado no grfico, onde x1 e x2 so os valores mnimo e mximo, respectivamente. Por exemplo, para definir o intervalo dos valores de x entre os nmeros 0 e 5, na linha de comando do Wgnuplot, deve-se digitar set xrange[0:5]. Em seguida, clicar na tecla Enter. Sempre que um novo comando inserido para alterar o grfico, como o set xrange, para visualizar o novo grfico necessrio digitar replot na linha de comando e clicar na tecla Enter. Em seguida, surge o novo grfico. Portanto, para visualizar o resultado do comando set xrange[0:5], deve-se digitar replot e, em seguida, clicar na tecla Enter.

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.

Captulo 11. Grficos com Wgnuplot

131

9) O comando set grid usado para facilitar a leitura dos valores de uma funo atravs de uma malha ou grade no grfico. Na linha de comando do Wgnuplot, digitar set grid e clicar na tecla Enter. Para visualizar o resultado, digitar replot e, em seguida, clicar na tecla Enter. 10) O comando set xlabel nomex usado para inserir uma legenda no eixo das abscissas, onde nomex o nome da legenda a ser inserida, que deve ficar entre aspas. Aps clicar na tecla de aspas, deve-se clicar na tecla de espao em branco para que as aspas apaream. Por exemplo, na linha de comando do Wgnuplot, digitar set xlabel x e clicar na tecla Enter. Para visualizar o resultado, digitar replot e, em seguida, clicar na tecla Enter. 11) O comando set ylabel nomey usado para inserir uma legenda no eixo das ordenadas, onde nomey o nome da legenda a ser inserida, que deve ficar entre aspas. Por exemplo, na linha de comando do Wgnuplot, digitar set ylabel seno e clicar na tecla Enter. Para visualizar o resultado, digitar replot e, em seguida, clicar na tecla Enter. 12) O comando set title nome usado para inserir um ttulo para o grfico, onde nome o nome do ttulo a ser inserido, que deve ficar entre aspas. Por exemplo, na linha de comando do Wgnuplot, digitar set title Teste do aplicativo Wgnuplot e clicar na tecla Enter. Para visualizar o resultado, digitar replot e, em seguida, clicar na tecla Enter. 13) O comando replot tambm usado para adicionar funes ou curvas a um grfico j existente. Por exemplo, na linha de comando do Wgnuplot, digitar replot cos(x) e clicar na tecla Enter. A relao de comandos dos itens 6 a 13 desta seo inseridos no Wgnuplot pode ser vista na Figura 11.4. O grfico correspondente mostrado na Figura 11.5. 14) Entrar com o comando set xrange[0:1] e testar as seguintes funes: a) plot x b) plot x**2 15) O comando splot usado para fazer grficos tridimensionais. Testar os seguintes exemplos: a) splot x+y b) splot x*y c) splot x**2 16) Para encerrar o Wgnuplot, deve-se executar File, Exit 11.3 UTILIZAO DO WGNUPLOT PARA FAZER GRFICO DE UM ARQUIVO DE DADOS 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

Captulo 11. Grficos com Wgnuplot

132

Figura 11.4 Comandos usados nos itens 6 a 13 da seo 11.2. b) Dentro do espao de edio do Notepad, digitar os seguintes nmeros em duas colunas separadas por pelo menos um espao em branco: 0 1 2 3 4 5 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 0 1 4 9 7 0

Captulo 11. Grficos com Wgnuplot

133

4) Na linha de comando do Wgnuplot, digitar os seguintes comandos j vistos na seo anterior, clicando na tecla Enter aps cada um deles: set xlabel x set ylabel y set title Teste do Wgnuplot set grid

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

Captulo 11. Grficos com Wgnuplot

134

Figura 11.6 Grfico resultante dos comandos usados nos itens 1 a 6 da seo 11.3. 11.4 UTILIZAO DO WGNUPLOT COM ARQUIVO DE COMANDOS 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

135

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 136

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. Tabela 11.1 Programa11.f90.
USE PORTLIB REAL X, Y INTEGER PONTO, PONTOS, VER WRITE(*,*) "Entre com o numero de pontos" READ(*,*) PONTOS OPEN(7, FILE= "DADOS.TXT") DO PONTO = 1, PONTOS X = PONTO - 1 Y = X**3 WRITE(7,40) X, Y 40 FORMAT( 2 ( 1PE10.2 ) ) END DO CLOSE(7) VER = SYSTEM ("Notepad DADOS.TXT") VER = SYSTEM ("Wgnuplot COMANDOS.TXT") END

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, mostrada na Figura 11.7, dentro da qual tem-se: a) Na primeira linha, o comentrio Entre com o numero de pontos, resultado do comando
WRITE(*,*) "Entre com o numero de pontos" do programa.

Captulo 11. Grficos com Wgnuplot

137

b) Na segunda linha, o programa pra e fica aguardando que seja fornecido o valor da varivel PONTOS, resultado do comando READ(*,*) PONTOS do programa. Para que o programa continue sua execuo necessrio digitar 11, por exemplo, e, em seguida, clicar na tecla Enter.

Figura 11.7 Janela DOS do programa11.f90. c) Em seguida, o aplicativo Notepad apresenta as coordenadas x e y, onde y = x3, gravadas no arquivo chamado DADOS.TXT, cujo contedo mostrado na Figura 11.8.

Figura 11.8 Arquivo DADOS.TXT do programa11.f90. 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.

Captulo 11. Grficos com Wgnuplot

138

11.6 EXERCCIOS 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

Figura 11.9 Grfico gerado com o programa11.f90.

Captulo 11. Grficos com Wgnuplot

139

Captulo 12. SUB-ROTINAS

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 Para inicializar as atividades deste captulo, deve-se executar: 1) Para acessar o programa Fortran, no Windows: Start, Programs, Fortran PowerStation 4.0, Microsoft Developer Studio 2) No Fortran, seguindo o procedimento-padro, criar um projeto com o nome programa12a 3) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte principal1.f90 4) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho mostrado na Tabela 12.1. 5) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte rotina1.f90 6) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho mostrado na Tabela 12.2. 7) Objetivos do programa: a) Aplicar os novos comandos PROGRAM, EXTERNAL, SUBROUTINE e CALL do FORTRAN b) Utilizar uma sub-rotina externa ao programa-principal 8) Comentrios sobre o programa: a) Neste programa so usados quatro novos comandos do FORTRAN: PROGRAM, EXTERNAL, SUBROUTINE e CALL. Eles so aplicados com o que se denomina em programao de subrotina. b) Sub-rotinas so programas inseridos ou usados por um programa-principal. c) O programa-principal o programa-fonte que contm o algoritmo que se deseja executar e que usa as sub-rotinas. d) As sub-rotinas podem estar contidas dentro do programa-principal ou podem estar dentro de outros programas-fonte. O primeiro caso ser exemplificado na seo 12.4 deste captulo. J o segundo caso exemplificado na presente seo e nas duas seguintes. Neste caso, isto , quando

Captulo 12. Sub-rotinas

140

h mais de um programa-fonte que constitui um projeto, usa-se o comando PROGRAM para definir qual programa-fonte o programa-principal. E o comando EXTERNAL usado para informar ao programa-principal quais so os outros programas-fonte que fazem parte do projeto. Outra forma de usar sub-rotinas utilizar o comando USE para incluir uma biblioteca dentro do programa-principal, para que este possa chamar as sub-rotinas desejadas da biblioteca. Tabela 12.1 Programa-fonte principal1.f90.
PROGRAM CAPITULO_12A EXTERNAL ROTINA1 REAL A, B, C WRITE(*,*) "Entre com o valor de A" READ(*,*) A WRITE(*,*) "Entre com o valor de B" READ(*,*) B CALL SOMA ( A, B, C ) WRITE(*,*) "A + B = ", C END PROGRAM CAPITULO_12A

e) Quando h mais de um programa-fonte no projeto, primeiro deve-se compilar os programas-fonte que contm sub-rotinas. O programa-principal deve ser compilado por ltimo. f) Cada sub-rotina pode depender de variveis do programa-principal ou pode ser um programa totalmente independente. Neste caso, com poucas adaptaes, um programa j existente pode ser transformado em uma sub-rotina de um outro programa. g) A principal vantagem de se usar sub-rotinas dividir um programa muito grande ou complexo em unidades menores, ou subprogramas, que so mais fceis de implementar e que facilitam a deteco de erros. h) Cada sub-rotina deve ter um nome especfico, que definido com o comando SUBROUTINE. Este nome usado para chamar ou usar cada sub-rotina no local desejado. As sub-rotinas so ativadas ou chamadas atravs do comando CALL. i) As sub-rotinas podem ser escritas pelo prprio programador ou por outros programadores, na forma de programas-fonte ou bibliotecas.

Captulo 12. Sub-rotinas

141

j) Na linha PROGRAM CAPITULO_12A, do programa-fonte principal1.f90, define-se o incio e o nome do programa-principal como sendo CAPITULO_12A. E na ltima linha, com o comando END
PROGRAM CAPITULO_12A, define-se o fim do programa-principal. O nome do programa no tem

utilidade prtica nenhuma. Deve-se perceber que ele diferente do nome do projeto e do nome do programa-fonte. Tabela 12.2 Programa-fonte rotina1.f90.
SUBROUTINE SOMA ( X, Y, Z ) REAL X, Y, Z Z = X + Y END SUBROUTINE SOMA

k) Na linha EXTERNAL ROTINA1, do programa-fonte principal1.f90, declara-se que o programa-fonte rotina1.f90 faz parte do programa-fonte principal1.f90. Deve-se notar que no comando EXTERNAL declarado o nome do programa-fonte que contm a sub-rotina, e no o nome da sub-rotina. l) Na linha CALL SOMA ( A, B, C ), do programa-fonte principal1.f90, chama-se a sub-rotina de nome SOMA e transfere-se a ela os valores das variveis que esto entre parnteses, isto , as variveis A, B e C, que foram declaradas como variveis reais no programa-principal. m) Na linha SUBROUTINE SOMA ( X, Y, Z ), do programa-fonte rotina1.f90, define-se o incio e o nome da sub-rotina como sendo SOMA e, ainda, quais as variveis que so recebidas e devolvidas ao programa-principal, no caso as variveis X, Y e Z. E na ltima linha, com o comando END
SUBROUTINE SOMA, define-se o fim da sub-rotina SOMA.

n) As variveis de uma sub-rotina que so recebidas e devolvidas ao programa-principal so denominadas de argumentos da sub-rotina. Elas tm que ser do mesmo tipo das variveis usadas no programa-principal que chama a sub-rotina, mas no precisam ter o mesmo nome. No obrigatrio que as sub-rotinas tenham argumentos. 9) Algoritmo do programa: a) No programa-principal, declarar que o programa-fonte rotina1.f90 faz parte do programa-principal b) No programa-principal, definir as variveis A, B e C como sendo do tipo real c) No programa-principal, ler o valor das variveis A e B d) No programa-principal, chamar a sub-rotina SOMA, transferindo a ela os valores atuais das variveis A, B e C

Captulo 12. Sub-rotinas

142

e) Na sub-rotina SOMA, receber os valores das variveis X, Y e Z, transferidos do programaprincipal f) Na sub-rotina SOMA, realizar a soma das variveis X e Y e atribuir o resultado varivel Z g) Na sub-rotina SOMA, ao encontrar o fim da sub-rotina, voltar ao programa-principal no ponto onde a sub-rotina foi chamada, transferindo os valores atuais das variveis X, Y e Z, da sub-rotina, para as variveis A, B e C do programa-principal h) No programa-principal, escrever o valor atual da varivel C i) No programa-principal, encerrar a execuo do programa 10) Executar Build, Compile para compilar o programa-fonte rotina1.f90. 11) Executar Build, Compile para compilar o programa-fonte principal1.f90. 12) Gerar o programa-executvel fazendo Build, Build. 13) Ao se executar o programa, atravs de Build, Execute, surge uma janela, mostrada na Figura 12.1, dentro da qual tem-se:

Figura 12.1 Resultado do programa12a. 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 1, por exemplo, e, em seguida, clicar na tecla Enter. c) Na terceira linha, o comentrio Entre com o valor de B, resultado do comando WRITE(*,*)
"Entre com o valor de B" do programa.

d) Na quarta linha, o programa pra e fica aguardando que seja fornecido o valor da varivel B, resultado do comando READ(*,*) B do programa. Para que o programa continue sua execuo necessrio digitar 2, por exemplo, e, em seguida, clicar na tecla Enter. e) Na quinta linha, apresentado o resultado da soma das variveis A e B, calculado dentro da subrotina SOMA.

Captulo 12. Sub-rotinas

143

14) At entender, analisar os resultados do programa12a, mostrados na Figura 12.1, considerando cada linha dos dois programas-fonte envolvidos e as explicaes descritas nos itens 8 e 9 acima. 15) Executar novamente o programa com outros dados. 16) No Fortran, para fechar o projeto atual, executar File, Close Workspace 12.2 programa12b 1) No Fortran, seguindo o procedimento-padro, criar um projeto com o nome programa12b 2) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte principal2.f90 3) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho mostrado na Tabela 12.3. Tabela 12.3 Programa-fonte principal2.f90.
PROGRAM CAPITULO_12B EXTERNAL ROTINAS2 INTEGER INTEIRO REAL A, B, C WRITE(*,*) "Entre com o valor de A" READ(*,*) A WRITE(*,*) "Entre com o valor de B" READ(*,*) B CALL SOMA ( A, B, C ) WRITE(*,*) "A + B = ", C WRITE(*,*) "Entre com um valor inteiro para calcular seu fatorial" READ(*,*) INTEIRO CALL FATORIAL ( INTEIRO ) END PROGRAM CAPITULO_12B

Captulo 12. Sub-rotinas

144

4) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte rotinas2.f90 5) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho mostrado na Tabela 12.4. Tabela 12.4 Programa-fonte rotinas2.f90.
SUBROUTINE SOMA ( X, Y, Z ) REAL X, Y, Z Z = X + Y END SUBROUTINE SOMA

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 WRITE(*,*) "O fatorial de", N, " eh = ", FAT END SUBROUTINE FATORIAL

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.

Captulo 12. Sub-rotinas

145

b) Na linha CALL FATORIAL ( INTEIRO ), do programa-fonte principal2.f90, chama-se a sub-rotina de nome FATORIAL e transfere-se a ela o valor da varivel que est entre parnteses, isto , a varivel INTEIRO, que foi declarada como varivel do tipo inteiro no programa-principal. 8) Algoritmo do programa: a) No programa-principal, declarar que o programa-fonte rotinas2.f90 faz parte do programaprincipal b) No programa-principal, definir as variveis A, B e C como sendo do tipo real e a varivel INTEIRO como do tipo inteiro c) No programa-principal, ler o valor das variveis A e B d) No programa-principal, chamar a sub-rotina SOMA, transferindo a ela os valores atuais das variveis A, B e C e) Na sub-rotina SOMA, receber os valores das variveis X, Y e Z, transferidos do programaprincipal f) Na sub-rotina SOMA, realizar a soma das variveis X e Y e atribuir o resultado varivel Z g) Na sub-rotina SOMA, ao encontrar o fim da sub-rotina, voltar ao programa-principal no ponto onde a sub-rotina foi chamada, transferindo os valores atuais das variveis X, Y e Z, da sub-rotina, para as variveis A, B e C do programa-principal h) No programa-principal, escrever o valor atual da varivel C i) No programa-principal, ler o valor da varivel INTEIRO j) No programa-principal, chamar a sub-rotina FATORIAL, transferindo a ela o valor atual da varivel INTEIRO k) Na sub-rotina FATORIAL, receber o valor da varivel N, transferido do programa-principal l) Na sub-rotina FATORIAL, realizar o clculo do fatorial da varivel N e atribuir o resultado varivel FAT m) Na sub-rotina FATORIAL, escrever o valor da varivel FAT n) Na sub-rotina FATORIAL, ao encontrar o fim da sub-rotina, voltar ao programa-principal no ponto onde a sub-rotina foi chamada, transferindo o valor atual da varivel N, da sub-rotina, para a varivel INTEIRO do programa-principal o) No programa-principal, encerrar a execuo do programa 9) Executar Build, Compile para compilar o programa-fonte rotinas2.f90. 10) Executar Build, Compile para compilar o programa-fonte principal2.f90. 11) Gerar o programa-executvel fazendo Build, Build. 12) Ao se executar o programa, atravs de Build, Execute, obtm-se o resultado mostrado na Figura 12.2. 13) At entender, analisar os resultados do programa12b, mostrados na Figura 12.2, considerando cada linha dos dois programas-fonte envolvidos e as explicaes descritas nos itens 7 e 8 acima.

Captulo 12. Sub-rotinas

146

14) Executar novamente o programa com outros dados. 15) No Fortran, para fechar o projeto atual, executar File, Close Workspace

Figura 12.2 Resultado do programa12b. 12.3 programa12c 1) No Fortran, seguindo o procedimento-padro, criar um projeto com o nome programa12c 2) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte principal3.f90 3) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho mostrado na Tabela 12.5. Tabela 12.5 Programa-fonte principal3.f90.
PROGRAM CAPITULO_12C EXTERNAL ROTINA3 CALL OUTRAS END PROGRAM CAPITULO_12C

4) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte rotinas2.f90 5) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho mostrado na Tabela 12.4. O contedo do arquivo rotinas2.f90 tambm pode ser copiado diretamente do projeto anterior, programa12b. 6) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte rotina3.f90

Captulo 12. Sub-rotinas

147

7) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho mostrado na Tabela 12.6. 8) Objetivos do programa: a) Implementar um programa com trs sub-rotinas divididas em dois programas-fonte b) Fazer uma sub-rotina chamar outras sub-rotinas c) Utilizar uma sub-rotina sem argumentos Tabela 12.6 Programa-fonte rotina3.f90.
SUBROUTINE OUTRAS EXTERNAL ROTINAS2 INTEGER INTEIRO REAL A, B, C WRITE(*,*) "Entre com o valor de A" READ(*,*) A WRITE(*,*) "Entre com o valor de B" READ(*,*) B CALL SOMA ( A, B, C ) WRITE(*,*) "A + B = ", C WRITE(*,*) "Entre com um valor inteiro para calcular seu fatorial" READ(*,*) INTEIRO CALL FATORIAL ( INTEIRO ) END SUBROUTINE OUTRAS

9) Comentrios sobre o programa: a) O programa12c faz exatamente o mesmo que o programa12b, da seo anterior. A diferena que tudo o que antes era feito no programa-principal agora feito pela sub-rotina OUTRAS, que chamada pelo programa-principal cuja nica funo dele essa chamada. b) Uma sub-rotina pode chamar uma ou diversas sub-rotinas. Por exemplo, a sub-rotina OUTRAS chama as sub-rotinas SOMA e FATORIAL. 10) Algoritmo do programa: o mesmo da seo 12.2, item 8.

Captulo 12. Sub-rotinas

148

11) Executar Build, Compile para compilar o programa-fonte rotinas2.f90. 12) Executar Build, Compile para compilar o programa-fonte rotina3.f90. 13) Executar Build, Compile para compilar o programa-fonte principal3.f90. 14) Gerar o programa-executvel fazendo Build, Build. 15) Ao se executar o programa, atravs de Build, Execute, obtm-se o resultado j mostrado na Figura 12.2. 16) At entender, analisar os resultados do programa12c, mostrados na Figura 12.2, considerando cada linha dos trs programas-fonte envolvidos e as explicaes pertinentes. 17) No Fortran, para fechar o projeto atual, executar File, Close Workspace 12.4 programa12d 1) No Fortran, seguindo o procedimento-padro, criar um projeto com o nome programa12d 2) No Fortran, seguindo o procedimento-padro, criar e inserir no projeto o programa-fonte principal4.f90 3) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto em vermelho mostrado na Tabela 12.7. Deve-se perceber que quase todo o contedo do arquivo principal4.f90 j foi digitado no projeto programa12c e, portanto, ele pode ser copiado dos arquivos rotinas2.f90 e rotina3.f90. 4) Objetivos do programa: a) Implementar um programa com sub-rotinas inseridas dentro do programa-principal b) Utilizar sub-rotina de biblioteca 5) Comentrios sobre o programa: a) O programa12d praticamente idntico ao programa12c, da seo anterior. H apenas duas diferenas. A primeira que as trs sub-rotinas (OUTRAS, SOMA e FATORIAL) que antes estavam dentro de dois programas-fonte (rotinas2.f90 e rotina3.f90) agora esto inseridas dentro do prprio programa-principal. b) O comando CONTAINS do FORTRAN usado para separar o fim do programa-principal do incio das sub-rotinas contidas dentro do programa-principal, conforme pode-se ver na Tabela 12.7. c) A segunda diferena que, aps a chamada da sub-rotina OUTRAS, foi inserido uma chamada da sub-rotina TDATE, que uma sub-rotina pertencente biblioteca MSIMSLMS. E, para utilizar esta biblioteca, no incio do programa-principal foi empregado o comando USE junto com o nome da biblioteca.

Captulo 12. Sub-rotinas

149

d) A biblioteca MSIMSLMS contm muitas sub-rotinas com diversas finalidades. A lista completa das sub-rotinas desta biblioteca, informaes detalhadas e exemplos sobre cada uma delas podem ser vistos no manual online do Fortran em: ? InfoView, IMSL Libraries Reference. 6) Algoritmo do programa: o mesmo da seo 12.2, item 8, acrescido ao final da chamada da subrotina TDATE e da escrita da data corrente. Tabela 12.7 Programa-fonte principal4.f90.
PROGRAM CAPITULO_12D USE MSIMSLMS INTEGER DIA, MES, ANO CALL OUTRAS CALL TDATE ( DIA, MES, ANO ) WRITE(*,1) DIA, MES, ANO 1 FORMAT (/, 5X, "Data de hoje eh ", I2, "/", I2, "/", I4)

CONTAINS

! ------------------------------------------------------------------SUBROUTINE OUTRAS INTEGER INTEIRO REAL A, B, C WRITE(*,*) "Entre com o valor de A" READ(*,*) A WRITE(*,*) "Entre com o valor de B" READ(*,*) B CALL SOMA ( A, B, C ) WRITE(*,*) "A + B = ", C

Captulo 12. Sub-rotinas

150

WRITE(*,*) "Entre com um valor inteiro para calcular seu fatorial" READ(*,*) INTEIRO CALL FATORIAL ( INTEIRO ) END SUBROUTINE OUTRAS ! ------------------------------------------------------------------SUBROUTINE SOMA ( X, Y, Z ) REAL X, Y, Z Z = X + Y END SUBROUTINE SOMA ! ------------------------------------------------------------------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 WRITE(*,*) "O fatorial de", N, " eh = ", FAT END SUBROUTINE FATORIAL ! ------------------------------------------------------------------END PROGRAM CAPITULO_12D

7) Executar Build, Compile para compilar o programa-fonte principal4.f90.

Captulo 12. Sub-rotinas

151

8) Gerar o programa-executvel fazendo Build, Build. 9) Ao se executar o programa, atravs de Build, Execute, obtm-se o resultado mostrado na Figura 12.3. 10) At entender, analisar os resultados do programa12d, mostrados na Figura 12.3, considerando cada linha do programa-fonte e as explicaes pertinentes. 11) Encerrar a sesso seguindo o procedimento-padro.

Figura 12.3 Resultado do programa12d. 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.

Captulo 12. Sub-rotinas

152

Anda mungkin juga menyukai