Você está na página 1de 50

Captulo 0: Notas Introdutrias

0.1. Assuntos Gerais


[D] Convenes usadas nestas notas:
[D] Definio.
[C] Comentrio.
[CF] Comando Fortran.
[SO] Comando do Sistema Operacional usado.
[E] Comando de edio do editor de te!to usado.
[E] E!emplo.
["] "ro#lema.
[$] $tividade.
[%] %&ria da rea '(ar)o*.
[D] +tecla, si)nifica uma dada tecla -ue deve ser pressionada.
[C] .comandos -ue voc/ deve di)itar. estaro sempre entre aspas.

[C] $o iniciar as atividades da aula do dia0 si)a os se)uintes passos para a utili1ao da sua conta:
2. Fa1er a cone!o com o computador -ue cont3m a sua conta0 atrav3s do pro)rama SS4 '-ue
est contido no pro)rama "56 -ue normalmente usamos*0 com o computador diamante0
atrav3s de seu nome completo 'diamante7lfct.fc.unesp.#r* ou do seu n8mero
'9::.2;<.2<=.2;=*.
9. $o prompt do $nu0 di)itar o seu username 'ou login, -ue 3 o nome da conta do usurio*
e password 'sen>a*.
?. Editar os seus ar-uivos 'de pro)ramas e dados* com o editor @OE di)itando .(oe
nome.e!t.A+enter,.
;. Compilar o seu pro)rama nome.fB: usando o comando: .)fortran nome.fB: 7o
nomedoe!ecutvel . A +enter,.
<. Se no for poss&vel a compilao0 volte ao passo ?0 para corri)ir erros.
C. E!ecute o seu pro)rama com o comando .nomedoe!ecutvel. A +enter,.
D. Se no for poss&vel a e!ecuo0 volte ao passo ?.
=. $pEs a e!ecuo de todas as suas tarefas0 saia de sua conta usando o comando .logout".
0.2. O editor de textos "JOE"
[C] Em um sistema 5ni!0 tal como no DOS e FindoGs0 e!istem muitos editores de te!to
dispon&veis. Hamos a-ui nos referir a um dos mais simples editores de te!to do 5ni! -ue0 ao mesmo
tempo0 oferece uma -uantidade #oa de recursos 'e se encontra instalado na m-uina $nu*. rata7se
do editor joe. O (oe 3 #aseado nas teclas de controle usados no Fordstar outros editores de te!tos de
pro)ramas da Iorland 'tur#opascal0 tur#oc0 etc.*. Juitos dos comandos so invocados di)itando7se
Ctrl7K se)uido por outra tecla. O editor0 tanto para criar um ar-uivo novo como para editar um (
e!istente0 3 evocado como:
joe nomedoarquivo

[C] "ara o#ter uma (anela com comandos do (oe0 apEs entrar no pro)rama0 di)ite Ctrl7K> e
aparecer uma lista)em de comandos. Di)ite novamente Ctrl7K> para -ue a (anela desaparea. Jais
informaes so#re o (oe 'por e!emplo0 como editar dois pro)ramas em duas (anelas ao mesmo
tempo* podem ser o#tidas pelo comando .man (oe. -uando em uma sesso de tra#al>o na $nu.

[C] $ se)uir temos uma ta#ela com comandos do (oe0 sendo -ue o s&m#olo L indica a tecla Ctrl.

LK> mostra a tela da a(uda
LKd salva e no sai
LK! salva e sai
LK- sai e no salva
Lc sai e per)unta se salva
Comandos para mover7se dentro do ar-uivo
Lv desce uma tela
Lu volta uma tela
L! vai para a prE!ima palavra
L1 volta para a palavra anterior
Lp volta para a lin>a anterior
Ln vai para a lin>a se)uinte
Le vai para o fim da lin>a
La vai para o in&cio da lin>a
LKu vai para o in&cio do ar-uivo
LKv vai para o fim do ar-uivo
LKl vai para uma lin>a de n8mero espec&fico
Comandos para apa)ar te!to
Ld apa)a um caracter
LG apa)a uma palavra
LM apa)a uma lin>a
LN ou LO desfa1 a ultima apa)ada
Comandos para procura e troca
LKf procura e troca
Ll procura a prE!ima ocorr/ncia do mesmo te!to
Comandos para tra#al>ar com #locos
LK# marca o in&cio do #loco
LKK marca o fim do #loco
LKc copiar o #loco marcado para a locali1ao atual
LKm move o #loco marcado para a locali1ao atual
LKM apa)a o #loco marcado
[C] "ara criar te!to0 usa7se o teclado do micro como se fosse uma m-uina de escrever0 sendo -ue a
tecla +enter, fa1 o retorno de carro 'ou se(a: nova lin>a* e a tecla +#acKspace, apa)a os erros -ue
cometemos.

[C] "ara .passear. pelo te!to0 use as teclas: +flec>a para cima,0 +flec>a para #ai!o,0 +flec>a para o
lado direito, e +flec>a para o lado es-uerdo,.

[C] SEJ"PE dei!e uma lin>a em #ranco no final do ar-uivo. Qsto 3 necessrio ao se usar o (oe para
ar-uivos de Fortran 'pro)ramas e dados*.
0.. !iste"a Opera#ional
[D] O .Sistema Operacional. 'SO* 3 um pro)rama -ue )erencia os ar-uivos arma1enados em discos
r&)idos e fle!&veis: arma1enamento0 recuperao e outras operaes.

[C] $l3m de )erenciar os discos0 o SO tam#3m pode alterar al)umas caracter&sticas do computador
em relao R tela de v&deo0 teclado0 impressoras0 etc...

[D] 5m .ar-uivo. 3 um documento -ual-uer 'um pro)rama0 por e!emplo* arma1enado em
dispositivos 'discos* de arma1enamento do computador. $ traduo desta palavra do in)l/s para o
portu)u/s foi infeli10 pois para nEs0 um ar-uivo -uer di1er um mEvel -ue )uarda uma coleo de
pastas. Sa lin)ua)em de informtica0 por3m0 a traduo infeli1 3 arrai)ada e -uer di1er uma coleo
de dados arma1enados (untos 'o con(unto de todas as letras di)itadas em um pro)rama formam um
ar-uivo*.

[C] $ .Estrutura de DiretErios.. Da mesma forma -ue as pastas de um ar-uivo de escritErio cont3m
)rupos de documentos afins0 os diretErios podem conter )rupos de ar-uivos afins0 -ue so
a)rupados em .su#7diretErios.. $ estrutura de diretErios pode ser representada por um es-uema:
.diretErio rai1. diretErios su#7diretErios
T
T
T77777777777777777777777fiscomp2
T
T
T77777777777777777777777cartas
T
T
T77777777777777777777777tarefas
T
T
T7777777777777777777777777777777777f&sica
T
T
T7777777777777777777777777777777777#iolo)ia

[C] 5m comando do SO pode possuir at3 ? partes: o .nome do comando.0 os parUmetros '-ue so
o#ri)atErios para al)uns comandos* e as .opes. '-ue so opcionais para -uase todos os
comandos*. Escreveremos um comando com a se)uinte conveno:
nomedocomando [parUmetro2] [parUmetro9]...[parUmetroS] +7opo2, +7opo9,...+7opoS,

[C] $pEs entrar na conta0 resulta uma su#lin>a piscando na tela0 a -ual c>amamos de .lin>a de
comando.. Esta su#lin>a piscante c>ama7se .cursor.. O cursor mostra onde os comandos podem ser
di)itados. Vuando voc/ di)ita um caracter0 o cursor se move um espao para a direita. Se voc/
cometer um erro0 pressione a tecla +W, ou +#acKspace, para eliminar um caractere R es-uerda.
erminada a di)itao0 #asta pressionar a tecla +enter, ou +return, para -ue o comando se(a
e!ecutado.

[C] "ara interromper a e!ecuo de um comando0 tecle +ctrlAc,.

[C] "ode7se o#ter uma descrio completa de um comando di)itando7se:
man nomedocomando

[SO] .cd.: muda ou e!i#e o diretErio atual. E!emplos:
cd tarefas : muda para o su#7diretErio tarefas
cd .. : muda para o diretErio de cima

[SO] .cp.: fa1 uma cEpia de um ar-uivo. E!emplos:
cp pro)2.f pro)2a.f : fa1 uma cEpia de pro)2.f -ue se c>ama pro)2a.f

[SO] .rm.: elimina ar-uivos especificados. E!emplos:
rm pro)2.f : apa)a o ar-uivo pro)2.f
rm pro)X.f : apa)a todos os ar-uivos -ue comecem por pro) e terminem com .f

[SO] .ls 7la.: e!i#e uma lista de ar-uivos e su#diretErios de um diretErio 'o apelido0 na $S5 3
.dir.*.

[SO] .mv.: modifica o nome de um ar-uivo. E!emplo:
mv pro)2.f pro)9.f : troca o nome de pro)2.f para pro)9.f

[SO] .cat.: e!i#e o conte8do de um ar-uivo de te!to. E!emplo:
cat pro)2.f

Cap&tulo 2: Soes "reliminares
1.1. Introdu$%o
[C] .O -ue todo computador pode realmente fa1er 3 se)uir ordens muito simples0 as -uais foram
cuidadosamente consideradas e refletidas por um pro)ramador e escritas em uma lin)ua)em de
pro)ramao0 como o Fortran..
1.2. Co"putadores
[C] 4 somente ; tipos de instrues -ue um computador pode reali1ar:
2. $rma1enamento e recuperao de informaes da memEriaY
9. ClculosY
?. Entrada e sa&da de dadosY
;. Controle de pro)rama.
[C] Es-uema de um computador:


1.. Al&orit"os
[D] 5m .al)oritmo. 3 um con(unto de instrues passo7a7passo para resolver um pro#lema.

[D] 5m al)oritmo correto deve possuir ? -ualidades:
2. Cada passo no al)oritmo deve ser uma instruo -ue possa ser reali1ada.
9. $ ordem dos passos deve ser precisamente determinada.
?. O al)oritmo deve ter fim.
[$] Ela#orao em )rupos de ? de um al)oritmo para -ue um dos elementos do )rupo desempen>e
a se)uinte tarefa:
Sair de uma posio na sala de aula0 -ue ser determinada pelo professor0 at3 o interruptor
das lu1es e providenciar o desli)amento destas.
$s operaes corporais poss&veis devem ser determinadas antes do comeo do tra#al>o em )rupo0
em con(unto entre os alunos e o professor. $pEs o t3rmino do tra#al>o dos )rupos0 o professor
escol>er aleatoriamente tra#al>os0 os ler em vo1 alta0 determinando se os passos do al)oritmo
esto contidos no con(unto de operaes permitidas. Se isto for verdade0 um dos elementos do
)rupo ler em vo1 alta os passos -ue sero e!ecutados por outro mem#ro do )rupo. Su)estes de
operaes permitidas: camin>ar0 )irar o corpo ')raus e sentido*0 levantamento de #rao ')raus e
sentido*0 movimento de mo0 ce)ueira do e!ecutor0 etc.
1.'. (ia&ra"as de )luxo
[D] .Dia)ramas de Flu!o. fornecem uma representao )rfica de um al)oritmo.

[D] "rincipais s&m#olos de dia)ramas de flu!o:


1.*. +in&ua&ens de ,ro&ra"a$%o
[D] 5m .pro)rama de computador. 3 um al)oritmo escrito numa lin)ua)em de pro)ramao0 como
o Fortran.

[C] E!istem ? n&veis de lin)ua)ens de pro)ramao:
2. Zin)ua)ens de #ai!o n&vel 'ou de m-uina*.
9. Zin)ua)ens de n&vel intermedirio 'ou sim#Elica montadora*.
?. Zin)ua)ens de alto n&vel 'ou de compiladores*.
1.*.1 +in&ua&e" de -./uina
[D] Cada instruo 3 constitu&da de 9 partes:
cEdi)o de operao operando's*
[D] O .cEdi)o de operao. instrui o computador para reali1ar uma funo espec&fica: adio0
su#trao0 leitura0 escrita0 comparao0 movimento de dados0 etc...

[D] O's* operando's* especifica'm* o endereo do dado a ser operado0 endereo do dispositivo de
entrada[sa&da0 etc...

[E] E!emplo do trec>o principal de um pro)rama em lin)ua)em de m-uina para calcular
<$A2CI
P \ 7777777777 7 D
C
onde os valores de $0 I0 C0 D e P esto arma1enados nos endereos 2:::0 2::;0 2:290 2:9: e 9:<:
da memEria.

CEdi)o da Operao Operando Comentrio
2; 2::: carre)a $ no acumulador
29 \< multiplica o acumulador por <
2< ?::: arma1ena conte8do acumulado no endereo ?:::
2; 2::; carre)a I no acumulador
29 \2C multiplica acumulador por 2C
2: ?::: adiciona acumulador com conte8do de ?:::
2? 2:29 divide acumulador pelo conte8do de 2:29
22 2:9: su#trai do acumulador o conte8do de 2:9:
2< 9:<: arma1ena acumulador em 9:<:
[C] Sa realidade0 um pro)rama real em lin)ua)em de m-uina0 para ser compreendido por ela0
)eralmente 3 escrito no sistema #inrio.

1.*.2. +in&ua&e" !i"0li#a -ontadora
[C] $s lin)ua)ens sim#Elicas procuram facilitar a tarefa do pro)ramador0 criando mnem]nicos para
as operaes.

[C] Os pro)ramas montadores tradu1em um pro)rama fonte 'ou se(a0 em lin)ua)em sim#Elica* em
um pro)rama o#(eto 'ou se(a0 em lin)ua)em de m-uina*.
[E] O trec>o de pro)rama visto acima0 ficaria em uma lin)ua)em sim#Elica parecido com:

Operao Operando Comentrio
C$P $ carre)a $
J5Z < multiplica por <
$PJ J" arma1ena o resultado em J"
C$P I carre)a I
J5Z 2C multiplica por 2C
$DQ J" adiciona o resultado com o conte8do de J"
DQH C divide o resultado por C
S5I D su#trai o resultado de D
$PJ P arma1ena o resultado em P
1.*.. +in&ua&ens de Co"piladores
[C] 5ma lin)ua)em de compilador 'ou de alto n&vel* tem por o#(etivo permitir ao pro)ramador se
utili1ar de uma lin)ua)em muito prE!ima R-uela utili1ada no am#iente no -ual se coloca a tarefa a
ser reali1ada.

[C] Os pro)ramas compiladores tradu1em um pro)rama fonte0 escritos em uma lin)ua)em de alto
n&vel0 em um pro)rama o#(eto em lin)ua)em de m-uina.

[E] O trec>o de pro)rama visto acima0 ficaria na lin)ua)em de alto n&vel Fortran id/ntico a:
P \ '<.:X$ A 2C.:XI* [ C 7 D

[C] Etapas do processamento de um pro)rama em lin)ua)em de alto n&vel:


1.1.,assos no (esen2ol2i"ento de ,ro&ra"as


Captulo 2: A +in&ua&e" )ortran: Con#eitos 3.si#os
2.1 Introdu$%o
[C] FOPP$S \ FOPmula P$Sslation 'em portu)u/s: traduo de fErmulas*.

[D] O Fortran 3 uma lin)ua)em simples cu(o voca#ulrio consiste de um con(unto de palavras0
con>ecidas como .palavras7c>ave. 'para se ter uma id3ia0 no FortranDD eram cerca de ;<:Y
atualmente o n8mero 3 #em maior*.

[D] 5m .comando. Fortran 3 uma sentena escrita nesta lin)ua)em. 5m pro)rama consiste numa
se-^/ncia de comandos0 cada um escrito numa lin>a.

2.2. (e4ini$5es da +in&ua&e"
[D] Programa Principal 3 uma unidade -ue pode c>amar outras unidades de pro)rama0 mas -ue
no pode ser c>amado por estas. O pro)rama principal 3 -uem rece#e o controle da e!ecuo no
in&cio da fase de e!ecuo.

[D] Subprograma 3 uma unidade de pro)rama -ue 3 c>amada por outra unidade de pro)rama. "ode
ser de dois tipos: su#rotina ou funo. 5sualmente um su#pro)rama rece#e parUmetros de entrada e
retorna parUmetros de sa&da.

[D] Funo Intrnseca 3 uma funo suprida pelo compilador e -ue reali1a operaes so#re
n8meros ou caracteres.

[D] Programa Eecut!vel 3 um pro)rama ( em lin)ua)em de m-uina -ue pode ser e!ecutado pelo
computador. Consiste de um pro)rama principal e su#pro)ramas.

[D] "omando Eecut!vel 3 a-uele -ue efetua clculos0 testes0 providencia entrada ou sa&da de
dados0 altera o flu!o de e!ecuo ou atri#ui valores a variveis.

[D] "omando #o$Eecut!vel 3 a-uele -ue descreve as caracter&sticas de uma unidade de
pro)rama0 dos dados ou de informaes de edio.

[D] %nidade de Programa 3 uma se-^/ncia de comandos terminando com um comando ESD.

[D] &rquivos de 'ados so unidades de entrada e sa&da de dados0 pass&veis de serem lidos[escritos
por um pro)rama.

2.. Itens sint.ti#os do )ortran
[D] Sintae 3 a parte da )ramtica -ue estuda a disposio das palavras na frase e a das frases no
discurso.

[D] "onstantes so valores ou n8meros -ue ocorrem num pro)rama.

[D] #ome simb(lico 3 uma se-^/ncia de uma ou mais letras ou d&)itos0 o primeiro dos -uais deve
ser uma letra.

[D] )ari!veis so valores ou n8meros ou con(untos de caracteres -ue ocorrem num pro)rama e -ue
podem sofrer variaes durante a e!ecuo do pro)rama. Sa realidade uma varivel 3 o nome de
uma locali1ao da memEria.

[D] #*mero de comando 3 um n8mero de um a cinco d&)itos0 um dos -uais deve ser diferente de
1ero e 3 usado para identificar um comando. Deve estar locali1ado no in&cio da lin>a.

[D] Palavra c+ave 3 uma se-^/ncia de letras -ue identificam e!clusivamente comandos Fortran.

[D] ,perador 3 um ente similar a um operador matemtico.

[C] Halores so o#tidos da memEria -uando eles so usados no lado direito do sinal de i)ual.

[C] O#serve -ue o sinal de .\. no indica uma i)ualdade e sim uma atri#uio.

[C] O Fortran permite -ue voc/ defina diferentes tipos de variveis. 5sa7se variveis inteiras para
arma1enar n8meros inteiros0 variveis reais para n8meros reais0 variveis comple!as para n8meros
comple!os0 variveis caracter para palavras e frases0 etc.

[C] Hoc/ pode definir os tipos de variveis no seu pro)rama atrav3s de .comandos de definio de
tipo..

[CF] E!istem vrios comandos Fortran para a definio de tipo de varivel0 entre os -uais
.C4$P$CEP.0 .QSE%EP. e .PE$Z..

[C] Os clculos podem ser feitos atrav3s de comandos de atri#uio0 escrevendo7se uma
.e!presso. no lado direito do sinal de i)ual.

[C] S&m#olos de operaes matemticas 'tam#3m con>ecidos como .operadores aritm3ticos.*:
adio0 .A.Y su#trao0 .7.Y multiplicao0 .X.Y diviso0 .[.Y potenciao0 .XX..

[C] "ode7se usar par/nteses para a)rupar termos em e!presses Fortran0 como 3 feito em l)e#ra.

2.'. Cara#teres usados no )ortran
[D] O con(unto de caracteres Fortran 3 constitu&do de: letras 'ou caracteres alfa#3ticos*0 d&)itos 'ou
caracteres num3ricos* e s&m#olos especiais como \0 A0 70 [0 X0 etc.

[C] _ preciso tomar cuidado em relao aos s&m#olos especiais0 pois estes podem variar de funo
dependendo do fa#ricante do compilador.

2.*. 6"a 2is%o &eral do )ortran
[E] E!emplo de um pro)rama para calcular a m3dia das notas de uma prova de uma turma e
determinar o n8mero de notas acima e a#ai!o de <0:. Hamos usar a e-uao a#ai!o para calcular a
m3dia da turma:
0
sendo -ue: J \ m3dia da turma0
nota'i* \ nota do aluno i0
S \ n8mero total de alunos.
O cEdi)o do pro)rama poderia ser:
program media
- programa para calcular a media de uma turma
- programador. F"/avarda
implicit none
integer i,nt,ns0,ni0
real mt,nota,soma
soma1232
ns012
ni012
print 4,5'igite o numero total de alunos. 5
read 4, nt
do i16,nt
print 4,5'igite a nota do aluno 5,i
read 4,nota
soma1soma7nota
i89nota:1032; t+en
ns01ns076
else
ni01ni076
endi8
enddo
mt1soma<nt
print 4,5444 =esultados 4445
print 4,5>edia da turma. 5,mt
print 4,5#otas superiores ou iguais a 032 1 5,ns0
print 4,5#otas in8eriores a 032 1 5,ni0
stop
end

[C] He(a fi)ura a se)uir contendo o flu!o)rama para o pro)rama media.fB:.
[C] 5ma .varivel. Fortran 3 um nome para uma locali1ao de memEria. Hariveis no e!emplo
acima: nt0 ns<0 ni<0 mt0 nota0 soma0 i.

[C] O .valor. de uma varivel 3 a informao arma1enada na locali1ao de memEria -ue 3
representada pela varivel.

[D] 5m .comando de atri#uio. 3 o tipo de comando -ue permite arma1enar um valor em uma
varivel. Comandos de atri#uio no e!emplo acima:
soma1232
ns012
ni012
soma1soma7nota
ns01ns076
ni01ni076
mt1soma<nt

[C] Vuando voc/ atri#ui um valor a uma varivel0 o valor anteriormente arma1enado 3 destru&do.

[C] Os comandos num pro)rama Fortran so0 normalmente0 e!ecutados na ordem em -ue so
escritos. Entretanto0 pode7se alterar esta ordem de e!ecuo atrav3s dos .comandos de controle de
flu!o..

[CF] 5m comando de controle -ue representa uma deciso 3 a construo .QF74ES7EZSE.0 -ue 3
sempre terminado por um comando ESDQF.

[C] He(a fi)ura a se)uir para uma tomada de deciso e desvio do flu!o de e!ecuo.
[E] He(a fi)ura a se)uir para o flu!o)rama para o al)oritmo -ue decide aprovar ou reprovar um
aluno0 #aseado na sua m3dia final.
[C] Comandos Fortran para o flu!o)rama anterior:
if'mf,\<.:*t>en
situacao\`aprovado`
else
situacao\`reprovado`
endif

[CF] 5m comando de controle -ue representa um lao 3 o comando .DO.0 -ue 3 sempre terminado
por um comando ESDDO.

[C] Em FortranDD0 um comando DO pode terminar por um comando numerado.

[C] He(a a se)uir um flu!o)rama de um lao de repetio.
[E] He(a a se)uir o flu!o)rama para o al)oritmo para somar todos os n8meros naturais de 2 a 2:.
[C] Comandos Fortran para o flu!o)rama anterior:
soma\:
do i\202:02
soma\somaAi
enddo

[E] He(a a se)uir o flu!o)rama para o al)oritmo para somar todos os n8meros naturais pares de 2 a
2:.
[C] Comandos Fortran para o flu!o)rama anterior:
soma\:
do i\902:09
soma\somaAi
enddo

[CF] "ara di1er ao computador para parar a e!ecuo de seu pro)rama0 voc/ usa o comando
.SO"..

[CF] $ 8ltima lin>a em -ual-uer unidade de pro)rama Fortran 3 sempre o comando .ESD..

2.1. Codi4i#a$%o de pro&ra"as e" )ortran
2.1.1. )or"ato +i2re 7)ortran80 e posteriores9
[D] Cada comando 3 escrito numa lin>a.

[C] Cada lin>a de comando possui at3 2?9 colunas. O editor de te!to 3 capa1 de tra#al>ar com um
n8mero maior de colunas 'cuidadoa*.

[D] Continuao de comandos: muitas ve1es um comando no ca#e nas colunas dispon&veis em
uma lin>a 'ou no se -uer escrever tudo numa lin>a*. 5ma .lin>a de continuao. pode ento ser
definida simplesmente colocando7se um caractere b no final da lin>a e continua7se na de #ai!o.
"ode7se fa1er isto at3 ?B ve1es se)uidas0 de modo -ue um comando pode ter at3 ;: lin>as. Como
su)esto de #oa pro)ramao0 as colunas [20<] podem ficar em #ranco.

[C] "ara a codificao de ar-uivos de dados de entrada e sa&da0 estes se)uem a estrutura -ue
porventura se(a definida no prEprio pro)rama -ue vai ler[escrever neste ar-uivo.

2.1.2. )or"ato )ixo 7)ortran:: e anteriores9
[D] Cada comando 3 escrito numa lin>a e cada lin>a0 por sua ve10 3 dividida em .campos.0 -ue so
con(untos de colunas.

[C] Cada lin>a de comando possui =: colunas. O editor de te!to 3 capa1 de tra#al>ar com um
n8mero maior de colunas 'cuidadoa*.

[D] Cada lin>a 3 dividida em ; campos0 -ue so formados pelos con(untos de colunas [20<]0 [C]0
[D0D9] e [D?0=:].

[D] "ampo de n*meros de comando0 colunas [20<]: um n8mero de comando '-ual-uer n8mero
inteiro e maior -ue 1ero0 consistindo de < d&)itos* pode ser escrito nas colunas de 2 a <. Irancos e
1eros R es-uerda so i)norados.

[D] "ampo de continuao de comandos0 coluna [C]: muitas ve1es um comando no ca#e nas CC
colunas dispon&veis em uma lin>a. 5ma .lin>a de continuao. pode ento ser definida
simplesmente colocando7se um caractere -ual-uer diferente de #ranco e 1ero na coluna C. "ode7se
fa1er isto at3 2B ve1es se)uidas0 de modo -ue um comando pode ter at3 9: lin>as. $s colunas [20<]
devem ficar em #ranco.

[D] "ampo de comandos0 colunas [D0D9]: somente nestas colunas pode7se escrever um comando
Fortran.

[D] "ampo de identi8icao0 colunas [D?0=:]: este campo 3 usado somente para identificao do
pro)rama. Qsto 3 uma >erana muito vel>a0 pouco usado >o(e. %eralmente o compilador -ue ainda
se importa com a identificao do pro)rama0 escreve os primeiros = caracteres do nome do
pro)rama nestas colunas.

[D] /in+as de coment!rio0 coluna [2]: -ual-uer lin>a -ue conten>a uma letra .c. ou um asterisco
.X. na coluna 2 so i)noradas em Fortran. So usadas para inserir comentrios dentro de um
pro)rama Fortran.

[C] "ara a codificao de ar-uivos de dados de entrada e sa&da0 estes se)uem a estrutura -ue
porventura se(a definida no prEprio pro)rama -ue vai ler[escrever neste ar-uivo.

Captulo : Constantes; <ari.2eis e Conjuntos
.1 Introdu$%o
[C] Este cap&tulo trata de definir corretamente os componentes #sicos dos comandos Fortran.
$l)uns ( vimos no cap&tulo anterior0 como .itens de sinta!e..

[D] .Constantes. so valores fi!os0 tais como n8meros. Estes valores no podem ser alterados pelos
comandos do pro)rama. E!emplos: ?.:0 ?0 `palavra`.

[C] .Hariveis. so nomes sim#Elicos -ue representam valores arma1enados na memEria do
computador. Estes valores podem ser alterados pelos comandos do pro)rama.

[D] .Con(untos. so )rupos de variveis0 cu(os valores so arma1enados ad(acentemente e podem
ser referenciados individualmente atrav3s de um nome sim#Elico com um &ndice. So con>ecidos
tam#3m como .variveis inde!adas. 'HQ*.

[D] 5m .operador. 3 um s&m#olo espec&fico para uma determinada operao. E!emplo: A 'soma*.

[D] .E!presses. so com#inaes de constantes0 variveis0 elementos de con(untos e operadores.
E!emplo: ?.:Xvar2Avar9.

[E] So .comando de atri#uio. a#ai!o:
fat \ a'?* X ; X 'I A 9.<*
temos a .e!presso. a'?*X;X'IA9.<*. Sesta e!presso temos duas .constantes. '; e 9.<*0 uma
.varivel. 'I*0 uma varivel inde!ada 'a'?**0 dois .operadores. 'X e A* e par/nteses. Hemos tam#3m
-ue temos uma constante inteira ';* e uma real '9.<*Y as variveis a'?* e I dependem de como
ten>am sido definidas.

[E] So trec>o de pro)rama a#ai!o:
print X0 `di)ite a velocidade inicial:`
read X0 v:M
)\B.=
dt\:.2
do i \20np
t'i*\iXdt
M'i*\v:MXt'i*7:.<X)Xt'i*XX9
enddo
...
do i\20np
print X0t'i*0M'i*
enddo
vemos o uso das .variveis inde!adas. t'i* e M'i*.

.2. Constantes
[D] 5ma .constante. 3 uma -uantidade fi!a e invarivel.

[D] O Fortran distin)ue tr/s classes de constantes: num3ricas0 lE)icas e cadeias de caracteres.

[D] $s constantes num3ricas -ue mais nos interessam so:
7 Qnteiras: para n8meros inteiros decimais 'escritos sem o ponto decimal*.
7 Peais: para n8meros decimais 'ou fracionrios*.
7 Dupla preciso: para n8meros reais com mais d&)itos si)nificativos -ue o normal.
7 Comple!os: para n8meros comple!os.

[D] $s constantes lE)icas podem ser:
7 .true. : representa o valor .verdade..
7 .false. : representa o valor .falso..

[D] $s constantes .cadeias de caracteres. so uma se-^/ncia de caracteres alfanum3ricos e[ou
especiais sempre entre aspas.

[C] O comando "$P$JEEP pode ser usado para associar um nome sim#Elico a uma constante.

.2.1. Constantes Inteiras
[C] O intervalo m!imo de valores poss&veis para constantes inteiras varia de m-uina para
m-uina. O menor intervalo 3 de [7BBBB0ABBBB].

.2.2. Constantes =eais
[D] 5ma constante real 3 uma cadeia de d&)itos escrita com ponto decimal0 com um e!poente ou
com am#os0 e!pressando um n8mero real. E!.: :.29?0 29?.:E7:?0 729?.:E7:? .

[C] O intervalo de valores poss&veis para o e!poente0 #em como a preciso do n8mero '-uantidade
m!ima de d&)itos si)nificativos* varia de m-uina para m-uina. O menor intervalo con>ecido 3
de 2:
79=
a 2:
A9=
. $ preciso do n8mero 3 tipicamente no m&nimo de D d&)itos.

.2.. Constantes Cara#teres
[C] O comprimento m!imo de uma cadeia de caracteres )eralmente no 3 menor -ue 9<<.

.. <ari.2eis
[D] 5ma varivel possui um nome e um tipo0 podendo assumir diversos valores.

[D] Pe)ras para nomes de variveis:
2. Os nomes devem comear com uma letra.
9. Os nomes podem conter letras e d&)itos.
[D] ipos de variveis: inteiras0 reais0 dupla preciso0 comple!as0 lE)icas e caracteres0 -ue possuem
caracter&sticas similares Rs constantes.

..1. <ari.2eis Inteiras
[D] Se no for usado o comando QJ"ZQCQ SOSE0 por conveno0 toda varivel num3rica cu(o
nome inicia por uma das letras i0 (0 K0 l0 m ou n0 3 uma varivel inteira.

[C] $s variveis inteiras podem assumir valores na mesma fai!a das constantes inteiras.

..2 <ari.2eis =eais
[D] Se no for usado o comando QJ"ZQCQ SOSE0 por conveno0 toda varivel num3rica cu(o
nome no inicia por uma das letras i0 (0 K0 l0 m ou n0 3 uma varivel real.

[C] $s variveis reais podem assumir valores na mesma fai!a -ue as constantes reais.

... <ari.2eis Cara#tere
[D] 5ma varivel caractere 3 uma varivel -ue 3 declarada como caractere atrav3s dos comandos de
especificao e!pl&cita ou do comando QJ"ZQCQ. $ -uantidade de caracteres numa varivel
caractere 3 especificada -uando da declarao da varivel caractere.

[E] He(a os se)uintes e!emplos de comandos de especificao de variveis caractere:
2. implicit c>aracterX9= 'M01*
9. c>aracterX?C lin>a
?. c>aracter somaX2<0matri1XC;
emos -ue lin>a0 soma e matri1 so especificadas como variveis caractere contendo ?C0 2< e C;
caracteres0 respectivamente. $l3m disso0 todas as variveis cu(a primeira letra 3 M ou 1 so tam#3m
declaradas como variveis caractere contendo 9= caracteres cada uma.

.'. Conjuntos
[C] Sesta seo nos ocuparemos dos con(untos de variveis0 ou variveis inde!adas 'HQ*0 (
definidos no in&cio deste cap&tulo.

[C] 5ma HQ possui um nome0 um tipo e um con(unto de &ndices 'ou um 8nico &ndice*.

[D] .Hetor. 3 uma HQ -ue possui um 8nico &ndice0 e por isto 3 dito uma HQ unidimensional.

[E] $ varivel t no trec>o de pro)rama a#ai!o 3 um vetor:
dimension t'2:*
t'2*\:.2
t'9*\:.9
t'?*\:.?
...
t'2:*\2.:

[D] .Jatri1. 3 uma HQ -ue possui dois con(untos de &ndices e por isto 3 dita #idimensional.

[E] $ varivel a no trec>o de pro)rama a#ai!o 3 uma matri1:
dimension a'?0?*
do i \ 20?
do ( \ 20?
a'i0(* \ :.:
enddo
enddo
7 Pepresentao Jatricial da varivel a:
7 Forma de arma1enamento na memEria:

...
a
22
a
92
a
?2
a
29
a
99
a
?9
a
2?
a
9?
a
??
...
[D] Di1emos -ue uma HQ 3 uma matri1 n7dimensional -uando esta possui um con(unto de n
&ndices.

[D] So Fortran DD0 uma HQ no podia possuir mais do -ue D &ndices.

.'.1 (e#laradores de Conjuntos
[CF] Comando DQJESSQOS: permite especificar uma determinada varivel como sendo uma
varivel inde!ada.

[E] E!emplos do uso do comando DQJESSQOS:
2* dimension a'=*
onde = 3 n8mero m!imo de diferentes a`s.
9* dimension a'=*0#'<0C*
sendo -ue < e C so os valores m!imos do primeiro e se)undo &ndices '-ue resultam em ?:
diferentes #`s*.
?* inte)er a
real #
dimension a'=*0#'<0C*
sendo -ue o vetor a 3 um vetor de n8meros inteiros e # uma matri1 de n8meros reais.
;* dimension c'::2:*0d'2:;02:?02:<*
sendo -ue: c \ vetor de 22 elementos0 sendo o primeiro c':* e o 8ltimo c'2:*Y
d \ matri1 tridimensional de C: elementos0 sendo -ue o primeiro elemento 3 d'20202* e o
8ltimo 3 d';0?0<*

Captulo ': Express5es

'.1. Introdu$%o
[D] 5ma .e!presso. Fortran 3 definida como uma com#inao de itens sintticos0 isto 3: uma
e!presso pode consistir de uma 8nica constante0 de uma 8nica varivel0 de um 8nico elemento de
con(unto0 ou uma com#inao de constantes0 variveis0 elementos de con(untos0 unidos com um ou
mais operadores e0 possivelmente0 a)rupados com par/nteses.

[D] .Operadores. especificam as computaes a serem reali1adas so#re os valores dos elementos
#sicos.

[D] $s e!presses0 no Fortran0 so classificadas em aritm3ticas0 caracteres0 relacionais e lE)icas.

'.2. Express5es Arit">ti#as
[D] 5ma .e!presso aritm3tica. 3 usada para e!pressar uma computao num3rica. O clculo desta
e!presso produ1 um valor num3rico cu(o tipo 3 inteiro0 real0 dupla preciso ou comple!o.

[D] Os .operadores aritm3ticos. so definidos pela ta#ela a#ai!o:
Operador Definio 5so Si)nificado
7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777
XX potenciao aXX# a elevado R pot/ncia #
X multiplicao aX# a multiplicado por #
[ diviso a[# a dividido por #
A adio aA# a mais #
7 su#trao a7# a menos #
7 menos unrio 7a a com sinal invertido

[C] Em e!presses contendo um 8nico operando0 o tipo do operando define o tipo de e!presso.

[C] Em e!presses com mais de um tipo de operando0 o tipo da e!presso depende dos tipos dos
operandos e dos operadores.

[D] "ara todas as operaes 'com e!ceo da potenciao*:
2. Se os operandos forem do mesmo tipo0 este ser o tipo da e!presso.
9. Se os operandos forem de tipos diferentes0 o tipo da e!presso ser o tipo do operando de
maior preced/ncia0 dada pela ta#ela a#ai!o:
ipo "reced/ncia
7777777777777777777777777777777777777777777
inteiro 2
real 9
dupla preciso ?
comple!o ;

[D] Pe)ras para ordem de computao:
2. "ar/nteses podem ser usados para a)rupar operandos em uma e!presso. Vual-uer e!presso
entre par/nteses 3 calculada antes do clculo da e!presso da -ual ela 3 uma parte. "ar/nteses mais
internos so calculados antes.
9. Com e!ceo do uso dos par/nteses0 as operaes so reali1adas na se)uinte ordem de
preced/ncia:
Operao "reced/ncia
77777777777777777777777777777777777777777777777777777777777777
A e 7 mais #ai!a
X e [ intermediria
XX mais alta
?. "ara operadores de mesma preced/ncia0 o clculo se desenvolve da es-uerda para a direita.
;. "otenciaes consecutivas so reali1adas da direita para a es-uerda.

'.. Express5es =ela#ionais
[D] 5ma .e!presso relacional. 3 usada para comparar os valores de duas e!presses aritm3ticas
'ou os valores de duas e!presses caractere*.

[D] $ comparao entre duas e!presses aritm3ticas 3 feita atrav3s dos .operadores relacionais..

[C] O clculo de uma e!presso relacional produ1 um resultado lE)ico0 com um valor .verdade. ou
.falso.. $ e!presso 3 interpretada como .verdade. se os valores dos operandos satisfa1em a relao
matemtica especificada pelo operador0 e .falso. se eles no satisfa1em a relao.

[D] .Operadores Pelacionais. so a-ueles definidos na ta#ela a#ai!o:
Operador Definio 5so Si)nificado
777777777777777777777777777777777777777777777777777777777777777777777777777777777777777
'somente FortranB: e posteriores*
\\ i)ual a $\\I $ 3 i)ual a I O
[\ diferente de $[\I $ 3 diferente de IO
+ menor -ue $+I $ 3 menor a IO
+\ menor ou i)ual $+\I $ 3 menor ou i)ual a IO
, maior -ue $,I $ 3 maior -ue I O
,\ maior ou i)ual $,\I $ 3 maior ou i)ual a IO
'todos*
.e-. i)ual a 'e-ual* $.e-.I $ 3 i)ual a I O
.ne. diferente de 'not e-ual* $.ne.I $ 3 diferente de IO
.lt. menor -ue 'less t>an* $.lt.I $ 3 menor a IO
.le. menor ou i)ual 'less or e-ual* $.le.I $ 3 menor ou i)ual a IO
.)t. maior -ue ')reater t>an* $.)t.I $ 3 maior -ue I O
.)e. maior ou i)ual ')reater or e-ual* $.)e.I $ 3 maior ou i)ual a IO

'.'. Express5es +&i#as
[D] 5ma e!presso lE)ica 3 usada para reali1ar um clculo lE)ico.

[D] Os .operadores lE)icos. so 'listamos somente os principais*:
Operador Definio 5so Si)nificado
77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777
.not. ne)ao .not.$ se $ 3 verdade0 .not.$ 3 falso
.and. con(uno $.and.I para a e!presso ser verdade0 $ e I precisam ser verdade
.or. dis(uno $.or.I para a e!presso ser verdade0 $ 0ou I0 precisa ser verdade

[E] E!emplos:
2* if'!2.e-.!.and.!9.e-.!2* t>en c
9* fim\.false.
do G>ile'.not.fim* c
#loco de comandos
enddo

[D] Pe)ras para clculos de e!presses lE)icas.
2. "ar/nteses podem ser usados e so calculados antes.
9. Os operadores aritm3ticos so calculados em se)undo lu)ar.
?. Os operadores relacionais so calculados em terceiro lu)ar.
;. $s operaes lE)icas so reali1adas na se)uinte ordem de preced/ncia:
Operador "reced/ncia
777777777777777777777777777777777777777777777777777777777777777777
.not. mais alta
.and. intermediria
.or. mais #ai!a

Captulo *: Co"andos de Atri0ui$%o
*.1. Introdu$%o
[D] O .comando de atri#uio. 3 usado para atri#uir um valor a 'ou definir* uma varivel ou a um
elemento de con(unto.

[C] Os comandos de atri#uio calculam uma e!presso e atri#uem o valor resultante a uma
varivel ou elemento de con(unto.

[D] $ forma de um comando de atri#uio 3:
varivel\e!presso

[D] Os comandos de atri#uio so classificados como:
aritm3ticoY
caractereY
lE)ico.
[E] E!emplos:
aritm3tico: varnum\?.:Xa[#
caractere: varcar\`di)ite o valor de !:`
lE)ico: varlo)\.true. ou varlo)\a+#.and.#\\c
[C] $pEs o clculo da e!presso0 o valor 3 convertido0 se necessrio0 para o tipo de varivel de
acordo com a se)uinte re)ra:
ipo da varivel Halor atri#u&do
7777777777777777777777777777777777777777777777777777777777777777
inteiro a parte inteira da e!presso
real o valor real da e!presso
dupla preciso o valor dupla preciso da e!presso
comple!o o valor comple!o da e!presso

Captulo 1: Co"andos de Espe#i4i#a$%o: (e#lara$%o de ?ipos
de <ari.2eis
1.1. Introdu$%o
[D] Os comandos de declarao de tipo so: QJ"ZQCQ0 QSE%EP0 PE$Z0 DO5IZE
"PECQSQOS0 COJ"ZEd0 ZO%QC$Z e C4$P$CEP.

1.2. Co"ando I-,+ICI?
[CF] $ forma )eral do comando 3:
QJ"ZQCQ tipo 'a[0a]...* [0tipo 'a[0a]*]

[C] O comando QJ"ZQCQ permite -ue se defina o tipo de todas as variveis -ue comeam por uma
determinada letra.

[E] E!emplos:
2* implicit real'i*
7 fa1 com -ue todas as variveis -ue comecem pela letra i se(am reais.
9* implicit real'i0(0K0l*
7 fa1 com -ue as variveis com iniciais de i a l se(am reais.
?* implicit real'i7l*
7 idem.
;* implicit real'i7l*0inte)er'a0#*
7 fa1 a mesma coisa -ue o comando anterior mais a definio -ue as variveis com iniciais a ou #
se(am inteiras.
<* implicit none
7 fa1 com -ue todas as variveis do pro)rama ten>am -ue ter o seu tipo o#ri)atoriamente pr37
definidas.

1.. Co"andos de Espe#i4i#a$%o Expl#ita
1..1. Co"ando Inte&er
[D] O comando QSE%EP 3 usado para declarar variveis inteiras.

[CF] $ forma )eral do comando QSE%EP 3:
QSE%EP nome [0nome]...
ou
QSE%EP nomevi['d[0d]...*]
sendo -ue nomevi 3 o nome de uma varivel inde!ada inteira.

[E] E!emplos:
inte)er soma0cont
inte)er a'::2:0::=*

1..2. Co"ando =EA+
[D] O comando PE$Z 3 usado para declarar variveis reais.

[CF] $ forma )eral do comando PE$Z 3:
PE$Z nome[0nome]...
ou
PE$Z nomevi['d[0d]...*]
sendo -ue nomevi 3 o nome de uma varivel inde!ada real.

[E] E!emplos:
real a0#0c
real d'2:2:02:=*

1... Co"ando (O63+E ,=ECI!ION
[D] O comando DO5IZE "PECQSQOS 3 usado para duplicar o n8mero de al)arismos
si)nificativos de uma varivel ou de um con(unto.

[CF] $ forma )eral do comando DO5IZE "PECQSQOS 3:
DO5IZE "PECQSQOS nome[0nome]...
ou
DO5IZE "PECQSQOS nomevi['d[0d]...*]
sendo -ue nomevi 3 o nome de uma varivel inde!ada de dupla preciso.

1..'. Co"ando CO-,+E@
[D] O comando COJ"ZEd 3 usado para declarar variveis do tipo comple!o.

1..*. Co"ando +OGICA+
[D] O comando ZO%QC$Z 3 usado para declarar variveis do tipo lE)ico.

1..1. Co"ando CAA=AC?E=
[D] O comando C4$P$CEP 3 usado para declarar variveis do tipo caractere.

[CF] $ forma )eral do comando C4$P$CEP 3:
C4$P$CEPXcomp nome[0nome]...
ou
C4$P$CEP nomeXcomp[0nomeXcomp]...
sendo -ue comp 3 o comprimento da's* varivel'eis* caractere.

[E] E!emplos:
c>aracterX29 a0#0c
c>aracter dX<0eX;0fX2:

Captulo :: Co"andos de Espe#i4i#a$%o: (esi&na$%o de Breas
de -e"ria
:.1. Introdu$%o
[C] Seste cap&tulo0 aprenderemos a reservar reas de memEria0 com os se)uintes o#(etivos:
2. Determinar a -uantidade de memEria -ue deve ser reservada para variveis inde!adas.
9. Qndicar reas de memEria -ue podem ser acessadas por diferentes unidades de pro)rama.
:.2. Co"ando (I-EN!ION
[D] O comando DQJESSQOS 3 usado para especificar nomes sim#Elicos como nomes de variveis
inde!adas0 define o n8mero de dimenses '&ndices* de cada con(unto de vies e especifica os limites
de cada dimenso.

[CF] $ forma )eral do comando DQJESSQOS 3:
DQJESSQOS c'd[0d]...*[0c'd[0d]...*]
sendo -ue:
7 .c. 3 um nome de con(untoY
7 .d. 3 um declarador de dimenso '-ue podem ser no m!imo D* e especifica os limites para cada
&ndice do con(unto0 em uma das formas: superior ou in8erior.superior
7 superior: o &ndice varia de 2 at3 superior.
7 in8erior.superior: o &ndice varia de in8erior at3 superior.

[E] E!emplos:
dimension a'::2:*0#'?0?*0c'?0;0<*

:.. Co"ando CO--ON
[D] O comando COJJOS 3 usado para especificar reas de memEria -ue so utili1adas em
comum por vrias unidades de pro)rama0 tal como o pro)rama principal e su#pro)ramas do tipo
F5SCQOS ou S5IPO5QSE.

[C] freas de memEria desi)nadas por uma unidade de pro)rama no so .en!er)adas. pelas outras
unidades. $ssim0 o -ue COJJOS fa1 3 permitir -ue diferentes unidades de pro)rama
.en!er)uem. uma dada rea de memEria.

[CF] $ forma )eral do comando COJJOS 3:
COJJOS[[r[] lista
sendo -ue:
7 .r. 3 um rEtulo do #loco de variveis -ue tero suas reas de memEria especificadas.
7 .lista. 3 uma lista com nomes de variveis -ue tero suas reas de memEria especificadas.

[E] E!emplos:
2* common m0a0!
9* dimension a'2:*0#'<09:*
common[#loco2[a0#

[C] O mesmo comando COJJOS0 escrito do mesmo (eito0 deve aparecer em cada unidade de
pro)rama -ue pretende ter acesso Rs variveis definidas num dado #loco.
:.'. 6nidades de pro&ra"as do tipo -O(6+E
[C] $s unidades de pro)rama do tipo JOD5ZE e!istem a partir do Fortran B: e podem su#stituir
todas as ocorr/ncias do comando COJJOS0 do comando QSCZ5DE 'no apresentado nesta
apostila* e funes de comando 'Cap&tulo 22*.
[C] Suma unidade de pro)rama do tipo JOD5ZE podem se definir tipos e valores de constantes e
variveis. $inda 3 poss&vel incluir su#pro)ramas0 mas este tEpico no ser a#ordado.
:.*. Co"ando 6!E
[CF] O comando 5SE 3 utili1ado para definir uma unidade de pro)rama do tipo JOD5ZE -ue
deve ser inclu&da no pro)rama.
[E] E!emplo de utili1ao das unidades de pro)rama do tipo JOD5ZE e do comando 5SE:
module modulo:2
inte)er:: a\90#\?
end module modulo:2
module modulo:9
inte)er:: a\;0#\<
end module modulo:9
pro)ram e!modls
a O#(etivo: e!emplifica o uso dos su#pro)ramas do tipo JOD5ZE
use modulo:2
implicit none
inte)er c0d
a Sas duas lin>as a se)uir0 sero usados os valores de a e # declarados
a no mEdulo modulo:2:
c\aA#
d\aX#
print X0a0#0c0d
a Sa su#rotina a#ai!o0 ainda sero usados os valores de a e # declarados
a no mEdulo modulo:20 demonstrando a compartil>ao de dados entre o
a pro)rama principal e um su#pro)rama:
call su#rotina:2
a $ su#rotina a#ai!o 3 id/ntica R anterior0 com a 8nica diferena -ue
a utili1a novos valores para a e # declarados no mEdulo modulo:9:
call su#rotina:9
stop
end
su#routine su#rotina:2
use modulo:2
implicit none
inte)er c0d
c\aA#
d\aX#
print X0a0#0c0d
return
end
su#routine su#rotina:9
use modulo:9
implicit none
inte)er c0d
c\aA#
d\aX#
print X0a0#0c0d
return
end
:.1. Co"ando ,A=A-E?E=
[D] O comando "$P$JEEP fornece um meio de se representar uma constante por um s&m#olo0
como na Jatemtica0 em ve1 de represent7la por um valor.

[CF] $ forma )eral do comando "$P$JEEP 3:
"$P$JEEP'ns\e[0ns\e]...*
sendo -ue:
7 .ns. 3 um nome sim#Elico.
7 .e. 3 uma constante ou uma e!presso constante.

[C] "$P$JEEP 3 um comando de especificao e deve ser escrito entre os comandos de
especificao. "or3m cada constante sim#Elica deve ser definida antes de -ual-uer refer/ncia a ela.

[C] Os novos s&m#olos das constantes definidas dentro de um comando "$P$JEEP se)uem as
mesmas re)ras para os nomes de variveis 'em relao ao tipo*.

[C] O valor de uma constante definida em "$P$JEEP (amais 3 ou pode ser alterado durante a
e!ecuo do pro)rama.

[E] E!emplo:
O
real pi
parameter'pi\?.2;2<B9D*
O

:.:. Co"ando ,=OG=A-
[D] O comando "PO%P$J 3 usado para identificar o pro)rama principal.

[C] odo pro)rama possui um 8nico pro)rama principal.

[CF] $ forma )eral de "PO%P$J 3:
pro)ram nome
sendo -ue:
7 .nome. 3 um nome sim#Elico definido para o pro)rama principal.


:.C. Co"andos A++OCA?E; (EA++OCA?E E A++OCA?A3+E
[CF] Os comandos $ZZOC$E0 DE$ZZOC$E E $ZZOC$$IZE t/m por funo permitir -ue
uma varivel inde!ada possa ser dimensionada durante a e!ecuo do pro)rama.

[CF] $ZZOC$$IZE: indica -ue a varivel inde!ada vai ter os valores m&nimos e m!imos para o
seu's* &ndice's* determinados em al)um ponto do pro)rama. $ rea de memEria para esta varivel
ainda no est reservada.

[CF] $ZZOC$E: dimensiona a varivel inde!ada e reserva 'aloca* um espao de memEria para
ela.

[CF] DE$ZZOC$E: desaloca0 mas no e!tin)ue0 a varivel inde!ada0 li#erando a memEria antes
por ela ocupada.

[E] So e!emplo a se)uir temos vrios trec>os de um pro)rama sendo -ue as variveis inde!adas $0
I0 C e D esto sendo
dimensionadas0 alocadas e desalocadas usando os comandos $ZZOC$E0 DE$ZZOC$E E
$ZZOC$$IZE:
...
inte)er i0(0K0l0m0n
inte)er0dimension':0:*0allocata#le :: a
real0dimension':*0allocata#le :: #0c
real0dimension':0:0:*0allocata#le :: d
...
print X0`Di)ite os minimos e ma!imos das 9 dimensoes de $:`
read X0i0(0K0l
allocate'a'i:(0K:l**
...
print X0`Di)ite o minimo e o ma!imo da unica dimensao de I:`
read X0i0(
print X0`Di)ite o minimo e o ma!imo da unica dimensao de C:`
read X0K0l
allocate'#'i:(*0c'K:l**
...
print X0`Di)ite os minimos e ma!imos das ? dimensoes de D:`
read X0i0(0K0l0m0n
allocate'd'i:(0K:l0m:n**
...
deallocate'a0d*
...
deallocate'#*
...
deallocate'c*
...

Captulo C: Co"andos de Controle de )luxo e ,ro&ra"a$%o
Estruturada
C.1. Introdu$%o
[C] Sormalmente0 a e!ecuo dos comandos num pro)rama 3 feita na ordem em -ue os comandos
so escritos: de cima para #ai!o0 lin>a por lin>a0 de acordo com a estrutura se-^encial. Entretanto
voc/ pode usar comandos para transferir o controle de flu!o para outra parte da mesma unidade de
pro)rama ou para outra unidade de pro)rama.

[C] O controle pode ser transferido somente para um comando e!ecutvel.

[D] "or ve1es0 um comando pode ser identificado por um .n8mero de comando.0 consistindo de um
n8mero inteiro0 escrito antes do comando0 no in&cio da lin>a. Cada n8mero de comando deve ser
8nico dentro da unidade de pro)rama. Eles servem principalmente para a especificao de formatos
de entrada e[ou sa&da de dados. Evita7se >o(e o uso anti)o do n8mero de comando0 -ue servia de
refer/ncia para uma transfer/ncia de controle de flu!o. Qsto favorece a criao de cEdi)os de
pro)rama .espa)uete.0 sendo -ue o controle de flu!o pode ser mudado de maneira a#surda0
dificultando e invia#ili1ando a manuteno dos pro)ramas.

C.2. Estruturas de Controle
[C] $s estruturas #sicas de controle so:

2. Estrutura se-^encial.
9. Estrutura de tomada de deciso 'if7t>en7else if7else7endif*.
?. Estrutura de lao:
faa7en-uanto 'G>ile7loop*.
Estrutura de lao repetio 'repeat7loop*.
;. Estrutura de seleo de caso 'select case*.
C.. Co"andos GO ?O
[CF] Os comandos %O O transferem o controle de flu!o para um comando e!ecutvel na mesma
unidade de pro)rama. Os tr/s tipos de %O O so:
2. %O O incondicional.
9. %O O computado.
?. %O O assinalado.
C..1. Co"ando GO ?O in#ondi#ional
[CF] O comando %O O incondicional transfere o controle para o comando identificado pelo
n8mero de comando especificado no %O O.

[CF] $ forma )eral do comando %O O incondicional 3:
)o to n
sendo -ue .n. 3 um n8mero de comando e!ecutvel.

C.'. Co"andos I)
[CF] Os comandos QF transferem o controle do flu!o ou e!ecutam outro comando 'ou um #loco de
comandos* dependendo do resultado verdadeiro ou falso de uma e!presso lE)ica contida no
particular comando QF. Os tr/s tipos de comandos QF so:
2. QF aritm3tico.
9. QF lE)ico.
?. QF #loco.
[CF] Os comandos EZSE0 EZSE QF e ESD QF so tam#3m apresentados nesta seo0 pois eles so
usados somente em con(unto com um comando QF #loco.

C.'.1. Co"ando I) l&i#o
[CF] O comando QF lE)ico calcula uma e!presso lE)ica[relacional e e!ecuta ou i)nora um
comando e!ecutvel contido no prEprio QF0 dependendo do valor 'falso ou verdadeiro* dessa
e!presso.

[CF] $ forma )eral do comando QF lE)ico 3:
if 'e* c
sendo -ue:
7 .e. 3 uma e!presso lE)ica ou relacional.
7 .c. 3 o comando -ue ser e!ecutado caso a e!presso se(a verdadeY .c. no pode ser um comando
DO.

[E] He(amos como fica o flu!o do pro)rama -uando este c>e)a a estas tr/s lin>as:
!\a7#
if'a.e-.#* !\aA#
M\!XX9
O#serve -ue nas 8ltimas 9 lin>as temos tr/s comandos:
2* if'a.e-.#*
9* !\aA#
?* M\!XX9
Ento:
a* Se de fato a\#0 teremos a se)uinte ordem de e!ecuo: 2 ,, 9 ,, ?.
#* Se0 por outro lado0 a 3 diferente de #0 teremos a ordem de e!ecuo: 2 ,, ?.

C.'.2. Co"andos I) 0lo#o
[CF] O comando QF #loco permite a e!ecuo de um determinado #loco de comandos0 dependendo
do valor da's* e!presses lE)ica's*[relacional'is* nele contido.

[CF] $ forma )eral do comando QF #loco 3:
if 'e2* t>en
#loco2
else if 'e9* t>en
#loco9
else if 'e?* t>en
#loco?
...
else
#loco n
endif
sendo -ue e20 e90e?0 ... so e!presses lE)icas[relacionais. Deve ficar claro -ue somente um dos
#locos de comandos ser e!ecutado.

[C] O menor QF #loco 3 a estrutura:
if 'e* t>en
#loco
endif
Hemos -ue os comandos EZSE QF e EZSE so opcionais.

[CF] O comando QF 4ES permite a e!ecuo condicional de um #loco de comandos e!ecutveis.
_ o#ri)atErio usar em con(uno o comando ESDQF para fec>ar o comando.

[CF] $ forma )eral do comando QF 4ES 3:
if 'e* t>en
sendo -ue .e. 3 uma e!presso lE)ica[relacional 'portanto produ1indo um resultado verdadeiro ou
falso*.

[C] Se a e!presso .e. for verdadeira0 a e!ecuo passa para o prE!imo comando e!ecutvel e da&
para o comando ESDQF. Se for falsa0 o controle 3 transferido para o prE!imo comando: EZSE QF
4ES0 EZSE ou ESDQF.

[CF] O comando EZSE fornece uma rota alternativa para um comando QF 4ES ou EZSE QF
4ES. Sua forma )eral 3 simplesmente:
else

[CF] O comando EZSE QF 4ES com#ina as funes dos comandos EZSE e QF 4ES0 pois
fornece uma rota alternativa e torna poss&vel uma estrutura QF #loco com mais de uma alternativa.

[CF] $ forma )eral do comando EZSE QF 4ES 3:
else if 'e* t>en
sendo -ue .e. 3 uma e!presso lE)ica[relacional.

[C] Se a e!presso for verdadeira0 o controle passa para o prE!imo comando e!ecutvel e da& para o
comando ESDQF. Se for falsa0 passa para o prE!imo comando EZSE QF 4ES0 EZSE ou ESDQF.

[CF] O comando ESDQF ou ESD QF finali1a uma estrutura QF #loco. Sua forma )eral 3
simplesmente:
end if

[E] E!emplo:
...
print X0`Di)ite a nota do aluno: `
read X0nota
if'nota,\<.:* t>en
print X0`O aluno foi aprovado.`
elseif'nota,\?.<* t>en
print X0`O aluno foi reprovado mas podera cursar o PE.`
else
print X0`O aluno foi reprovado e nao podera cursar o PE.`
endif
O

C.'.. Estruturas de I) 0lo#o en#aixados
[C] 5m #loco de comandos e!ecutveis dentro de um comando QF #loco pode conter outra estrutura
QF #loco. E isto pode se repetir indefinidamente.
...
print X0`Di)ite a nota do aluno: `
read X0nota
if'nota,\<.:* t>en
if'nota,\B.<* t>en
print X0`O aluno foi aprovado com louvor.`
elseif'nota,\=.:* t>en
print X0`O aluno foi aprovado com distincao.`
else
print X0`O aluno foi aprovado.`
endif
elseif'nota,\?.<* t>en
print X0`O aluno foi reprovado mas podera cursar o PE.`
else
print X0`O aluno foi reprovado e nao podera cursar o PE.`
endif
O

C.*. Co"ando (O
[CF] O comando DO 3 um comando de controle -ue permite -ue um #loco de comandos se(a
repetitivamente e!ecutado. O n8mero de e!ecues depende da varivel de controle.

[CF] $ forma )eral do comando DO 3:
do v \ vi 0 vf [0 incr]
sendo -ue:
7 .v. 3 a varivel do controle do lao DO.
7 .vi. 3 o valor inicial de v.
7 .vf. 3 o valor final ou m!imo de v.
7 .incr. 3 o incremento de v. Se for omitido0 3 suposto como de valor 2.
[CF] O comando ESDDO ou ESD DO finali1a uma estrutura DO. Sua forma )eral 3 simplesmente:
enddo
[E] E!emplo:
do i\:02::0<
#loco de comandos
enddo

[C] E!istem duas estruturas DO:
2* $ estrutura DO 7 ESD DO 'repeat loop* repete um #loco de comandos condicionado ao valor de
uma varivel de controle -ue deve variar de modo fi!o e pr37determinado:
do v\vi0vf0incr
#loco de comandos
end do
9* $ estrutura DO F4QZE 7 ESD DO 'G>ile loop* e!ecuta o lao DO en-uanto uma e!presso
lE)ica[relacional for verdadeira:
do G>ile 'var.)e.:*
#loco de comandos
end do

[CF] O comando DO impl&cito 3 uma terceira forma do comando DO e somente pode ser usando
em comandos de entrada ou sa&da de dados.
[E] E!emplos de uso do comando DO impl&cito:
print X0'var'i*0i\202:02*
print X0'var'i0(*0(\2:09:09*
read'202::*'var'i*0i\90=09*
Grite''?09::*'var'i0(*0(\20<02*

C.*.1. +a$os de (O en#aixados
[C] _ poss&vel encai!ar dois ou mais comandos DO.
[C] "ara as estruturas DO encai!adas0 o primeiro comando ESD DO apEs o comando DO0 fec>a o
lao.

C.1. Co"ando E@I?
[CF] O comando EdQ termina a#ruptamente um lao DO0 direcionando o flu!o do pro)rama para
a primeira lin>a de comando apEs o ESDDO da-uele respectivo comando DO envolvido.
C.:. Co"ando CDC+E
[CF] O comando C6CZE reinicia a#ruptamente um lao DO0 direcionando o flu!o do pro)rama
para a lin>a do comando DO dentro do -ual ele est inserido.
C.C. Co"ando CON?IN6E
[CF] O comando COSQS5E 3 um comando e!ecutvel -ue somente passa o controle para o
prE!imo comando e!ecutvel. $ forma )eral 3:
continue

C.8. Co"ando !?O,
[CF] O comando SO" termina a e!ecuo do pro)rama. $pesar de sua locali1ao dentro do
pro)rama em )eral ser a pen8ltima lin>a de comando0 ele pode ser colocado em -ual-uer posio
dentro do pro)rama.

[CF] $ forma )eral do comando SO" 3:
stop [varcar]
sendo -ue .varcar. 3 uma varivel caracter -ue ser e!i#ida na sa&da padro 'em )eral0 a tela do
monitor do operador*.

C.10. Co"ando EN(
[CF] O comando ESD indica o final de uma unidade de pro)rama para o compilador. Sua forma
)eral 3:
end
e deve o#ri)atoriamente ser colocado na 8ltima lin>a do pro)rama.

C.11. Co"ando !E+EC? CA!E
[C] $ estrutura SEZEC C$SE permite a e!ecuo de apenas uma entre muitas opes poss&veis.
[CF] $ estrutura SEZEC C$SE possui a se)uinte forma:
select case 'var*
case 'umNvalorNdeNvar*
#loco de comandos 2
case 'outroNvalorNdeNvar*
#loco de comandos 9
case 'outroNaindaNvalorNdeNvar*
#loco de comandos ?
...
end select

[E] E!emplo:
...
print X0`Di)ite um numero de 2 a 2:: `
read X0nu
select case 'nu*
case '2:;*
print X0`$ opcao foi um numero no intervalo [20;]`
case '<*
print X0`$ opcao foi pelo numero <`
case 'C:2:*
print X0`$ opcao foi um numero no intervalo [C02:]`
end select
...


Captulo 8: Co"andos de EntradaE!ada
8.1. Introdu$%o
[D] Os .Comandos de Entrada. fornecem um m3todo de transferir dados de um dispositivo
perif3rico 'como um teclado* ou de um ar-uivo interno para a memEria principal. Este processo 3
c>amado de .leitura de dados..

[D] Os .Comandos de Sa&da. fornecem um meio de transferir dados da memEria principal para um
dispositivo perif3rico 'como um monitor de v&deo ou impressora* ou um ar-uivo interno. Este
processo 3 c>amado de .escrita. ou .)ravao. de dados.

[C] $l)uns comandos de E[S permitem -ue se edite os dados durante a sua transfer/ncia.

[D] Seste cap&tulo somente sero apresentados os comandos de E[S -ue transferem dados 'PE$D0
"PQS0 FPQE*. Comandos au!iliares no sero discutidos.
8.2. =e&istros; Ar/ui2os e 6nidades
[D] 5m .caractere. 3 um 8nico s&m#olo0 tal como a letra ?0 o d&)ito @ ou um asterisco 4.

[D] 5m .campo. 3 uma sucesso de caracteres0 -ue representa al)uma informao0 tal
como &#A,#I, ou 6BC3@D.

[D] 5m .re)istro. 3 um )rupo de campos -ue re8ne informaes so#re um 8nico item0 tal como:
&#A,#I, BE$26$6FGD E0@G3B6
'nome* 'data nasc.* 'salrio*
[D] 5m .ar-uivo. 3 um )rupo de re)istros0 tal como:

& # A , # I , B E $ 2 6 $ 6 F G D E 0 @ G 3 B 6
& = # & / ' , B B $ 6 2 $ 6 F @ 0 F C D 3 E 0
> 3 " = I S A I # & 2 D $ 2 F $ 6 F @ B 6 B G @ 3 0 E
emos acima um ar-uivo0 com tr/s re)istros0 cada re)istro com tr/s campos e comprimento total
de 9D caracteres.

[C] Cada comando de E[S opera so#re um 8nico re)istro.

[D] 5ma unidade de E[S 3 um meio de se referir a um ar-uivo. 5sa7se n8meros de unidades de E[S
para distin)uir um ar-uivo de outro.

[C] Certos n8meros de unidades podem ser pr37definidos. $ssim0 por e!emplo0 o n8mero < pode
indicar o teclado e C pode indicar o monitor de v&deo.

[C] O comando O"ES esta#elece a cone!o entre o n8mero da unidade e um particular ar-uivo.

8.. Co"ponentes dos Co"andos de EE!
[C] Os comandos de E[S so constitu&dos de ? partes:
comando 'especificadores* [lista]
sendo -ue:
especi8icadores definem apropriadamente a e!ecuo do comandoY
lista define a's* varivel'eis* so#re a's* -ual'is* opera o comando.
8..1. +ista de Espe#i4i#adores de Controle de EE!
[C] E!istem muitos especificadores de controle de entrada e sa&da. Heremos somente os mais
importantes para o iniciante.

[D] 5SQ: o especificador de unidade desi)na a unidade e!terna de E[S ou o ar-uivo interno a ser
usado para o comando de E[S no -ual ele aparece. Seu uso 3:
[unit\]u ou [unit\]X
sendo -ue:
7 .u. 3 uma e!presso inteira -ue desi)na o n8mero de E[S.
7 .X. desi)na a unidade de entrada padro em PE$D e sa&da padro em "PQS ou FPQE.

[C] Os caracteres .unit\. somente podem ser omitidos no caso do especificador de unidade ser o
primeiro na lista de especificadores.

[D] FJ: o especificador de formato desi)na o formato a ser usado para o comando de E[S
formatado ou o comando de E[S com lista direta. Seu uso 3
[fmt\]f ou [fmt\]X
sendo -ue:
7 .f. 3 um identificador de formatoY
7 .X. desi)na uma formatao em lista direta.

[C] Os caracteres .fmt\. somente podem ser omitidos se o especificador de formato for o se)undo
especificador e ainda o primeiro especificador for o de unidade sem os caracteres .unit\. .

[D] O identificador de formato .f. pode ser um n8mero de um comando FOPJ$. Ou uma
e!presso inteira '-ue aca#a por indicar um comando FOPJ$*. Ou especificaes de formato 'em
forma de varivel caractere*.

[E] E!emplos. odos eles fa1em a mesma coisa e ainda o comando PE$D poderia ser su#stitu&do
pelo comando FPQE.
E!emplo 2:
read'unit\20fmt\2::* a0#
2:: format'i<0f2:.?*
E!emplo 9:
read'202::* a0#
2:: format'i<0f2:.?*
E!emplo ?:
read'20X* a0#

8..2. +ista de EE!
[D] 5ma lista de E[S tem a forma:
s[0s]c
sendo -ue .s. 3 uma lista de itens simples ou uma lista de DO impl&cito.

[C] 5m item da lista pode ser um nome de varivel0 um nome de con(unto0 um nome de elemento
de con(unto0 um nome de su#cadeia caractere ou uma lista de DO impl&cito. So caso de lista de
sa&da0 ainda pode ser uma e!presso.

[E] E!emplos de listas de E[S 'sem DO impl&cito*:
read'<02::* $0I0C0D
read'?09:* d060C'@*0D'?0;*0E'Q0g0D*0
read';0292*Q0$'Q*0@0I'Q0@*
Grite'90?:9* $ZF$0IE$
Grite'C0299* %$J$';X@A90<XQA90;Xg*0C0D'Z*

[E] Pe)istro de entrada contendo os dados Z0 J e S0 -ue so definidos como n8meros inteiros:
2::99?;<CD=B
-ue 3 lido pelos comandos:
read'<0C:* Z0J0S
C: format'Q?0Q90QD*
apresentar os se)uintes valores:
Z\2::
J\99
S\?;<CD=B .

[CF] 5ma lista de DO impl&cito tem a se)uinte forma:
'd 0 i \ e20 e9 [0e?] *
sendo -ue:
7 .d. 3 uma lista de E[S.
7 i 0 e20 e9 e e? t/m as mesmas formas0 funes e efeitos -ue num comando DO.

[E] $o inv3s de usar:
print X0 $'2*0$'9*0$'?*0$';*0$'<*0$'C*0$'D*0$'=*0$'B*
use
print X0 '$'i*0 i \ 20B* .

8.'. Co"andos =EA(
[D] Os comandos PE$D transferem dados de entrada para a memEria de tra#al>o.

[C] QJ"OP$SE: cada novo comando PE$D passa a ler dados em uma nova lin>a.

8.'.1. Co"andos =EA( se/Fen#iais
[CF] $s formas aceitas dos comandos PE$D se-^encial so:
read'[unit\]u0[fmt\]f* [lista]
ou
read f [0 lista]
sendo -ue .f. pode ser su#stitu&do por .X. para desi)nar uma lista direta. Se .u. for su#stitu&do por
.X. 0 a leitura ser feita na unidade de entrada padro.

[E] E!emplos:
read'unit\?0fmt\2::* a0#0c
2:: format'?f<.9*
3 i)ual a:
read'?02::* a0#0c
2:: format'?f<.9*
-ue ainda podem ser simplificados para:
read'?0X* a0#0c
'lista direta*
ou
read'X0X* a0#0c
'a-ui a leitura passa a ser feita a partir da entrada padro*

8.*. Co"andos G=I?E 7,=IN?9
[D] Os comandos FPQE '"PQS* transferem dados arma1enados na memEria do computador para
dispositivos de sa&da 'v&deo0 ar-uivos ou impressora*.

[C] QJ"OP$SE: cada novo comando FPQE '"PQS* passa a escrever dados em uma nova
lin>a.

8.*.1. Co"andos G=I?E 7,=IN?9 se/Fen#iais
[CF] $s formas aceitas dos comandos FPQE se-^encial so:
Grite'[unit\]u0[fmt\]f* [lista]
sendo -ue .f. pode ser su#stitu&do por .X. para lista direta.

[E] E!emplos:
Grite'unit\D0fmt\9::* a0#0c
9:: format'?f<.9*
ou
Grite'D09::* a0#0c
9:: format'?f<.9*
'i)ual ao comando anterior*
ou
Grite'D09::* a0#0c
9:: format'?f<.9*
'praticamente i)ual aos comandos anteriores*
ou
Grite'X0X* a0#0c
'escreve na sa&da padro*

[C] $ diferena entre FPQE e "PQS 3 -ue este 8ltimo somente escreve na sa&da padro 'o v&deo0
no nosso caso*. "or isso "PQS dispensa o especificador de unidade.

[CF] $ forma aceita do comando "PQS 3:
print f [0 lista]
sendo -ue .f. pode ser su#stitu&do por .X. para lista direta.

[E] E!emplos:
print 9::0 a0#0c
9:: format'?f<.9*
ou
print X0 a0#0c
'lista direta*

8.1. Co"andos de Condi$%o de Ar/ui2os de EE!
8.1.1. Co"ando O,EN
[C] O comando O"ES serve para iniciali1ar um ar-uivo.

[CF] $ forma )eral simplificada do comando O"ES 3:
open'[unit\]u[0file\`a`][0status\`#`]*
sendo -ue:
7 .u. 3 o n8mero da unidade.
7 `a` 3 uma e!presso caractere -ue especifica o nome do ar-uivoY
7 `#` especifica a condio do ar-uivo0 -ue pode ser:
7`SEF`0 para ar-uivos novos0 -ue vo ser criados pelo pro)ramaY
7`OZD`0 para ar-uivos ( e!istentes 'em )eral0 ar-uivos de entrada de dados*Y
7`SCP$C4`0 para ar-uivos -ue so criados pelo pro)rama e -ue devem ser apa)ados no final da
e!ecuo deste.
7 `5SgSOFS`0 para ar-uivos para os -uais no se aplica nen>uma das condies acima.

8.1.2. Co"ando C+O!E
[D] O comando CZOSE serve para finali1ar um ar-uivo. _ o oposto de O"ES.

[CF] $ forma )eral simplificada do comando CZOSE 3:
close'[unit\]u*
sendo -ue .u. 3 o n8mero da unidade.

Captulo 10: Co"ando )O=-A? e Espe#i4i#a$5es de )or"ato
10.1. Introdu$%o
[D] FOPJ$ 3 o comando -ue cont3m uma lista de especificaes de formato -ue permite ao
pro)ramador ter controle so#re os dados de entrada e sa&da.

[E] E!emplo do uso de um comando de formatao:
"PQS 2: 0 S0 d0 6
2: FOPJ$ ' Q?0 F=.?0 F<.2*
sendo -ue:
7 "PQS e FOPJ$ so comandos 'ou palavras7c>ave*Y
7 .2:. 3 n8mero de comandoY
7 .S0d06. 3 lista de sa&daY
7 .Q?0F=.?0F<.2. so especificaes de formato.

10.2. Co"ando )O=-A?
[D] $ forma )eral do comando FOPJ$ 3:
n format 'ef [0ef [0c0ef]]*
sendo -ue:
7 .n. 3 um n8mero de comandoY
7 .ef. 3 uma especificao de formato 'converso ou edio*.

[C] "ode7se usar o mesmo comando FOPJ$ em diversos PE$D0 FPQE ou "PQS.

10.. Espe#i4i#a$5es de )or"ato 7E)9 de Con2ers%o
[D] $s EF de converso mais usadas so:
Especificao Converte dados
77777777777777777777777777777777777777777777777777777777777777777777777777
[a] Q G inteiros decimais
[a] F G.d reais decimais0 sem e!poente
[a] E G.d reais decimais0 com e!poente
[a] D G.d reais decimais dupla preciso0 com e!poente
[a] % G.d reais decimais0 com ou sem e!poente
[a] Z G lE)icos
[a] $ G caracteres
sendo -ue:
7 .a. 3 uma constante inteira0 sem sinal e no7nula0 usada para indicar o n8mero de ve1es -ue a
mesma EF 3 se)uidamente usada.
7 .G. 3 uma constante inteira0 sem sinal e no7nula0 usada para indicar a lar)ura total do campo
e!terno 'incluindo d&)itos0 espaos0 sinais al)3#ricos A ou 7 0 ponto decimal e e!poente*.
7 .d. 3 uma constante inteira0 sem sinal e -ue indica a -uantidade de d&)itos R direita do ponto
decimal dentro do campo de lar)ura G. Sa sa&da0 todos os valores so arredondados.

[E] E!emplos:
E!emplo 2. "ara escrever na tela do monitor as variveis n8mericas
var2\222 var9\9999.99 var?\? var;\;;.;;
pode7se usar a se)uinte com#inao de comandos:
print <0var20var90var?0var;
< format'i?0fD.90i20f<.9*
E!emplo 9: para escrever na tela do monitor a se)uinte lista de variveis
var2\.true. var9\`america` var?\222 var;\9999.99 var<\???.??eA:<
pode7se usar a se)uinte com#inao de comandos:
print C0var20var90var?0var;0var<
C format'l20aD0i?0fD.90e2:.9*

10.'. Espe#i4i#a$5es de )or"ato de Edi$%o
[D] $s especificaes de edio mais usadas no Fortran so:
Especificao Funo
77777777777777777777777777777777777777
G ! espaamento
[ nova lin>a
sendo -ue .G. representa o n8mero de espaos dese(ados.

10.*. Espe#i4i#a$5es de )or"ato e" Grupos =epetidos
[E] O comando:
<9: format' i<0 i<0 f=.?0 e2C.D0 f=.?0 e2C.D0 f=.?0 e2C.D*
pode ser escrito de maneira mais redu1ida:
<9: format' 9i<0 ?'f=.?0 e2C.D**

Captulo 11: !u0pro&ra"as
11.1. Introdu$%o
[D] 5m .su#pro)rama.0 como o prEprio nome di10 3 uma se-^/ncia de comandos -ue fa1em parte
de um pro)rama.

[C] 5m pro)rama e!ecutvel consiste num 8nico pro)rama principal e su#pro)ramas opcionais.

[D] 5ma .funo. 3 um tipo de su#pro)rama -ue sempre retorna um valor 8nico.

[D] 5ma .su#rotina. 3 um tipo de su#pro)rama -ue retorna uma -uantidade varivel de valores ou
no retorna nen>um valor.

[D] 5ma .funo intr&nseca. 3 um su#pro)rama do tipo funo fornecido pelo compilador.

11.2. Ar&u"entos de !u0pro&ra"as
[D] 5m .ar)umento de su#pro)rama. 3 uma entidade -ue transfere um valor para ou de um
su#pro)rama.

[D] 4 duas esp3cies de ar)umentos: atuais e mudos.

[D] Os ar)umentos .atuais. so escritos no comando -ue c>ama o su#pro)rama.

[D] Os ar)umentos .mudos. so especificados na definio do su#pro)rama.

[C] Vuando o controle de e!ecuo 3 transferido para o su#pro)rama0 os ar)umentos mudos so
associados com os ar)umentos atuais na #ase de 2 para 2.

[E] Se 'i0 ('9*0 <* 3 uma lista de ar)umentos atuais e 'K0 l0 m* 3 uma lista associada de ar)umentos
mudos0 ento K 3 i)ual a i0 l 3 i)ual a ('9* e m 3 i)ual a <.

11.. )un$5es Intrnse#as 7)I9
[C] $s funes intr&nsecas so procedimentos to usados -ue ac>ou7se por #em inclui7las como
parte inte)rante do Fortran0 e portanto0 ( vem definidas.

[D] 5ma FQ sempre 3 usada em uma e!presso e retorna o valor calculado da funo para o
ar)umento0 -ue se encontra entre par/nteses:
FQ'ar)umento*

[E] E!emplos:
M \ cos'!* 0 FQ \ cos 0 nome: cossenoY ar)umento \ !.
M \ 9.:Xcos'!XX9* 0 FQ \ cos 0 nome: cossenoY ar)umento \ !XX9.

[C] %eralmente os livros de Fortran cont3m uma lista completa de todas as FQ.

[C] $EShiO: 5m mesmo tipo de FQ pode ter vrios nomes0 dependendo do tipo de ar)umento e
do tipo do valor de retorno.

[C] $ ta#ela a#ai!o cont3m al)umas das funes intr&nsecas mais usadas em Fortran. "ara
informaes mais completas0 ve(a o livro te!to.

)6NHIO (E!C=IHIO A=G6-EN?O =E!6+?A(O
int'!*
converte para o tipo inteiro0 truncando a
mantissa
real inteiro
real'!* converte para o tipo real inteiro real
nint'!* arredonda para o inteiro mais prE!imo real inteiro
aint'!* trunca a mantissa real real
anint'!* arredonda para o inteiro mais prE!imo real real
c>ar'!* converte inteiro para caractere inteiro caractere
ic>ar'!* converte caractere para inteiro caractere inteiro
a#s'!* valor a#soluto 'ou mEdulo* num3rico mant3m
mod'!01* resto da diviso de ![1 num3rico mant3m
ma!'!010G0...* encontra o maior valor entre os ar)umentos num3rico mant3m
min'!010G0...* encontra o menor valor entre os ar)umentos num3rico mant3m
len'!*
comprimento de uma varivel ou constante
caractere
caractere inteiro
inde!'!01*
locali1a a varivel ou constante caractere !
dentro da varivel ou constante 1
caractere inteiro
s-rt'!* rai1 -uadrada num3rico real
e!p'!* e!ponencial num3rico real
lo)'!* lo)aritmo natural e neperiano num3rico real
lo)2:'!* lo)aritmo decimal num3rico real
sin'!* seno radianos real
cos'!* cosseno radianos real
tan'!* tan)ente radianos real
cotan'!* cotan)ente radianos real
11.'. )un$5es )un#tion
[D] 5m su#pro)rama funo F5SCQOS 3 usado do mesmo modo -ue se usa uma funo
intr&nseca. $ diferena 3 -ue o su#pro)rama F5SCQOS 3 escrito pelo prEprio pro)ramador. Qsto
serve para resolver pro#lemas como0 por e!emplo0 para se ter uma funo -ue o#ten>a o valor de
M'!*\!
9
A?!A9. $ funo M'!* no teria -ue ser reescrita diversas ve1es ao lon)o do pro)rama0
evitando7se erros.

[D] O su#pro)rama F5SCQOS sempre comea com o comando no7e!ecutvel F5SCQOS0
se)uido por uma se-^/ncia de comandos e termina com um comando ESD. O controle de e!ecuo
3 retornado para o pro)rama principal atrav3s de um comando PE5PS '-ue tam#3m 3 um
comando o#ri)atErio*.

[D] Pe)ras para o uso de su#pro)ramas F5SCQOS:
2. Deve >aver concordUncia entre os ar)umentos passados e rece#idos0 no pro)rama principal e
no su#pro)rama.
9. Se um ar)umento 3 uma varivel inde!ada0 o n8mero de seus elementos no su#pro)rama
pode ser menor ou i)ual0 mas no maior0 -ue no pro)rama principal.
?. O 8nico valor retornado ao pro)rama principal est arma1enado no nome da funo.
;. "ara retornar para o pro)rama principal 3 preciso usar o comando PE5PS.
<. Os su#pro)ramas )eralmente so escritos apEs o pro)rama principal0 -uando editados no
mesmo ar-uivo.
C. "odem ser usados n8meros de comandos e nomes de variveis usados tam#3m no pro)rama
principal. So tratados como coisas diferentes e independentes.
D. O tipo do valor retornado pelo su#pro)rama F5SCQOS depende do nome da funo.
11.'.1. Co"ando )6NC?ION
[D] O comando F5SCQOS deve aparecer como o primeiro comando no su#pro)rama.

[CF] $ forma )eral do comando F5SCQOS 3:
[tipo] function nome '[a[0a]]*
sendo -ue:
7 .tipo. 3 um dos tipos de variveis permitidas no Fortran.
7 .nome. 3 o nome da funo e o#edece Rs re)ras para os nomes das variveis.
7 .a. 3 um ar)umento -ue 3 passado para ser processado pela funo.

[CF] $ forma de c>amar um su#pro)rama F5SCQOS 3 a se)uinte 'aparecendo o#ri)atoriamente
numa e!presso*:
nome '[#[0#]*
sendo -ue:
7.nome. 3 o nome de um su#pro)rama.
7 .#. 3 um ar)umento.

[E] E!emplo.
pro)ram volcil
implicit none
real volume0area0raio0>
print X0`Di)ite o raio e a altura do cilindro: `
read X0raio0>
volume\area'raio*X>
print X0volume
stop
end
real function area'!*
implicit none
real !
area\?.2;2<B9DX!XX9
return
end

11.*. )un$5es de Co"ando
[D] Vuando uma funo envolve uma 8nica lin>a de computao0 no 3 necessrio escrever um
su#pro)rama.

11.*.1. (e4ini$%o de )un$%o de Co"ando
[CF] 5ma funo de comando 3 definida por um comando da forma:
nome '[a[0a]O]* \ e
sendo -ue:
7 .nome. 3 o nome de uma funo e se)ue as mesmas re)ras para nomes de variveis.
7 .a. 3 um ar)umento.
7 .e. 3 uma e!presso.

[D] 5sa7se uma funo de comando como se usa uma funo intr&nseca.
[D] $ funo de comando 3 um comando no7e!ecutvel e portanto deve ser declarada no in&cio do
pro)rama0 antes de -ual-uer comando e!ecutvel.

[E] E!emplo:
pro)ram e!emplo
implicit none
real area0raio
inte)er i
area'raio* \ ?.2;2<B9DXraioXX9
do i \ 20 2:
read'X0X* raio
Grite'X0X* area'raio*
enddo
stop
end
[D] 5ma su#rotina difere de uma funo nos se)uintes modos:
2. 5ma su#rotina no retorna um valor.
9. "ara c>amar 'e!ecutar* uma su#rotina usa7se o comando C$ZZ.
?. $ lista de ar)umentos da su#rotina 3 uma via de duas mos: leva e tra1 valores.
;. 5ma su#rotina pode retornar muitos valores0 um valor0 ou nen>um valor.
11.1.1. Co"ando !63=O6?INE
[D] O comando S5IPO5QSE deve aparecer como o primeiro comando num su#pro)rama tipo
su#rotina.

[CF] $ forma )eral do comando S5IPO5QSE 3:
S5IPO5QSE nome ['[a[0a]O]*]
sendo -ue:
7 .nome. 3 o nome da su#rotina.
7 .a. 3 um ar)umento.

11.1.2. Co"ando CA++
[CF] 5ma su#rotina 3 e!ecutada atrav3s de um comando C$ZZ0 -ue possui a se)uinte forma )eral:
C$ZZ nome ['[#[0#]O]*]
sendo -ue:
7 .nome. 3 um nome de su#rotina.
7 .#. 3 um ar)umento.

[E] Este 3 um e!emplo simples0 sendo -ue seria at3 desnecessrio o uso de um su#pro)rama do tipo
S5IPO5QSE para 1erar ? matri1es:
pro)ram matri12
a O#(etivo: e!emplo do uso de su#rotinas
a "ro)ramador: FCZavarda
implicit none
inte)er n0i0(
parameter'n\?*
real a'n0n*0#'n0n*0c'n0n*
call 1erador'a0#0c0n*
do i\20n
print X0'a'i0(*0(\20n*
enddo
stop
end
su#routine 1erador'!0M010K*
implicit none
inte)er K0i0(
real !'K0K*0M'K0K*01'K0K*
do i\20K
do (\20K
!'i0(*\:.:
M'i0(*\:.:
1'i0(*\:.:
enddo
enddo
return
end

11.:. (i"ens5es Ajust.2eis
[C] 5ma varivel inde!ada 'vi* dimensionada no pro)rama principal pode ser repassada para uma
su#rotina. E na su#rotina0 os &ndices de dimenso podem ser diferentes -ue a-ueles definidos no
pro)rama principal 'a vi pode ser redimensionada*.


Jndi#e de ?pi#os
Captulo 0: Notas Introdutrias
:.2. $ssuntos %erais
:.9. O editor de te!tos
:.?. Sistema Operador de Discos
Captulo 1: No$5es ,reli"inares
2.2. Qntroduo
2.9. Computadores
2.?. $l)oritmos
2.;. Dia)ramas de Flu!o
2.D. Zin)ua)ens de "ro)ramao
2.D.2 Zin)ua)em de J-uina
2.D.9. Zin)ua)em Sim#Elica de J-uina
2.D.?. Zin)ua)ens de Compiladores
2.=. "assos no Desenvolvimento de "ro)ramas
Captulo 2: A +in&ua&e" )ortran: Con#eitos 3.si#os
9.2 Qntroduo
9.9. Definies da Zin)ua)em
9.?. Qtens sintticos do Fortran
9.;. Caracteres usados no Fortran
9.<. 5ma viso )eral do Fortran
9.C. Codificao de pro)ramas em Fortran
9.C.2. Formato Zivre
9.C.9. Formato Fi!o
Captulo : Constantes; <ari.2eis e Conjuntos
?.2 Qntroduo
?.9. Constantes
?.9.2. Constantes Qnteiras
?.9.9. Constantes Peais
?.9.22. Constantes Caracteres
?.?. Hariveis
?.?.2. Hariveis Qnteiras
?.?.9 Hariveis Peais
?.?.?. Hariveis Caracteres
?.;. Con(untos
?.;.2 Declaradores de Con(untos
Captulo ': Express5es
;.2. Qntroduo
;.9. E!presses $ritm3ticas
;.; E!presses Pelacionais
;.< E!presses ZE)icas
Captulo *: Co"andos de Atri0ui$%o
<.2 Qntroduo
Captulo 1: Co"andos de Espe#i4i#a$%o: (e#lara$%o de ?ipos de <ari.2eis
C.2 Qntroduo
C.9. Comando QJ"ZQCQ
C.?. Comandos de Especificao E!pl&cita
C.?.2. Comando QSE%EP
C.?.9. Comando PE$Z
C.?.?. Comando DO5IZE "PECQSQOS
C.?.;. Comando COJ"ZEd
C.?.<. Comando ZO%QC$Z
C.?.C. Comando C4$P$CEP
Captulo :: Co"andos de Espe#i4i#a$%o: (esi&na$%o de Breas de -e"ria
D.2. Qntroduo
D.9. Comando DQJESSQOS
D.? Comando COJJOS
D.;. 5nidades de pro)ramas do tipo JOD5ZE
D.<. Comando 5SE
D.C. Comando "$P$JEEP
D.D. Comando "PO%P$J
D.=. Comandos $ZZOC$E0 DE$ZZOC$E E $ZZOC$$IZE
Captulo C: Co"andos de Controle de )luxo e ,ro&ra"a$%o Estruturada
=.2. Qntroduo
=.9. Estruturas de Controle
=.?. Comandos %O O
=.?.2. Comando %O O incondicional
=.;. Comandos QF
=.;.9. Comando QF lE)ico
=.;.?. Comandos QF #loco
=.;.<. Estruturas de QF #loco encai!ados
=.<. Comando DO
=.<.9. Zaos de DO encai!ados
=.C. Comando EdQ
=.D. Comando C6CZE
=.=. Comando COSQS5E
=.B Comando SO"
=.2:. Comando ESD
=.22. Comando SEZEC C$SE
Captulo 8: Co"andos de EntradaE!ada *
B.2. Qntroduo
B.9. Pe)istros0 $r-uivos e 5nidades
B.?. Componentes dos Comandos de E[S
B.?.2. Zista de Especificadores de Controle de E[S
B.?.9. Zista de E[S
B.;. Comandos PE$D
B.;.2. Comandos PE$D se-^enciais
B.<. Comandos FPQE '"PQS*
B.<.2. Comandos FPQE '"PQS* se-^enciais
B.C. Comandos de Condio de $r-uivos de E[S
B.C.2. Comando O"ES
B.C.9. Comando CZOSE
Captulo 10: Co"ando )O=-A? e Espe#i4i#a$5es de )or"ato
2:.2. Qntroduo
2:.9. Comando FOPJ$
2:.?. Especificaes de Formato 'EF* de Converso
2:.;. Especificaes de Formato de Edio
2:.<. Especificaes de Formato em %rupos Pepetidos
Captulo 11: !u0pro&ra"as
22.2. Qntroduo
22.9. $r)umentos de Su#pro)ramas
22.?. Funes Qntr&nsecas 'FQ*
22.;. Funes Function
22.;.2. Comando F5CQOS
22.<. Funes de Comando
22.<.2. Definio de Funo de Comando
22.C. Su#pro)ramas Su#rotinas
22.C.2. Comando S5IPO5QSE
22.C.9. Comando C$ZZ
22.D. Dimenses $(ustveis

Você também pode gostar