Sunteți pe pagina 1din 267

FORTRAN 90

PARA
WINDOWS
2
Sumrio
3
Captulo 1. INTRODUO
OBJETIVOS DO CAPTULO
Conceitos de: linguagem de programao, FORTRAN, projeto, programa!onte, programao"jeto,
programae#ecut$%el, compilao, comando
&rocedimentos "$sicos para programar em linguagem FORTRAN
Comandos do FORTRAN: 'R(T) e )N*
1.1 USO DESTE TEXTO EM DISCIPLINAS
O o"jeti%o deste te#to + ensinar a implementar programas com a linguagem FORTRAN ,- e,
implicitamente, a desen%ol%er algoritmos para resol%er pro"lemas "$sicos de matem$tica e !.sica/ Os
cap.tulos 0 a 03 deste te#to so recomendados para disciplinas introdut1rias de programao em cursos de
engen2aria/ 3$ os cap.tulos 04 a 25 podem ser usados em cursos a%anados de programao em n.%el de
graduao/
Cada cap.tulo !oi estruturado para ser lecionado em aulas com durao de duas 2oras/ 6ma
disciplina de 35 2oras %em sendo ministrada no primeiro per.odo semestral do curso de graduao em
engen2aria mec7nica da 6ni%ersidade Federal do &aran$/ )sta disciplina en%ol%e os cap.tulos 0 a 03 mais
duas pro%as/ Outra disciplina, en%ol%endo os cap.tulos 0 a 25, com 4- 2oras, est$ pre%ista para ser
lecionada em n.%el de p1sgraduao/
1.2 BIBLIOGRAFIA
No + o"jeti%o deste te#to entrar em detal2es so"re 2ard8are e so!t8are de computadores/ Aos
interessados nestes aspectos recomendase o li%ro de Ramal2o 92555:, ;ue + adotado neste te#to como
re!er<ncia para termos t+cnicos de in!orm$tica em portugu<s/ *ois te#tos recomendados so"re algoritmos
so o li%ro de For"ellone e )"erspac2er 92555: e a apostila de =oraes 92555 : / O material apresentado
a;ui + "aseado no li%ro de Adams et al/ 90,,>:, ;ue se constitui num manual completo so"re a linguagem
FORTRAN ,-, padroni?ada pelas organi?a@es (AO 9(nternational Atandadrs Organi?ation: e ANA(
9American National Atandards (nstitute:/
1.3 FORTRAN
)#iste uma in!inidade de linguagens de programao, por e#emplo, Assem"lB, Co"ol, Cisual
Dasic, &ascal, 3a%a, CEE etc 9Ramal2o, 2555, p/ 004 e 02435:/ )las so usadas para criar os programas,
tam"+m denominados de so!t8ares ou aplicati%os, ;ue so empregados nos computadores/ A utilidade
das linguagens de programao pode ser perce"ida ao se lem"rar para ;ue so usados, por e#emplo: os
sistemas operacionais 'indo8s, 6ni# e Finu#G os aplicati%os 'ord, )#cel, &o8er&oint, Front&age,
Corel*ra8, Origin e Acro"atG os na%egadores da internet Netscape e )#plorerG e os programas dos cai#as
autom$ticos dos "ancos/
A linguagem FORTRAN, contrao de FORmula TRANslation 9Traduo de F1rmulas:, ainda + a
principal linguagem de programao usada em engen2aria e aplica@es cient.!icas 9Adams, 2555, p/ 0:/
Foi criada em 0,-4/ Aua primeira %erso comercial surgiu em 0,->/ As %ers@es do FORTRAN
padroni?adas pela ANA( e (AO so:
0: Ano 0,HH I FORTRAN HH
2: Ano 0,>J I FORTRAN >>
3: Ano 0,,2 I FORTRAN ,5
4: Ano 0,,> I FORTRAN ,-
1.4 CONVEN!ES
&ara mel2or entendimento deste te#to, as seguintes con%en@es so adotadas:
0: Ao mostrados na cor a?ul linKs para endereos de sites da internet ou para ar;ui%os ;ue de!inem
termos e procedimentos importantes para este te#to/
2: Comandos de programas ou aplicati%os ;ue de%em ser e#ecutados ao longo do te#to so
mostrados em negrito/ A %.rgula + usada para separar uma se;L<ncia de comandos/
3) So apresentados na cor vermelha: os programas, seus dados (entradas) e seus
resultados (sadas).
4: Mual;uer re!er<ncia ao sistema operacional 'indo8s NT 4/5 + a"re%iado para 'indo8s/
-: Mual;uer re!er<ncia ao aplicati%o Fortran &o8erAtation 4/5, da =icroso!t, + a"re%iado para Fortran/
H: Mual;uer re!er<ncia N linguagem FORTRAN + a"re%iado para FORTRAN, tudo em maiOsculo para
distinguir do aplicati%o Fortran &o8erAtation 4/5/
>: *e%ido N grande ;uantidade de termos em ingl<s, no + !eito ;ual;uer distino para pala%ras em
portugu<s/
J: Comandos, isto +, pala%rasc2a%e da linguagem FORTRAN so apresentados em letras maiOsculas/
1." INICIALI#A$O DO APLICATIVO FORTRAN PO%ERSTATION 4.&
&ara seguir este te#to, no + necess$rio nen2um con2ecimento anterior so"re linguagem de
programao/ P necess$rio apenas ter con2ecimentos "$sicos so"re o sistema operacional 'indo8s NT
4/5 ou %ers@es mais recentes/ Todos os programas em FORTRAN apresentados neste te#to !oram
editados e compilados com o aplicati%o Fortran &o8erAtation 4/5, da =icroso!t/ Al+m de seus manuais,
este aplicati%o cont+m o li%ro de Qa2n 90,,4: so"re FORTRAN ,5 e o item Re!erence onde so descritos
todos os comandos do FORTRAN, incluindo e#emplos/
Con!orme + mostrado na Figura 0/0, para iniciar o uso deste aplicati%o, de%ese e#ecutar no
'indo8s: Atart, &rograms, Fortran &o8erAtation 4/5, =icroso!t *e%eloper Atudio/ &ara !acilitar a edio
dos programas, recomendase ma#imi?ar a janela principal do Fortran, clicando so"re o .cone central ;ue
!ica no canto superior direito/ Fa?endo isso, o aspecto do Fortran de%er$ ser semel2ante
N;uele mostrado na Figura 0/2/
Figura 0/0 (niciali?ao do aplicati%o Fortran &o8erAtation 4/5/
Na janela principal do Fortran, mostrada na Figura 0/2, podese perce"er:
Figura 0/2 3anela principal do aplicati%o Fortran &o8erAtation 4/5/
0: Na "arra em a?ul, o .cone do Fortran e o t.tulo da janela principal: =icroso!t *e%eloper Atudio/
2: A"ai#o da "arra em a?ul, o menu do Fortran, ou seja, as op@es e#istentes para usar este aplicati%o,
;ue so: File, )dit, Cie8, (nsert, Duild, Tools, 'indo8 e Qelp/
3: A janela principal do Fortran + di%idida em tr<s partes ou su"janelas/ Ae no esti%er aparecendo a
su"janela in!erior, mostrada na Figura 0/2, de%ese e#ecutar: Cie8, Output/
4: Na su"janela do lado es;uerdo, temse o diret1rio principal dos manuais do Fortran, destacandose:
Re!erence, ;ue + uma lista de comandos do FORTRAN ,5, incluindo e#plica@es e e#emplos de usoG
e Fortran ,5 !or Acientists and )ngineers, ;ue + um li%ro so"re a linguagem FORTRAN ,5/ )sta
su"janela tam"+m + usada para mostrar os nomes dos programas editados na linguagem FORTRAN/
Muando um programa esti%er sendo editado, para acessar os manuais, de%ese clicar so"re a opo R
(n!oCie8, mostrada na Figura 0/2, ;ue !ica na parte in!erior da su"janela do lado es;uerdo/ ) para
%oltar ao programa ;ue est$ sendo editado, "asta clicar so"re a opo FileCie8/
-: Na su"janela in!erior so apresentadas in!orma@es so"re erros de programao e compilao/
*etal2es sero %istos no cap.tulo 2/
H: A su"janela do lado direito, a maior das tr<s, + usada para: apresentar o conteOdo dos manuais e para a
edio de programas em FORTRAN/
1.' CRIA$O DE UM PRO(ETO DO TIPO CONSOLE APPLICATION
O Fortran organi?a todos os ar;ui%os de um programa numa entidade c2amada projeto/ )m termos
pr$ticos, a criao de um projeto resulta na criao de uma pasta ou diret1rio dentro do 'indo8s/
)#istem di%ersos tipos de projetos ;ue podem ser criados com o Fortran/ A escol2a do tipo depende da
!inalidade do programa e dos recursos do 'indo8s ;ue se deseja empregar/ No caso deste te#to, em sua
parte "$sica, ;ue compreende os cap.tulos 0 a 03, so empregados apenas projetos do tipo Console
Application/ ) na parte a%anada, ;ue corresponde aos cap.tulos 04 a 25, so usados projetos do tipo
MuicK'in Application, ;ue permite utili?ar di%ersos recursos do 'indo8s/
&ara criar um projeto do tipo Console Application, de%em ser e#ecutados os seguintes passos:
0: No menu do Fortran, con!orme + mostrado na Figura 0/3: File, Ne8/
Figura 0/3 (n.cio da criao de um projeto no Fortran/
2: Na janela Ne8, mostrada na Figura 0/4, clicar so"re a opo &roject 'orKspace/ *epois, clicar
so"re o "oto OS/
3: Na janela Ne8 &roject 'orKspace, mostrada na Figura 0/-, + necess$rio e#ecutar o ;ue segue:
Figura 0/4 Aegundo passo na criao de um projeto no Fortran/
Figura 0/- 3anela para de!inio do tipo, diret1rio e nome do projeto/
a: )ntre os seis tipos de projetos apresentados na opo TBpe, clicar so"re Console Application no
caso deste tipo de projeto no estar selecionado 9realado em a?ul:/
": Na opo Focation estar$ indicado um diret1rio 9pasta: de!ault, ou seja, um diret1rio escol2ido
pelo pr1prio Fortran em !uno de sua con!igurao atual/ P poss.%el ;ue no seja o diret1rio
desejado/ Neste caso, de%ese clicar so"re o "oto Dro8se para indicar o diret1rio onde se ;uer
criar o projeto/ Ao se !a?er isso, surgir$ a janela C2oose *irectorB mostrada na Figura 0/H, na ;ual
de%ese e#ecutar:
Na opo *ri%es, clicando so"re o tri7ngulo in%ertido, escol2er C:
Na opo *irectorB name, digitar C:T=A*)CT&rojects, con!orme + mostrado na Figura 0/>/
Clicar so"re o "oto OS/
c: )star$ de %olta a janela Ne8 &roject 'orKspace, mostrada na Figura 0/-/ Clicar dentro do espao
de edio da opo Name/ )scre%er o nome do projeto, por e#emplo, programa50/ *epois disso,
a janela Ne8 &roject 'orKspace de%er$ !icar con!orme a Figura 0/J/ *e%ese perce"er ;ue o
nome do projeto, digitado na opo Name, aparece automaticamente na opo Focation/ )m
seguida, de%ese clicar so"re o "oto Create/ Ap1s isso, o Fortran criar$ um diret1rio com o nome
do projeto indicado, dentro do diret1rio j$ selecionado, con!orme + mostrado na Figura 0/,/
Figura 0/H *e!inio do dri%e do projeto/
Figura 0/> *e!inio do diret1rio para criao do projeto/
Figura 0/J Tipo, nome e diret1rio do projeto j$ de!inidos/
Cap.tulo 0/ (ntroduo 05
Figura 0/, Fortran com o nome do diret1rio criado para o projeto especi!icado/
1.) CRIA$O E INSER$O DO PROGRAMA*FONTE DENTRO DO PRO(ETO
O processo de edio ou criao de um programa + semel2ante N redao de uma carta com o
aplicati%o 'ord, ;ue + um editor de te#tos/ Ao necess$rios dois componentes: um editor de te#tos para
escre%er o programa computacional e um ar;ui%o para guardar o te#to no 2ard disK 9Q*: do computador/
No caso dos programas computacionais, a carta + c2amada de programa!onte e pode ser a"erta, editada
ou redigida dentro do Fortran ou em ;ual;uer outro editor de te#tos/ Ao longo deste te#to, as pala%ras
edio, digitao e implementao sero usadas como sinUnimos/ &ara iniciar a edio ou escrita de um
programa!onte em linguagem FORTRAN + necess$rio criar e inserir um ar;ui%o dentro do projeto/ (sso
+ !eito atra%+s dos seguintes passos:
0: No menu do Fortran, con!orme + mostrado na Figura 0/05, e#ecutar: (nsert, Files into &roject
2: Na janela (nsert Files into &roject, mostrada na Figura 0/00, e#ecutar o seguinte:
a: Na opo File Name, digitar o nome do programa!onte a ser criadoG por e#emplo, como mostrado
na Figura 0/02, programa50/!,5
Aempre de%ese usar !,5 como e#tenso dos nomes dos ar;ui%os do tipo programa!onte/ )le
indica ;ue o programa est$ ou ser$ escrito na linguagem FORTRAN ,5 ou ,-/
": Clicar so"re o "oto OS
Cap.tulo 0/ (ntroduo 00
Figura 0/05 (n.cio da criao do programa!onte/
Figura 0/00 3anela para de!inio do nome do programa!onte a inserir no projeto/
3: Na janela =icroso!t *e%eloper Atudio, mostrada na Figura 0/03, clicar so"re o "oto Ves
4: Na su"janela do lado es;uerdo do Fortran, clicar so"re o sinal E ao lado do nome do projetoG de%er$
aparecer o nome do programa!onte ;ue !oi inserido no projetoG no caso, programa50/!,5
-: Clicar rapidamente duas %e?es so"re o nome do programa!onte ;ue !oi inserido
H: Na janela =icroso!t *e%eloper Atudio, mostrada na Figura 0/04, clicar so"re o "oto Ves
>: O programa!onte inserido no projeto j$ est$ pronto para ser editado na su"janela do lado direito do
Cap.tulo 0/ (ntroduo 02
Fortran, con!orme mostrado na Figura 0/0-/
Figura 0/02 Nome do programa!onte j$ de!inido/
Figura 0/03/
Figura 0/04/
Figura 0/0- Fortran pronto para edio do programa!onte/
1.+ EDI$O DO PROGRAMA*FONTE
Ap1s a criao e insero do programa!onte dentro do projeto, o Fortran est$ pronto para ser
usado na edio do programa!onte, con!orme mostrado na Figura 0/0-/ 6m e#emplo de edio de
programa!onte + apresentado a seguir/
0: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to mostrado
a"ai#o em %ermel2o 9para aparecerem as aspas, de%ese clicar so"re a tecla delas e, em seguida, clicar
so"re a tecla de espao em "ranco:/
WRITE(,) !"eu pr#me#ro programa em $%RTR&'!
WRITE(,) !&no ())*!
E'+
2: &ara gra%ar ou sal%ar este te#to, no menu do Fortran, e#ecutar: File, Aa%e/ )m seguida, na
e#tremidade in!erior da janela principal do Fortran, surgir$ uma mensagem in!ormando o diret1rio e o
nome do programa!onte ;ue !oi gra%ado ou sal%o, como mostrado na Figura 0/0H/
3: Coment$rios so"re este programa:
a: *entro do editor de te#tos do Fortran, os comandos da linguagem FORTRAN so mostrados na
cor a?ul, con!orme pode ser %isto na Figura 0/0H/ ) o ;ue + criado ou de!inido pelo programador +
mostrado na cor preta/ Comandos so pala%rasc2a%e ;ue t<m uma !uno espec.!ica e de%em ser
usados e#atamente de acordo com suas normas/
": )#istem de?enas de comandos na linguagem FORTRAN/ No caso do primeiro programa!onte,
mostrado na Figura 0/0H, so usados apenas dois comandos: 'R(T) e )N*/
c: Como ser$ %isto ap1s a e#ecuo deste programa, ele simplesmente ir$ mostrar numa janela duas
lin2as de te#to: na primeira, =eu primeiro programa em FortranG e, na segunda, Ano 2554/ (sso +
conseguido com o comando 'R(T)/ Mual;uer te#to colocado entre aspas ap1s o comando
'R(T)9W,W: + escrito numa janela/
d: O comando )N* + necess$rio para indicar o !im do programa/
Figura 0/0H &rograma!onte escrito na linguagem FORTRAN/
1., COMPILA$O E GERA$O DO PROGRAMA*OB(ETO
Ap1s concluir a edio de um programa!onte, ele de%e ser compilado/ O processo de compilao
tradu? o programa!onte 9;ue + um ar;ui%o do tipo te#to, isto +, ;ue as pessoas conseguem ler
naturalmente, como o programa50/!,5: no c2amado programao"jeto, ;ue + um ar;ui%o do tipo "in$rio
9escrito na linguagem dos computadores, usando apenas os algarismos ?ero5 e um0:/ 6ma linguagem de
programao de alto n.%el 9Ramal2o, 2555: como o FORTRAN se constitui numa !orma Xamig$%elY ou
relati%amente !$cil de se escre%er programas/ O aplicati%o Fortran &o8erAtation 4/5, al+m do editor de
programas, tam"+m tem junto um compilador de programas/ &ara compilar um programa!onte ;ue est$
a"erto no editor de te#tos do Fortran, de%ese e#ecutar o seguinte no menu do Fortran: Duild, Compile
Ap1s a compilao, con!orme + mostrado na Figura 0/0>, aparecero tr<s lin2as com mensagens
na su"janela da parte in!erior do Fortran:
0: A primeira in!orma ;ue o Fortran est$ compilando 9Compiling: o programa!onte/
2: A segunda in!orma o nome e o diret1rio do programa!onte ;ue est$ sendo compilado/
3: Finalmente, a terceira in!orma o nome do programao"jeto 9no caso, programa50/o"j: ;ue !oi gerado
e o nOmero de erros 9errors: e de a%isos 98arnings: relati%os ao programa!onte compilado/ Ae 2ou%er
algum erro, o programao"jeto no + gerado/ A%isos no impedem a gerao do programao"jeto/ O
nome do programao"jeto + igual ao nome do programa!onte mas com e#tenso o"j
Figura 0/0> Compilao do programa!onte/
A compilao cria automaticamente um su"diret1rio c2amado *e"ug dentro do diret1rio do
projeto/ *entro deste su"diret1rio + ;ue se encontra o programao"jeto "em como outros ar;ui%os
au#iliares/ &odese %er isso com o aplicati%o 'indo8s NT )#plorer, ;ue + acessado e#ecutando o
seguinte no 'indo8s: Atart, &rograms, 'indo8s NT )#plorer/ *epois, de%ese acessar o diret1rio do
projeto, ;ue de%e estar dentro do diret1rio C:T=sde%T&rojects
1.1& GERA$O DO PROGRAMA*EXECUT-VEL
Ap1s o processo de compilao, + necess$rio gerar o programae#ecut$%el, ;ue + um ar;ui%o
poss.%el de ser e#ecutado ou XrodadoY pelo computador, como ;ual;uer outro programa ou aplicati%oG
por e#emplo, os aplicati%os 'ord, )#cel, &o8er&oint, Front&age, Corel*ra8, Acro"at, e o na%egador
(nternet )#plorer/ O programae#ecut$%el resulta da unio do programao"jeto, ;ue !oi gerado na
compilao do programa!onte, com outros programaso"jeto da pr1pria linguagem FORTRAN, ;ue
cont<m a traduo dos comandos do FORTRAN, como o 'R(T) e )N* usados no primeiro programa
!onte 9Figura 0/0>:/
&ara gerar o programae#ecut$%el, de%ese !a?er o seguinte no menu do Fortran: Duild, Duild/ )m
seguida, con!orme + mostrado na Figura 0/0J, aparecero duas lin2as com mensagens na su"janela da
parte in!erior do Fortran:
Figura 0/0J Zerao do programae#ecut$%el/
0: A primeira in!orma ;ue o Fortran est$ gerando o programae#ecut$%el, processo c2amado de
lincagem 9linKing:/
2: A segunda in!orma o nome do programae#ecut$%el 9no caso, programa50/e#e: ;ue !oi gerado e o
nOmero de erros 9errors: e de a%isos 98arnings: relacionados a ele/ O nome do programae#ecut$%el +
igual ao nome do projeto mas com e#tenso e#e
O programae#ecut$%el + gra%ado automaticamente dentro do su"diret1rio *e"ug, ;ue !ica dentro
do diret1rio do projeto, al+m de outros ar;ui%os au#iliares/ (sso pode ser %isto com o aplicati%o 'indo8s
NT )#plorer, como mostrado na Figura 0/0,/ Note nesta !igura ;ue no 'indo8s NT )#plorer a e#tenso
ou TBpe do programae#ecut$%el aparece como Application/
Figura 0/0, *iret1rio do projeto programa50 e seu su"diret1rio *e"ug/
1.11 EXECU$O DO PROGRAMA
Ap1s gerar o programae#ecut$%el, para e#ecut$lo ou Xrod$loY, isto +, para coloc$lo em
!uncionamento, "asta !a?er o seguinte no menu do Fortran: Duild, )#ecute/ Como resultado deste
comando, de%e ocorrer o seguinte:
0: Aparecer uma janela do tipo *OA, con!orme a Figura 0/25/ (sso ocorre por;ue na seo 0/H !oi criado
um projeto do tipo Console Application/
2: No t.tulo desta janela, com !undo em a?ul, aparece o nome do programa ;ue est$ sendo e#ecutado e o
diret1rio no ;ual ele se encontra, no caso C:T=A*)CT&rojectsTprograma50T*e"ugTprograma50/e#e
3: *entro desta janela, com !undo em preto, aparece o resultado da e#ecuo do programa/ No caso, as
!rases =eu primeiro programa em Fortran e Ano 2554/ A ordem das duas !rases + a mesma em ;ue
elas !oram colocadas no programa!onte/ (sso ocorre, por;ue o programa + e#ecutado do topo para
"ai#o, lin2a por lin2a do programa!onte/
4: Al+m disso, tam"+m aparece a !rase &ress anB KeB to continue/ Como di? este a%iso, "asta clicar em
;ual;uer tecla para continuar/ Ao !a?er isso, a e#ecuo do programa + encerrada/
Figura 0/25 Resultado da e#ecuo do programa50/
1.12 FIM DA SESS$O
&ara concluir o uso do Fortran e do 'indo8s, de%ese e#ecutar o seguinte:
0: &ara encerrar as ati%idades com um projeto, "asta e#ecutar no menu do Fortran: File, Close
'orKspace
2: Na janela =icroso!t *e%eloper Atudio, clicar so"re o "oto Ves
3: &ara !ec2ar o aplicati%o Fortran, "asta !a?er o seguinte em seu menu: File, )#it
4: &ara !ec2ar o 'indo8s, e#ecutar: Atart, A2ut *o8n[
-: Na janela A2ut *o8n 'indo8s, escol2er a opo Close all programs and log on as a di!!erent
userR/ Clicar so"re o "oto Ves
1.13 EXER.CIOS
)#erc.cio 0/0
0: )ditar um programa!onte em FORTRAN para escre%er a data atual/
2: Compilar o programa!onte
3: Zerar o programae#ecut$%el
4: )#ecutar o programa
)#erc.cio 0/2
0: Repetir o e#erc.cio 0/0 para escre%er em lin2as di!erentes cada um dos seguintes itens: nome, email,
endereo e tele!one de uma pessoa/
Cap.tulo 2/ Cari$%eis do tipo inteiro 25
C/012u3o 2. VARI-VEIS DO TIPO INTEIRO
OBJETIVOS DO CAPTULO
Conceitos de: %ari$%eis do tipo inteiro, atri"uio, a%isos e erros de compilao, erros de e#ecuo,
coment$rios dentro do programa!onte
Operadores matem$ticos "$sicos
Comandos do FORTRAN: (NT)Z)R e R)A*
2.1 0ro4r/m/&2.5,&6 78r9:o A
&ara iniciali?ar as ati%idades deste cap.tulo, de%ese e#ecutar:
0: No 'indo8s, seguindo o procedimento apresentado na seo 0/- do cap.tulo 0: Atart, &rograms,
Fortran &o8erAtation 4/5, =icroso!t *e%eloper Atudio
2: No Fortran, seguindo o procedimento apresentado na seo 0/H do cap.tulo 0, criar um projeto do tipo
Console Application com o nome programa52 no diret1rio \:TTA)RC)R0TAlunos2554]0Tlogin,
onde login de%e ser su"stitu.do pelo user name do usu$rio, isto +, a conta particular na rede 'indo8s
do *)=)C^6F&R/
3: No Fortran, seguindo o procedimento apresentado na seo 0/> do cap.tulo 0, criar e inserir no projeto
o programa!onte programa52/!,5
4: Con!orme + mostrado na Figura 2/0, dentro do espao de edio do Fortran, na su"janela maior,
copiar e#atamente o te#to mostrado a"ai#o em %ermel2o/
I'TE,ER &
WRITE(,) !&!
WRITE(,) &
E'+
-: Coment$rios so"re o programa:
a: No cap.tulo 0 !oram usados os comandos 'R(T) e )N* da linguagem FORTRAN/ No
programa52/!,5, 2$ um no%o co m ando: (NT)Z)R/ )le + usado para de!inir %ari$%eis do tipo
inteiro, isto +, %ari$%eis ;ue podem guardar ou ar m a?enar na m e m 1ria do co m putador nO m eros
inteiros, positi%os ou negati%os, co m o 2, -, 5, -43H> ou _ 3 /
": A lin2a I'TE,ER & de!ine a %ari$%el A como sendo do tipo inteiro/ )ste comando reser%a
um espao na mem1ria do computador, utili?ando o nome ou r1tulo A para arma?enar um
%alor inteiro/
c: A lin2a WRITE(,) !&! escre%e o coment$rio ;ue est$ entre aspasG no caso a letra A/
d: A lin2a WRITE(,) & escre%e o %alor da %ari$%el A ;ue est$ arma?enado na mem1ria do
Cap.tulo 2/ Cari$%eis do tipo inteiro 20
computador/
e: A lin2a E'+ encerra o programa/
H: Ao se compilar o programa, e#ecutando Duild, Compile, o resultado de%e ser o mostrado na Figura
2/0/ *e%ese notar na su"janela in!erior um a%iso 98arning: mencionando ;ue o %alor da %ari$%el A
no !oi de!inido/
>: Zerar o programae#ecut$%el !a?endo Duild, Duild/
Figura 2/0 Resultado da compilao do programa52/!,5, %erso A/
J: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura 2/2,
dentro da ;ual temse:
a: Na primeira lin2a, a letra A, resultado do comando WRITE(,) !&! do programa/
": Na segunda lin2a, o %alor ?ero, resultado do comando WRITE(,) & do programa/ (sso
ocorre por;ue no !oi de!inido um %alor para a %ari$%el A, con!orme o pr1prio Fortran in!ormou
durante a compilao do programa/ &ortanto, se m pre + n ecess$rio de!inir o %alor de cada %ari$%el
do progra m a, caso contr$rio, por de!ault, assu m ese %alor nulo/
c: ) na terceira lin2a, a !rase &ress anB KeB to continue/ Como di? este a%iso, "asta clicar em
;ual;uer tecla para continuar/ Ao se !a?er isso, a e#ecuo do programa + encerrada/
,: *e%ese perce"er a di!erena ;ue e#iste entre os comandos WRITE(,) !&! e WRITE(,) &
do programa/ No primeiro, A + um coment$rio/ No segundo, A + uma %ari$%el utili?ada para
arma?enar um %alor inteiro na mem1ria do computador/
Figura 2/2 Resultado da e#ecuo do programa52/!,5, %erso A/
2.2 0ro4r/m/&2.5,&6 78r9:o B
0: *entro do Fortran, editar e#atamente o te#to mostrado a"ai#o em %ermel2o/
I'TE,ER &
& - 3
WRITE(,) !&!
WRITE(,) &
E'+
2: Coment$rios so"re o programa: a Onica di!erena entre a %erso anterior 9A: e a atual 9D: do
programa52/!,5 + a incluso da segunda lin2a, ou seja, & - 3/ O sinal de igualdade dentro de um
programa escrito em linguagem FORTRAN + utili?ado para atri"uir o %alor ;ue est$ do lado direito N
%ari$%el do lado es;uerdo/ &ortanto, neste caso, o %alor 3 + atri"u.do N %ari$%el A/ )m outras pala%ras,
o %alor 3 + arma?enado num espao da mem1ria do computador ;ue + identi!icado pelo nome ou
r1tulo A, o nome da %ari$%el/ )ste %alor utili?ado 93: + apenas um e#emploG ele pode ser ;ual;uer
nOmero inteiro/
3: Nesta %erso do programa, ao se e#ecutar Duild, Compile, no 2a%er$ a%iso 98arning: por;ue, neste
caso, o %alor da %ari$%el A est$ de!inido/
4: Zerar o programae#ecut$%el !a?endo Duild, Duild/
-: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura 2/3,
dentro da ;ual temse:
a: Na primeira lin2a, a letra A, resultado do comando WRITE(,) !&! do programa/
": Na segunda lin2a, o %alor 3, resultado do comando WRITE(,) & do programa e do
comando anterior, & - 3/
c: ) na terceira lin2a, a !rase &ress anB KeB to continue/
H: *e%ese perce"er ;ue o programa + e#ecutado, lin2a por lin2a, da primeira 9I'TE,ER &: at+ a Oltima
9E'+:/
>: 6m e#emplo de erro de compilao + apresentado na Figura 2/4/ )le ocorre de%ido N eliminao do
segundo asterisco da terceira lin2a do programa/ )rros de co m pilao ocorrem ;uando os co m andos
do FORTRAN so utili?ados de ! or m a incorreta/ Na su"janela in ! erior do Fortran, geral m ente 2a%er$
um co m ent$rio indicando cada erro 9error:/ Fogo ap1s o no m e do progra m a!onte co m pilado, entre
par<nteses, + indicado o nO m ero da lin2a do progra m a!onte aonde de%e estar o erro/ No e#emplo da
Figura 2/4, o compilador do Fortran mostra o seguinte coment$rio:
C:Tmarc2iTprograma52Tprograma52"/!,593:: error FOR3J-2: sBnta# error detected "et8een , and :/
&ortanto, este coment$rio indica ;ue na lin2a 3 2$ um erro de sinta#e 9erro ;ue resulta do uso
incorreto de um comando, no caso o 'R(T): entre a %.rgula e o sinal de !ec2amento de par<nteses/
J: As lin2as do progra m a!onte so nu m eradas do topo para "ai#o, e as colunas, da es;uerda para a
direita/ Na e#tre m idade in ! erior da janela principal do Fortran, do lado direito, se m pre so indicados a
lin2a 9Fn: e a coluna 9Col: aonde o cursor se encontra dentro do programa!onte /
Figura 2/3 Resultado da e#ecuo do programa52/!,5, %erso D/
Figura 2/4 )#emplo de erro de compilao/
2.3 0ro4r/m/&2.5,&6 78r9:o C
0: *entro do Fortran, editar e#atamente o te#to mostrado a"ai#o em %ermel2o/
I'TE,ER &
& - 3
WRITE(,) !.alor de & - !, &
E'+
2: Coment$rios so"re o programa: a di!erena "$sica entre a %erso anterior 9D: e a atual 9C: do
programa52/!,5 + a juno dos dois comandos 'R(T) num s1, na terceira lin2a do programa, isto +,
WRITE(,) !.alor de & - !, &/ )sta !orma do comando 'R(T) + usada ;uando se ;uer
escre%er na mesma lin2a di%ersos elementos/ No caso, so apenas dois elementos, ou seja, o
coment$rio Calor de A I e a %ari$%el A/ Os elementos de%em ser separados por %.rgula/
3: )#ecutar Duild, Compile para compilar o programa/
4: Zerar o programae#ecut$%el !a?endo Duild, Duild/
-: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura 2/-,
dentro da ;ual temse:
a: Na primeira lin2a, como resultado do comando WRITE(,) !.alor de & - !, & do
programa, o coment$rio Calor de A I e, na mesma lin2a, o %alor da %ari$%el A, cujo %alor
atri"u.do dentro do programa !oi 3/
": ) na segunda lin2a, a !rase &ress anB KeB to continue/
Figura 2/- Resultado da e#ecuo do programa52/!,5, %erso C/
2.4 0ro4r/m/&2.5,&6 78r9:o D
0: *entro do Fortran, editar e#atamente o te#to mostrado a"ai#o em %ermel2o/
I'TE,ER &
& - *
& - 3
WRITE(,) !.alor de & - !, &
E'+
2: Coment$rios so"re o programa: a Onica di!erena entre a %erso anterior 9C: e a atual 9*: do
programa52/!,5 + a incluso da lin2a & - *, ;ue atri"ui o %alor 4 N %ari$%el A/
3: )#ecutar Duild, Compile para compilar o programa/
4: Zerar o programae#ecut$%el !a?endo Duild, Duild/
-: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, o resultado + o mesmo mostrado na Figura
2/-/ (sso ocorre por;ue o programa + e#ecutado, lin2a por lin2a, da primeira 9I'TE,ER &: at+ a Oltima
9E'+:/ Assim, em"ora ten2a sido atri"u.do o %alor 4 N %ari$%el A na segunda lin2a do programa, na
lin2a seguinte atri"uise o %alor 3 N mesma %ari$%el, e, na ;uarta lin2a do programa, escre%ese o
%alor de A/ O %alor escrito + 3 por;ue + o Oltimo %alor ;ue !oi arma?enado na mem1ria do
computador/ A denominao %ari$%el + usada justamente por;ue seu %alor pode ser alterado ao longo
da e#ecuo do programa/
2." 0ro4r/m/&2.5,&6 78r9:o E
0: *entro do Fortran, editar e#atamente o te#to mostrado a"ai#o em %ermel2o, incluindo a lin2a em
"ranco/
/ 0rograma)(.12)
I'TE,ER &
& - 3 / atr#3u# o valor 3 4 var#5vel &
WRITE(,) !.alor de & - !, &
E'+
2: Coment$rios so"re o programa: em cada lin2a do programa!onte, tudo ;ue esti%er N direita do
s.m"olo ` 9e#clamao: no + e#ecutado pelo programa/ Ao apenas coment$rios usados para
esclarecer o ;ue !a? cada parte do programa/ (sso + c2amado de documentao interna/ *entro do
editor do Fortran, todos os coment$rios !icam na cor %erde, como + mostrado na Figura 2/H/ 6m
coment$rio pode en%ol%er uma lin2a inteira do programa, como na primeira da %erso ), ou apenas
uma parte, como na ;uarta lin2a do programa/ Fin2as em "ranco dentro do programa!onte tam"+m
no so e#ecutadas/ )las e;ui%alem a um coment$rio em "ranco/ 6m e#emplo + a terceira lin2a do
programa52/!,5, %erso ), na Figura 2/H/
3: )#ecutar Duild, Compile para compilar o programa/
4: Zerar o programae#ecut$%el !a?endo Duild, Duild/
-: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, o resultado + o mesmo mostrado na Figura
2/-/ (sso ocorre por;ue as di!erenas entre a %erso C e a atual 9): do programa52/!,5 so apenas os
coment$rios e uma lin2a em "ranco, ;ue no so e#ecutados pelo programa/
H: &ara m aior clare?a e !acilidade de co m preenso do progra m a!onte, reco m endase ;ue dentro dele
sejam usados co m ent$rios e lin2as em "ranco/
Figura 2/H &rograma52/!,5, %erso )/
2.' 0ro4r/m/&3.5,&6 78r9:o A
&ara iniciali?ar as ati%idades com o pr1#imo programa, de%ese e#ecutar:
0: No Fortran, para !ec2ar o projeto atual: File, Close 'orKspace
2: Na janela =icroso!t *e%eloper Atudio, clicar so"re o "oto Ves
3: No Fortran, seguindo o procedimento apresentado na seo 0/H do cap.tulo 0, criar um projeto do tipo
Console Application com o nome programa53 no diret1rio \:TTA)RC)R0TAlunos2554]0Tlogin,
onde login de%e ser su"stitu.do pelo user name do usu$rio, isto +, a conta particular na rede 'indo8s
do *)=)C^6F&R/
4: No Fortran, seguindo o procedimento apresentado na seo 0/> do cap.tulo 0, criar e inserir no projeto
o programa!onte programa53/!,5
-: *entro do Fortran, editar e#atamente o te#to mostrado a"ai#o em %ermel2o, incluindo as lin2as em
"ranco/
I'TE,ER &, 6, 7, +, E, $, ,
A = -6
B = 2
C
D
= A +
B -
B
A
E - & 6
$ - & 8 6
, - & 6
WRITE(,) !& - !, &
WRITE(,) !6 - !, 6
WRITE(,) !& 9 6 - !, 7
WRITE(,) !6 : & - !, +
WRITE(,) !& 6 - !, E
WRITE(,) !& 8 6 - !, $
WRITE(,) !& 6 - !, ,
E'+
H: Coment$rios so"re o programa:
a: A lin2a I'TE,ER &, 6, 7, +, E, $, , de!ine as %ari$%eis A, D, C, *, ), F e Z como sendo do
tipo inteiro/ )ste comando reser%a espao na mem1ria do computador para di%ersas %ari$%eis com
apenas um comando (NT)Z)R/ )ntretanto, as %ari$%eis de%em estar separadas por %.rgula/
": As lin2as & - :; e 6 - ( atri"uem os %alores inteiros aH e 2 Ns %ari$%eis A e D/ )stes %alores
so apenas e#emplosG eles podem ser ;uais;uer nOmeros inteiros/
c: As %ari$%eis C, *, ), F e Z so calculadas em !uno dos %alores das %ari$%eis A e D, usando os
cinco operadores matem$ticos "$sicos de!inidos na Ta"ela 2/0, con!orme e#plicado a seguir/
Ta"ela 2/0 Operadores matem$ticos "$sicos em FORTRAN/
A.m"olo do operador matem$tico em
FORTRAN
Nome do s.m"olo Operao matem$tica
correspondente
E Ainal mais Adio
a Ainal menos Au"trao
W Asterisco =ultiplicao
^ Darra *i%iso
WW *uplo asterisco &otenciao
d: A lin2a 7 - & 9 6 adiciona os %alores das %ari$%eis A e D e atri"ui o resultado N %ari$%el C/
e: A lin2a + - 6 : & su"trai o %alor da %ari$%el A do %alor da %ari$%el D e atri"ui o resultado N
%ari$%el */
!: A lin2a E - & 6 multiplica os %alores das %ari$%eis A e D e atri"ui o resultado N %ari$%el )/
g: A lin2a $ - & 8 6 di%ide o %alor da %ari$%el A pelo %alor da %ari$%el D e atri"ui o resultado N
%ari$%el F/
2: A lin2a , - & 6 ele%a o %alor da %ari$%el A ao %alor da %ari$%el D e atri"ui o resultado N
%ari$%el Z/
>: )#ecutar Duild, Compile para compilar o programa/
J: Zerar o programae#ecut$%el !a?endo Duild, Duild/
,: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura 2/>,
dentro da ;ual temse: os %alores das %ari$%eis A e DG e os %alores resultantes das cinco opera@es
matem$ticas "$sicas da Ta"ela 2/0 e!etuadas com as %ari$%eis A e D/ Analisar cada resultado,
comparandoo com o %alor esperado o"tido de um c$lculo mental/
05: *entro do programa!onte, !a?er A I 0 e D I 2/ Compilar e gerar o e#ecut$%el do programa com esta
alterao/ )#ecutar o programa cujo resultado de%e ser a;uele mostrado na Figura 2/J/ Analisar
cada resultado, comparandoo com o %alor esperado o"tido de um c$lculo mental/ O resultado da
di%iso pode parecer incorreto mas no +/ (sso se de%e ao seguinte: o %alor ;ue resulta de um c$lculo
en%ol%endo dois nO m eros inteiros ta m "+m + um nO m ero inteiro, ;ue corresponde N parte inteira do
nO m ero real e;ui%alente ao c$lculo reali?ad o/ &ortanto, o resultado de 0 di%idido por 2 resulta em 5,-,
;ue + um nOmero real/ =as como o c$lculo en%ol%e dois nOmeros inteiros, a parte inteira do nOmero
real 5,- + 5, ;ue + o resultado da di%iso mostrado na Figura 2/J/ )ste tema ser$
e#plorado com mais detal2es no Cap.tulo 3/
Figura 2/> Resultado da e#ecuo do programa53/!,5, %erso A, com A I aH e D I 2/
Figura 2/J Resultado da e#ecuo do programa53/!,5, %erso A, com A I 0 e D I 2/
00: Atri"uir %alores Ns %ari$%eis dentro do pr1prio programa!onte no + recomend$%el/ &ois, para alterar
os %alores, + necess$rio ter o programa!onte, al+m de recompil$lo e gerar o programae#ecut$%el a
cada %e?/ O procedimento mais indicado + utili?ar o comando R)A*, apresentado na pr1#ima seo/
2.) 0ro4r/m/&3.5,&6 78r9:o B
0: *entro do Fortran, alterar o programa53/!,5, %erso A, para ;ue !i;ue e#atamente igual ao te#to
mostrado a"ai#o em %ermel2o, incluindo as lin2as em "ranco/
I'TE,ER &, 6, 7, +, E, $, ,
WRITE(,) !Entre com o valor de &!
RE&+(,) &
WRITE(,) !Entre com o valor de 6!
RE&+(,) 6
7 - & 9 6
+ - 6 : &
E - & 6
$ - & 8 6
, - & 6
WRITE(,) !& - !, &
WRITE(,) !6 - !, 6
WRITE(,) !& 9 6 - !, 7
WRITE(,) !6 : & - !, +
WRITE(,) !& 6 - !, E
WRITE(,) !& 8 6 - !, $
WRITE(,) !& 6 - !, ,
E'+
2: Coment$rios so"re o programa:
a: A Onica di!erena entre a %erso anterior 9A: e a atual 9D: do programa53/!,5 est$ no .nicio do
programa/ P a incluso de 4 lin2as no%as no lugar de se atri"uir %alores Ns %ari$%eis A e D/
": At+ a;ui, os comandos da linguagem FORTRAN ;ue !oram usados so: 'R(T), )N* e
(NT)Z)R/ Na %erso D do programa53/!,5, 2$ um no%o co m ando: R)A*/ )le + usado para
atri"uir 9!ornecer: %alores Ns %ari$%eis durante a e#ecuo de um progra m a/ (sto +, o co m ando
R)A* + e m pregado para F)R os dados de um progra m a/
c: A lin2a WRITE(,) !Entre com o valor de &! escre%e o coment$rio ;ue est$ entre aspas/
d: A lin2a RE&+(,) & l< um %alor digitado dentro da janela *OA, a"erta durante a e#ecuo do
programa, e o atri"ui N %ari$%el A/
3: )#ecutar Duild, Compile para compilar o programa/
4: Zerar o programae#ecut$%el !a?endo Duild, Duild/
-: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela do tipo *OA dentro da ;ual
temse:
a: Na primeira lin2a, o coment$rio )ntre com o %alor de A, resultado do comando WRITE(,)
!Entre com o valor de &! do programa/
": Na segunda lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o %alor da %ari$%el A,
resultado do comando RE&+(,) & do programa/ &ara ;ue o programa continue sua e#ecuo +
necess$rio digitar o %alor aH para a %ari$%el A e, em seguida, clicar na tecla enter/
c: Na terceira lin2a, o coment$rio )ntre com o %alor de D, resultado do comando WRITE(,)
!Entre com o valor de 6! do programa/
d: Na ;uarta lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o %alor da %ari$%el D,
resultado do comando RE&+(,) 6 do programa/ &ara ;ue o programa continue sua e#ecuo +
necess$rio digitar o %alor 2 para a %ari$%el D e, em seguida, clicar na tecla enter/
e: )m seguida, so apresentados os mesmos resultados da %erso A do programa53/!,5, con!orme a
Figura 2/,/
Figura 2/, Resultado da e#ecuo do programa53/!,5, %erso D, com A I aH e D I 2/
H: )#ecutar no%amente o programa, entrando com outros %alores para A e D/ )m seguida, analisar
cada resultado, comparandoo com o %alor esperado o"tido de um c$lculo mental/
>: )#ecutar no%amente o programa, com A I H e D I 5/ Nen2um resultado + apresentado por;ue o
programa no consegue di%idir H por 5/ (sso gera um erro ;ue interrompe a e#ecuo normal do
programa/ Ao se im ple m entar um progra m a, de%ese prepar$lo para ;ue seja e%itado ;ual;uer
di%iso por ?ero/ (sso pode ser !eito atra%+s de coment$rios ;ue in!ormem ao usu$rio do programa, na
janela da e#ecuo do programa ou no manual do programa, por e#emplo, ;uais as %ari$%eis ;ue no
podem ter %alor nulo/ Outra !orma mais e!eti%a de e%itar di%iso por ?ero ser$ %ista em cap.tulo
!uturo/
2.+ FIM DA SESS$O
&ara concluir o uso do Fortran e do 'indo8s, de%ese e#ecutar o seguinte:
0: &ara encerrar as ati%idades com um projeto, "asta e#ecutar no menu do Fortran: File, Close
'orKspace
2: Na janela =icroso!t *e%eloper Atudio, clicar so"re o "oto Ves
3: &ara !ec2ar o aplicati%o Fortran, "asta !a?er o seguinte em seu menu: File, )#it
4: &ara !ec2ar o 'indo8s, e#ecutar: Atart, A2ut *o8n[
-: Na janela A2ut *o8n 'indo8s, escol2er a opo Close all programs and log on as a di!!erent
userR/ Clicar so"re o "oto Ves
2., EXER.CIOS
)#erc.cio 2/0
)#ecutar no%amente o programa53/!,5, %erso D, com A I 2 e D I a0/ )m seguida, analisar cada
resultado, comparandoo com o %alor esperado o"tido de um c$lculo mental, especialmente o caso da
potenciao/ No Fortran, para a"rir um projeto j$ e#istente, como o programa53, "asta e#ecutar File,
Open 'orKspace/ )m seguida, indicar o diret1rio do projeto e selecionar o ar;ui%o ;ue tem o nome do
projeto e e#tenso mdp, no caso programa53/mdp
)#erc.cio 2/2
)#ecutar no%amente o programa53/!,5, %erso D, usando nOmeros reais, isto +, A I 0/- e D I 5/4/
NOmeros reais so representados com o sinal de ponto para separar a parte inteira da decimal/
)#erc.cio 2/3
0: )ditar um programa!onte em FORTRAN para e#ecutar o seguinte algoritmo 9passos::
a: ler tr<s nOmeros inteiros
": calcular a m+dia aritm+tica deles
c: escre%er os %alores lidos e o %alor da m+dia aritm+tica juntamente com coment$rios para
identi!ic$los
2: Compilar o programa!onte
3: Zerar o programae#ecut$%el
4: )#ecutar o programa com os %alores 0, 2 e 3/ )m seguida, analisar o resultado da m+dia !ornecido
pelo programa comparandoo com o %alor esperado o"tido por um c$lculo mental/
-: Repetir o item 4 para os %alores 0, 0 e 2/
)#erc.cio 2/4
0: )ditar um programa!onte em FORTRAN para e#ecutar o seguinte algoritmo 9passos::
a: ler o primeiro %alor 9inteiro: de uma progresso aritm+tica 9&/A/:, denotado por A0
": ler a di!erena 9nOmero inteiro: entre dois termos su"se;Lentes da &/A/, denotada por *
c: ler o nOmero 9inteiro: de termos da &/A/, denotado por N
d: calcular o Oltimo termo da &/A/, denotado por AN
e: calcular a soma de todos os termos da &/A/, denotado por AN
!: escre%er os tr<s %alores lidos e os dois calculados juntamente com coment$rios para identi!ic$los
2: Compilar o programa!onte
3: Zerar o programae#ecut$%el
4: )#ecutar o programa para A0 I 0, * I 3 e N I -/ Os resultados de%em ser AN I 03 e AN I 3-/
Cap.tulo 3/ Cari$%eis do tipo real 33
C/012u3o 3. VARI-VEIS DO TIPO REAL
OBJETIVOS DO CAPTULO
Conceitos de: %ari$%eis do tipo real, traduo de e#press@es alg+"ricas em FORTRAN, mistura de
%ari$%eis do tipo inteiro com real, prioridade nas opera@es matem$ticas
Operadores matem$ticos "$sicos
Comando do FORTRAN: R)AF
3.1 0ro4r/m/&3;.5,&
&ara iniciali?ar as ati%idades deste cap.tulo, de%ese e#ecutar:
0: No 'indo8s: Atart, &rograms, Fortran &o8erAtation 4/5, =icroso!t *e%eloper Atudio
2: Neste cap.tulo ser$ usado um projeto j$ e#istente, no caso o projeto do !im do cap.tulo 2/ &ara a"rilo,
de%ese e#ecutar o seguinte no Fortran:
a: File, Open 'orKspace
": (ndicar o diret1rio do projeto c2amado programa53
c: Aelecionar o ar;ui%o ;ue tem o nome do projeto e e#tenso mdp, no caso programa53/mdp
d: Na su"janela do lado es;uerdo do Fortran, clicar so"re o sinal E ao lado do nome do projetoG
de%er$ aparecer o nome do Oltimo programa!onte ;ue !oi inserido neste projeto
e: Clicar so"re o nome do programa!onte
!: )dit, Cut para retirar o programa!onte do projeto/ )ste comando no deletar$ o programa!onte/
)le apenas o retirar$ do projeto/ Muando se ;uiser, ele poder$ ser inserido no projeto no%amente,
"astando para isso selecionar o programa!onte desejado dentro do seu diret1rio e usar o comando
(nsert, Files into &roject/
3: No Fortran, seguindo o procedimento apresentado na seo 0/> do cap.tulo 0, criar e inserir no
projeto c2amado programa53 o programa!onte programa53c/!,5
4: Con!orme + mostrado na Figura 3/0, dentro do espao de edio do Fortran, na su"janela maior,
copiar e#atamente o te#to em %ermel2o mostrado na Ta"ela 3/0/
-: Coment$rios so"re o programa:
a: Nos cap.tulos 0 e 2 !oram usados os comandos 'R(T), )N*, (NT)Z)R e R)A* da linguagem
FORTRAN/ No programa53c/!,5 2$ um no%o co m ando: R)AF/ )le + usado para de!inir %ari$%eis
do tipo real, isto +, %ari$%eis ;ue podem guar d ar ou ar m a?enar na m e m 1ria do co m putador
nO m eros reais, positi%os ou negati%os, co m o 0/5, _0/5, 0/0, 3/040H ou _5/55 3 /
": No FORTRAN, nO m eros reais so representados com o sinal de ponto para separar a parte inteira
da deci m al/ *e%ese le m "rar ;ue em portugu<s se usa a %.rgula com este !i m/
Cap.tulo 3/ Cari$%eis do tipo real 34
c: A lin2a RE&< & de!ine a %ari$%el A como sendo do tipo real/ )ste comando reser%a um espao na
mem1ria do computador, utili?ando o nome ou r1tulo A para arma?enar um %alor real/ As demais
lin2as do programa j$ !oram comentadas no cap.tulo 2/
RE&< &
Ta"ela 3/0 &rograma53c/!,5/
WRITE(,) !Entre com o valor de & -!
RE&+(,) &
WRITE(,) !.alor de & - !, &
E'+
Figura 3/0 &rograma53c/!,5/
H: )#ecutar Duild, Compile para compilar o programa
>: Zerar o programae#ecut$%el !a?endo Duild, Duild/
J: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura 3/2,
dentro da ;ual temse:
a: Na primeira lin2a, o coment$rio )ntre com o %alor de A, resultado do comando WRITE(,)
!Entre com o valor de &! do programa/
": Na segunda lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o %alor da %ari$%el A,
resultado do comando RE&+(,) & do programa/ &ara ;ue o programa continue sua e#ecuo +
necess$rio digitar o %alor 0 para a %ari$%el A, por e#emplo, e, em seguida, clicar na tecla enter/
c: Na terceira lin2a, o coment$rio Calor de A I e o %alor da %ari$%el A, resultado do comando
WRITE(,) !.alor de & - !, & do programa/ *e%ese notar ;ue !oi !ornecido um %alor
inteiro para a %ari$%el A, no caso 0/ =as o resultado do programa mostra o %alor 0/555555
por;ue a %ari$%el A + do tipo real/
d: Na ;uarta lin2a, a !rase &ress anB KeB to continue/ Como di? este a%iso, "asta clicar em ;ual;uer
tecla para continuar/ Ao se !a?er isso, a e#ecuo do programa + encerrada/
Figura 3/2 Resultado da e#ecuo do programa53c/!,5 com A I 0/
,: )#ecutar no%amente o programa, atra%+s de Duild, )#ecute, com A I _5/5530/ 3unto a um nO m ero
real, a letra ) + usada para representar nO m eros m uito grandes ou m uito pe;uenos atra%+s da c2a m ada
notao cient.!ica ou e#ponencial/ *esta !orma, o %alor _3/055555)53 da %ari$%el A, mostrado na
Figura 3/3, signi!ica _3/0#05
3
, ;ue + igual a _5/5530/
Figura 3/3 Resultado da e#ecuo do programa53c/!,5 com A I _5/5530/
05: )#ecutar no%amente o programa, atra%+s de Duild, )#ecute, com A I 0/5)E2/ &odese !ornecer
dados ao progra m a usando a notao cient.!ica ou e#ponencial, como no e#emplo mostrado na Figura
3/4, onde A I 0/5)E2 I 0/5#05
2
I 055 I 0/5)2 I 0)2/
Figura 3/4 Resultado da e#ecuo do programa53c/!,5 com A I 0/5)E2/
3.2 0ro4r/m/&3<.5,&
0: Nesta seo ser$ usado um projeto j$ e#istente, no caso o projeto da seo anterior/ &ortanto, de%ese
e#ecutar o seguinte no Fortran:
a: Clicar so"re o nome do programa!onte
": )dit, Cut para retirar o programa!onte do projeto/
2: No Fortran, seguindo o procedimento apresentado na seo 0/> do cap.tulo 0, criar e inserir no
projeto c2amado programa53 o programa!onte programa53d/!,5
3: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 3/2/
I'TE,ER +
RE&< &, 6, 7
Ta"ela 3/2 &rograma53d/!,5/
WRITE(,) !Entre com o valor de & -!
RE&+(,) &
+ - &
6 - = 8 +
7 - =.) 8 +
WRITE(,) !.alor de + - !, +
WRITE(,) !.alor de 6 - !, 6
WRITE(,) !.alor de 7 - !, 7
E'+
4: )#ecutar Duild, Compile para compilar o programa
-: Zerar o programae#ecut$%el !a?endo Duild, Duild/
H: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura 3/-,
dentro da ;ual temse:
a: Na primeira lin2a, o coment$rio )ntre com o %alor de A, resultado do comando WRITE(,)
!Entre com o valor de &! do programa/
": Na segunda lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o %alor da %ari$%el A,
resultado do comando RE&+(,) & do programa/ &ara ;ue o programa continue sua e#ecuo +
necess$rio digitar o %alor 2/, para a %ari$%el A, por e#emplo, e, em seguida, clicar na tecla enter/
c: Nas lin2as seguintes, os resultados das %ari$%eis *, D e C/
Figura 3/- Resultado da e#ecuo do programa53d/!,5/
>: Coment$rios so"re os resultados do programa53d/!,5 mostrados na Figura 3/-:
a: Na lin2a + - & do programa, o %alor da %ari$%el real A + atri"u.do N %ari$%el inteira */ &ortanto,
apenas a parte inteira do nO m ero A + passada N %ari$%el *, despre?andose a parte deci m a l /
": Na lin2a 6 - = 8 + do programa, o resultado da di%iso do nOmero 0 9inteiro: pela %ari$%el
inteira * + atri"u.do N %ari$%el real D/ Con!orme %isto no cap.tulo 2, o %alor ;ue resulta de um
c$lculo en%ol%endo dois nO m eros inteiros ta m "+m + um nO m ero inteiro, ;ue corresponde N parte
inteira do nO m ero real e;ui%alente ao c$lculo reali?ad o/ &ortanto, o resultado de 0 di%idido por 2
9%ari$%el *: resulta em 5/-, ;ue + um nOmero real/ =as como o c$lculo en%ol%e dois nOmeros
inteiros, a parte inteira do nOmero real 5/- + 5, ;ue + o resultado da %ari$%el D mostrado na Figura
3/-/ Assim, apenas a parte inteira da di%iso 0 ^ * + passada N %ari$%el real D, despre?andose a
parte decimal/
c: Na lin2a 7 - =.) 8 + do programa, o resultado da di%iso do nOmero 0/5 9real: pela %ari$%el
inteira * + atri"u.do N %ari$%el real C/ Neste caso, o c$lculo en%ol%e a di%iso de um nOmero real
90/5: por um nOmero inteiro 9*:/ O resultado da %ari$%el C mostrado na Figura 3/- + igual a 5/-,
;ue + um nOmero real/ (sso ocorre por;ue o %alor ;ue resulta de um c$lculo en%ol%endo um
nOmero inteiro e um nOmero real + um nOmero real /
3.3 0ro4r/m/&38.5,&
0: Nesta seo ser$ usado um projeto j$ e#istente, no caso o projeto da seo anterior/ &ortanto, de%ese
e#ecutar o seguinte no Fortran:
a: Clicar so"re o nome do programa!onte
": )dit, Cut para retirar o programa!onte do projeto/
2: No Fortran, seguindo o procedimento apresentado na seo 0/> do cap.tulo 0, criar e inserir no
projeto c2amado programa53 o programa!onte programa53e/!,5
3: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 3/3/
RE&< &, 6, 7, +, E, $, ,
Ta"ela 3/3 &rograma53e/!,5/
WRITE(,) !Entre com o valor de &!
RE&+(,) &
WRITE(,) !Entre com o valor de 6!
RE&+(,) 6
7 - & 9 6
+ - 6 : &
E - & 6
$ - & 8 6
, - & 6
WRITE(,) !& - !, &
WRITE(,) !6 - !, 6
WRITE(,) !& 9 6 - !, 7
WRITE(,) !6 : & - !, +
WRITE(,) !& 6 - !, E
WRITE(,) !& 8 6 - !, $
WRITE(,) !& 6 - !, ,
E'+
4: )#ecutar Duild, Compile para compilar o programa
-: Zerar o programae#ecut$%el !a?endo Duild, Duild/
H: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura 3/H,
dentro da ;ual temse:
a: Na primeira lin2a, o coment$rio )ntre com o %alor de A, resultado do comando WRITE(,)
!Entre com o valor de &! do programa/
": Na segunda lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o %alor da %ari$%el A,
resultado do comando RE&+(,) & do programa/ &ara ;ue o programa continue sua e#ecuo +
necess$rio digitar o %alor 0/- para a %ari$%el A, por e#emplo, e, em seguida, clicar na tecla enter/
c: Na terceira lin2a, o coment$rio )ntre com o %alor de D, resultado do comando WRITE(,)
!Entre com o valor de 6! do programa/
d: Na ;uarta lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o %alor da %ari$%el D,
resultado do comando RE&+(,) 6 do programa/ &ara ;ue o programa continue sua e#ecuo +
necess$rio digitar o %alor 5/4 para a %ari$%el D, por e#emplo, e, em seguida, clicar na tecla enter/
e: Nas lin2as seguintes, os resultados das %ari$%eis C, *, ), F e Z/
Figura 3/H Resultado da e#ecuo do programa53e/!,5/
>: Analisar cada resultado mostrado na Figura 3/H comparandoo com o %alor esperado o"tido de um
c$lculo mental ou com o uso de uma calculadora/
J: )#ecutar no%amente o programa com outros %alores para A e D/ Analisar cada no%o resultado
comparandoo com o %alor esperado o"tido de um c$lculo mental ou com o uso de uma calculadora/
3.4 ESCALA DE PRIORIDADES ENTRE OS OPERADORES MATEM-TICOS
Na linguagem FORTRAN, as opera@es matem$ticas so e#ecutadas numa se;L<ncia l1gica de
acordo com uma escala de prioridades entre elas, ;ue + apresentada na Ta"ela 3/4/ Al+m disso so
consideradas as regras descritas na Ta"ela 3/-/ P importante con2ecer estas prioridades e regras para se
!a?er corretamente a traduo de e#press@es alg+"ricas em e#press@es na linguagem FORTRAN, dentro
de um programa!onte/ Alguns e#emplos de e#press@es alg+"ricas so apresentados a"ai#o nas );ua@es
93/0: a 93/J:/
Ta"ela 3/4 )scala de prioridades entre os operadores matem$ticos "$sicos em FORTRAN/
&rioridade A.m"olo Nome do s.m"olo Operao
0
a
9 : &ar<nteses Mual;uer
2
a
WW *uplo asterisco &otenciao
3
a
W
^
Asterisco
Darra
=ultiplicao
*i%iso
4
a
E

Ainal mais
Ainal menos
Adio
Au"trao
Ta"ela 3/- Regras adotadas nas opera@es matem$ticas em FORTRAN/
(tem Regra
0 No caso de opera@es matem$ticas ;ue t<m a mesma prioridade 9multiplicao e di%iso ou
adio e su"trao:, e#ecutase primeiro o c$lculo mais N es;uerda
2 &ar<nteses so usados para ;ue os c$lculos sejam e#ecutados na ordem ;ue se deseja/ Com eles,
a ordem de e#ecuo + do par<nteses mais interno para o mais e#terno/
3 Com duas ou mais potencia@es consecuti%as, a ordem de e#ecuo + da direita para a es;uerda/
4 O %alor ;ue resulta de um c$lculo en%ol%endo dois nOmeros inteiros tam"+m + um nOmero
inteiro, ;ue corresponde N parte inteira do nOmero real e;ui%alente ao c$lculo reali?ado/
- 6ma operao en%ol%endo um nOmero real com um nOmero inteiro resulta num nOmero real/
H A atri"uio de um nOmero real a uma %ari$%el do tipo inteiro resulta num nOmero inteiro ;ue
trunca a parte decimal do nOmero real/
> A atri"uio de um nOmero inteiro a uma %ari$%el do tipo real resulta num nOmero real/
J Muando se somam ou se su"traem dois nOmeros com magnitudes muito di!erentes, + poss.%el
;ue o %alor menor seja despre?ado/ A isso se denomina de erro de arredondamento ou de
truncamento/
, )spaos em "ranco entre %ari$%eis, sinais de igualdade, par<nteses, nOmeros ou operadores
matem$ticos no inter!erem no resultado dos c$lculos/ )les t<m apenas !uno est+tica/
H
0
= A + B C 93/0:
H
2
=
A +
B
C
93/2:
H
3
=
A + B
C
93/3:
H
4
=
A +
B
D
C
93/4:
H
-
= A +
B
C D
93/-:
H
H
= A + B C
D
93/H:
H
,
= 9C
3
:
2
93/>:
H
=

0
B
3
93/J:
05
3
3." 0ro4r/m/&35.5,&
0: Nesta seo ser$ usado um projeto j$ e#istente, no caso o projeto da seo 3/3 deste cap.tulo/
&ortanto, de%ese e#ecutar o seguinte no Fortran:
a: Clicar so"re o nome do programa!onte
": )dit, Cut para retirar o programa!onte do projeto/
2: No Fortran, seguindo o procedimento apresentado na seo 0/> do cap.tulo 0, criar e inserir no
projeto c2amado programa53 o programa!onte programa53!/!,5
3: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 3/H/
4: Coment$rios so"re o programa:
a: Nas duas primeiras lin2as + usado o comando R)AF para de!inir as %ari$%eis do tipo real do
programa/ Num m es m o progra m a, podese usar um ou m ais co m andos R)AF ou (NT)Z) R/
": A lin2a RE&+(,) &, 7, 6, + do programa + usada para ler os %alores de ;uatro %ari$%eis/ 6m
Onico co m ando R)A* pode ser usado para a leitura de di%ersos %alores ;ue so atri"u.dos a
di%ersas %ari$%eis, ;ue t<m ;ue estar separadas por %.rgul a /
c: As e#press@es em FORTRAN para as %ari$%eis Q0 a QH, Q, e Q05 correspondem
respecti%amente Ns e#press@es alg+"ricas dadas pelas );ua@es 93/0: a 93/J:/
RE&< &, 7, 6, +
Ta"ela 3/H &rograma53!/!,5/
RE&< >=, >(, >3, >*, >?, >;, >@, >A, >2, >=), >==, >=(
WRITE(,) !Entre com os valores de &, 7, 6 e +!
RE&+(,) &, 7, 6, +
>= - & 9 6 : 7
>( - & 9 6 8 7
>3 - (& 9 6) 8 7
>* - & 9 6 8 7 +
>? - & 9 6 8 (7 +)
>; - & 9 6 7 +
>@ - & 9 (6 (7 +))
>A - =.) 9 =.)E:=)
>2 - 7 3 (
H10 = (1.0 / 3 ) * ( (B**3) ** (1 / 2.0) )
H11 = (1.0 / 3.0) * ( (B**3) ** (1.0 / 2.0) )
H12 = (1 / 3 ) * ( (B**3) ** (1 / 2 ) )
WRITE(,) !>= - !, >=
WRITE(,) !>( - !, >(
WRITE(,) !>3 - !, >3
WRITE(,) !>* - !, >*
WRITE(,) !>? - !, >?
WRITE(,) !>; - !, >;
WRITE(,) !>@ - !, >@
WRITE(,) !>A - !, >A
WRITE(,) !>2 - !, >2
WRITE(,) !>=) - !, >=)
WRITE(,) !>== - !, >==
WRITE(,) !>=( - !, >=(
E'+
d: A e#presso em FORTRAN para a %ari$%el Q> corresponde N e#presso alg+"rica dada pela
);uao 93/H:/
e: As e#press@es em FORTRAN para as %ari$%eis Q00 e Q02 correspondem N e#presso alg+"rica
dada pela );uao 93/J:/ &or+m, na e#presso de Q02 so usados apenas nOmeros inteiros nas
di%is@es/
!: A e#presso em FORTRAN para a %ari$%el QJ corresponde a uma simples soma de dois nOmeros
reais, um muito pe;ueno em relao ao outro/
-: )#ecutar Duild, Compile para compilar o programa
H: Zerar o programae#ecut$%el !a?endo Duild, Duild/
>: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura 3/>,
dentro da ;ual temse:
Figura 3/> Resultado da e#ecuo do programa53!/!,5/
a: Na primeira lin2a, o coment$rio )ntre com os %alores de A, C, D e *, resultado do comando
WRITE(,) !Entre com os valores de &, 7, 6 e +! do programa/
": Na segunda lin2a, o programa p$ra e !ica aguardando ;ue sejam !ornecidos os %alores da %ari$%eis
A, C, D e *, resultado do comando RE&+(,) &, 7, 6, + do programa/ &ara ;ue o programa
continue sua e#ecuo + necess$rio digitar ;uatro %alores/ Cada %alor digitado ser$ atri"u.do
respecti%amente a uma das ;uatro %ari$%eis, na mesma se;L<ncia/ Q$ %$rias !ormas de se entrar
com di%ersos %alores para um Onico comando R)A*: digitando tudo na mesma lin2a, com cada
%alor separado por %.rgula ou espao em "rancoG digitando cada %alor e, em seguida, clicando na
tecla enterG ou misturas das tr<s !ormas anteriores/ A primeira !orma !oi usada no e#emplo da
Figura 3/> para se entrar com os %alores 0, 2, 3 e 4, respecti%amente, para as %ari$%eis A, C, D e
*/
c: Nas lin2as seguintes, os resultados das %ari$%eis Q0 a Q02/
J: Analisar cada resultado mostrado na Figura 3/> comparandoo com o %alor esperado o"tido de um
c$lculo mental ou com o uso de uma calculadora/ &ara tanto, de%em ser consideradas a escala de
prioridades da Ta"ela 3/4 e as regras descritas na Ta"ela 3/-/
,: )#ecutar no%amente o programa com outros %alores para as %ari$%eis A, C, D e */ Analisar cada
no%o resultado comparandoo com o %alor esperado o"tido de um c$lculo mental ou com o uso de
uma calculadora/
05: &ara concluir o uso do Fortran e do 'indo8s, de%ese e#ecutar os passos mostrados na seo 2/J do
cap.tulo 2/
3.' EXERC.CIOS
)#erc.cio 3/0
)scre%er as e#press@es em linguagem FORTRAN ;ue correspondem Ns seguintes e#press@es alg+"ricas,
onde A, D e F so nOmeros reais e ( e 3 so nOmeros inteiros:
&ara %eri!icar se a resposta de cada
item est$ correta, "asta implementar a
e#presso em FORTRAN num
programa e comparar seu resultado
com o %alor o"tido com uma
calculadora para a e#presso alg+"rica
correspondente/ Os dois resultados
de%em ser iguais/ (sso tam"+m %ale
para o pr1#imo e#erc.cio/
)#erc.cio 3/2
)scre%er as e#press@es alg+"ricas ;ue correspondem Ns seguintes e#press@es em linguagem FORTRAN:
a: A I 9 9 DWW90/5^2: : E -: ^ 055
": A I 90/5^05: E 9 DWW90^3/5: :
c: F I 90/5^93/5(:: W 9 9 9(WW2: E 90/5^93WW3:: : WW 90/5^2: :
d: F I 9 0/5 ^ 9 0/5 E 90/5^(: : : W 9 9 9(WW2: E 9 3 ^ 9 9(WW3: 2 : : : WW 90/5^3: :
)#erc.cio 3/3
0: )ditar um programa!onte em FORTRAN para e#ecutar o seguinte algoritmo 9passos::
a: ler tr<s nOmeros reais
": calcular a m+dia aritm+tica deles
c: escre%er os %alores lidos e o %alor da m+dia aritm+tica juntamente com coment$rios para
identi!ic$los
2: Compilar o programa!onte
3: Zerar o programae#ecut$%el
4: )#ecutar o programa com os %alores 0/5, 2/- e 3/>/ )m seguida, analisar o resultado da m+dia
!ornecido pelo programa comparandoo com o %alor esperado o"tido com uma calculadora/
-: Repetir o item 4 para os %alores 05, 0)E3 e 2)0/
)#erc.cio 3/4
0: )ditar um programa!onte em FORTRAN para e#ecutar o seguinte algoritmo 9passos::
a: ler o primeiro %alor 9real: de uma progresso aritm+tica 9&/A/:, denotado por A0
": ler a di!erena 9nOmero real: entre dois termos su"se;Lentes da &/A/, denotada por *
c: ler o nOmero 9inteiro: de termos da &/A/, denotado por N
d: calcular o %alor 9real: do Oltimo termo da &/A/, denotado por AN
e: calcular a soma de todos os termos da &/A/, denotado por AN
!: escre%er os tr<s %alores lidos e os dois calculados juntamente com coment$rios para identi!ic$los
2: Compilar o programa!onte
3: Zerar o programae#ecut$%el
4: )#ecutar o programa para A0 I 0/3, * I 3/, e N I -/ Os resultados de%em ser AN I 0H/, e AN I 4-/-/
4H Cap.tulo 4/ Cari$%eis do tipo caracter
C/012u3o 4. VARI-VEIS DO TIPO CARACTER
OBJETIVOS DO CAPTULO
Conceitos de: %ari$%eis do tipo caracter, strings, !un@es intr.nsecas
Fun@es intr.nsecas do FORTRAN para %ari$%eis do tipo caracter: A*36ATF, A*36ATR, TR(= e
F)N
Comando do FORTRAN: CQARACT)R
4.1 0ro4r/m/4/.5,&
&ara iniciali?ar as ati%idades deste cap.tulo, de%ese e#ecutar:
0: No 'indo8s: Atart, &rograms, Fortran &o8erAtation 4/5, =icroso!t *e%eloper Atudio
2: No Fortran, seguindo o procedimento apresentado na seo 0/H do cap.tulo 0, criar um projeto do
tipo Console Application com o nome programa54 no diret1rio \:TTA)RC)R0TAlunos2554]0Tlogin,
onde login de%e ser su"stitu.do pelo user name do usu$rio, isto +, a conta particular na rede 'indo8s
do *)=)C^6F&R/
3: No Fortran, seguindo o procedimento apresentado na seo 0/> do cap.tulo 0, criar e inserir no
projeto o programa!onte programa4a/!,5
4: Con!orme + mostrado na Figura 4/0, dentro do espao de edio do Fortran, na su"janela maior,
copiar e#atamente o te#to em %ermel2o mostrado na Ta"ela 4/0/
-: Coment$rios so"re o programa:
a: Nos cap.tulos 0 a 3 !oram usados os comandos 'R(T), )N*, (NT)Z)R, R)A* e R)AF da
linguagem FORTRAN/ No programa4a/!,5 2$ um no%o co m ando: CQARACT)R/ )le + usado
para de!inir %ari$%eis do tipo caracter ou string, isto +, %ari$%eis ;ue podem guardar ou ar m a?enar
co m ent$rios na m e m 1ria do co m putador/ )stes co m ent$rios podem incluir pala%ras, nO m eros,
s. m "olos, espaos em "ranco ou !rases/ Alguns e#e m plos so 9os conteOdos das %ari$%eis esto
separados por %.rgula:: 6F&R, - de a"ril de 2554, teste de 2oje, T = 052, 625^-b, FcF/ As
%ari$%eis do tipo caracter ta m "+m so c2a m adas de al!anu m +ricas por;ue en%ol%em letras e
nO m eros/
": No FORTRAN, o conteOdo ou string de u m a %ari$%el do tipo caracter + de!inido entre aspas/
c: A lin2a 7>&R&7TER & declara a %ari$%el A como sendo do tipo caracter/ )ste comando reser%a um
espao na mem1ria do computador, utili?ando o nome ou r1tulo A, para arma?enar um Onico
caracter al!anum+rico/
d: A lin2a & - !B$0R, 7ur#t#3a, 0R! atri"ui o conteOdo entre aspas N %ari$%el A/
4> Cap.tulo 4/ Cari$%eis do tipo caracter
7>&R&7TER &
& - !B$0R, 7ur#t#3a, 0R!
Ta"ela 4/0 &rograma4a/!,5, %erso 0/
WRITE(,) !7onteudo de & - !, &
E'+
Figura 4/0 &rograma4a/!,5, %erso 0/
H: )#ecutar Duild, Compile para compilar o programa
>: Zerar o programae#ecut$%el !a?endo Duild, Duild/
J: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura 4/2,
dentro da ;ual temse:
a: Na primeira lin2a, o coment$rio Conteudo de A I, e, em seguida, a letra 6, resultado do comando
WRITE(,) !7onteudo de & - !, & do programa/
": Na segunda lin2a, a !rase &ress anB KeB to continue/ Como di? este a%iso, "asta clicar em ;ual;uer
tecla para continuar/ Ao se !a?er isso, a e#ecuo do programa + encerrada/
Figura 4/2 Resultado da e#ecuo do programa4a/!,5, %erso 0/
,: No FORTRAN, cada %ari$%el do tipo caracter de%e ser declarada com a di m enso ade;uada N
;uantidade m $#i m a de letras, nO m eros, espaos em "ranco e s. m "olos ;ue ela poder$ conter/ Muando
no se declara o ta m an2o, assu m ese ;ue seja apenas um caracte r/ *e%ido a isso, somente a letra 6 !oi
apresentada como conteOdo da %ari$%el A, na %erso 0 do programa4a/!,5, em"ora ela ten2a sido
de!inida com muito mais caracteres/
05: &ara declarar a di m enso de u m a %ari$%el do tipo caracter, "asta colocar o ta m an2o entre par<nteses
junto N pala%ra c2aracter , como e#empli!icado na %erso 2 do programa4a/!,5, na Ta"ela 4/2/
7>&R&7TER(?)) &
& - !B$0R, 7ur#t#3a, 0R!
Ta"ela 4/2 &rograma4a/!,5, %erso 2/
WRITE(,) !7onteudo de & - !, &
E'+
00: Alterar a primeira lin2a do programa4a/!,5 para !icar igual N Ta"ela 4/2/ Compilar no%amente o
programa e gerar seu e#ecut$%el/ )#ecutar o programa/ Agora, con!orme a Figura 4/3, + apresentado o
conteOdo completo da %ari$%el A, j$ ;ue ele ocupa apenas 0J caracteres e a %ari$%el A !oi
dimensionada pre%endo at+ -5 caracteres/
Figura 4/3 Resultado da e#ecuo do programa4a/!,5, %erso 2/
4.2 0ro4r/m/4=.5,&
0: Nesta seo ser$ usado o mesmo projeto da seo anterior/ &ortanto, de%ese e#ecutar o seguinte no
Fortran:
a: Clicar so"re o nome do programa!onte
": )dit, Cut para retirar o programa!onte do projeto/
2: No Fortran, seguindo o procedimento apresentado na seo 0/> do cap.tulo 0, criar e inserir no
projeto c2amado programa54 o programa!onte programa4"/!,5
3: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 4/3/
4: Coment$rios so"re o programa:
a: A lin2a 7>&R&7TER(?)) & declara a %ari$%el A como sendo do tipo caracter/ )ste comando
reser%a um espao na mem1ria do computador, utili?ando o nome ou r1tulo A, para arma?enar at+
-5 caracteres al!anum+ricos/
": O co m ando R)A* do FORTRAN ta m "+m pode ser usado para atri"uir X%alorY ou conteOdo a
u m a %ari$%el do tipo caracter, desde ;ue o conteOdo esteja entre aspas/ 6m e#emplo + mostrado na
lin2a RE&+(,) &/
7>&R&7TER(?)) &
Ta"ela 4/3 &rograma4"/!,5/
WRITE(,) !Entre com o conteudo de & -!
RE&+(,) &
WRITE(,) !7onteudo de & - !, &
E'+
-: )#ecutar Duild, Compile para compilar o programa
H: Zerar o programae#ecut$%el !a?endo Duild, Duild/
>: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura 4/4,
dentro da ;ual temse:
a: Na primeira lin2a, o coment$rio )ntre com o conteudo de A I, resultado do comando WRITE(,)
!Entre com o conteudo de & -! do programa/
": Na segunda lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o conteOdo da %ari$%el A,
resultado do comando RE&+(,) & do programa/ &ara ;ue o programa continue sua e#ecuo +
necess$rio digitar, entre aspas, um conteOdo para a %ari$%el A, por e#emplo, XTeste de 2ojeY e, em
seguida, clicar na tecla enter/
c: Na terceira lin2a, o conteOdo da %ari$%el A/
Figura 4/4 Resultado da e#ecuo do programa4"/!,5/
J: )#ecutar no%amente o programa, atra%+s de Duild, )#ecute, testando outros conteOdos para a
%ari$%el A e %endo o resultado/ Testar, por e#emplo, uma !rase com pelo menos duas pala%ras mas
sem usar aspas para de!inir o conteOdo de A/
4.3 0ro4r/m/4;.5,&
0: Nesta seo ser$ usado o mesmo projeto da seo anterior/ &ortanto, de%ese e#ecutar o seguinte no
Fortran:
a: Clicar so"re o nome do programa!onte
": )dit, Cut para retirar o programa!onte do projeto/
2: No Fortran, seguindo o procedimento apresentado na seo 0/> do cap.tulo 0, criar e inserir no
projeto c2amado programa54 o programa!onte programa4c/!,5
3: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 4/4/
4: Coment$rios so"re o programa:
a: A lin2a 7>&R&7TER(()) <%7&<, +I& declara duas %ari$%eis, FOCAF e *(A, como sendo do tipo
caracter, cada uma podendo arma?enar at+ 25 caracteres al!anum+ricos/
": A lin2a 7>&R&7TER(=)) >%R& declara a %ari$%el QORA como sendo do tipo caracter, podendo
arma?enar at+ 05 caracteres al!anum+ricos/
c: A lin2a 7>&R&7TER(2)) $R&SE declara a %ari$%el FRAA) como sendo do tipo caracter, podendo
arma?enar at+ ,5 caracteres al!anum+ricos/
d: A lin2a $R&SE - !$rase: ! 88 <%7&< 88 !, ! 88 +I& 88 !, as ! 88 >%R& 88 ! horas!
de!ine o conteOdo da %ari$%el FRAA) com "ase em alguns coment$rios ;ue esto entre aspas e no
conteOdo das %ari$%eis FOCAF, *(A e QORA/ (sso + poss.%el de%ido ao uso do operador de
concatenao cujo s. m "olo + co m posto por duas "arras 9^^:/ )ste operador per m ite juntar duas ou
m ais %ari$%eis do tipo caracter/
7>&R&7TER(()) <%7&<, +I&
7>&R&7TER(=)) >%R&
7>&R&7TER(2)) $R&SE
Ta"ela 4/4 &rograma4c/!,5/
WRITE(,) !Entre com o local -!
RE&+(,) <%7&<
WRITE(,) !Entre com o d#a -!
RE&+(,) +I&
WRITE(,) !Entre com a hora -!
RE&+(,) >%R&
$R&SE - !$rase: ! 88 <%7&< 88 !, ! 88 +I& 88 !, as ! 88 >%R& 88 ! horas!
WRITE(,) !7onteudo de $R&SE - !, $R&SE
E'+
-: )#ecutar Duild, Compile para compilar o programa
H: Zerar o programae#ecut$%el !a?endo Duild, Duild/
>: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura 4/-,
dentro da ;ual temse:
a: Na primeira lin2a, o coment$rio )ntre com o local I, resultado do comando WRITE(,) !Entre
com o local -! do programa/
": Na segunda lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o conteOdo da %ari$%el
FOCAF, resultado do comando RE&+(,) <%7&< do programa/ &ara ;ue o programa continue
sua e#ecuo + necess$rio digitar o conteOdo da %ari$%el FOCAF, por e#emplo, XCuriti"aY e,
em seguida, clicar na tecla enter/
c: Na terceira lin2a, o coment$rio )ntre com o dia I, resultado do comando WRITE(,) !Entre
com o d#a -! do programa/
d: Na ;uarta lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o conteOdo da %ari$%el
*(A, resultado do comando RE&+(,) +I& do programa/ &ara ;ue o programa continue sua
e#ecuo + necess$rio digitar o conteOdo da %ari$%el *(A, por e#emplo, X- de a"ril de 2554Y e, em
seguida, clicar na tecla enter/
e: Na ;uinta lin2a, o coment$rio )ntre com a 2ora I, resultado do comando WRITE(,) !Entre
com a hora -! do programa/
!: Na se#ta lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o conteOdo da %ari$%el
QORA, resultado do comando RE&+(,) >%R& do programa/ &ara ;ue o programa continue sua
e#ecuo + necess$rio digitar o conteOdo da %ari$%el QORA, por e#emplo, X05:-JY e, em
seguida, clicar na tecla enter/
g: Na s+tima lin2a, o coment$rio ConteOdo de FRAA) I e, em seguida, o conteOdo da %ari$%el
FRAA), resultado do comando WRITE(,) !7onteudo de $R&SE - !, $R&SE do programa e
da lin2a anterior aonde se de!iniu a %ari$%el FRAA)/
Figura 4/- Resultado da e#ecuo do programa4c/!,5/
J: *e%ese notar na Figura 4/- ;ue a escrita do conteOdo da %ari$%el FRAA) ocupou mais de uma lin2a/
(sso ocorre de%ido a sua e#tenso ser muito grande, isto +, superior ao nOmero dispon.%el de colunas
numa janela do tipo *OA/
,: No FORTRAN, se o conteOdo de uma %ari$%el + de!inido com menos caracteres do ;ue o m$#imo
declarado, a di!erena entre os caracteres ocupados e o m$#imo pre%isto + preenc2ida com espaos
em "ranco, como no conteOdo da %ari$%el FRAA)/ &or e#emplo, a %ari$%el FOCAF !oi declarada
com taman2o m$#imo de 25 caracteres/ =as seu conteOdo !oi de!inido com XCuriti"aY, pala%ra ;ue
ocupa apenas J caracteres/ Neste caso, os demais 02 caracteres so preenc2idos com espaos em
"ranco/ O mesmo pro"lema ocorre com as demais %ari$%eis/ Formas de se resol%er este pro"lema so
a"ordadas na pr1#ima seo/
05: )#ecutar no%amente o programa com outros conteOdos para as %ari$%eis FOCAF, *(A e QORA/
4.4 0ro4r/m/4<.5,&
0: Nesta seo ser$ usado o mesmo projeto da seo anterior deste cap.tulo/ &ortanto, de%ese e#ecutar o
seguinte no Fortran:
a: Clicar so"re o nome do programa!onte
": )dit, Cut para retirar o programa!onte do projeto/
2: No Fortran, seguindo o procedimento apresentado na seo 0/> do cap.tulo 0, criar e inserir no
projeto c2amado programa54 o programa!onte programa4d/!,5
3: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 4/-/
7>&R&7TER(2) &
I'TE,ER <
Ta"ela 4/- &rograma4d/!,5/
WRITE(,) !Entre com o conteudo de & -!
WRITE(,) !)=(3*?;@A2!
RE&+(,) &
WRITE(,) ! )=(3*?;@A2!
WRITE(,) !& -(!, &, !)!
WRITE(,) !7om &+CBST< -(!, &+CBST<(&), !)!
WRITE(,) !7om &+CBSTR -(!, &+CBSTR(&), !)!
WRITE(,) !7om TRI" -(!, TRI"(&), !)!
WRITE(,) !7om &+CBST< e TRI" -(!, TRI"(&+CBST<(&)), !)!
< - <E'(&)
WRITE(,) !< de & - !, <
< - <E'(TRI"(&+CBST<(&)))
WRITE(,) !< de & com TRI" e &+CBST< - !, <
E'+
4: Coment$rios so"re o programa:
a: A lin2a 7>&R&7TER(2) & declara a %ari$%el A como sendo do tipo caracter, podendo arma?enar
at+ , caracteres al!anum+ricos/
": A lin2a I'TE,ER < declara a %ari$%el F como sendo do tipo inteiro/
c: Con!orme podese %er na Figura 4/H, A*36ATF, A*36ATR, TR(= e F)N esto escritos em a?ul
dentro do Fortran/ )las so c2amadas de !un@es intr.nsecas do FORTRA N, ou seja, so !un@es
ou comandos ;ue e#istem dentro da linguagem FORTRAN/ )stas !un@es so usadas para
m anipular strings, isto +, conteOdos de %ari$%eis do tipo caracte r /
d: A lista co m pleta das !un@es para %ari$%eis do tipo caracter pode ser %ista no m anual do Fortran/
&ara acess$lo, dentro da su"janela do lado es;uerdo, de%ese e#ecutar: clicar u m a %e? so"re o
s. m "olo R(n!oCie 8 G e acessar as op@es Re!erence, &rocedures, C2aracter &rocedures/
e: A lin2a WRITE(,) !& -(!, &, !)! escre%e em se;L<ncia o conteOdo de
tr<s strings ;ue esto separadas por %.rgula/ A primeira + o coment$rio & -(G
-4 Cap.tulo 4/ Cari$%eis do tipo caracter
a segunda, o conteOdo da %ari$%el AG e a terceira, )/ As ;uatro lin2as seguintes do programa
!a?em o mesmo, isto +, cada uma escre%e tr<s strings em se;L<ncia/ =as, nestes casos, em %e? de
escre%er o conteOdo da %ari$%el A, escre%ese o resultado de alguma !uno operando so"re A,
con!orme as e#plica@es a seguir/
Figura 4/H &rograma4d/!,5/
!: A !uno A*36ATF eli m ina os espaos em "ranco ;ue esto N es;uerda de u m a string e os passa
N direita dela/
g: A !uno A*36ATR eli m ina os espaos em "ranco ;ue esto N direita de u m a string e os passa N
es;uerda dela/
2: A !uno TR(= eli m ina os espaos em "ranco ;ue esto N direita de u m a string/
i: O resultado das !un@es A*36ATF, A*36ATR e TR(= so strings/
j: A !uno F)N conta o nO m ero de caracteres de u m a string ou %ari$%el do tipo caracter/ Aeu
resultado + um nO m ero inteir o /
K: Na instruo TRI"(&+CBST<(&)) do programa, a !uno TR(= opera so"re o resultado da !uno
A*36ATF so"re a %ari$%el A/
l: Na lin2a < - <E'(&) do programa, a !uno F)N opera so"re a %ari$%el A e atri"ui o resultado N
%ari$%el inteira F/
Cap.tulo 4/ Cari$%eis do tipo caracter --
m: Na lin2a < - <E'(TRI"(&+CBST<(&))) do programa, a !uno F)N opera so"re o resultado da
!uno TR(=, ;ue opera so"re o resultado da !uno A*36ATF so"re a %ari$%el A/ Finalmente, o
resultado da !uno F)N + atri"u.do N %ari$%el inteira F/
-: )#ecutar Duild, Compile para compilar o programa
H: Zerar o programae#ecut$%el !a?endo Duild, Duild/
>: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura 4/>,
dentro da ;ual temse:
a: Na primeira lin2a, o coment$rio )ntre com o conteudo de A I, resultado do comando WRITE(,)
!Entre com o conteudo de & -! do programa/
Figura 4/> Resultado da e#ecuo do programa4d/!,5/
": Na segunda lin2a, o coment$rio 50234-H>J,, resultado do comando WRITE(,) !)=(3*?;@A2!
do programa/ )ste coment$rio + uma esp+cie de r+gua para se perce"er claramente o nOmero de
caracteres usados para de!inir a %ari$%el A, e ;uantos espaos em "ranco e#istem antes da string
de A e depois dela/ O ?ero + usado por;ue a de!inio da %ari$%el A e#ige o sinal de aspas, ;ue
no conta em seu conteOdo/
c: Na terceira lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o conteOdo da %ari$%el A,
resultado do comando RE&+(,) & do programa/ &ara ;ue o programa continue sua e#ecuo +
necess$rio digitar o conteOdo da %ari$%el A, por e#emplo, X Rio 4-Y e, em seguida, clicar na tecla
enter / *e%ese perce"er ;ue 2$ um espao em "ranco antes da pala%ra Rio/
d: Na ;uarta lin2a, 25 espaos em "ranco seguidos pelo coment$rio 50234-H>J,, resultado do
comando WRITE(,) ! )=(3*?;@A2! do programa/ )ste coment$rio +
uma esp+cie de r+gua para se perce"er claramente os resultados a seguir/
e: Nas lin2as seguintes, so apresentados os resultados do conteOdo da %ari$%el A e das !un@es
A*36ATF, A*36ATR, TR(= e F)N operando so"re a %ari$%el A/ Os sinais 9 e : marcam o .nicio
e o !im de cada string/
J: Analisar cada resultado mostrado na Figura 4/>, considerando o conteOdo da %ari$%el A e as
de!ini@es apresentadas acima, nesta seo, para as !un@es A*36ATF, A*36ATR, TR(= e F)N/
,: )#ecutar no%amente o programa com outros conteOdos para a %ari$%el A/ Analisar os resultados de
cada no%a e#ecuo do programa/
05: &ara concluir o uso do Fortran e do 'indo8s, de%ese e#ecutar os passos mostrados na seo 2/J do
cap.tulo 2/
4." EXERC.CIO
)#erc.cio 4/0
0: )ditar um programa!onte em FORTRAN para e#ecutar o seguinte algoritmo 9passos::
a: declarar ;uatro %ari$%eis do tipo caracter com dimenso de -, 05, 25 e 35 caracteres
": ler o conteOdo das ;uatro %ari$%eis
c: escre%er o conteOdo de cada uma das ;uatro %ari$%eis
d: usando o operador de concatenao, escre%er com"ina@es das ;uatro %ari$%eis lidas
e: aplicar e escre%er o resultado da !uno A*36ATF a cada uma das ;uatro %ari$%eis lidas
!: aplicar e escre%er o resultado da !uno A*36ATR a cada uma das ;uatro %ari$%eis lidas
g: aplicar e escre%er o resultado da !uno TR(= a cada uma das ;uatro %ari$%eis lidas
2: aplicar e escre%er o resultado da !uno TR(=9A*36ATF: a cada uma das ;uatro %ari$%eis lidas
i: aplicar e escre%er o resultado da !uno F)N a cada uma das ;uatro %ari$%eis lidas
j: aplicar e escre%er o resultado da !uno F)N9TR(=9A*36ATF:: a cada uma das ;uatro %ari$%eis
lidas
2: Compilar o programa!onte
3: Zerar o programae#ecut$%el
4: )#ecutar o programa/ )m seguida, comparar os resultados escritos com o esperado para cada caso/
-> Cap.tulo -/ Ar;ui%os e !un@es matem$ticas intr.nsecas
C/012u3o ". AR>UIVOS E FUN!ES MATEM-TICAS
INTR.NSECAS
OBJETIVOS DO CAPTULO
Conceitos de: ar;ui%o de sa.da, "i"lioteca, !un@es matem$ticas intr.nsecas
Criar e usar ar;ui%os para mostrar resultados da e#ecuo de um programa em FORTRAN
6sar o aplicati%o Notepad do 'indo8s para mostrar o conteOdo de um ar;ui%o durante a e#ecuo de
um programa em FORTRAN
Fun@es matem$ticas intr.nsecas do FORTRAN
Comandos do FORTRAN: 'R(T)9nOmero,W:, O&)N, CFOA), 6A), AVAT)=
".1 0ro4r/m/"/.5,&
&ara iniciali?ar as ati%idades deste cap.tulo, de%ese e#ecutar:
0: No 'indo8s: Atart, &rograms, Fortran &o8erAtation 4/5, =icroso!t *e%eloper Atudio
2: No Fortran, seguindo o procedimento apresentado na seo 0/H do cap.tulo 0, criar um projeto do
tipo Console Application com o nome programa5- no diret1rio \:TTA)RC)R0TAlunos2554]0Tlogin,
onde login de%e ser su"stitu.do pelo user name do usu$rio, isto +, a conta particular na rede 'indo8s
do *)=)C^6F&R/
3: No Fortran, seguindo o procedimento apresentado na seo 0/> do cap.tulo 0, criar e inserir no
projeto o programa!onte programa-a/!,5
4: Con!orme + mostrado na Figura -/0, dentro do espao de edio do Fortran, na su"janela maior,
copiar e#atamente o te#to em %ermel2o mostrado na Ta"ela -/0/
-: Coment$rios so"re o programa:
a: At+ a;ui o comando 'R(T) !oi utili?ado com dois asteriscos dentro do par<nteses, isto +, !oi
usado na !orma ' R(T)9W,W:/ O pri m eiro asterisco do co m ando ' R(T) representa o XlocalY ou
dispositi%o ;ue + usado para Xescre%erY algum co m ent$rio ou resultado do progra m a/ )ste
asterisco pode ser su"stitu.do por um nO m ero/ O nO m ero H representa u m a janela do *OA, co m o
a;uela ;ue %em sendo usada at+ a;ui para apresentar os resultados dos progra m a sG por e#emplo, a
janela mostrada na Figura -/2/ &ortanto, o uso de asterisco no co m ando ' R(T) e;ui%ale a
e m pregar o nO m ero H/
": A Onica di!erena entre o programa-a/!,5 e o programa3c/!,5, da seo 3/0 do cap.tulo 3, + o uso
do nOmero H no lugar do primeiro asterisco dos comandos 'R(T)/
H: )#ecutar Duild, Compile para compilar o programa/
>: Zerar o programae#ecut$%el !a?endo Duild, Duild/
J: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura -/2,
-J Cap.tulo -/ Ar;ui%os e !un@es matem$ticas intr.nsecas
dentro da ;ual temse:
a: Na primeira lin2a, o coment$rio )ntre com o %alor de A I, resultado do comando WRITE(;,)
!Entre com o valor de & -! do programa/
RE&< &
Ta"ela -/0 &rograma-a/!,5/
WRITE(;,) !Entre com o valor de & -!
RE&+(,) &
WRITE(;,) !.alor de & - !, &
E'+
Figura -/0 &rograma-a/!,5/
": Na segunda lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o %alor da %ari$%el A,
resultado do comando RE&+(,) & do programa/ &ara ;ue o programa continue sua e#ecuo +
necess$rio digitar o %alor 0 para a %ari$%el A, por e#emplo, e, em seguida, clicar na tecla enter/
c: Na terceira lin2a, o coment$rio Calor de A I e o %alor da %ari$%el A, resultado do comando
WRITE(;,) !.alor de & - !, & do programa/ *e%ese notar ;ue !oi !ornecido um %alor
inteiro para a %ari$%el A, no caso 0/ =as o resultado do programa mostra o %alor 0/555555
por;ue a %ari$%el A + do tipo real/
d: Na ;uarta lin2a, a !rase &ress anB KeB to continue/ Como di? este a%iso, "asta clicar em ;ual;uer
tecla para continuar/ Ao se !a?er isso, a e#ecuo do programa + encerrada/
,: O resultado da e#ecuo do programa-a/!,5 + e#atamente igual a do programa3c/!,5, da seo 3/0 do
cap.tulo 3/ Con!orme e#plicado no item -a, acima, isso ocorre de%ido N e;ui%al<ncia completa entre
os comandos 'R(T)9W,W: e 'R(T)9H,W:/
Figura -/2 Resultado da e#ecuo do programa-a/!,5/
".2 0ro4r/m/"=.5,&
0: Nesta seo ser$ usado o mesmo projeto da seo anterior/ &ortanto, de%ese e#ecutar o seguinte no
Fortran:
a: Clicar so"re o nome do programa!onte
": )dit, Cut para retirar o programa!onte do projeto/
2: No Fortran, seguindo o procedimento apresentado na seo 0/> do cap.tulo 0, criar e inserir no
projeto c2amado programa5- o programa!onte programa-"/!,5
3: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela -/2/
RE&< &
Ta"ela -/2 &rograma-"/!,5/
WRITE(;,) !Entre com o valor de & -!
RE&+(,) &
%0E'(@, 1#le-!sa#da?3.tDt!)
WRITE(@,) !.alor de & - !, &
7<%SE(@)
E'+
4: Coment$rios so"re o programa:
a: No programa-"/!,5 so usados dois no%os comandos do FORTRAN: O&)N e CFOA)/ Am"os
de%em ser usados em conjunto/
": A !orma do comando O&)N ;ue ser$ usada neste te#to + O&)N9nO m ero, !ileIXno m eY:/ O
co m ando O&)N + usado para: de!inir um nO m ero ;ue ser$ usado co m o re!er<ncia a um ar;ui%oG e
para a"rir o ar;ui%o c2a m ado Xno m eY/ O nO m ero pode ser de 0 a ,, e 05- a 2,,/ A utili?ao
deste nOmero num comando 'R(T)9nOmero,W: resulta na escrita de coment$rios ou %ari$%eis no
ar;ui%o ;ue corresponde ao nOmero de!inido no comando O&)N/ O no m e do ar;ui%o pode ser
;ual;uer um m as de%e !icar entre aspas/ M u ando se declara um no m e de ar;ui%o num co m ando
O&)N, se o ar;ui%o no e#istir, ele + criado dentro do diret1rio do projet o /
c: A !orma do comando CFOA) ;ue ser$ usada neste te#to + CFOA)9nO m ero:/ O co m ando CFOA)
+ usado para !ec2ar ou encerrar o uso de um ar;ui%o a"erto anterior m ente com o co m ando O&)N/
d: Todos ar;ui%os a"ertos com o co m ando O&)N so !ec2ados ao !inal da e#ecuo do progra m a,
e#istindo ou no o co m ando CFOA )/
e: *entro de um progra m a, para um m es m o nO m ero ou ar;ui%o, a se;L<ncia o"rigat1ria dos
co m andos + a seguinte: O&)N, ' R(T), CFOA)/ &ara um m es m o ar;ui%o, de%e e#istir apenas um
co m ando O&)N e um CFOA) dentro do progra m a, e podem e#istir di%ersos co m andos ' R(T)/
!: &odem ser usados %$rios ar;ui%os si m ultanea m ente num progra m a /
g: A principal %antagem de se usar um ar;ui%o + ter um registro per m anente dos resultados do
progra m a para posterior an$lise/ (sso !ica m ais e%idente ;uanto m aior !or a ;uantidade de
resultados de um progra m a/
-: )#ecutar Duild, Compile para compilar o programa/
H: Zerar o programae#ecut$%el !a?endo Duild, Duild/
>: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela do *OA, mostrada na
Figura -/3, dentro da ;ual temse:
Figura -/3 Resultado da e#ecuo do programa-"/!,5 na janela *OA com A I 0/
a: Na primeira lin2a, o coment$rio )ntre com o %alor de A I, resultado do comando WRITE(,)
!Entre com o valor de & -! do programa/
": Na segunda lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o conteOdo da %ari$%el A,
resultado do comando RE&+(,) & do programa/ &ara ;ue o programa continue sua e#ecuo +
necess$rio digitar o %alor 0 para a %ari$%el A, por e#emplo, e, em seguida, clicar na tecla
enter/
c: )m seguida ocorrer$ a criao do ar;ui%o saida-"/t#t, dentro do diret1rio do projeto, como
resultado do comando %0E'(@, 1#le-!sa#da?3.tDt!) do programa, uma %e? ;ue este ar;ui%o
ainda no e#iste ;uando o programa-"/!,5 !or e#ecutado pela primeira %e?/ )ste comando
tam"+m declara ;ue ser$ usado o nOmero > no programa como re!er<ncia ao ar;ui%o saida-"/t#t/
d: Con!orme + mostrado na Figura -/4, na primeira lin2a do ar;ui%o saida-"/t#t est$ escrito o
coment$rio Calor de A I e o %alor da %ari$%el real A como resultado do comando WRITE(@,)
!.alor de & - !, & do programa/
e: O ar;ui%o saida-"/t#t + !ec2ado, isto +, nada mais pode ser escrito nele ap1s o comando 7<%SE(@)
do programa/
Figura -/4 Resultado da e#ecuo do programa-"/!,5 no ar;ui%o saida-"/t#t com A I 0/
J: A e#ist<ncia do ar;ui%o saida-"/t#t pode ser compro%ada ao se e#ecutar Atart, &rograms, 'indo8s
NT )#plorer/ )m seguida, indicar o diret1rio do projeto, no caso, programa5-/ Finalmente, ao se
clicar duas %e?es so"re o nome do ar;ui%o, ele ser$ a"erto, podendose %er o seu conteOdo/
,: )#ecutar no%amente o programa, atra%+s de Duild, )#ecute, com A I a023/ Neste caso, como j$
e#iste o ar;ui%o saida-"/t#t ele ser$ usado para escre%er o no%o resultado do programa so"re o
resultado anterior, con!orme + mostrado na Figura -/-/ Ou seja, o resultado anterior, mostrado na
Figura -/4 + eliminado ou apagado/ &ara e%itar isso, + necess$rio gra%ar os resultados em ar;ui%os
di!erentes a cada e#ecuo do programa/ Outra possi"ilidade + alterar o nome do ar;ui%o de
resultados antes do programa ser e#ecutado no%amente/ )#ecutar o indicado no item anterior 9J:
para %er o no%o conteOdo do ar;ui%o saida-"/t#t/
05: No co m ando O&)N ta m "+m + poss.%el especi!icar todo o ca m in2o ou o diret1rio aonde o ar;ui%o
de%e ser criado ou a"erto/ Muando o diret1rio no + especi!icado, por de!ault, usase o diret1rio do
projeto ou o diret1rio no ;ual o progra m a + e#ecutad o/ &or e#emplo, trocar a lin2a %0E'(@,
1#le-!sa#da?3.tDt!), pelo seguinte: %0E'(@, 1#le-!7:ETempEsa#da?3.tDt!)/ Compilar
no%amente o programa-"/!,5, gerar o seu e#ecut$%el, e#ecutar o programa/ 6sar o aplicati%o
'indo8s NT )#plorer para encontrar e a"rir o ar;ui%o saida-"/t#t, ;ue agora de%er$ estar no
diret1rio C:TTemp/
Figura -/- Resultado da e#ecuo do programa-"/!,5 no ar;ui%o saida-"/t#t com A I a023/
00: Na pr1#ima seo, + apresentada uma !orma de se automati?ar a a"ertura do ar;ui%o de sa.da/ (sso
permite maior rapide? na %isuali?ao dos resultados de um programa/
".3 0ro4r/m/";.5,&
0: Nesta seo ser$ usado o mesmo projeto da seo anterior/ &ortanto, de%ese e#ecutar o seguinte no
Fortran:
a: Clicar so"re o nome do programa!onte
": )dit, Cut para retirar o programa!onte do projeto/
2: No Fortran, seguindo o procedimento apresentado na seo 0/> do cap.tulo 0, criar e inserir no
projeto c2amado programa5- o programa!onte programa-c/!,5
3: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela -/3/
4: Coment$rios so"re o programa:
a: No programa-c/!,5 so usados dois no%os comandos do FORTRAN: 6A) e AVAT)=/
": O co m ando 6A) "i"lio + usado para incluir d e ntro do progra m a u m a X"i"liotecaY c2a m ada "i"lio,
onde "i"lio de%e ser su"stitu.do pelo no m e da "i"lioteca desejada/ 6ma X"i"liotecaY, no presente
conte#to, + uma coleo de comandos ;ue no e#istem automaticamente dentro da linguagem
FORTRAN/ Todos os comandos usados at+ a;ui, por e#emplo 'R(T), j$ e#istem
automaticamente dentro da linguagem FORTRAN, mas o comando AVAT)=, no/ &ara ele ser
usado + necess$rio incluir no programa a "i"lioteca aonde este comando est$ de!inido, no caso + a
"i"lioteca c2amada &ORTF(D/
c: A linguagem FORTRAN per m ite a ;ual;uer progra m ador criar suas pr1prias "i"liotecas, co m o
ser$ %isto nos cap.tulos a%anados deste te#to/
BSE 0%RT<I6
RE&< &
I'TE,ER .ER
Ta"ela -/3 &rograma-c/!,5/
WRITE(;,) !Entre com o valor de & -!
RE&+(,) &
%0E'(@, 1#le-!sa#da?c.tDt!)
WRITE(@,) !.alor de & - !, &
7<%SE(@)
.ER - SFSTE" (!'otepad sa#da?c.tDt!)
E'+
d: No editor do aplicati%o Fortran, o comando AVAT)= no !ica na cor a?ul por no ser um dos
comandos "$sicos da linguagem FORTRAN/ O co m ando AVAT)= + utili?ado para e#ecutar
co m andos ;ue interagem com o siste m a operacional ' i ndo8 s/ (sso permite ;ue, durante a
e#ecuo do programa escrito em FORTRAN, seja reali?ado o seguinte: e#ecutar outros
programas ou aplicati%osG criar ou deletar diret1rios ou ar;ui%osG e ;ual;uer outro comando
poss.%el de se e#ecutar numa janela do tipo *OA/ &ara utili?ar o comando AVAT)= de%ese
de!inir uma %ari$%el do tipo inteiro/ *epois, usar esta %ari$%el na lin2a do programa aonde se
deseja e#ecutar o comando AVAT)=/ *entro de par<nteses e aspas, de%ese incluir a se;L<ncia
de comandos ;ue se deseja e#ecutar no 'indo8s/
e: A lin2a BSE 0%RT<I6 declara ;ue a "i"lioteca c2amada &ORTF(D ser$ acrescentada ao programa/
!: A lin2a .ER - SFSTE" (!'otepad sa#da?c.tDt!) e#ecuta o comando AVAT)= para ;ue o
aplicati%o NOT)&A* do 'indo8s a"ra o ar;ui%o c2amado saida-c/t#t/ A %ari$%el C)R, usada
nesta lin2a, !oi de!inida como uma %ari$%el do tipo inteiro na lin2a I'TE,ER .ER do programa/
-: )#ecutar Duild, Compile para compilar o programa/
H: Zerar o programae#ecut$%el !a?endo Duild, Duild/
>: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, ocorrer$ e#atamente o mesmo j$ e#plicado na
seo anterior para o programa-"/!,5/ A Onica di!erena + ;ue ;uase no !inal da e#ecuo do
programa, o ar;ui%o de resultados, ;ue !oi denominado de saida-c/t#t, ser$ a"erto automaticamente
pelo aplicati%o Notepad para mostrar o seu conteOdo/ Ao se !ec2ar o Notepad, a e#ecuo do
programa-c/!,5 ser$ encerrada/
J: No caso do co m ando O&)N ser usado para especi!icar todo o ca m in2o ou o d i ret1rio aonde o ar;ui%o
de%e ser criado ou a"erto, o co m ando AVAT)= ta m "+m de%e ser adaptado/ &or e#emplo, se o ar;ui%o
saida-c/t#t !or criado no diret1rio C:TTemp com o comando %0E'(@,
1#le-!7:ETempEsa#da?c.tDt!), o comando correspondente para a"rir automaticamente o ar;ui%o
saida-c/t#t + .ER - SFSTE" (!'otepad 7:ETempEsa#da?c.tDt!)/
".4 0ro4r/m/"<.5,&
0: Nesta seo ser$ usado o mesmo projeto da seo anterior deste cap.tulo/ &ortanto, de%ese e#ecutar o
seguinte no Fortran:
a: Clicar so"re o nome do programa!onte
": )dit, Cut para retirar o programa!onte do projeto/
2: No Fortran, seguindo o procedimento apresentado na seo 0/> do cap.tulo 0, criar e inserir no
projeto c2amado programa5- o programa!onte programa-d/!,5
3: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela -/4/
4: Coment$rios so"re o programa:
a: Con!orme podese %er na Figura -/H, ADA, FOZ05, ACOA, COA e COAQ esto escritos em a?ul
dentro do Fortran/ )las so c2amadas de !un@es intr.nsecas do FORTRA N, ou seja, so !un@es
ou comandos ;ue e#istem dentro da linguagem FORTRAN/ )las so !un@es matem$ticas usadas
em c$lculos ;ue en%ol%em %ari$%eis do tipo real/ Outras !un@es so apresentadas nas Ta"elas
-/- e -/H/
": A lista co m pleta de !un@es m ate m $ticas intr.nsecas do FORTRAN pode ser %ista no m anual do
Fortran/ &ara acess$lo, dentro da su"janela do lado es;uerdo, de%ese e#ecutar: clicar u m a %e?
so"re o s. m "olo R(n!oCie 8 G e acessar as op@es Re!erence, &rocedures, Numeric &rocedures e as
op@es Re!erence, &rocedures, Trigonometric, )#ponential, Root, and Fogat2mic &rocedures/
-: )#ecutar Duild, Compile para compilar o programa/
H: Zerar o programae#ecut$%el !a?endo Duild, Duild/
>: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura -/>,
dentro da ;ual temse:
a: Na primeira lin2a, o coment$rio )ntre com o %alor de A I, resultado do comando WRITE(,)
!Entre com o valor de & -! do programa/
": Na segunda lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o %alor da %ari$%el A,
resultado do comando RE&+(,) & do programa/ &ara ;ue o programa continue sua e#ecuo +
necess$rio digitar o %alor a05 para a %ari$%el A, por e#emplo, e, em seguida, clicar na tecla enter/
c: )m seguida ocorrer$ a criao do ar;ui%o saida-d/t#t, dentro do diret1rio do projeto, como
resultado do comando %0E'(A, 1#le-!sa#da?d.tDt!) do programa, uma %e? ;ue este ar;ui%o
ainda no e#iste ;uando o programa-d/!,5 !or e#ecutado pela primeira %e?/ )ste comando
tam"+m declara ;ue ser$ usado o nOmero J no programa como re!er<ncia ao ar;ui%o saida-d/t#t/
d: Os resultados das !un@es aplicadas no programa-d/!,5 so mostrados na Figura -/J/
BSE 0%RT<I6
Ta"ela -/4 &rograma-d/!,5/
REAL A, B, C, Pi
INTEGER VER
WRITE(*,*) E!"#$ %&' & ()*&# +$ A =
READ(*,*) A
,PEN(-, .i*$=/)i+)0+."1")
WRITE(-,*) V)*&# +$ A = , A
B = AB2(A)
WRITE(-,*) B = 34+5*& +$ A =, B
C = L,G10(B)
WRITE(-,*) C6 L&7)#i"'& +$%i')* +$ B
=, C
Pi = AC,2(-1.0)
WRITE(-,*) Pi =, Pi
D = C,2(Pi)
WRITE(-,*) C&//$!& +$ Pi =, D
D = C,2H(Pi)
WRITE(-,*) C&//$!& 8i9$#:4*i%& +$ Pi
=, D
CL,2E(-)
VER = 2;2TE3 (N&"$9)+ /)i+)0+."1")
END
J: Comparar cada resultado mostrado na Figura -/J com o resultado o"tido de uma calculadora/
,: )#ecutar no%amente o programa com outro %alor para a %ari$%el A/ Comparar cada no%o resultado
com o o"tido de uma calculadora/
05: Os progra m ase#ecut$%eis ta m "+m podem ser e # ecutados, rodados ou postos para !uncionar !ora do
aplicati%o Fortran/ &ara testar isso, primeiro, !ec2ar o aplicati%o Fortran/ )m seguida, utili?ando o
aplicati%o 'indo8s NT )#plorer, copiar o programae#ecut$%el c2amado programa5-/e#e ou
programa5-/application para o diret1rio C:TTemp/ &ara e#ecutar o programa, "asta clicar duas %e?es
so"re o ar;ui%o copiado/ Como resultado, surgir$ o ar;ui%o saida-d/t#t/ O diret1rio C:TTemp + apenas
um e#emplo/ O programae#ecut$%el pode ser copiado para ;ual;uer outro diret1rio e ser
e#ecutado l$/
Figura -/H &rograma-d/!,5/
Ta"ela -/- Algumas !un@es matem$ticas do FORTRAN/
Funo Comando O"ser%ao
=1dulo ou %alor a"soluto V I ADA9d:
Rai? ;uadrada V I AMRT9d:
)#ponencial: Y I e
X
V I )d&9d:
Fogaritmo natural V I FOZ9d:
Fogaritmo decimal V I FOZ059d:
Ainal V I A(ZN9d,\: V I %alor a"soluto de d %e?es o sinal de \
=.nimo V I =(N9d,\,': V I %alor m.nimo entre d, \ e 'G o
argumento pode conter 2 ou mais %ari$%eis
=$#imo V I =Ad9d,\,': V I %alor m$#imo entre d, \ e 'G o
argumento pode conter 2 ou mais %ari$%eis
Ta"ela -/H Algumas !un@es trigonom+tricas do FORTRAN/
Funo Comando O"ser%ao
Aeno V I A(N9d: d em radianos
Cosseno V I COA9d: d em radianos
Tangente V I TAN9d: d em radianos
Arcoseno V I AA(N9d: V em radianos
Arcocosseno V I ACOA9d: V em radianos
Arcotangente V I ATAN9d: V em radianos
Aeno 2iper"1lico V I A(NQ9d:
Cosseno 2iper"1lico V I COAQ9d:
Tangente 2iper"1lica V I TANQ9d:
Figura -/> 3anela *OA do programa-d/!,5/
Figura -/J Ar;ui%o saida-d/t#t do programa-d/!,5/
"." EXERC.CIOS
)#erc.cio -/0
0: )ditar um programa!onte em FORTRAN para e#ecutar o seguinte algoritmo 9passos::
a: ler o primeiro %alor 9real: de uma progresso aritm+tica 9&/A/:, denotado por A0
": ler a di!erena 9nOmero real: entre dois termos su"se;Lentes da &/A/, denotada por *
c: ler o nOmero 9inteiro: de termos da &/A/, denotado por N
d: calcular o %alor 9real: do Oltimo termo da &/A/, denotado por AN
e: calcular a soma de todos os termos da &/A/, denotado por AN
!: escre%er no ar;ui%o c2amado saida]-p0/t#t os tr<s %alores lidos e os dois calculados juntamente
com coment$rios para identi!ic$los
2: Compilar o programa!onte
3: Zerar o programae#ecut$%el
4: )#ecutar o programa para A0 I 0/3, * I 3/, e N I -/ Os resultados de%em ser AN I 0H/, e AN I 4-/-/
)#erc.cio -/2
0: )ditar um programa!onte em FORTRAN para e#ecutar o seguinte algoritmo 9passos::
a: ler algumas %ari$%eis do tipo real
": aplicar as !un@es matem$ticas da Ta"ela -/- so"re as %ari$%eis lidas
c: escre%er no ar;ui%o c2amado saida]-p2/t#t os %alores lidos e os resultados calculados com as
!un@es juntamente com coment$rios para identi!ic$los
2: Compilar o programa!onte
3: Zerar o programae#ecut$%el
4: )#ecutar o programa/ )m seguida, comparar os resultados escritos com a;ueles o"tidos de uma
calculadora/
)#erc.cio -/3
0: )ditar um programa!onte em FORTRAN para e#ecutar o seguinte algoritmo 9passos::
a: ler algumas %ari$%eis do tipo real
": aplicar as !un@es matem$ticas da Ta"ela -/H so"re as %ari$%eis lidas
c: escre%er no ar;ui%o c2amado saida]-p3/t#t os %alores lidos e os resultados calculados com as
!un@es juntamente com coment$rios para identi!ic$los
2: Compilar o programa!onte
3: Zerar o programae#ecut$%el
4: )#ecutar o programa/ )m seguida, comparar os resultados escritos com a;ueles o"tidos de uma
calculadora/
>5 Cap.tulo H/ Formatos de edio
C/012u3o '. FORMATOS DE EDI$O
OBJETIVOS DO CAPTULO
Conceitos e comandos de !ormatos de edio para %ari$%eis do tipo inteiro, caracter e real
Regras de edio de programas!onte em FORTRAN
Ae;L<ncia o"rigat1ria dos comandos dentro de programas!onte em FORTRAN
Comandos do FORTRAN: 'R(T)9nOmero,nOmero: e FOR=AT
'.1 FORMATOS DE EDI$O PARA VARI-VEIS DO TIPO CARACTER?
0ro4r/m/'/.5,&
&ara iniciali?ar as ati%idades deste cap.tulo, de%ese e#ecutar:
0: &ara acessar o programa Fortran, no 'indo8s: Atart, &rograms, Fortran &o8erAtation 4/5,
=icroso!t *e%eloper Atudio
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa5H
3: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programaHa/!,5
4: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela H/0/
>0 Cap.tulo H/ Formatos de edio
Ta"ela H/0 &rogramaHa/!,5/
BSE 0%RT<I6 7>&R&7TER(=)) &, 6
7>&R&7TER(()) 7
I'TE,ER .ER
WRITE(,) !.ar#ave#s do t#po caracter!
WRITE(,) !Entre com os conteudos de & e 6!
RE&+(,) &, 6
7 - & 88 6
%0E'(2, 1#le-!sa#da;a.tDt!) WRITE(2,) &, !- & sem 1ormato!
WRITE(2,(=) &
(= $%R"&T ( &(, !- & no 1ormato &(! )
WRITE(2,(() &
(( $%R"&T ( &?, !- & no 1ormato &?! )
WRITE(2,(3) &
(3 $%R"&T ( &=), !- & no 1ormato &=)! )
WRITE(2,(*) &
(* $%R"&T(!=)G!, =)G, !7onteHdo de & -!, &=), =8)
WRITE(2,(?) &
(? $%R"&T(!T=)!, T=), !7onteHdo de & -!, &=), =8)
WRITE(2,=)) &, 6, 7
=) $%R"&T(?G, !& -!, &=), =8, ?G, !6 -!, &=), =8, ?G, !7 -!, &(), (8)
WRITE(2,==) &, 6, 7
== $%R"&T( ?G, !& -!, &=), =8, I
?G, !6 -!, &=), =8, I
?G, !7 -!, &(), (8 )
WRITE(2,=() &, 6
=( $%R"&T ( ((&=)), !- var#5ve#s & e 6 no 1ormato ((&=))! )
7<%SE(2)
.ER - SFSTE"(!'otepad sa#da;a.tDt!)
E'+
>2 Cap.tulo H/ Formatos de edio
-: Coment$rios so"re o programa:
a: O o"jeti%o do programaHa/!,5 + e#plicar alguns !ormatos de edio utili?ados com %ari$%eis do
tipo caracter/
": No cap.tulo -, al+m de um asterisco, o comando 'R(T) !oi utili?ado com um nOmero para
identi!icar o XlocalY 9janela ou ar;ui%o: onde seria escrito algo, isto +, ele !oi usado na !orma
'R(T)9nOmero0,W:/ 6m e#emplo + a lin2a WRITE(2,) &, !- & sem 1ormato! do programa/
Agora, no programaHa/!,5, o co m ando ' R(T) + u tili?ado com dois nO m eros, ou seja, na !or m a
' R(T)9nO m ero0,nO m ero2 : , por e#emplo, a lin2a WRITE(2,(=) & do programa/ O nO m ero2 est$
associado a um no%o co m ando do FORTRAN c2a m ado de FOR=A T/
c: O co m ando FOR=AT + usado para especi!icar o !or m ato com ;ue co m ent$rios e conteOdos
9strings ou nO m eros: de %ari$%eis so escritos nu m a janela ou num ar;ui%o/ Tam"+m + usado na
leitura de dados/
d: A sinta#e, isto +, a !or m a com ;ue se de%e usar o co m ando FOR=AT +: nO m ero2 FOR=AT
9!or m atos:/ O nO m ero2 de%e ser o m es m o utili? a do no co m ando ' R(T)/ *entro de par<nteses,
de%ese especi!icar os !or m atos de edio ;ue sero usados, separados por %.rgul a / 6m e#emplo +
a lin2a (= $%R"&T ( &(, !- & no 1ormato &(! ) do programa, ;ue especi!ica o !ormato A2
para escre%er a %ari$%el A, do tipo caracter, c2amada na lin2a WRITE(2,(=) & do programa/
e: Os co m andos FOR=AT podem ser inclu.dos em ;ual;uer lugar dentro do progra m a!onte, desde
;ue seja a"ai#o de co m andos 6A) e aci m a do co m ando )N*/ )les podem ser aglo m erados num
Onico lugar ou cada um pode estar a"ai#o ou aci m a do seu respecti%o co m ando ' R(T)/ No +
necess$rio seguir ;ual;uer ordena m ento para os nO m eros usados nos co m andos FOR=AT, nem
para suas posi@es relati%as dentro do progra m a!onte/ ) no e#iste ;ual;uer relao entre os
nO m eros usados em co m andos O&)N e os nO m eros usados nos co m andos FOR=AT/ )les at+
podem ser iguais/
!: Cada tipo de %ari$%el 9caracter, inteiro ou real: tem identi!icadores especiais para escre%er seu
conteOdo na !or m a desejada/ Al+m disso, e#istem identi!icadores ;ue !acilitam a escrita de
co m ent$rios e da !or m a ou disposio est+tica com ;ue se escre%e alg o/
g: O identi!icador de %ari$%eis do tipo caracter + a letra A seguida de um nO m ero ;ue especi!ica a
;uantidade m $#i m a de caracteres para escre%er cada %ari$%el/ *entro deste espao, o conteOdo de
cada %ari$%el do tipo caracter + escrito da es;uerda para a direita/ Ae o conteOdo da %ari$%el ocupa
m ais espao do ;ue o reser%ado para escre%<la, a parte e#cedente no + escrita, + desconsiderada/
6m e#emplo de uso deste identi!icador + A2, citado no item d, acima/ Neste caso, reser%ouse
duas colunas ou caracteres para escre%er uma %ari$%el do tipo caracter/
2: *entro de um co m ando FOR=AT, isto +, entre par<nteses, podese escre%er um ou m ais
co m ent$rios, cada um de%endo !icar entre aspa s, como na lin2a (( $%R"&T ( &?, !- & no
1ormato &?! ) do programa/
i: O identi!icador d + usado para dei#ar espaos em "ranco entre dois !or m atos de edio/ )le +
usado na !or m a Nd, onde N + um nO m ero ;ue representa a ;uantidade de espaos em "ranco/ 6m
e#emplo + a lin2a (* $%R"&T(!=)G!, =)G, !7onteHdo de & -!, &=), =8) do programa,
onde usouse o !ormato 05d/
>3 Cap.tulo H/ Formatos de edio
j: Nesta mesma lin2a do programa 2$ o !or m ato de edio N^, onde N + um nO m ero ;ue representa a
;uantidade de lin2as ;ue o cursor descer$ ;uando encontrar este !or m at o/ Neste caso, uma lin2a,
de%ido ao !ormato 0^/
K: O identi!icador T, de ta"ulao, + usado para se escre%er algo a partir de u m a coluna espec.!ica,
onde a coluna 0 !ica na m argem es;uerda/ )le + usado na !or m a TN, onde N + o nO m ero da coluna
a partir da ;ual se escre%er$ algo ;ue %em a seguir dentro de um co m ando FOR=AT/ 6m
e#emplo + a lin2a (? $%R"&T(!T=)!, T=), !7onteHdo de & -!, &=), =8) do programa,
onde usouse o !ormato T05/
l: &odese usar um Onico co m ando ' R(T), com seu respecti%o co m ando FOR=AT, para se
escre%er di%ersas %ari$%eis/ Neste caso, cada %ari$%el ser$ escrita com o !or m ato ;ue esti%er na
m es m a se;L<ncia dos co m andos ' R(T) e FOR=A T/ &or e#emplo, na lin2a WRITE(2,=)) &, 6,
7 do programa, escre%ese as %ari$%eis A, D e C com o !ormato nOmero 05, ;ue corresponde N
lin2a =) $%R"&T(?G, !& -!, &=), =8, ?G, !6 -!, &=), =8, ?G, !7 -!, &(), (8) do
programa/ &ortanto, a primeira %ari$%el 9A: ser$ escrita com o !ormato A05, ;ue + o primeiro
!ormato de edio de %ari$%eis ;ue aparece no comando FOR=AT/ ) as %ari$%eis D e C sero
escritas com os !ormatos A05 e A25, respecti%amente, ;ue so o segundo e o terceiro !ormatos de
%ari$%eis no comando FOR=AT/
m: O comando FOR=AT identi!icado pelo nOmero 05 no programa tem e#atamente a mesma !uno
;ue o comando FOR=AT identi!icado pelo nOmero 00/ A Onica di!erena + na edio do programa
!onte/ No 05 FOR=AT, todos os !ormatos de edio usam apenas uma lin2a do programa!onte/ 3$
no 00 FOR=AT, so usadas tr<s lin2as/ Neste caso, ;uando um m es m o co m ando precisa ou se
;uer e m pregar m ais de u m a lin2a por m oti%os est+ticos, usase o s. m "olo
c, ao !inal de cada lin2a do progra m a!onte, para indicar ;ue o co m ando continua na lin2a
seguinte/ (sso %ale para ;ual;uer co m ando do FORTRA N/
n: O !or m ato =9AN: + e;ui%alente a = %e?es o !or m ato AN, onde N + o nO m ero de caracteres
reser%ados para se escre%er u m a %ari$%el do tipo caracte r / &or e#emplo, na lin2a =( $%R"&T (
((&=)), !- var#5ve#s & e 6 no 1ormato ((&=))! ) do programa usase duas %e?es o
!ormato A05 para se escre%er duas %ari$%eis do tipo caracter/
H: )#ecutar Duild, Compile para compilar o programa/
>: Zerar o programae#ecut$%el !a?endo Duild, Duild/
J: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela do *OA, mostrada na Figura
H/0, dentro da ;ual temse:
a: Na primeira lin2a, o coment$rio Caria%eis do tipo caracter, resultado do comando WRITE(,)
!.ar#ave#s do t#po caracter! do programa/
": Na segunda lin2a, o coment$rio )ntre com os conteudos de A e D, resultado do comando
WRITE(,) !Entre com os conteudos de & e 6! do programa/
c: Na terceira lin2a, o programa p$ra e !ica aguardando ;ue sejam !ornecidos os conteOdos das
%ari$%eis A e D, resultado do comando RE&+(,) &, 6 do programa/ &ara ;ue o programa
continue sua e#ecuo + necess$rio digitar XRio 4-Y, XTesteY, por e#emplo, e, em seguida, clicar na
tecla enter/
>4 Cap.tulo H/ Formatos de edio
d: )m seguida ocorrer$ a criao do ar;ui%o saidaHa/t#t, dentro do diret1rio do projeto, como
resultado do comando %0E'(2, 1#le-!sa#da;a.tDt!) do programa, uma %e? ;ue este ar;ui%o
ainda no e#iste ;uando o programaHa/!,5 !or e#ecutado pela primeira %e?/ )ste comando tam"+m
declara ;ue ser$ usado o nOmero , no programa como re!er<ncia ao ar;ui%o saidaHa/t#t/
e: Como resultado da lin2a .ER - SFSTE"(!'otepad sa#da;a.tDt!) do programa, o aplicati%o
Notepad a"re automaticamente o ar;ui%o saidaHa/t#t cujo conteOdo + mostrado na Figura H/2/ Na
segunda e terceira lin2a do ar;ui%o saidaHa/t#t o conteOdo da %ari$%el A 9Rio 4-: !oi cortado
parcialmente de%ido aos poucos caracteres usados para escre%<la, no caso 2 e -, de!inidos por A2
e A-/ &ara e%itar este tipo de pro"lema, se m pre se de%e superdi m ensionar o espao para escre%er
o conteOdo de cada %ari$%el /
Figura H/0 3anela *OA do programaHa/!,5/
Figura H/2 Ar;ui%o saidaHa/t#t do programaHa/!,5/
,: At+ entender, comparar o resultado de cada comando 'R(T), e seu respecti%o comando FOR=AT
no programaHa/!,5, mostrado em cada lin2a da Figura H/2 ou no ar;ui%o saidaHa/t#t/
05: )#ecutar no%amente o programa com outros conteOdos para as %ari$%eis A e D/ Analisar os no%os
resultados/
>- Cap.tulo H/ Formatos de edio
'.2 FORMATOS DE EDI$O PARA VARI-VEIS DO TIPO INTEIRO?
0ro4r/m/'=.5,&
0: Nesta seo ser$ usado o mesmo projeto da seo anterior/ &ortanto, de%ese e#ecutar o seguinte no
Fortran:
a: Clicar so"re o nome do programa!onte
": )dit, Cut para retirar o programa!onte do projeto/
2: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programaH"/!,5
3: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela H/2/
>H Cap.tulo H/ Formatos de edio
Ta"ela H/2 &rogramaH"/!,5/
BSE 0%RT<I6 I'TE,ER &, 6, 7
I'TE,ER .ER
WRITE(,) !.ar#ave#s do t#po #nte#ro!
WRITE(,) !Entre com os valores de & e 6!
RE&+(,) &, 6
7 - & 9 6
%0E'(2, 1#le-!sa#da;3.tDt!)
WRITE(2,) &, !- & sem 1ormato!
WRITE(2,(=) &
WRITE(2,(() &
WRITE(2,(3) &
WRITE(2,(*) &
WRITE(2,(?) &
WRITE(2,=)) &, 6, 7
WRITE(2,==) &, 6, 7
WRITE(2,2) &, 6, 7 7<%SE(2)
.ER - SFSTE"(!'otepad sa#da;3.tDt!)
(= $%R"&T ( I(, !- & no 1ormato I(! )
(( $%R"&T ( I?, !- & no 1ormato I?! )
(3 $%R"&T ( I=), !- & no 1ormato I=)! )
(* $%R"&T(!=)G!, =)G, !.alor de & -!, I=), =8)
(? $%R"&T(!T=)!, T=), !.alor de & -!, I=), =8)
=) $%R"&T(?G, !& -!, I=), =8, ?G, !6 -!, I=), =8, ?G, !7 -!, I=), (8)
== $%R"&T( ?G, !& -!, I=), =8, I
?G, !6 -!, I=), =8, I
?G, !7 -!, I=), (8 )
2 $%R"&T ( 3(I=)), !- var#5ve#s &, 6 e 7 no 1ormato 3(I=))! )
E'+
4: Coment$rios so"re o programa:
a: O o"jeti%o do programaH"/!,5 + e#plicar alguns !ormatos de edio utili?ados com %ari$%eis do
tipo inteiro/
": No caso do programaH"/!,5, os comandos FOR=AT !oram todos aglomerados no !inal do
programa!onte, na mesma ordem de seus respecti%os comandos 'R(T)/
c: O identi!icador de %ari$%eis do tipo inteiro + a letra ( seguida de um nO m ero ;ue especi!ica a
>> Cap.tulo H/ Formatos de edio
;uantidade m $#i m a de algaris m os ou colunas para escre%er cada %ari$%el/ *entro deste espao, o
conteOdo de cada %ari$%el do tipo inteiro + escrito da direita para a es;uerda/ 6 m a coluna + usada
para o sinal do nO m ero inteiro/ Ae o %alor intei r o da %ari$%el ocupar m ais espao, colunas ou
algaris m os do ;ue o reser%ado para escre%<l a , no lugar do nO m ero sero apresentados apenas
asteriscos/ (sso signi ! i ca ;ue o ! or m ato utili?ado + inco m pat.%el com o %alor da %ari$%e l/ 6m
e#emplo de uso deste identi!icador + (- na lin2a (( $%R"&T ( I?, !- & no 1ormato I?! ) do
programa/
d: Os identi!icadores d, para espaos em "ranco, T, para ta"ulao, e N^, para o cursor descer N
lin2as, e#plicados na seo H/0 para %ari$%eis do tipo caracter, ta m "+m se aplicam com %ari$%eis
do tipo inteiro, con!or m e podese %er no progra m aH"/!,5/
e: O !or m ato =9(N: + e;ui%alente a = %e?es o !or m ato (N, onde N + o nO m ero de colunas ou
algaris m os reser%ados para se escre%er u m a %ari$%el do tipo inteir o/ &or e#emplo, na lin2a 2
$%R"&T ( 3(I=)), !- var#5ve#s &, 6 e 7 no 1ormato 3(I=))! ) do programa usase tr<s
%e?es o !ormato (05 para se escre%er tr<s %ari$%eis do tipo inteiro/
-: )#ecutar Duild, Compile para compilar o programa/
H: Zerar o programae#ecut$%el !a?endo Duild, Duild/
>: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela do *OA, mostrada na
Figura H/3, dentro da ;ual temse:
a: Na primeira lin2a, o coment$rio Caria%eis do tipo inteiro, resultado do comando WRITE(,)
!.ar#ave#s do t#po #nte#ro! do programa/
": Na segunda lin2a, o coment$rio )ntre com os %alores de A e D, resultado do comando
WRITE(,) !Entre com os valores de & e 6! do programa/
c: Na terceira lin2a, o programa p$ra e !ica aguardando ;ue sejam !ornecidos os %alores das
%ari$%eis A e D, resultado do comando RE&+(,) &, 6 do programa/ &ara ;ue o programa
continue sua e#ecuo + necess$rio digitar 000 222, por e#emplo, e, em seguida, clicar na tecla
enter/
d: )m seguida ocorrer$ a criao do ar;ui%o saidaH"/t#t, dentro do diret1rio do projeto, como
resultado do comando %0E'(2, 1#le-!sa#da;3.tDt!) do programa, uma %e? ;ue este ar;ui%o
ainda no e#iste ;uando o programaH"/!,5 !or e#ecutado pela primeira %e?/ )ste comando
tam"+m declara ;ue ser$ usado o nOmero , no programa como re!er<ncia ao ar;ui%o saidaH"/t#t/
e: Como resultado da lin2a .ER - SFSTE"(!'otepad sa#da;3.tDt!) do programa, o aplicati%o
Notepad a"re automaticamente o ar;ui%o saidaH"/t#t cujo conteOdo + mostrado na Figura H/4/ Na
segunda lin2a do ar;ui%o saidaH"/t#t o %alor da %ari$%el A 9000: !oi trocado por dois asteriscos/
(sso ocorre por;ue o !ormato usado 9(2: + incompat.%el para se escre%er o %alor da %ari$%el A, ;ue
neste caso precisa de pelo menos tr<s colunas, ou seja, o !ormato m.nimo seria (3/ &ara e%itar este
tipo de pro"lema, se m pre se de%e superdi m ensionar o espao para escre%er o %alor de cada
%ari$%el /
>J Cap.tulo H/ Formatos de edio
Figura H/3 3anela *OA do programaH"/!,5/
J: At+ entender, comparar o resultado de cada comando 'R(T), e seu respecti%o comando FOR=AT
no programaH"/!,5, mostrado em cada lin2a da Figura H/4 ou no ar;ui%o saidaH"/t#t/
,: )#ecutar no%amente o programa com outros %alores para as %ari$%eis A e D/ Analisar os no%os
resultados/
Figura H/4 Ar;ui%o saidaH"/t#t do programaH"/!,5/
'.3 FORMATOS DE EDI$O PARA VARI-VEIS DO TIPO REAL?
0ro4r/m/';.5,&
0: Nesta seo ser$ usado o mesmo projeto da seo anterior/ &ortanto, de%ese e#ecutar o seguinte no
Fortran:
a: Clicar so"re o nome do programa!onte
": )dit, Cut para retirar o programa!onte do projeto/
2: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
>, Cap.tulo H/ Formatos de edio
programaHc/!,5
3: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela H/3/
4: Coment$rios so"re o programa:
a: O o"jeti%o do programaHc/!,5 + e#plicar alguns !ormatos de edio utili?ados com %ari$%eis do tipo
real/
": No caso do programaHc/!,5, os comandos FOR=AT !oram todos aglomerados no in.cio do
programa!onte, antes mesmo de seus respecti%os comandos 'R(T)/
c: Os dois principais identi!icadores de %ari$%eis do tipo real so representados pelas letras F e )/
d: O !or m ato de ponto !lutuante + usado para nO m eros reais/ )le + denotado por Fd/V, onde V + um
nO m ero ;ue e;ui%ale N ;uantidade de algaris m os usados para representar a parte deci m al do %alor
da %ari$%el/ d + um nO m ero ;ue e;ui%ale N ;uantidade total de colunas usadas para representar o
%alor da %ari$%el, incluindo seu sinal, o ponto deci m al e a parte deci m al/ O nO m ero d se m pre tem
;ue ser maior do ;ue V/ No programa, por e#emplo, so usados os !ormatos F-/2 e F-/5/
BSE 0%RT<I6
RE&< &, 6, 7
I'TE,ER .ER
Ta"ela H/3 &rogramaHc/!,5/
== $%R"&T( ?G, !& -!, =0E=?.3, =8, I
?G, !6 -!, =0E=?.3, =8, I
?G, !7 -!, =0E=?.3, =8 )
=( $%R"&T ( 3(=0E=?.3), !- var#5ve#s &, 6 e 7 no 1ormato 3(=0E=?.3)! )
(= $%R"&T (!& no 1ormato $?.( -!, $?.(, =8, I
!& no 1ormato $?.) -!, $?.), =8, I
!& no 1ormato E=?.3 -!, E=?.3, =8, I
!& no 1ormato =0E=?.3 -!, =0E=?.3, =8 )
WRITE(,) !.ar#ave#s do t#po real!
WRITE(,) !Entre com os valores de & e 6!
RE&+(,) &, 6
7 - & 9 6
%0E'(2, 1#le-!sa#da;c.tDt!)
WRITE(2,) &, !- & sem 1ormato!
WRITE(<,21) A, A, A, A
WRITE(<,11) A, B, C
WRITE(<,12) A, B, C
.ER - SFSTE"(!'otepad sa#da;c.tDt!)
E'+
e: O !or m ato e#ponencial ta m "+m + usado para nO m eros reais/ )le + denotado por )d/V, onde V + um
nO m ero ;ue e;ui%ale N ;uantidade de algaris m os usados para representar a parte deci m al do %alor
da %ari$%el/ d + um nO m ero ;ue e;ui%ale N ;uantidade total de colunas usadas para representar o
%alor da %ari$%el, incluindo seu sinal, o ponto deci m al, a parte deci m al, a letra ), o sinal do
e#poente e dois algaris m os para o %alor do e#poente/ O nO m ero d se m pre tem ;ue ser m aior do ;ue
V / No programa, por e#emplo, + usado o !ormato )0-/3/
!: No !or m ato )d/V, nen2um algaris m o + usado na par te inteira/ &ara ;ue seja usado um algaris m o na
parte inteira do nO m ero real, podese usar o !or m ato 0&)d/ V/ No programa, por e#emplo, + usado o
!ormato 0&)0-/3/
g: *entro das d colunas dos !or m atos Fd/V, )d/V e 0&)d/V, o conteOdo de cada %ari$%el do tipo
real + escrito da direita para a es;uerda/ Os %alores de d e V so de!inidos pelo progra m ador/
2: Os identi!icadores d, para espaos em "ranco, T, para ta"ulao, e N^, para o cursor descer N
lin2as, e#plicados na seo H/0 para %ari$%eis do tipo caracter, ta m "+m se aplicam com %ari$%eis do
tipo real, con!or m e podese %er no progra m aHc/!,5/
i: O !or m ato =90&)d/V: + e;ui%alente a = %e?es o !or m ato 0&)d/V/ &or e#emplo, na lin2a =(
$%R"&T ( 3(=0E=?.3), !- var#5ve#s &, 6 e 7 no 1ormato 3(=0E=?.3)! ) do programa
usase tr<s %e?es o !ormato 0&)0-/3 para se escre%er tr<s %ari$%eis do tipo real/
-: )#ecutar Duild, Compile para compilar o programa/
H: Zerar o programae#ecut$%el !a?endo Duild, Duild/
>: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela do *OA, mostrada na
Figura H/-, dentro da ;ual temse:
a: Na primeira lin2a, o coment$rio Caria%eis do tipo real, resultado do comando WRITE(,)
!.ar#ave#s do t#po real! do programa/
": Na segunda lin2a, o coment$rio )ntre com os %alores de A e D, resultado do comando
WRITE(,) !Entre com os valores de & e 6! do programa/
c: Na terceira lin2a, o programa p$ra e !ica aguardando ;ue sejam !ornecidos os %alores das
%ari$%eis A e D, resultado do comando RE&+(,) &, 6 do programa/ &ara ;ue o programa
continue sua e#ecuo + necess$rio digitar a0/234 2/22, por e#emplo, e, em seguida, clicar na tecla
enter/
d: )m seguida ocorrer$ a criao do ar;ui%o saidaHc/t#t, dentro do diret1rio do projeto, como
resultado do comando %0E'(2, 1#le-!sa#da;c.tDt!) do programa, uma %e? ;ue este ar;ui%o
ainda no e#iste ;uando o programaHc/!,5 !or e#ecutado pela primeira %e?/ )ste comando tam"+m
declara ;ue ser$ usado o nOmero , no programa como re!er<ncia ao ar;ui%o saidaHc/t#t/
e: Como resultado da lin2a .ER - SFSTE"(!'otepad sa#da;c.tDt!) do programa, o aplicati%o
Notepad a"re automaticamente o ar;ui%o saidaHc/t#t cujo conteOdo + mostrado na Figura H/H/
*ependendo do !or m ato e m pregado, alguns a lgaris m os do nO m ero real so truncado s , como se
pode %er da segunda N ;uarta lin2a do ar;ui%o saidaHc/t#t/
Figura H/- 3anela *OA do programaHc/!,5/
Figura H/H Ar;ui%o saidaHc/t#t do programaHc/!,5/
J: At+ entender, comparar o resultado de cada comando 'R(T), e seu respecti%o comando FOR=AT
no programaHc/!,5, mostrado em cada lin2a da Figura H/H ou no ar;ui%o saidaHc/t#t/
,: )#ecutar no%amente o programa com outros %alores para as %ari$%eis A e D/ Analisar os no%os
resultados/
05: Num m es m o co m ando FOR=AT, podem ser usados identi!icados de %ari$%eis do tipo inteiro,
caracter e real, al+m de coment$rios, e dos !ormatos Nd, N^ e TN/
'.4 RESUMO DE REGRAS GERAIS DE EDI$O DE PROGRAMAS EM
FORTRAN
0: )m cada lin2a do programa, tudo ;ue esti%er ap1s o s.m"olo de e#clamao 9`: no + e#ecutado pelo
programa/ Aer%e apenas como coment$rio usado para esclarecer o ;ue !a? cada parte do programa/
*entro do Fortran &o8erAtation 4/5, todos os coment$rios !icam na cor %erde/ Fin2as em "ranco so
e;ui%alentes a ter o s.m"olo 9`: de coment$rio na primeira coluna de cada lin2a em "ranco/
2: Tudo ;ue + criado ou de!inido pelo programador !ica na cor preta dentro do Fortran &o8erAtation 4/5/
3: Todos os comandos intr.nsecos da linguagem FORTRAN !icam na cor a?ul dentro do Fortran
&o8erAtation 4/5/
4: O s.m"olo c + usado ao !inal de uma lin2a de programa para indicar ;ue o comando iniciado numa
lin2a cont.nua na lin2a seguinte/
-: Cada lin2a de programa pode usar at+ 032 colunas, incluindo os espaos em "ranco/
H: )m geral, espaos em "ranco t<m apenas !uno est+tica no programa, no a!etando os comandos ou
as instru@es do programador/ Os espaos em "ranco so considerados ;uando usados dentro de
coment$rios nos comandos 'R(T) e FOR=AT/
>: Nos comandos da linguagem FORTRAN e em nomes de %ari$%eis, no e#iste distino entre letras
maiOsculas ou minOsculas/ &or e#emplo, 'R(T), 8rite, 'rite e 8RiTe so e;ui%alentes/ A distino
entre letras minOsculas e maiOsculas e#iste dentro de coment$rios nos comandos 'R(T) e FOR=AT/
J: Na linguagem FORTRAN, os nomes de %ari$%eis podem ter at+ 30 caracteres ;ue incluem
com"ina@es das 2H letras do al!a"eto, dos algarismos 5, 0, 2, 3 a ,, e o trao de su"lin2ado/ No +
permitido acentuao e todas as %ari$%eis de%em comear por uma letra/ )#emplos de nomes de
%ari$%eis 9separadas por %.rgula:: %, %a, %aria%el, %aria%el]2, %aria%el]30, nome53, nome]53,
nome]da]rua/
'." SE>@ANCIA OBRIGATBRIA DE COMANDOS EM FORTRAN
At+ este cap.tulo !oram %istos comandos da linguagem FORTRAN ;ue podem ser di%ididos em
cinco tipos:
0: Comando para incluso de "i"lioteca no programa!onte: 6A)
2: Comandos para declarar tipos de %ari$%eis: (NT)Z)R, R)AF e CQARACT)R
3: Outros comandos intr.nsecos 9'R(T), R)A*, O&)N, CFOA): ou no do FORTRAN 9AVAT)=:,
!un@es intr.nsecas 9FOZ, TR(= etc: e ;ual;uer outro comando criado pelo programador, por
e#emplo, c$lculos e opera@es com strings
4: Comando de encerramento do programa!onte: )N*
-: Comando de edio: FOR=AT
Ae todos os cinco tipos de comandos !orem usados simultaneamente num programa!onte, a
se;L<ncia o"rigat1ria entre eles + e#atamente a apresentada acima, e#ceto para o ;uinto tipo/ O comando
FOR=AT pode !icar em ;ual;uer lugar do programa!onte entre os comandos 6A) e )N*/
&ara os comandos do tipo 2 9(NT)Z)R, R)AF e CQARACT)R:, a ordem entre eles pode ser
;ual;uer/ O mesmo se aplica para os comandos do tipo 3, e#ceto com ar;ui%os nos ;uais para um ar;ui%o
espec.!ico a se;L<ncia o"rigat1ria +: O&)N, 'R(T) e outros comandos, CFOA)/
)ncerrar a sesso seguindo o procedi m entopadro /
'.' EXERC.CIOS
)#erc.cio H/0
)ditar um programa!onte em FORTRAN para reali?ar um c$lculo de interpolao linear e#ecutando o
seguinte algoritmo 9passos::
0: Fer os %alores de duas %ari$%eis do tipo real, c2amadas d0 e d2, ;ue correspondem a dois dados
ta"elados de uma %ari$%el independente
2: Fer os %alores de duas %ari$%eis do tipo real, c2amadas V0 e V2, ;ue correspondem a dois dados
ta"elados de uma %ari$%el dependente de d
3: Fer o %alor de uma %ari$%el do tipo real, c2amada d, para o ;ual se deseja reali?ar a interpolao
4: Calcular o %alor da %ari$%el V, em !uno do %alor de d, usando interpolao linear
-: 6tili?ando comandos FOR=AT, escre%er no ar;ui%o c2amado saida]Hp0/t#t os cinco %alores lidos e
o resultado de V, juntamente com coment$rios para identi!ic$los
H: )#ecutar o programa para d0 I 05, d2 I 25, V0 I 055, V2 I a25 e d I 02/ O resultado de%e ser V I
>H/
)#erc.cio H/2
)ditar um programa!onte em FORTRAN para reali?ar c$lculos com uma progresso geom+trica 9&/Z/:
e#ecutando o seguinte algoritmo 9passos::
0: Fer o primeiro %alor 9real: da &/Z/, denotado por a0
2: Fer a ra?o 9nOmero real: entre dois termos su"se;Lentes da &/Z/, denotada por ;
3: Fer o nOmero 9inteiro: de termos da &/Z/, denotado por N
4: Calcular o %alor 9real: do Oltimo termo da &/Z/, denotado por an
-: Calcular a soma de todos os termos da &/Z/, denotado por An
H: 6tili?ando comandos FOR=AT, escre%er no ar;ui%o c2amado saida]Hp2/t#t os tr<s %alores lidos e os
dois calculados, juntamente com coment$rios para identi!ic$los
>: )#ecutar o programa para a0 I 0/-, ; I 0/0 e N I 25/ Os resultados de%em ser apro#imadamente an e
,/0>4 e An e J-/,0/
J- Cap.tulo >/ *ecis@es e op@es
C/012u3o ). DECIS!ES E OP!ES
OBJETIVOS DO CAPTULO
Conceitos de: deciso, condio, operadores relacionais e l1gicos, e opo
Comandos do FORTRAN: (F _ TQ)N _ )FA) _ )N* (F, A)F)CT CAA) _ CAA) _ )N* A)F)CT
).1 0ro4r/m/)/.5,&
&ara iniciali?ar as ati%idades deste cap.tulo, de%ese e#ecutar:
0: &ara acessar o programa Fortran, no 'indo8s: Atart, &rograms, Fortran &o8erAtation 4/5,
=icroso!t *e%eloper Atudio
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa>
3: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programa>a/!,5
4: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela >/0/
-: Coment$rios so"re o programa:
a: Nesta e na pr1#ima seo so %istas tr<s !ormas de uso do comando (F 9A):/ A primeira +
mostrada na Ta"ela >/2 e usada em di%ersas lin2as do programa>a/!,5/ O co m ando (F + usado
para to m ar decis@es com "ase em condi@es/ Ae as condi@es so satis!eitas, e#ecutase o
co m ando ;ue est$ na m es m a lin2a do (F, caso contr$rio, no/
": &or e#emplo, na lin2a I$ ( & J 6 ) WRITE(,) !& eh "E'%R do Kue 6! do programa, se o
%alor de A !or menor do ;ue o %alor de D, + e#ecutado o comando ;ue est$ ap1s o par<nteses, no
caso, escre%er um coment$rio/ A;uilo ;ue est$ dentro de par<nteses + c2amado de condio, ;ue
pode ser simples ou composta/ &ara de!inir as condi@es, so usados os c2a m ados operadores
relacionais 9Ta"ela >/3: e l1gicos 9Ta"ela >/4:/
c: Na lin2a I$ ( (& J )) .&'+. (6 J )) ) WRITE(,) !& E 6 sao numeros 'E,&TI.%S! do
programa, temse um e#emplo de condio composta/ Cada condio simples + unida pelos
operadores l1gicos /AN*/ e /OR/, ;ue em portugu<s signi!icam ) e O6/
d: Nas condi@es, al+m de %ari$%eis, podem s e r usados direta m ente %alores ou e#press@es
en%ol%endo %alores e %ari$%eis/
e: Nas demais lin2as do programa, so testados todos os operadores relacionais e l1gicos/
H: )#ecutar Duild, Compile para compilar o programa/
>: Zerar o programae#ecut$%el !a?endo Duild, Duild/
RE&< &, 6
Ta"ela >/0 &rograma>a/!,5/
JH Cap.tulo >/ *ecis@es e op@es
WRITE(,) !Entre com os valores de & e 6!
RE&+(,) &, 6
I$ ( & J 6 ) WRITE(,) !& eh "E'%R do Kue 6!
I$ ( & J- 6 ) WRITE(,) !& eh "E'%R %B I,B&< a 6!
I$ ( & L 6 ) WRITE(,) !& eh "&I%R do Kue 6!
I$ ( & L- 6 ) WRITE(,) !& eh "&I%R %B I,B&< a 6!
I$ ( & -- 6 ) WRITE(,) !& eh I,B&< a 6!
I$ ( & 8- 6 ) WRITE(,) !& eh +I$ERE'TE de 6!
I$ ( (& J )) .&'+. (6 J )) ) WRITE(,) !& E 6 sao numeros 'E,&TI.%S!
I$ ( (& L )) .&'+. (6 L )) ) WRITE(,) !& E 6 sao numeros 0%SITI.%S!
I$ ( (& L )) .%R. (6 L )) ) WRITE(,) !& %B 6 eh um numero 0%SITI.%!
E'+
Ta"ela >/2 Ainta#e 0 do comando (F/
I$ ( cond#MNes ) 7%"&'+%
onde Ocond#MNesP representa uma ou v5r#as cond#MNes Kue devem ser sat#s1e#tas para
Kue 7%"&'+% seQa eDecutado.
J: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura >/0,
dentro da ;ual temse:
a: Na primeira lin2a, o coment$rio )ntre com os %alores de A e D, resultado do comando
WRITE(,) !Entre com os valores de & e 6! do programa/
": Na segunda lin2a, o programa p$ra e !ica aguardando ;ue sejam !ornecidos os %alores das
%ari$%eis A e D, resultado do comando RE&+(,) &, 6 do programa/ &ara ;ue o programa
continue sua e#ecuo + necess$rio digitar 0/5 2/5, por e#emplo, e, em seguida, clicar na tecla
enter/
c: )m seguida so apresentados os coment$rios correspondentes aos comandos (F cujas condi@es
!oram satis!eitas para os %alores de A e D/
Ta"ela >/3 Operadores relacionais do FORTRAN/
Operador Aigni!icado
f menor
fI menor ou igual
g maior
gI maior ou igual
II igual
^I di!erente
Ta"ela >/4 Operadores l1gicos do FORTRAN/
Operador Aigni!icado
/AN*/ e
/OR/ ou
Figura >/0 Resultado do programa>a/!,5 para A I 0/5 e D I 2/5/
,: At+ entender, comparar os resultados da e#ecuo do programa>a/!,5, mostrados na Figura >/0, com
cada lin2a do programa!onte onde e#ista um comando (F/
05: )#ecutar no%amente o programa com A I 0 e D I 0/ At+ entender, comparar os no%os resultados,
mostrados na Figura >/2, com cada lin2a do programa!onte onde e#ista um comando (F/
Figura >/2 Resultado do programa>a/!,5 para A I 0 e D I 0/
00: )#ecutar no%amente o programa com A I 0 e D I a2/ At+ entender, comparar os no%os resultados,
mostrados na Figura >/3, com cada lin2a do programa!onte onde e#ista um comando (F/
Figura >/3 Resultado do programa>a/!,5 para A I 0 e D I a2/
02: )#ecutar no%amente o programa com outros %alores para A e D/ At+ entender, comparar os no%os
resultados com cada lin2a do programa!onte onde e#ista um comando (F/
).2 0ro4r/m/)=.5,&
0: Nesta seo ser$ usado o mesmo projeto da seo anterior/ &ortanto, de%ese e#ecutar o seguinte no
Fortran:
a: Clicar so"re o nome do programa!onte
": )dit, Cut para retirar o programa!onte do projeto/
2: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programa>"/!,5
3: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela >/-/
4: Coment$rios so"re o programa:
a: )ste programa !oi escrito para e#trair as duas ra.?es de uma e;uao do 2
o
grau/
": Nesta seo + mostrada e testada a segunda !or m a de uso do co m ando (F 9A):, cuja sinta#e +
apresentada na Ta"ela >/H e usada no programa>"/!,5/ )sta estrutura do co m ando (F per m ite ;ue,
se as condi@es so satis!eitas, sejam e#ecutados di%ersos co m andos do progra m a escritos em
%$rias lin2as/ Ae as condi@es no so satis!eitas, so e#ecutados os co m andos ;ue esto entre o
comando )FA) e o )N* (F/
RE&< &, 6, 7
RE&< +, G=, G(
Ta"ela >/- &rograma>"/!,5/
WRITE(,) !Entre com os valores de &, 6 e 7, onde!
WRITE(,) !&(G() 9 6G 9 7 - )!
RE&+(,) &, 6, 7
+ - (6() : *.) & 7
I$ ( + L- ).) ) T>E'
G= - ( :6 9 SRRT(+) ) 8 ( (.) & ) G( - (
:6 : SRRT(+) ) 8 ( (.) & ) WRITE(,) !&
pr#me#ra ra#S real eh - !, G=
WRITE(,) !& segunda ra#S real eh - !, G(
E<SE
G= - :6 8 ( (.) & )
G( - SRRT(&6S(+)) 8 ( (.) & )
WRITE(,) !& pr#me#ra ra#S compleDa eh - !, G=, ! 9 !, G(, ! #!
WRITE(,) !& segunda ra#S compleDa eh - !, G=, ! : !, G(, ! #!
E'+ I$
E'+
c: Ae no e#istir necessidade de co m andos entre o )FA) e o )N* (F, podese usar a estrutura do
co m ando (F m ostrada na Ta"ela >/>/
d: Reco m endase identar, isto +, deslocar para a direita os co m andos e n tre o (F 9A): e o )FA)
9A)NhO:, e entre o )FA) e o )N* (F, para ;ue sejam !acil m ente %isuali?ados os co m andos ;ue
so ou no e#ecutado s / 6m e#emplo desta recomendao + mostrado no programa>"/!,5, na
Ta"ela >/-/
e: As tr<s !or m as de uso do co m ando (F, m ostradas nas Ta"elas >/2, >/H e >/>, podem ser co m "inadas
entre si, cada u m a podendo ser inserida dentro das estruturas das outras/
Ta"ela >/H Ainta#e 2 do comando (F/
I$ ( cond#MNes ) T>E'
6<%7% = (uma ou v5r#as l#nhas de programa com comandos)
E<SE
6<%7% ( (uma ou v5r#as l#nhas de programa com comandos)
E'+ I$
onde Ocond#MNesP representa uma ou v5r#as cond#MNes Kue devem ser sat#s1e#tas para
Kue o 3loco = seQa eDecutadoT
se as Ocond#MNesP no 1orem sat#s1e#tas, o 3loco ( U eDecutado.
Ta"ela >/> Ainta#e 3 do comando (F/
I$ ( cond#MNes ) T>E'
6<%7% (uma ou v5r#as l#nhas de programa com comandos)
E'+ I$
onde Ocond#MNesP representa uma ou v5r#as cond#MNes Kue devem ser sat#s1e#tas para
Kue o 3loco de l#nhas de programa seQa eDecutado.
-: )#ecutar Duild, Compile para compilar o programa/
H: Zerar o programae#ecut$%el !a?endo Duild, Duild/
>: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela do *OA, mostrada na
Figura >/4, dentro da ;ual temse:
a: Na primeira lin2a, o coment$rio )ntre com os %alores de A, D e C, onde, resultado do comando
WRITE(,) !Entre com os valores de &, 6 e 7, onde! do programa/
": Na segunda lin2a, o coment$rio AW9dWW2: E DWd E C I 5, resultado do comando WRITE(,)
!&(G() 9 6G 9 7 - )! do programa/
c: Na terceira lin2a, o programa p$ra e !ica aguardando ;ue sejam !ornecidos os %alores das
%ari$%eis A, D e C, resultado do comando RE&+(,) &, 6, 7 do programa/ &ara ;ue o
programa continue sua e#ecuo + necess$rio digitar 0 a- H, por e#emplo, e, em seguida, clicar
na tecla enter/
d: )m seguida so apresentados os resultados correspondentes ao "loco do programa selecionado em
!uno da condio testada no comando (F/
Figura >/4 Resultado do programa>"/!,5 para A I 0, D I a- e C I H/
J: At+ entender, comparar os resultados da e#ecuo do programa>"/!,5, mostrados na Figura >/4, com
cada lin2a do programa!onte/
,: )#ecutar no%amente o programa com A I 0, D I aH e C I 05/ At+ entender, comparar os no%os
resultados, mostrados na Figura >/-, com cada lin2a do programa!onte/
Figura >/- Resultado do programa>"/!,5 para A I 0, D I aH e C I 05/
05: )#ecutar no%amente o programa com outros %alores para A, D e C/ At+ entender, comparar os
no%os resultados com cada lin2a do programa!onte/
).3 0ro4r/m/);.5,&
0: Nesta seo ser$ usado o mesmo projeto da seo anterior/ &ortanto, de%ese e#ecutar o seguinte no
Fortran:
a: Clicar so"re o nome do programa!onte
": )dit, Cut para retirar o programa!onte do projeto/
2: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programa>c/!,5
3: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela >/J/
I'TE,ER &
Ta"ela >/J &rograma>c/!,5/
WRITE(,) !Entre com o valor #nte#ro de &!
RE&+(,) &
SE<E7T 7&SE ( & )
7&SE ( :=))):= )
WRITE(,) !.alor de & estah entre :=))) e =!
7&SE ( (, * )
WRITE(,) !.alor de & eh ( ou *!
7&SE ( 3 )
WRITE(,) !.alor de & eh 3!
7&SE ( ?:())) )
WRITE(,) !.alor de & estah entre ? e ()))!
7&SE +E$&B<T
WRITE(,) !.alor de & eh menor do Kue :=))) ou ma#or do Kue ()))!
E'+ SE<E7T
E'+
4: Coment$rios so"re o programa:
a: No programa>c/!,5 + usado um no%o co m ando do FORTRAN: A)F)CT CAA)/ )ste co m ando +
e m pregado para escol2er apenas u m a opo ent r e %$rias e e#ecutar o "loco de lin2as ou co m andos
do progra m a correspondente N opo escol2ida/ A opo + !eita em !uno de u m a %ari$%el do
tipo inteiro ou caracter, c2a m ada de %ari$%el seletora/ Cada "loco pode conter u m a ou %$rias
lin2as de progra m a/ A sinta#e deste co m ando + apresentada na Ta"ela >/,/
": O nO m ero de op@es e#istentes depende de cada caso ou progra m a em particular/
c: A opo CAA) *)FA6FT + e#ecutada se nen2u m a das anteriores !or satis!eita/
d: Reco m endase identar, isto +, deslocar para a direita cada opo 9CAA): e cada "loco para ;ue
sejam !acil m ente %isuali?ados os co m andos ligados a cada op o/ 6m e#emplo desta
recomendao + mostrado no programa>c/!,5, na Ta"ela >/J/
e: *e%ese notar ;ue em todos os comandos 'R(T) no + usado o %alor da %ari$%el A/
Ta"ela >/, Ainta#e do comando A)F)CT CAA)/
SE<E7T 7&SE ( var#avel )
7&SE ( valor= )
6<%7% =
7&SE ( valor( )
6<%7% (
7&SE +E$&B<T
6<%7% +E$&B<T
E'+ SE<E7T
onde OvalorP representa um valor #nte#ro, alguns valores separados por vrgula ou,
a#nda, um #ntervalo de valores separados por do#s pontosT
apenas o 3loco de comandos correspondente ao OvalorP da var#5vel U eDecutado.
& var#5vel de seleMo pode ser do t#po #nte#ro ou caracter. 'o caso de var#5vel
caracter, os OvaloresP devem ser str#ngs entre aspas.
-: )#ecutar Duild, Compile para compilar o programa/
H: Zerar o programae#ecut$%el !a?endo Duild, Duild/
>: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura >/H,
dentro da ;ual temse:
a: Na primeira lin2a, o coment$rio )ntre com o %alor inteiro de A, resultado do comando
WRITE(,) !Entre com o valor #nte#ro de &! do programa/
": Na segunda lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o %alor da %ari$%el A,
resultado do comando RE&+(,) & do programa/ &ara ;ue o programa continue sua e#ecuo +
necess$rio digitar o %alor a05 para a %ari$%el A, por e#emplo, e, em seguida, clicar na tecla enter/
c: Na terceira lin2a, + mostrado um coment$rio correspondente N opo selecionada em !uno do
%alor da %ari$%el A/
J: At+ entender, %eri!icar se o resultado da e#ecuo do programa>c/!,5, mostrado na Figura >/H, est$
correto em !uno do %alor da %ari$%el A e o coment$rio correspondente N opo selecionada/
,: )#ecutar no%amente o programa com A I 2/ At+ entender, %eri!icar se o no%o resultado da e#ecuo
do programa>c/!,5 est$ correto em !uno do %alor da %ari$%el A e o coment$rio correspondente N
opo selecionada/
05: Repetir o item , com A I -5/
00: Repetir o item , com A I 234-/
02: Repetir o item , com outro %alor ;ual;uer/
03: )ncerrar a sesso seguindo o procedimentopadro/
Figura >/H Resultado do programa>c/!,5 para A I a05/
).4 EXERC.CIOS
)#erc.cio >/0
)ditar um programa!onte em FORTRAN para e#ecutar o seguinte algoritmo 9passos::
0: Fer os %alores inteiros de tr<s %ari$%eis, denotadas por A, D e C
2: *eterminar ;ual das %ari$%eis tem o menor e o maior %alor
)#erc.cio >/2
Alterar o programa>"/!,5 para ;ue no ocorra erro de e#ecuo ;uando o usu$rio entrar com %alor nulo
para a %ari$%el A, e ;ue seja calculado e escrito o %alor da Onica rai? deste caso/
)#erc.cio >/3
)ditar um programa!onte em FORTRAN para calcular as ra.?es de uma e;uao alg+"rica cO"ica/
)#erc.cio >/4
)ditar um programa!onte em FORTRAN para e#ecutar o seguinte algoritmo 9passos::
0: =ostrar na tela uma lista com pelo menos 4 op@es de c$lculo: 0 I m1dulo de AG 2 I rai? ;uadrada de
AG 3 I e#ponencial de AG 4 I logaritmo de A
2: Fer o %alor da opo de c$lculo desejada
3: Fer o %alor real da %ari$%el A
4: Calcular o resultado de A para a opo escol2ida pelo usu$rio
-: =ostrar o resultado de A
,H Cap.tulo J/ Ciclos
C/012u3o +. CICLOS
OB(ETIVOS DO CAP.TULO
Conceito de ciclo
Comandos do FORTRAN: *O _ )N* *O, )d(T
+.1 0ro4r/m/+/.5,&
&ara iniciali?ar as ati%idades deste cap.tulo, de%ese e#ecutar:
0: &ara acessar o programa Fortran, no 'indo8s: Atart, &rograms, Fortran &o8erAtation 4/5,
=icroso!t *e%eloper Atudio
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programaJ
3: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programaJa/!,5
4: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela J/0/
Ta"ela J/0 &rogramaJa/!,5
I'TE,ER &
& - ()
WRITE(,) !.alor de & antes do c#clo -!, &
+% & - =, =), =
WRITE(,) !.alor de & dentro do c#clo -!, &
E'+ +%
WRITE(,) !.alor de & depo#s do c#clo -!, &
E'+
-: Neste programa so usados dois no%os co m andos do FORTRAN: *O e )N* *O, ;ue de!inem um
ciclo/ )le so usados para e#ecutar %$rias %e?es u m a ou m ais lin2as do progra m a/ )#plica@es gerais
so"re o seu !uncionamento so apresentadas na pr1#ima seo/
H: )#ecutar Duild, Compile para compilar o programa/ >: Zerar o programae#ecut$%el !a?endo Duild,
Duild/
J: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura J/0,
,> Cap.tulo J/ Ciclos
dentro da ;ual temse:
a: Na primeira lin2a, o %alor corrente ou atual da %ari$%el A na mem1ria do computador, resultado
do comando WRITE(,) !.alor de & antes do c#clo -!, & do programa/ O %alor escrito,
25, + resultado da lin2a anterior do programa, & - ()/
": *a segunda N d+cimaprimeira lin2a, o programa e#ecuta 05 %e?es a lin2a WRITE(,) !.alor
de & dentro do c#clo -!, & por;ue ela est$ dentro de um ciclo de!inido pelos comandos *O
e )N* *O/ *e%ese notar ;ue o %alor da %ari$%el A muda a cada repetio do ciclo/
c: Na d+cimasegunda lin2a, o programa escre%e o %alor da %ari$%el A como resultado da lin2a
WRITE(,) !.alor de & depo#s do c#clo -!, & , ;ue j$ est$ !ora do ciclo/
Figura J/0 Resultado do programaJa/!,5/
,: )#plica@es gerais so"re o !uncionamento de um ciclo em FORTRAN so apresentadas a seguir/
+.2 0ro4r/m/+=.5,&
0: Nesta seo ser$ usado o mesmo projeto da seo anterior/ &ortanto, de%ese e#ecutar o seguinte no
Fortran:
a: Clicar so"re o nome do programa!onte
": )dit, Cut para retirar o programa!onte do projeto/
2: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programaJ"/!,5
3: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela J/2/
Ta"ela J/2 &rogramaJ"/!,5/
I'TE,ER &, I'I7I%, $I", 0&SS%, 6, 7
WRITE(,) !Entre com os valores #nte#ros de &, I'I7I%, $I" e 0&SS%!
RE&+(,) &, I'I7I%, $I", 0&SS%
WRITE(,) !.alor de & antes do c#clo -!, &
6 - ($I" : I'I7I% 9 0&SS%) 8 0&SS%
7 - "&G ( 6, ) )
WRITE(,) !% c#clo deve ser eDecutado!, 7, ! veSes!
+% & - I'I7I%, $I", 0&SS%
WRITE(,) !.alor de & dentro do c#clo -!, &
E'+ +%
WRITE(,) !.alor de & depo#s do c#clo -!, &
E'+
4: Coment$rios so"re o programa:
a: Neste programa so usados dois no%os co m andos do FORTRAN: *O e )N* *O, ;ue de!inem um
ciclo/ A sinta#e deles, isto +, a !orma de utili?$los + mostrada na Ta"ela J/3/ Todas as lin2as do
progra m a ;ue esto entre os co m andos *O e )N* *O so e#ecutadas di%ersas %e?e s /
": A de!inio de um ciclo en%ol%e ;uatro %ari$%eis do tipo inteiro: A, (N(C(O, F(= e &AAAO/ Os
nomes delas podem ser outros ;uais;uer/ Muando a e#ecuo do progra m a c2ega a um co m ando
*O, a se;L<ncia + a seguint e:
"/0: A %ari$%el A assume o %alor da %ari$%el (N(C(O
"/2: Ceri!icase se de%ese entrar ou no no ciclo em !uno dos %alores das %ari$%eis
(N(C(O, F(= e &AAAO, con!orme e#plicao do item c a"ai#o
"/3: No caso de se entrar no ciclo:
"/3/0: Ao e#ecutadas todas as lin2as do programa at+ se c2egar ao comando )N*
*O
"/3/2: Retornase N lin2a do comando *O
"/3/3: O %alor da %ari$%el A passa a ser A I A E &AAAO
"/3/4: Retornase ao item "/2 acima
"/4: No caso de no se entrar no ciclo, a e#ecuo do programa passa diretamente N lin2a
;ue esti%er a"ai#o do comando )N* *O
Ta"ela J/3 Ainta#e do comando *O/
+% & - I'I7I%, $I", 0&SS%
6<%7% (uma ou v5r#as l#nhas de programa com comandos)
E'+ +%
onde os valores das var#5ve#s I'I7I%, $I" e 0&SS% devem ter s#do de1#n#dos antes da
eDecuMo do programa chegar ao comando +%.
c: O nO m ero de e#ecu@es 9%ari$%el C: do ciclo depende das %ari$%eis do tipo inteiro (N(C(O, F(= e
&AAAO, calculado atra%+s de
B I
FIM a INICIO E
PASSO
PASSO 9J/0:
C I MAX 9 B, 5 : 9J/2:
onde o resultado da !uno =Ad9D,5: + o maior %alor entre a %ari$%el D e o %alor ?ero/ O
resultado de C pode ser 5, 0, 2, 3 etc/ &ortanto, o ciclo pode ser e#ecutado u m a %e?, di%ersas %e?es
ou nen2u m a %e?/
d: O %alor da %ari$%el &AAAO pode ser positi%o ou negati%oG nulo, no/ &ortanto, podese ter um
ciclo cujo %alor de A + progressi%o 9&AAAO g 5: ou regressi%o 9&AAAO f 5:/ Ae &AAAO I 0, seu
%alor no precisa ser declarado no co m ando *O/
e: O %alor da %ari$%el A no pode ser alter a do nas lin2as ;ue esto entre os co m ando *O e )N*
*O/ Ae isso !or !eito, resultar$ num erro de compilao/
!: Reco m endase identar, isto +, deslocar para a direita todas as lin2as do progra m a ;ue esto entre
os co m andos *O e )N* *O para ;ue !acil m ente se perce"a os co m andos ;ue co m p@em o cicl o/
)#emplos desta recomendao so mostrados no programaJa/!,5 9Ta"ela J/0: e no
programaJ"/!,5 9Ta"ela J/2:/
-: )#ecutar Duild, Compile para compilar o programa/
H: Zerar o programae#ecut$%el !a?endo Duild, Duild/
>: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela do *OA, mostrada na
Figura J/2, dentro da ;ual temse:
a: Na primeira lin2a, o coment$rio )ntre com os %alores inteiros de A, (N(C(O, F(= e &AAAO,
resultado do comando WRITE(,) !Entre com os valores #nte#ros de &, I'I7I%, $I"
e 0&SS%! do programa/
": Na segunda lin2a, o programa p$ra e !ica aguardando ;ue sejam !ornecidos os %alores das
%ari$%eis A, (N(C(O, F(= e &AAAO, resultado do comando RE&+(,) &, I'I7I%, $I",
0&SS% do programa/ &ara ;ue o programa continue sua e#ecuo + necess$rio digitar 25 0 05 0,
por e#emplo, e, em seguida, clicar na tecla enter/
c: )m seguida so apresentados os resultados correspondentes N e#ecuo do programa/
Figura J/2 Resultado do programaJ"/!,5 para A I 25, (N(C(O I 0, F(= I 05 e &AAAO I 0/
J: At+ entender, analisar os resultados do programaJ"/!,5, mostrados na Figura J/2, considerando cada
lin2a do programa!onte e as e#plica@es descritas no item 4 acima/ *e%ese notar ;ue o ciclo do
programaJ"/!,5 + id<ntico ao do programaJa/!,5, Figura J/0, de%ido aos %alores usados para as
%ari$%eis (N(C(O, F(= e &AAAO/ Neste caso temse um ciclo progressi%o, pois &AAAO g 5/
,: )#ecutar no%amente o programa com A I 25, (N(C(O I a-, F(= I - e &AAAO I 0/ Neste caso
temse um ciclo progressi%o, pois &AAAO g 5/ At+ entender, analisar os no%os resultados, mostrados
na Figura J/3, considerando cada lin2a do programa!onte e as e#plica@es descritas no item 4 acima/
05: )#ecutar no%amente o programa com A I 25, (N(C(O I 25, F(= I 00 e &AAAO I a0/ Neste caso
temse um ciclo regressi%o, pois &AAAO f 5/ At+ entender, analisar os no%os resultados, mostrados
na Figura J/4, considerando cada lin2a do programa!onte e as e#plica@es descritas no item 4 acima/
Figura J/3 Resultado do programaJ"/!,5 para A I 25, (N(C(O I a-, F(= I - e &AAAO I 0/
Figura J/4 Resultado do programaJ"/!,5 para A I 25, (N(C(O I 25, F(= I 00 e &AAAO I a0/
00: )#ecutar no%amente o programa com A I 25, (N(C(O I 02, F(= I 0- e &AAAO I 2/ Neste caso
temse um ciclo progressi%o, pois &AAAO g 5/ At+ entender, analisar os no%os resultados, mostrados
na Figura J/-, considerando cada lin2a do programa!onte e as e#plica@es descritas no item 4 acima/
02: )#ecutar no%amente o programa com A I 25, (N(C(O I 00, F(= I 25 e &AAAO I a0/ Neste caso
temse um ciclo regressi%o, pois &AAAO f 5/ At+ entender, analisar os no%os resultados, mostrados
na Figura J/H, considerando cada lin2a do programa!onte e as e#plica@es descritas no item 4 acima/
+.3 0ro4r/m/+;.5,&
0: Nesta seo ser$ usado o mesmo projeto da seo anterior/ &ortanto, de%ese e#ecutar o seguinte no
Fortran:
a: Clicar so"re o nome do programa!onte
": )dit, Cut para retirar o programa!onte do projeto/
Figura J/- Resultado do programaJ"/!,5 para A I 25, (N(C(O I 02, F(= I 0- e &AAAO I 2/
Figura J/H Resultado do programaJ"/!,5 para A I 25, (N(C(O I 00, F(= I 25 e &AAAO I a0/
2: No Fortran, seguindo o procedi m entopadr o , criar e inserir no projeto o programa!onte
programaJc/!,5
3: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela J/4/
4: Coment$rios so"re o programa:
a: No programaJc/!,5 + usado um no%o co m ando do FORTRAN: )d(T/ )ste co m ando + e m pregado
para ;ue a e#ecuo de um ciclo seja interro m pida e a e#ecuo do progra m a continue na lin2a
seguinte ao co m ando )N* *O/
": No programaJc/!,5 tam"+m + e#empli!icado o u s o da %ari$%el A em opera@es ou c$lculos dentro
de um ciclo/ Con!orme j$ !oi mencionado, o %alor de A no pode ser alterado por comandos
dentro do ciclo/ =as o %alor ;ue a %ari$%el A assume a cada e#ecuo do ciclo pode ser usado em
outros c$lculos ou %ari$%eis/
c: No caso, a %ari$%el AO=A + ?erada antes do in.cio do ciclo/ A cada e#ecuo do ciclo, seu %alor
+ alterado com o %alor atual da %ari$%el A/ O mesmo ocorre com a %ari$%el C6DO/
d: Muando a condio estipulada na lin2a I$ ( S%"& L $I" ) EGIT do programa !or satis!eita, o
comando )d(T ser$ e#ecutado/ )m seguida, a e#ecuo do programa + trans!erida para a lin2a
WRITE(,) !.alor de & depo#s do c#clo -!, & do programa, ;ue + a lin2a seguinte ao
comando )N* *O/
Ta"ela J/4 &rogramaJc/!,5/
I'TE,ER &, I'I7I%, $I", 0&SS%, S%"&, 7B6%
WRITE(,) !Entre com os valores #nte#ros de I'I7I%, $I" e 0&SS%!
RE&+(,) I'I7I%, $I", 0&SS%
S%"& - )
7B6% - )
+% & - I'I7I%, $I", 0&SS%
S%"& - S%"& 9 &
7B6% - 7B6% 9 &3
WRITE(,) !&, S%"&, 7B6% -!, &, S%"&, 7B6%
I$ ( S%"& L $I" ) EGIT
E'+ +%
WRITE(,) !.alor de & depo#s do c#clo -!, &
E'+
-: )#ecutar Duild, Compile para compilar o programa/
H: Zerar o programae#ecut$%el !a?endo Duild, Duild/
>: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura J/>,
dentro da ;ual temse:
a: Na primeira lin2a, o coment$rio )ntre com os %alores inteiros de (N(C(O, F(= e &AAAO,
resultado do comando WRITE(,) !Entre com os valores #nte#ros de I'I7I%, $I" e
0&SS%! do programa/
": Na segunda lin2a, o programa p$ra e !ica aguardando ;ue sejam !ornecidos os %alores das
%ari$%eis (N(C(O, F(= e &AAAO, resultado do comando RE&+(,) I'I7I%, $I", 0&SS% do
programa/ &ara ;ue o programa continue sua e#ecuo + necess$rio digitar 0 05 0, por e#emplo,
e, em seguida, clicar na tecla enter/
c: )m seguida so apresentados os resultados correspondentes N e#ecuo do programa/
J: At+ entender, analisar os resultados do programaJc/!,5, mostrados na Figura J/>, considerando cada
lin2a do programa!onte e as e#plica@es descritas no item 4 acima/
,: )#ecutar no%amente o programa com (N(C(O I a-, F(= I - e &AAAO I 2/ At+ entender, analisar os
no%os resultados, mostrados na Figura J/J, considerando cada lin2a do programa!onte e as
e#plica@es descritas no item 4 acima/
05: )ncerrar a sesso seguindo o procedimentopadro/
Figura J/> Resultado do programaJc/!,5 para (N(C(O I 0, F(= I 05 e &AAAO I 0/
Figura J/J Resultado do programaJc/!,5 para (N(C(O I a-, F(= I - e &AAAO I 2/
+.4 EXERC.CIOS
)#erc.cio J/0
)ditar um programa!onte em FORTRAN para e#ecutar o seguinte algoritmo 9passos::
0: Fer o %alor inteiro de uma %ari$%el, denotada por N
2: *eterminar se N + um nOmero primo
3: =ostrar o resultado, isto +, se N + um nOmero primo ou no/
)#erc.cio J/2
)ditar um programa!onte em FORTRAN para e#ecutar o seguinte algoritmo 9passos::
0: Fer o %alor inteiro de uma %ari$%el, denotada por N
2: Calcular o !atorial de N apenas para N i 5
3: =ostrar o resultado do !atorial de N
)#erc.cio J/3
)ditar um programa!onte em FORTRAN para calcular e escre%er num ar;ui%o o %alor de cada termo de
uma progresso aritm+tica, cujo pro"lema est$ de!inido no e#erc.cio -/0
)#erc.cio J/4
)ditar um programa!onte em FORTRAN para calcular e escre%er num ar;ui%o o %alor de cada termo de
uma progresso geom+trica, cujo pro"lema est$ de!inido no e#erc.cio H/2
05H Cap.tulo ,/ Conjuntos
C/012u3o ,. CON(UNTOS
OBJETIVOS DO CAPTULO
Conceitos de: conjunto, elemento, alocao din7mica de mem1ria
Comandos do FORTRAN: *(=)NA(ON, AFFOCATADF), AFFOCAT), =(NCAF, =AdCAF,
A6=
,.1 0ro4r/m/,/.5,&
&ara iniciali?ar as ati%idades deste cap.tulo, de%ese e#ecutar:
0: &ara acessar o programa Fortran, no 'indo8s: Atart, &rograms, Fortran &o8erAtation 4/5,
=icroso!t *e%eloper Atudio
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa,
3: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programa,a/!,5
4: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela ,/0/
-: O"jeti%os do progra m a:
a: 6tili?ar tr<s no%os comandos do FORTRAN: *(=)NA(ON, AFFOCATADF) e AFFOCAT)
": *eterminar os %alores m.nimo e m$#imo e a m+dia de um conjunto de %ari$%eis do tipo real
H: Coment$rios so"re o programa:
a: Todas as %ari$%eis do tipo inteiro, real e caracter ;ue !oram e m pregadas at+ o cap.tulo J podem
ser deno m inadas de %ari$%eis si m ples/ =as ta m "+m e#istem as c2a m adas %ari$%eis co m postas ou
do tipo conjunto, ;ue so o tema deste cap.tulo ,/
": Neste programa so usados tr<s no%os co m andos do FORTRAN: *(=)NA(ON,
AFFOCATADF) e AFFOCAT), ;ue so e m pregados com %ari$%eis do tipo conjunt o/ A sinta#e
deles, isto +, a !orma de utili?$los + mostrada na Ta"ela ,/ 2 /
c: )m FORTRAN, conjunto + u m a coleo de %ari$%eis do m es m o tipo ;ue so agrupadas nu m a
Onica %ari$%el/ Cada %ari$%el ;ue co m p@e o conjunto + deno m inada de ele m ento ou co m ponente/
6 m a %ari$%el do tipo conjunto ta m "+m + c2a m ada de %etor ou %ari$%el su"scrita/ As %ari$%eis do
tipo conjunto podem ser co m postas por %ari$%eis do tipo inteiro, real ou caracte r / &or e#emplo, as
di%ersas notas de uma pro%a podem ser agrupadas num Onico conjunto ou %ari$%el 9NOTAA: para
represent$las, con!orme + mostrado na Ta"ela ,/0/
d: O comando *(=)NA(ON9:: + usado para de!inir uma %ari$%el do tipo conjunto/
Ta"ela ,/0 &rograma,a/!,5/
05> Cap.tulo ,/ Conjuntos
I'TE,ER '%T&, RB&'TI+&+EV'%T&S
RE&<, &<<%7&T&6<E, +I"E'SI%'(:) :: '%T&S
RE&< "I'I"%, "&GI"%, S%"&, "E+I&
WRITE(,) !Entre com a Kuant#dade de notas!
RE&+(,) RB&'TI+&+EV'%T&S
&<<%7&TE ( '%T&S (RB&'TI+&+EV'%T&S) )
WRITE(,) !Entre com as notas!
+% '%T& - =, RB&'TI+&+EV'%T&S
RE&+(,) '%T&S('%T&)
E'+ +%
"I'I"% - '%T&S(=)
"&GI"% - '%T&S(=)
S%"& - '%T&S(=)
+% '%T& - (, RB&'TI+&+EV'%T&S
I$ ( '%T&S('%T&) J "I'I"% ) "I'I"% - '%T&S('%T&)
I$ ( '%T&S('%T&) L "&GI"% ) "&GI"% - '%T&S('%T&)
S%"& - S%"& 9 '%T&S('%T&)
E'+ +%
"E+I& - S%"& 8 RB&'TI+&+EV'%T&S
WRITE(,) !'ota m#n#ma - !, "I'I"%
WRITE(,) !'ota maD#ma - !, "&GI"%
WRITE(,) !'ota med#a - !, "E+I&
E'+
e: O co m ando AFFOCATADF) + usado para de!inir u m a %ari$%el do tipo aloc$%el, isto +, u m a
%ari$%el do tipo conjunto cuja ;uantidade de ele m entos ;ue a co m p@e + de!inida posterior m ente
dentro do progra m a em !uno de algu m a outra %ari$%el/
!: O co m ando AFFOCAT) + usado para de!inir ;u a ntos ele m entos co m p@em u m a %ari$%el do tipo
conjunto e reser%ar o espao de m e m 1ria correspondente no co m putador/ No se pode atri"uir
%alores aos co m ponentes de u m a %ari$%el do tipo conjunto antes do co m ando AFFOCAT) ter
sido usado com el a /
g: Na lin2a RE&<, &<<%7&T&6<E, +I"E'SI%'(:) :: '%T&S do programa, de!inese a %ari$%el
c2amada NOTAA com as seguintes caracter.sticas: do tipo conjunto, de%ido ao comando
*(=)NA(ON9::G do tipo aloc$%el, de%ido ao comando AFFOCATADF)G e do tipo real, ou seja,
cada elemento da %ari$%el NOTAA poder$ conter nOmeros reais, de%ido ao comando R)AF/ O
duplo dois pontos ;ue aparece nesta lin2a de%e ser usado ;uando e#iste m ais de u m a de!inio
para u m a %ari$%el, onde cada de!inio de%e ser separada por %.rgula/
2: Na lin2a &<<%7&TE ( '%T&S (RB&'TI+&+EV'%T&S) ) do programa, utili?andose o comando
AFFOCAT) e a %ari$%el M6ANT(*A*)]NOTAA, ;ue + um dado do programa, de!inese
;uantos elementos comp@em a %ari$%el NOTAA e reser%ase o espao de mem1ria
correspondente/
Ta"ela ,/2 Ainta#e de comandos para %ari$%eis do tipo conjunto/
0&R& +E$I'IR % TI0% +E .&RI&.W<:
RE&<, &<<%7&T&6<E, +I"E'SI%'(:) :: &, 6
I'TE,ER, &<<%7&T&6<E, +I"E'SI%'(:) :: &, 6
7>&R&7TER(G), &<<%7&T&6<E, +I"E'SI%'(:) :: &, 6
0&R& &<%7&R & "E"XRI& +%S 7%'CB'T%S:
&<<%7&TE ( &('=), 6('() )
onde G U um valor #nte#ro Kue de1#ne o nHmero de caracteres, e
'= e '( so var#5ve#s do t#po #nte#ro Kue de1#nem a Kuant#dade de elementos de cada
conQunto.
i: Cada ele m ento de u m a %ari$%el do tipo conjunto + re!erenciado por um nO m ero inteiro, c2a m ado
.ndice, ;ue corresponde N ordem dele dentro do conjunto/ )ste .ndice de%e !icar entre par<nteses
ap1s o no m e da %ari$%el do tipo conjunto/ O .ndice ou o nO m ero do ele m ento pode ser
representado por u m a %ari$%el, por e#emplo, na lin2a RE&+(,) '%T&S('%T&) do programa, ;ue
est$ dentro de um ciclo/ Neste ciclo, a %ari$%el NOTA corresponde a cada elemento da %ari$%el
NOTAA/
j: Na lin2a "I'I"% - '%T&S(=) do programa, est$ sendo iniciali?ado o %alor da %ari$%el =(N(=O
atri"uindo a ela o %alor do primeiro elemento da %ari$%el NOTAA/ O mesmo ocorre nas duas
lin2as seguintes com as %ari$%eis =Ad(=O e AO=A/
K: No ciclo de!inido pela lin2a +% '%T& - (, RB&'TI+&+EV'%T&S do programa, com o emprego de
comandos (F, so determinados os %alores =(N(=O e =Ad(=O dos elementos da %ari$%el
NOTAA, assim como a AO=A dos %alores de todos os elementos/
>: Algorit m o do progra m a:
a: *e!inir os tipos de todas as %ari$%eis
": Fer a ;uantidade de elementos da %ari$%el NOTAA, ;ue + do tipo conjunto ou %etor
c: Alocar a mem1ria para a %ari$%el NOTAA
d: Fer os %alores de todos os elementos da %ari$%el NOTAA
e: *eterminar os %alores m.nimo e m$#imo e a m+dia da %ari$%el NOTAA
!: )scre%er e identi!icar os %alores m.nimo e m$#imo e a m+dia da %ari$%el NOTAA
J: )#ecutar Duild, Compile para compilar o programa/
,: Zerar o programae#ecut$%el !a?endo Duild, Duild/
05: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura ,/0,
dentro da ;ual temse:
a: Na primeira lin2a, o coment$rio )ntre com a ;uantidade de notas, resultado do comando
WRITE(,) !Entre com a Kuant#dade de notas! do programa/
": Na segunda lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o %alor da %ari$%el
M6ANT(*A*)]NOTAA, resultado do comando RE&+(,) RB&'TI+&+EV'%T&S do programa/
&ara ;ue o programa continue sua e#ecuo + necess$rio digitar -, por e#emplo, e, em seguida,
clicar na tecla )nter/
c: Na terceira lin2a, o coment$rio )ntre com as notas, resultado do comando WRITE(,) !Entre
com as notas! do programa/
d: Na ;uarta lin2a, o programa p$ra e !ica aguardando ;ue sejam !ornecidos os %alores de todos os
elementos da %ari$%el NOTAA, resultado do comando RE&+(,) '%T&S('%T&) do programa,
;ue est$ dentro de um ciclo ;ue comea no primeiro elemento e %ai at+ o Oltimo do conjunto/
*e%ese perce"er ;ue o comando R)A* + usado para ler o %alor de apenas um elemento a cada
%e?G assim + necess$rio digitar cada nota e, em seguida, clicar na tecla )nter antes de se digitar
uma no%a nota/ 6sar, por e#emplo, os %alores >, J/-, -/>, 4/, e ,/
e: )m seguida so apresentados os resultados correspondentes N e#ecuo do programa/
00: At+ entender, analisar os resultados do programa,a/!,5, mostrados na Figura ,/0, considerando cada
lin2a do programa!onte, as e#plica@es descritas no item H acima e a m+dia o"tida com o uso de uma
calculadora/
02: )#ecutar no%amente o programa com outros %alores/ At+ entender, analisar os no%os resultados do
programa,a/!,5 considerando cada lin2a do programa!onte, as e#plica@es descritas no item H acima
e a m+dia o"tida com o uso de uma calculadora/
Figura ,/0 Resultado do programa,a/!,5/
,.2 0ro4r/m/,=.5,&
0: Nesta seo ser$ usado o programa,a/!,5, da seo anterior, como "ase para um no%o programa/
&ortanto, de%ese e#ecutar o seguinte no Fortran:
a: Aelecionar todas as lin2as do programa,a/!,5 com o "oto es;uerdo do mouse
": )dit, CopB para sal%ar este programa!onte na mem1ria do computador
2: Nesta seo ser$ usado o mesmo projeto da seo anterior/ &ortanto, de%ese e#ecutar o seguinte no
Fortran:
a: Clicar so"re o nome do programa,a/!,5
": )dit, Cut para retirar o programa,a/!,5 do projeto/
3: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programa,"/!,5
4: No Fortran, e#ecutar )dit, &aste para inserir o programa,a/!,5 dentro do programa,"/!,5/
-: *entro do espao de edio do Fortran, na su"janela maior, alterar o programa,a/!,5 para ;ue !i;ue
e#atamente igual ao te#to em %ermel2o mostrado na Ta"ela ,/3/
H: O"jeti%os do progra m a:
a: 6tili?ar tr<s no%as !un@es matem$ticas intr.nsecas do FORTRAN: =(NCAF, =AdCAF e A6=,
;ue so utili?adas com %ari$%eis do tipo conjunto
": *eterminar os %alores m.nimo e m$#imo e a m+dia de um conjunto de %ari$%eis do tipo real
>: Coment$rios so"re o programa:
a: Neste programa empregase e#atamente o mesmo algoritmo do programa anterior, isto +, os dois
programas !a?em e#atamente o mesmo/ A di!erena + ;ue neste programa os %alores m.nimo e
m$#imo e a m+dia de um conjunto de %ari$%eis do tipo real so o"tidos atra%+s de tr<s no%as
!un@es m ate m $ticas intr.nsecas do FORTRAN: =(NCAF, =AdCAF e A6=, ;ue so utili?adas
com %ari$%eis do tipo conjunto/ A sinta#e delas, isto +, a !orma de utili?$las + e#empli!icada na
Ta"ela ,/3/ Com isso, o ;ue !oi reali?ado com oito lin2as de programa!onte no programa,a/!,5,
empregando um ciclo e comandos (F, redu?iuse a tr<s lin2as no programa,"/!,5/
I'TE,ER '%T&, RB&'TI+&+EV'%T&S
Ta"ela ,/3 &rograma,"/!,5/
RE&<, &<<%7&T&6<E, +I"E'SI%'(:) :: '%T&S
RE&< "I'I"%, "&GI"%, S%"&, "E+I&
WRITE(,) !Entre com a Kuant#dade de notas!
RE&+(,) RB&'TI+&+EV'%T&S
&<<%7&TE ( '%T&S (RB&'TI+&+EV'%T&S) )
WRITE(,) !Entre com as notas!
+% '%T& - =, RB&'TI+&+EV'%T&S
RE&+(,) '%T&S('%T&)
E'+ +%
"I'I"% - "I'.&<('%T&S)
"&GI"% - "&G.&<('%T&S)
S%"& - SB"('%T&S)
"E+I& - S%"& 8 RB&'TI+&+EV'%T&S
WRITE(,) !'ota m#n#ma - !, "I'I"%
WRITE(,) !'ota maD#ma - !, "&GI"%
WRITE(,) !'ota med#a - !, "E+I&
E'+
": O co m ando D I =(NCAF9A: deter m ina o %alor m . ni m o entre todos os ele m entos da %ari$%el do
tipo conjunto A e atri"ui o resultado N %ari$%el si m ples D/
c: O co m ando D I =AdCAF9A: deter m ina o %alor m $#i m o entre todos os ele m entos da %ari$%el do
tipo conjunto A e atri"ui o resultado N %ari$%el si m ples D/
d: O co m ando D I A6=9A: calcula a so m a dos %alores de todos os ele m entos da %ari$%el do tipo
conjunto A e atri"ui o resultado N %ari$%el si m ples D/
J: )#ecutar Duild, Compile para compilar o programa/
,: Zerar o programae#ecut$%el !a?endo Duild, Duild/
05: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, ocorre o mesmo j$ e#plicado no item 05 da
seo ,/0 deste cap.tulo, e o resultado o"tido + o mesmo j$ mostrado na Figura ,/0/
,.3 0ro4r/m/,;.5,&
0: Nesta seo ser$ usado o mesmo projeto da seo anterior/ &ortanto, de%ese e#ecutar o seguinte no
Fortran:
a: Clicar so"re o nome do programa,"/!,5
": )dit, Cut para retirar o programa,"/!,5 do projeto/
2: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programa,c/!,5
3: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela ,/4/
4: O"jeti%os do progra m a:
a: =ostrar como reali?ar opera@es com todos os elementos de um conjunto num Onico comando
": =ostrar o uso de !un@es matem$ticas intr.nsecas do FORTRAN com %ari$%eis do tipo conjunto
c: =ostrar duas !ormas de escre%er o conteOdo de %ari$%eis do tipo conjunto
-: Coment$rios so"re o programa:
a: Na lin2a RE&<, &<<%7&T&6<E, +I"E'SI%'(:) :: 7%'CB'T%V&, 7%'CB'T%V6, 7%'CB'T%V7 do
programa, esto sendo de!inidas tr<s %ari$%eis 9CON36NTO]A, CON36NTO]D e
CON36NTO]C: com as seguintes caracter.sticas: do tipo conjunto, de%ido ao comando
*(=)NA(ON9::G do tipo aloc$%el, de%ido ao comando AFFOCATADF)G e do tipo real, ou seja,
cada elemento das tr<s %ari$%eis poder$ conter nOmeros reais, de%ido ao comando R)AF/
": Na lin2a 7%'CB'T%V6 - 7%'CB'T%V& 9 =) do programa, somase o %alor 05 ao %alor de cada
elemento da %ari$%el CON36NTO]A e atri"uise o resultado a cada elemento da %ari$%el
CON36NTO]D/ &ortanto, num Onico co m ando esto sendo !eitos c$lculos com todos os
ele m entos de um conjunto/ &ara ;ue isso seja poss.%el, as duas %ari$%eis do tipo conjunto t<m ;ue
ter e#ata m ente o m es m o nO m ero de ele m entos/ )sta lin2a do programa poderia ser su"stitu.da de
!orma e;ui%alente ao seguinte:
+% E<E"E'T% - =, RB&'TI+&+EVE<E"E'T%S
7%'CB'T%V6(E<E"E'T%) - 7%'CB'T%V&(E<E"E'T%) 9 =)
E'+ +%
c: Na lin2a 7%'CB'T%V7 - EG0(7%'CB'T%V&) do programa, calculase a e#ponencial do %alor de
cada elemento da %ari$%el CON36NTO]A e atri"uise o resultado a cada elemento da %ari$%el
CON36NTO]C/ Assim, num Onico co m ando esto sendo !eitos c$lculos com todos os ele m entos
de um conjunto en%ol%endo u m a !uno m ate m $tica intr.nseca do FORTRA N, no caso a !uno
e#ponencial 9)d&:/ =as tam"+m podem ser usadas outras !un@es co m o a;uelas apresentadas nas
Ta"elas -/- e -/H/ )sta lin2a do programa tam"+m poderia ser su"stitu.da de !orma e;ui%alente ao
seguinte:
+% E<E"E'T% - =, RB&'TI+&+EVE<E"E'T%S
7%'CB'T%V7(E<E"E'T%) - EG0(7%'CB'T%V&(E<E"E'T%))
E'+ +%
Ta"ela ,/4 &rograma,c/!,5/
I'TE,ER E<E"E'T%, RB&'TI+&+EVE<E"E'T%S
RE&<, &<<%7&T&6<E, +I"E'SI%'(:) :: 7%'CB'T%V&, 7%'CB'T%V6, 7%'CB'T%V7
WRITE(,) !Entre com a Kuant#dade de elementos do 7%'CB'T%V&!
RE&+(,) RB&'TI+&+EVE<E"E'T%S
&<<%7&TE ( 7%'CB'T%V&(RB&'TI+&+EVE<E"E'T%S), I
7%'CB'T%V6(RB&'TI+&+EVE<E"E'T%S), I
7%'CB'T%V7(RB&'TI+&+EVE<E"E'T%S) )
WRITE(,) !Entre com os valores do 7%'CB'T%V&!
+% E<E"E'T% - =, RB&'TI+&+EVE<E"E'T%S
RE&+(,) 7%'CB'T%V&(E<E"E'T%)
E'+ +%
7%'CB'T%V6 - 7%'CB'T%V& 9 =)
7%'CB'T%V7 - EG0(7%'CB'T%V&)
WRITE(,) !7%'CB'T%V6 - !, 7%'CB'T%V6
+% E<E"E'T% - =, RB&'TI+&+EVE<E"E'T%S
WRITE(,()) E<E"E'T%, 7%'CB'T%V7(E<E"E'T%)
() $%R"&T(=)G, !7%'CB'T%V7(!, I(, !) - !, =0E=?.3 )
E'+ +%
E'+
d: Q$ duas !or m as de escre%er os %alores dos ele m entos de u m a %ari$%el do tipo conjunto/ A
pri m eira + agir da m es m a !or m a ;ue no caso de u m a %ari$%el si m ple s/ &or e#emplo, como
resultado da lin2a WRITE(,) !7%'CB'T%V6 - !, 7%'CB'T%V6 do programa, sero escritos os
%alores de todos os elementos da %ari$%el CON36NTO]D, na se;L<ncia do primeiro ao Oltimo
elemento, no !ormato de!ault do FORTRAN/ A segunda !or m a + escre%er o %alor de cada
ele m ento atra%+s de um ciclo, com ou sem !or m ato de edi o/ 6m e#emplo disso + apresentado no
Oltimo ciclo do programa,c/!,5/
H: Algorit m o do progra m a:
a: *e!inir os tipos de todas as %ari$%eis
": Fer a ;uantidade de elementos das %ari$%eis do tipo conjunto
c: Alocar a mem1ria para as tr<s %ari$%eis do tipo conjunto c2amadas CON36NTO]A,
CON36NTO]D e CON36NTO]C
d: Fer os %alores de todos os elementos da %ari$%el CON36NTO]A
e: Aomar o %alor 05 ao %alor de cada elemento da %ari$%el CON36NTO]A e atri"uir o resultado a
cada elemento da %ari$%el CON36NTO]D
!: calcular a e#ponencial do %alor de cada elemento da %ari$%el CON36NTO]A e atri"uir o
resultado a cada elemento da %ari$%el CON36NTO]C
g: )scre%er os %alores de todos os elementos das %ari$%eis CON36NTO]D e CON36NTO]C
>: )#ecutar Duild, Compile para compilar o programa/
J: Zerar o programae#ecut$%el !a?endo Duild, Duild/
,: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura ,/2,
dentro da ;ual temse:
a: Na primeira lin2a, o coment$rio )ntre com a ;uantidade de elementos do CON36NTO]A,
resultado do comando WRITE(,) !Entre com a Kuant#dade de elementos do
7%'CB'T%V&! do programa/
": Na segunda lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o %alor da %ari$%el
M6ANT(*A*)])F)=)NTOA, resultado do comando RE&+(,) RB&'TI+&+EVE<E"E'T%S do
programa/ &ara ;ue o programa continue sua e#ecuo + necess$rio digitar H, por e#emplo, e, em
seguida, clicar na tecla )nter/
c: Na terceira lin2a, o coment$rio )ntre com os %alores do CON36NTO]A, resultado do comando
WRITE(,) !Entre com os valores do 7%'CB'T%V&! do programa/
d: Na ;uarta lin2a, o programa p$ra e !ica aguardando ;ue sejam !ornecidos os %alores de todos os
elementos da %ari$%el CON36NTO]A, resultado do comando RE&+(,)
7%'CB'T%V&(E<E"E'T%) do programa, ;ue est$ dentro de um ciclo ;ue comea no primeiro
elemento e %ai at+ o Oltimo do conjunto/ *e%ese perce"er ;ue o comando R)A* + usado para ler
o %alor de apenas um elemento a cada %e?G assim + necess$rio digitar cada %alor e, em seguida,
clicar na tecla )nter antes de se digitar um no%o %alor/ 6sar, por e#emplo, os %alores 0, 2, 3, 4, - e
H/
e: )m seguida so apresentados os resultados correspondentes N e#ecuo do programa/
Figura ,/2 Resultado do programa,c/!,5/
05: At+ entender, analisar os resultados do programa,c/!,5, mostrados na Figura ,/2, considerando cada
lin2a do programa!onte e as e#plica@es descritas no item - acima/
00: )#ecutar no%amente o programa com outros dados/ At+ entender, analisar os no%os resultados
considerando cada lin2a do programa!onte e as e#plica@es descritas no item - acima/
,.4 0ro4r/m/,<.5,&
0: Nesta seo ser$ usado o mesmo projeto da seo anterior/ &ortanto, de%ese e#ecutar o seguinte no
Fortran:
a: Clicar so"re o nome do programa,c/!,5
": )dit, Cut para retirar o programa,c/!,5 do projeto/
2: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programa,d/!,5
3: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela ,/-/
4: O"jeti%o do progra m a: aplicar os conceitos j$ %istos nas se@es anteriores deste cap.tulo ao caso de
uma progresso aritm+tica 9&/A/: onde os %alores dos elementos da %ari$%el do tipo conjunto so
inteiros/
-: Algorit m o do progra m a:
a: *e!inir os tipos de todas as %ari$%eis
": Fer o nOmero de termos da progresso aritm+tica 9&/A/:
c: Alocar a mem1ria para a %ari$%el do tipo conjunto c2amada A
d: Fer os %alores do primeiro termo da &/A/ e a di!erena entre dois termos su"se;Lentes
e: Calcular os %alores dos termos da &/A/ e atri"u.los N %ari$%el A
!: Calcular a soma dos %alores de todos os elementos da &/A/
g: )scre%er os %alores de todos os elementos da &/A/ e a soma deles
I'TE,ER TER"%, ', S', +
Ta"ela ,/- &rograma,d/!,5/
I'TE,ER, &<<%7&T&6<E, +I"E'SI%'(:) :: &
WRITE(,) !Todas as var#ave#s sao do t#po #nte#ro!
WRITE(,) !Entre com o numero de termos da 0.&.!
RE&+(,) '
&<<%7&TE ( &(') )
WRITE(,) !Entre com o pr#me#ro termo da 0.&.!
RE&+(,) &(=)
WRITE(,) !Entre com a d#1erenca entre do#s termos su3seKuentes!
RE&+(,) +
+% TER"% - (, '
&(TER"%) - &(=) 9 (TER"% : =) +
E'+ +%
S' - ' ( &(=) 9 &(') ) 8 (
+% TER"% - =, '
WRITE(,=)) TER"%, &(TER"%)
=) $%R"&T(3G, !&(!, I3, !) - !, IA )
E'+ +%
WRITE(,) !Soma dos termos - !, S'
E'+
H: )#ecutar Duild, Compile para compilar o programa/
>: Zerar o programae#ecut$%el !a?endo Duild, Duild/
J: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura ,/3,
dentro da ;ual so solicitados os dados 9usar, por e#emplo, 05, 0 e 2: e, em seguida, apresentados
os resultados da e#ecuo do programa/
,: At+ entender, analisar os resultados do programa,d/!,5, mostrados na Figura ,/3, considerando cada
lin2a do programa!onte/
05: )#ecutar no%amente o programa com outros dados/ At+ entender, analisar os no%os resultados
considerando cada lin2a do programa!onte/
00: )ncerrar a sesso seguindo o procedimentopadro/
Figura ,/3 Resultado do programa,d/!,5/
,." EXERC.CIOS
)#erc.cio ,/0
Adaptar o programa,d/!,5 para escre%er os %alores dos termos da progresso aritm+tica num ar;ui%o,
"em como a soma dos %alores de todos os termos
)#erc.cio ,/2
Adaptar o programa,d/!,5 para calcular e escre%er os %alores dos termos de uma progresso geom+trica
num ar;ui%o, "em como a soma dos %alores de todos os termos
)#erc.cio ,/3
)ditar um programa!onte em FORTRAN para e#ecutar o seguinte algoritmo 9passos::
0: *e!inir os tipos de todas as %ari$%eis, sendo uma delas do tipo conjunto para caracteres, c2amada
NO=)A
2: Fer a ;uantidade de elementos da %ari$%el NO=)A
3: Alocar a mem1ria para a %ari$%el NO=)A
4: Fer os conteOdos de todos os elementos da %ari$%el NO=)A
-: )scre%er num ar;ui%o o conteOdo de cada elemento da %ari$%el NO=)A
)#erc.cio ,/4
Adaptar o programa,"/!,5 para:
0: )scre%er num ar;ui%o os %alores das notas e os resultados calculados
2: Calcular e escre%er o des%iopadro 9D: das notas, de!inido por
N
j
9 N
m
a N
i
:
D I
i I0
N
onde N + o nOmero de notas, N
m
+ a m+dia das notas, e N
i
+ cada nota/
)#erc.cio ,/-
)ditar um programa!onte em FORTRAN para e#ecutar o seguinte algoritmo 9passos::
0: Fer os %alores inteiros de cinco %ari$%eis
2: Ordenar e escre%er as cinco %ari$%eis em ordem crescente de %alor
3: Ordenar e escre%er as cinco %ari$%eis em ordem decrescente de %alor
)#erc.cio ,/H
)ditar um programa!onte em FORTRAN para e#ecutar o seguinte algoritmo 9passos::
0: Fer os %alores inteiros de cinco %ari$%eis
2: *eterminar e escre%er ;uais %ari$%eis t<m %alor par
3: *eterminar e escre%er ;uais %ari$%eis t<m %alor .mpar
4: Calcular a soma dos %alores pares
-: Calcular a soma dos %alores .mpares
2
00, Cap.tulo 05/ =atri?es
C/012u3o 1&. MATRI#ES
OBJETIVOS DO CAPTULO
Conceitos de: conjunto multidimensional 9matri?:, ciclo impl.cito, ciclo duplo
Comandos do FORTRAN: *(=)NA(ON9:,::, =AT=6F
1&.1 0ro4r/m/1&/.5,&
&ara iniciali?ar as ati%idades deste cap.tulo, de%ese e#ecutar:
0: &ara acessar o programa Fortran, no 'indo8s: Atart, &rograms, Fortran &o8erAtation 4/5,
=icroso!t *e%eloper Atudio
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa05
3: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programa05a/!,5
4: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 05/0/
-: O"jeti%os do progra m a:
a: Aplicar os comandos *(=)NA(ON, AFFOCATADF) e AFFOCAT) a um conjunto
"idimensional 9matri?: do tipo inteiro
": Fer os elementos da matri? e escre%<los utili?ando ciclos duplos
H: Coment$rios so"re o programa:
a: Neste programa os co m andos *(=)NA(ON, AFFOCATADF) e AFF O CAT) so aplicados a
u m a %ari$%el do tipo conjunto "idi m ensional, ;ue ta m "+m + c2a m ada de m atri ?/ A sinta#e deles,
isto +, a !orma de utili?$los + mostrada na Ta"ela 05/ 2/
": )m FORTRAN, conjunto "idi m ensional + um c onjunto no ;ual so necess$rios dois .ndices para
locali?ar cada ele m ento em sua estrutura/ &ortanto, os conjuntos e m pregados no cap.tulo , podem
ser classi!icados co m o conjuntos unidi m ensionais pois "asta um Onico .ndice para locali?ar cada
ele m ento dentro deles/
c: Zenerali?ando, e#istem os conjuntos m ultidi m ensionais, isto +, a;ueles nos ;uais so necess$rios
di%ersos .ndices 92, 3, etc: para locali?ar ca d a ele m ento dentro deles/ )m FORTRAN, os
conjuntos podem ter at+ sete di m ens@es ou .ndices/ 6m e#emplo de conjunto tridimensional +
a;uele onde se arma?enam as coordenadas d, V e \ de um s1lido tridimensional/
d: Todos os conceitos %istos no cap.tulo , para conjuntos unidi m ensionais ta m "+m so %$lidos para
conjuntos m ultidi m ensionais/
e: O comando *(=)NA(ON9:,:: + usado para de!i nir uma %ari$%el do tipo conjunto "idimensional/
025 Cap.tulo 05/ =atri?es
Ta"ela 05/0 &rograma05a/!,5/
I'TE,ER <I'>&, <I'>&S, 7%<B'&, 7%<B'&S
I'TE,ER, &<<%7&T&6<E, +I"E'SI%'(:,:) :: "&TRIY
WRITE(,) !Entre com o numero de l#nhas da matr#S!
RE&+(,) <I'>&S
WRITE(,) !Entre com o numero de colunas da matr#S!
RE&+(,) 7%<B'&S
&<<%7&TE ( "&TRIY ( <I'>&S, 7%<B'&S ) )
+% <I'>& - =, <I'>&S
WRITE(,) !Entre com os valores dos elementos da matr#S da l#nha -!, <I'>&
+% 7%<B'& - =, 7%<B'&S
RE&+(,) "&TRIY(<I'>&,7%<B'&)
E'+ +%
E'+ +%
WRITE(,) !Escr#ta da "&TRIY sem 1ormato!
WRITE(,) "&TRIY
WRITE(,) !Escr#ta da "&TRIY na mesma seKuenc#a dos dados!
+% <I'>& - =, <I'>&S
+% 7%<B'& - =, 7%<B'&S
WRITE(,=) <I'>&, 7%<B'&, "&TRIY(<I'>&,7%<B'&)
= $%R"&T( 3G, !"&TRIY(!, I=, !,!, I=, !) - !, I?)
E'+ +%
E'+ +%
E'+
!: 6 m a das principais aplica@es de conjuntos uni e "idi m ensionais + a resoluo de siste m as de
e;ua@es alg+"ricas representados por
[A][X ] = [B]
905/0:
onde k A l + a m atri? 9conjunto "idi m ensional: dos coe!icientes do siste m a de e;ua@esG k X l + o
%etor 9conjunto unidi m ensional: inc1gnita, isto +, representa as %ari$%eis a deter m inar com a
resoluo do siste m aG e k B l + o %etor 9conjunto unidi m ensional: independente, ou seja, ele cont+m
%alores con2ecidos/
g: Na lin2a I'TE,ER, &<<%7&T&6<E, +I"E'SI%'(:,:) :: "&TRIY do programa, de!inese a
%ari$%el c2amada =ATR(\ com as seguintes caracter.sticas: do tipo conjunto "idimensional
9matri?:, de%ido ao comando *(=)NA(ON9:,::G do tipo aloc$%el, de%ido ao comando
AFFOCATADF)G e do tipo inteiro, ou seja, cada elemento da %ari$%el =ATR(\ poder$ conter
nOmeros inteiros, de%ido ao comando (NT)Z)R/
2: Na lin2a &<<%7&TE ( "&TRIY ( <I'>&S, 7%<B'&S ) ) do programa, utili?andose o comando
AFFOCAT) e as %ari$%eis F(NQAA e COF6NAA, ;ue so dados do programa, de!inese,
respecti%amente, ;uantos elementos e#istem em cada lin2a e em cada coluna da %ari$%el =ATR(\
e reser%ase o espao de mem1ria correspondente/
Ta"ela 05/2 Ainta#e de comandos para %ari$%eis do tipo matri? 9conjunto "idimensional:/
0&R& +E$I'IR % TI0% +E .&RI&.W<:
RE&<, &<<%7&T&6<E, +I"E'SI%'(:,:) :: &, 6
I'TE,ER, &<<%7&T&6<E, +I"E'SI%'(:,:) :: &, 6
7>&R&7TER(G), &<<%7&T&6<E, +I"E'SI%'(:,:) :: &, 6
0&R& &<%7&R & "E"XRI& +%S 7%'CB'T%S:
&<<%7&TE ( &(<,7), 6(<,7) )
onde G U um valor #nte#ro Kue de1#ne o nHmero de caracteres,
< e 7 so var#5ve#s do t#po #nte#ro Kue de1#nem, respect#vamente, a Kuant#dade de
elementos numa l#nha e numa coluna das matr#Ses & e 6.
i: Cada ele m ento de u m a %ari$%el do tipo conjunto "idi m ensional + re!erenciado por dois nO m eros
inteiros, c2a m ado .ndices, ;ue correspondem N ordem dele dentro do conjunto/ O pri m eiro .ndice
corresponde N lin2a ;ue o ele m ento ocupa dentro da m atri? e o segundo, N coluna/ )stes .ndices
de%em !icar dentro de par<nteses, e separados por %.rgula, ap1s o no m e da %ari$%el do tipo
conjunto "idi m ensional/ Os .ndices ou os nO m eros do ele m ento podem ser representados por
%ari$%eis, por e#emplo, na lin2a RE&+(,) "&TRIY(<I'>&,7%<B'&) do programa, ;ue est$
dentro de um ciclo duplo/
j: Ciclo duplo + ;uando te m se um ciclo dentro de outro/ Ao usados dois ciclos duplos no
programa05a/!,5/ 6m deles +
+% <I'>& - =, <I'>&S
+% 7%<B'& - =, 7%<B'&S
WRITE(,=) <I'>&, 7%<B'&, "&TRIY(<I'>&,7%<B'&)
= $%R"&T( 3G, !"&TRIY(!, I=, !,!, I=, !) - !, I?)
E'+ +%
E'+ +%
Reco m endase identar, isto +, deslocar para a direita todas as lin2as do progra m a ;ue esto entre
os co m andos *O e )N* *O/ Assi m , !acil m ente se perce"e os co m andos ;ue co m p@em o ciclo/
No caso de ciclos duplos, de%ese usar u m a identao para cada cicl o, con!orme o e#emplo
mostrado neste item, acima/
K: Ao usadas duas !or m as para escre%er os %al o res dos ele m entos de u m a %ari$%el do tipo conjunto
"idi m ensional/ A pri m eira + agir da m es m a !or m a ;ue no caso de u m a %ari$%el si m ples, por
e#emplo, a lin2a WRITE(,) "&TRIY do programa/ Nesta !orma a matri? + escrita no !ormato
de!ault do FORTRAN ;ue +: primeiro, escre%er os %alores de todos os elementos da primeira
coluna, indo da primeira N Oltima lin2aG repetir o procedimento para a segunda coluna, e assim por
diante at+ a Oltima coluna/ A segunda !or m a + escre%er o %alor de cada ele m ento atra%+s de um
ciclo duplo, com ou sem !or m ato de edio/ 6m e#emplo disso + apresentado no !inal do
programa05a/!,5
>: Algorit m o do progra m a:
a: *e!inir os tipos de todas as %ari$%eis
": Fer a ;uantidade de elementos em cada lin2a e coluna da %ari$%el =ATR(\, ;ue + do tipo
conjunto "idimensional
c: Alocar a mem1ria para a %ari$%el =ATR(\
d: Fer os %alores de todos os elementos da %ari$%el =ATR(\
e: )scre%er o conteOdo da %ari$%el =ATR(\ sem utili?ar !ormato de edio
!: )scre%er os dois .ndices e o %alor correspondente a cada elemento da %ari$%el =ATR(\ utili?ando
!ormatos de edio
J: )#ecutar Duild, Compile para compilar o programa/
,: Zerar o programae#ecut$%el !a?endo Duild, Duild/
05: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura 05/0,
dentro da ;ual temse:
a: Na primeira lin2a, o coment$rio )ntre com o numero de lin2as da matri?, resultado do comando
WRITE(,) !Entre com o numero de l#nhas da matr#S! do programa/
": Na segunda lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o %alor da %ari$%el
F(NQAA, resultado do comando RE&+(,) <I'>&S do programa/ &ara ;ue o programa continue
sua e#ecuo + necess$rio digitar 3, por e#emplo, e, em seguida, clicar na tecla )nter/
c: Na terceira lin2a, o coment$rio )ntre com o numero de colunas da matri?, resultado do comando
WRITE(,) !Entre com o numero de colunas da matr#S! do programa/
d: Na ;uarta lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o %alor da %ari$%el
COF6NAA, resultado do comando RE&+(,) 7%<B'&S do programa/ &ara ;ue o programa
continue sua e#ecuo + necess$rio digitar 2, por e#emplo, e, em seguida, clicar na tecla )nter/
e: Na ;uinta lin2a, o coment$rio )ntre com os %alores dos elementos da matri? da lin2a I 0,
resultado do comando WRITE(,) !Entre com os valores dos elementos da matr#S da
l#nha -!, <I'>& do programa/
Figura 05/0 Resultado do programa05a/!,5/
!: Na se#ta lin2a, o programa p$ra e !ica aguardando ;ue sejam !ornecidos os %alores de todos os
elementos da primeira lin2a da matri?, resultado dos comandos
+% 7%<B'& - =, 7%<B'&S
RE&+(,) "&TRIY(<I'>&,7%<B'&)
E'+ +%
do programa, ;ue cont<m um ciclo ;ue comea no elemento da primeira coluna e %ai at+ a Oltima/
*e%ese perce"er ;ue o comando R)A* + usado para ler o %alor de apenas um elemento a cada
%e?G assim + necess$rio digitar cada %alor e, em seguida, clicar na tecla )nter antes de se digitar
um no%o %alor/ 6sar, por e#emplo, os %alores 0, 4, 2, -, 3 e H/ )stes dados, nesta se;L<ncia,
correspondem N seguinte matri?:

3
4

905/2:
g: )m seguida so apresentados os resultados correspondentes N e#ecuo do programa/
00: At+ entender, analisar os resultados do programa05a/!,5, mostrados na Figura 05/0, considerando
cada lin2a do programa!onte e as e#plica@es descritas no item H acima/
02: )#ecutar no%amente o programa com outros dados/ At+ entender, analisar os no%os resultados do
programa05a/!,5 considerando cada lin2a do programa!onte e as e#plica@es descritas no item H
acima/
1&.2 0ro4r/m/1&=.5,&
0: Nesta seo ser$ usado o programa05a/!,5, da seo anterior, como "ase para um no%o programa/
&ortanto, de%ese e#ecutar o seguinte no Fortran:
a: Aelecionar todas as lin2as do programa05a/!,5 com o "oto es;uerdo do mouse
": )dit, CopB para sal%ar este programa!onte na mem1ria do computador
2: Nesta seo ser$ usado o mesmo projeto da seo anterior/ &ortanto, de%ese e#ecutar o seguinte no
Fortran:
a: Clicar so"re o nome do programa05a/!,5
": )dit, Cut para retirar o programa05a/!,5 do projeto/
3: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programa05"/!,5
4: No Fortran, e#ecutar )dit, &aste para inserir o programa05a/!,5 dentro do programa05"/!,5/
-: *entro do espao de edio do Fortran, na su"janela maior, alterar o programa05a/!,5 para ;ue
!i;ue e#atamente igual ao te#to em %ermel2o mostrado na Ta"ela 05/3/
H: O"jeti%os do progra m a:
a: Aplicar os comandos *(=)NA(ON, AFFOCATADF) e AFFOCAT) a conjuntos "idimensionais
9matri?es: do tipo real
": Fer %alores de elementos de matri?es e escre%<los num ar;ui%o utili?ando ciclos simples e
impl.citos
c: Reali?ar opera@es matem$ticas com matri?es
>: Coment$rios so"re o programa:
-

a: Com os ciclos usados no programa da seo anterior, programa05a/!,5, conseguese ler apenas um
elemento da matri? por %e?, isto +, a cada comando )nter/ 3$ neste programa05"/!,5, com o "loco
de lin2as do progra m a
+% <I'>& - =, <I'>&S
WRITE(,) !Entre com os valores dos elementos da "&TRIYV& da l#nha -!, <I'>&
RE&+(,) ( "&TRIYV&(<I'>&,7%<B'&), 7%<B'& - =, 7%<B'&S )
E'+ +%
conseguese ler os %alores de todos os ele m entos de cada lin2a da =ATR(\]A/ (sso + poss.%el
por;ue: e#iste um ciclo e#terno, de!inido pela lin2a +% <I'>& - =, <I'>&S do programa, ;ue a
cada e#ecuo percorre uma lin2a da matri?G e tam"+m e#iste um ciclo c2amado de impl.cito na
lin2a RE&+(,) ( "&TRIYV&(<I'>&,7%<B'&), 7%<B'& - =, 7%<B'&S ) do programa, ;ue a
cada e#ecuo percorre todas as colunas da matri?/
": O c2a m ado ciclo im pl.cito ou anin2ado + utili?ado sem os co m andos *O e )N* *O, con!orme
e#empli!icado na leitura e escrita da =ATR(\]A e na escrita da =ATR(\]D e da =ATR(\]C no
programa05"/!,5/
BSE 0%RT<I6
Ta"ela 05/3 &rograma05"/!,5/
I'TE,ER <I'>&, <I'>&S, 7%<B'&, 7%<B'&S, 7%'ST&'TE, .ER
RE&<,&<<%7&T&6<E,+I"E'SI%'(:,:) :: "&TRIYV&, "&TRIYV6, "&TRIYV7
WRITE(,) !Entre com o valor da 7%'ST&'TE (#nte#ro)!
RE&+(,) 7%'ST&'TE
WRITE(,) !Entre com o numero de l#nhas das matr#Ses (#nte#ro)!
RE&+(,) <I'>&S
WRITE(,) !Entre com o numero de colunas das matr#Ses (#nte#ro)!
RE&+(,) 7%<B'&S
&<<%7&TE ( "&TRIYV&(<I'>&S,7%<B'&S), "&TRIYV6(<I'>&S,7%<B'&S), I
"&TRIYV7(<I'>&S,7%<B'&S) )
+% <I'>& - =, <I'>&S
WRITE(,) !Entre com os valores dos elementos da "&TRIYV& da l#nha -!, <I'>&
RE&+(,) ( "&TRIYV&(<I'>&,7%<B'&), 7%<B'& - =, 7%<B'&S )
E'+ +%
+% <I'>& - =, <I'>&S
+% 7%<B'& - =, 7%<B'&S
"&TRIYV6(<I'>&,7%<B'&) - 7%'ST&'TE "&TRIYV&(<I'>&,7%<B'&)
E'+ +%
E'+ +%
+% <I'>& - =, <I'>&S
+% 7%<B'& - =, 7%<B'&S
"&TRIYV7(<I'>&,7%<B'&) - "&TRIYV&(<I'>&,7%<B'&) 9 "&TRIYV6(<I'>&,7%<B'&)
E'+ +%
E'+ +%
%0E'(=), $I<E-!S&I+&=)6.TGT!)
WRITE(=),3=) 7%'ST&'TE
3= $%R"&T(!7%'ST&'TE - !, I?, 8)
WRITE(=),3()
3( $%R"&T(3G, ! "&TRIYV& (dados) !)
+% <I'>& - =, <I'>&S
WRITE(=),33) ( "&TRIYV&(<I'>&,7%<B'&), 7%<B'& - =, 7%<B'&S )
33 $%R"&T( =) (3G, =0E=).3 ) )
E'+ +%
WRITE(=),*=)
*= $%R"&T(=8, 3G, ! "&TRIYV6 (7%'ST&'TE "&TRIYV&) !)
+% <I'>& - =, <I'>&S
WRITE(=),33) ( "&TRIYV6(<I'>&,7%<B'&), 7%<B'& - =, 7%<B'&S )
E'+ +%
WRITE(=),?=)
?= $%R"&T(=8, 3G, ! "&TRIYV7 ("&TRIYV& 9 "&TRIYV6) !)
+% <I'>& - =, <I'>&S
WRITE(=),33) ( "&TRIYV7(<I'>&,7%<B'&), 7%<B'& - =, 7%<B'&S )
E'+ +%
7<%SE(=))
.ER - SFSTE"(!'otepad S&I+&=)6.TGT!)
E'+
c: Com o "loco de lin2as do programa
+% <I'>& - =, <I'>&S
+% 7%<B'& - =, 7%<B'&S
"&TRIYV6(<I'>&,7%<B'&) - 7%'ST&'TE "&TRIYV&(<I'>&,7%<B'&)
E'+ +%
E'+ +%
o %alor de cada elemento da =ATR(\]A + multiplicado pela %ari$%el CONATANT) e o resultado
+ atri"u.do a cada elemento da =ATR(\]D/
d: Com o "loco de lin2as do programa
+% <I'>& - =, <I'>&S
+% 7%<B'& - =, 7%<B'&S
"&TRIYV7(<I'>&,7%<B'&) - "&TRIYV&(<I'>&,7%<B'&) 9 "&TRIYV6(<I'>&,7%<B'&)
E'+ +%
E'+ +%
o %alor de cada elemento da =ATR(\]A + adicionado ao %alor de cada elemento da =ATR(\]D
e o resultado + atri"u.do a cada elemento da =ATR(\]C/
e: Com o "loco de lin2as do programa
+% <I'>& - =, <I'>&S
WRITE(=),33) ( "&TRIYV&(<I'>&,7%<B'&), 7%<B'& - =, 7%<B'&S )
33 $%R"&T( =) (3G, =0E=).3 ) )
E'+ +%
escre%ese o conteOdo da %ari$%el =ATR(\]A em !ormato de matri? atra%+s de um ciclo simples
9e#terno: e um ciclo impl.cito 9interno:/ O !ormato de edio empregado =) (3G, =0E=).3 )
permite ;ue sejam escritos at+ 05 elementos a cada lin2a com tr<s colunas entre cada um 93d:,
utili?ando o !ormato 0&)05/3 para nOmeros reais/
!: Com conjuntos m ultidi m ensionais, ta m "+m se pode !a?er si m ultanea m ente opera@es com todos
os ele m entos, con!or m e j$ %isto no progra m a,c/!,5 do cap.tulo , para conjuntos unidi m ensionais/
&or e#emplo, as cinco lin2as de programa mostradas no item c acima podem ser su"stitu.das de
!orma e;ui%alente a apenas
"&TRIYV6 - 7%'ST&'TE "&TRIYV&
) as cinco lin2as de programa mostradas no item d acima podem ser su"stitu.das de !orma
e;ui%alente a apenas
"&TRIYV7 - "&TRIYV& 9 "&TRIYV6
g: Com conjuntos m ultidi m ensionais, ta m "+m se pode utili?ar as !un@es intr.nsecas das Ta"elas -/-
e -/H, con!orme j$ %isto no programa,c/!,5 do cap.tulo , para conjuntos unidimensionais/
J: Algorit m o do progra m a:
a: *e!inir os tipos de todas as %ari$%eis
": Fer o %alor do tipo inteiro de uma constante e a ;uantidade de elementos em cada lin2a e coluna
das %ari$%eis =ATR(\]A, =ATR(\]D e =ATR(\]C, ;ue so do tipo conjunto "idimensional
c: Alocar mem1ria para as tr<s %ari$%eis do tipo matri?
d: Fer os %alores de todos os elementos da %ari$%el =ATR(\]A no !ormato de matri?
e: calcular o %alor de cada elemento da =ATR(\]D atra%+s da multiplicao do %alor de cada
elemento da =ATR(\]A pela %ari$%el CONATANT)
!: calcular o %alor de cada elemento da =ATR(\]C atra%+s da adio do %alor de cada elemento da
=ATR(\]A pelo %alor de cada elemento da =ATR(\]D
g: )scre%er num ar;ui%o o %alor da CONATANT) e o conteOdo das %ari$%eis =ATR(\]A,
=ATR(\]D e =ATR(\]C em !ormato de matri? com os dois .ndices de cada elemento
,: )#ecutar Duild, Compile para compilar o programa/
05: Zerar o programae#ecut$%el !a?endo Duild, Duild/
00: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura 05/2,
dentro da ;ual temse:
a: Na primeira lin2a, o coment$rio )ntre com o %alor da CONATANT) 9inteiro:, resultado do
comando WRITE(,) !Entre com o valor da 7%'ST&'TE (#nte#ro)! do programa/
": Na segunda lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o %alor da %ari$%el
CONATANT), resultado do comando RE&+(,) 7%'ST&'TE do programa/ &ara ;ue o programa
continue sua e#ecuo + necess$rio digitar -, por e#emplo, e, em seguida, clicar na tecla )nter/
Figura 05/2 3anela *OA do programa05"/!,5/
c: Na terceira lin2a, o coment$rio )ntre com o numero de lin2as das matri?es 9inteiro:, resultado do
comando WRITE(,) !Entre com o numero de l#nhas das matr#Ses (#nte#ro)! do
programa/
d: Na ;uarta lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o %alor da %ari$%el
F(NQAA, resultado do comando RE&+(,) <I'>&S do programa/ &ara ;ue o programa continue
sua e#ecuo + necess$rio digitar 3, por e#emplo, e, em seguida, clicar na tecla )nter/
e: Na ;uinta lin2a, o coment$rio )ntre com o numero de colunas das matri?es 9inteiro:, resultado do
comando WRITE(,) !Entre com o numero de colunas das matr#Ses (#nte#ro)! do
programa/
!: Na se#ta lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o %alor da %ari$%el
COF6NAA, resultado do comando RE&+(,) 7%<B'&S do programa/ &ara ;ue o programa
continue sua e#ecuo + necess$rio digitar 2, por e#emplo, e, em seguida, clicar na tecla )nter/
g: Na s+tima lin2a, o coment$rio )ntre com os %alores dos elementos da =ATR(\]A da lin2a I 0,
resultado do comando WRITE(,) !Entre com os valores dos elementos da "&TRIYV&
da l#nha -!, <I'>& do programa/
2: Na oita%a lin2a, o programa p$ra e !ica aguardando ;ue sejam !ornecidos os %alores de todos os
elementos da primeira lin2a da matri?G digitar 0 4, por e#emplo, e, em seguida, clicar na tecla
)nter/ &ara a segunda lin2a da matri?, digitar 2 -, por e#emplo, e, em seguida, clicar na tecla )nter/
&ara a terceira lin2a da matri?, digitar 3 H, por e#emplo, e, em seguida, clicar na tecla
)nter/ )stes dados, nesta se;L<ncia, correspondem N seguinte matri?:

3
4

905/3:
i: )m seguida, o aplicati%o Notepad apresenta os resultados correspondentes N e#ecuo do
programa no ar;ui%o AA(*A05D/TdT, mostrado na Figura 05/3/
Figura 05/3 Ar;ui%o AA(*A05D/TdT do programa05"/!,5/
02: At+ entender, analisar os resultados do programa05"/!,5, mostrados na Figura 05/3, considerando
cada lin2a do programa!onte e as e#plica@es descritas no item > acima/

-
03: )#ecutar no%amente o programa com outros dados/ At+ entender, analisar os no%os resultados do
programa05"/!,5 considerando cada lin2a do programa!onte e as e#plica@es descritas no item >
acima/
04: )ncerrar a sesso seguindo o procedi m entopadro /
1&.3 EXERC.CIOS
)#erc.cio 05/0
)ditar um programa!onte em FORTRAN para e#ecutar o seguinte algoritmo 9passos::
0: Fer o %alor de uma constante
2: Fer os %alores reais da =atri?]A
3: *i%idir pela constante o %alor de cada elemento da =atri?]A e atri"uir o resultado N =atri?]D
4: )scre%er num ar;ui%o a =atri?]D identi!icando os .ndices de cada elemento
)#erc.cio 05/2
)ditar um programa!onte em FORTRAN para e#ecutar o seguinte algoritmo 9passos::
0: Fer os %alores reais da =atri?]A
2: Calcular a e#ponencial do %alor de cada elemento da =atri?]A e atri"uir o resultado N =atri?]D
3: )scre%er num ar;ui%o a =atri?]D identi!icando os .ndices de cada elemento
)#erc.cio 05/3
)ditar um programa!onte em FORTRAN para calcular o produto de duas matri?es kAl # kDl, e#ecutando
o seguinte algoritmo 9passos::
0: Fer os seguintes dados 9su!icientes para resol%er o pro"lema::
a: nOmero de lin2as da =atri?]A
": nOmero de colunas da =atri?]A
c: nOmero de colunas da =atri?]D
d: Calores dos elementos da =atri?]A
e: Calores dos elementos da =atri?]D
2: Calcular o %alor de cada elemento da =atri?]C ;ue resulta do produto da =atri?]A pela =atri?]DG
para !a?er isso, sugerese analisar o produto literal entre uma matri? 2#2 com outra 2#0G depois, uma
3#2 com outra 2#2G dedu?ir o algoritmo e implement$lo
3: )scre%er num ar;ui%o todos os dados lidos e a =atri?]C identi!icando todas as %ari$%eis e elementos
4: Calcular a =atri?]* atra%+s da seguinte lin2a inserida dentro do programa!onte:
=atri?]* I =AT=6F 9 =atri?]A, =atri?]D :
onde o comando =AT=6F + uma !uno intr.nseca do FORTRAN ;ue calcula o produto de duas
matri?es
-: )scre%er num ar;ui%o a =atri?]* identi!icando seus elementosG ela de%e ser id<ntica N =atri?]C
032 Cap.tulo 00/ Zr$!icos com 'gnuplot
C/012u3o 11. GR-FICOS COM %GNUPLOT
OBJETIVOS DO CAPTULO
Aprender a utili?ar o aplicati%o 'gnuplot para !a?er gr$!icos
Aprender a utili?ar o aplicati%o 'gnuplot interati%amente com um programa em FORTRAN
11.1 INSER$O DO APLICATIVO %GNUPLOT NUM PRO(ETO
&ara iniciali?ar as ati%idades deste cap.tulo, de%ese e#ecutar:
0: &ara acessar o programa Fortran, no 'indo8s: Start, Programs, Fortran PowerStation 4.0,
Microsoft Developer Studio
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa11
3: Acessar o site da disciplina em !tp:^^!tp/de m ec/u!pr/"r^*isciplinas^T m 052^=arc2i^
4: Clicar com o "oto do lado direito do mouse so"re o ar;ui%o 'ZN6&FOT/)d)
-: )scol2er a opo Aa%e Target As
H: Na opo Aa%e in, locali?ar o diret1rio do projeto
>: Clicar no "oto Aa%e
J: Repetir os itens 3 a > acima para os ar;ui%os 'ZN6&FOT/QF& e 'ZN6&FOT/=N6
11.2 UTILI#A$O B-SICA DO %GNUPLOT
0: O ' gnuplot + um so!t8are li%re utili?ado para !a?er gr$!icos "i e tridi m ensionais/ 6m m anual "$sico
so"re ele est$ dispon.%el em !tp:^^!tp/de m ec/u!pr/"r^*isciplinas^T m 052^=arc2i^ ' gnuplot/pd!
2: &ara iniciar sua utili?ao, "asta clicar duas %e?es so"re o ar;ui%o 'gnuplot/e#e ou Application/
O resultado de%e ser o mostrado na Figura 00/0/
3: (n!or m a@es detal2adas so"re a utili?ao do ' gnuplot podem ser %istas no m enu principal do
progra m a, na opo Qelp, (nde#
4: (n!or m a@es detal2adas so"re os co m andos do ' gnuplot podem ser %istas no m enu principal do
progra m a, na opo Qelp, (nde#, command s / )scol2er, por e#emplo, o comando plot/
-: &ara gerar um gr$!ico, de%em ser e#ecutados os co m andos ade;uados na c2a m ada Xlin2a de
co m andoY do aplicati%o ' gnuplot, ;ue + a lin2a indicada por XgnuplotgY na Figura 00/0, e onde o
cursor !ica ap1s ser acionado o progra m a /
H: O co m ando plot + usado para m ostrar o gr$!ico de !un@es de!inidas atra%+s de um ar;ui%o de dados
ou de !un@es pr+de!inidas no ' gnuplot ou, ainda, de !un@es criadas pelo usu$rio/ &or e#emplo,
033 Cap.tulo 00/ Zr$!icos com 'gnuplot
para %isuali?ar o gr$!ico da !uno seno, de%ese digitar plot sin9#: na lin2a de comando do
'gnuplot, con!orme + mostrado na Figura 00/2, e, em seguida, clicar na tecla )nter/ Aurgir$ uma no%a
janela com o gr$!ico da !uno seno, mostrado na Figura 00/3/ Nas a"scissas + apresentado # em
radianos, e nas ordenadas, o %alor da !uno seno/
Figura 00/0 3anela inicial do aplicati%o 'gnuplot, %erso 3/-/
Figura 00/2 (nsero do comando plot sin9#: na lin2a de comando do aplicati%o 'gnuplot/
>: O co m ando set #rangek#0:#2l + usado para de!inir o inter%alo dos %alores das a"scissas, isto +, #,
m ostrado no gr$!ico, onde #0 e #2 so os % a lores m . ni m o e m $#i m o, respecti%a m ent e/ &or e#emplo,
para de!inir o inter%alo dos %alores de # entre os nOmeros 5 e -, na lin2a de comando do 'gnuplot,
de%ese digitar set #rangek5:-l/ )m seguida, clicar na tecla )nter/ Ae m pre ;ue um no%o co m ando +
inserido para alterar o gr$!ico, co m o o set #range, para %isuali?ar o no%o gr$!ico + necess$rio digitar
replot na lin2a de co m ando e clicar na tecla )nter/ )m seguida, surge o no%o gr$!ico/ &ortanto, para
%isuali?ar o resultado do comando set #rangek5:-l, de%ese digitar replot e, em seguida, clicar na
tecla )nter/
Figura 00/3 Zr$!ico da !uno seno con!orme o comando do item H da seo 00/2/
J: O co m ando set BrangekB0:B2l + usado para de!inir o inter%alo dos %alores das ordenadas, isto +, B,
m ostrado no gr$!ico, onde B0 e B2 so os % a lores m . ni m o e m $#i m o, respecti%a m ent e/ &or e#emplo,
para de!inir o inter%alo dos %alores de B entre os nOmeros 5 e 0, na lin2a de comando do 'gnuplot,
de%ese digitar set Brangek5:0l/ )m seguida, clicar na tecla )nter/ &ara %isuali?ar o resultado, digitar
replot e, em seguida, clicar na tecla )nter/
,: O co m ando set grid + usado para !acilitar a leitura dos %alores de u m a !uno atra%+s de u m a m al2a
ou grade no gr$!ico/ Na lin2a de comando do 'gnuplot, digitar set grid e clicar na tecla )nter/
&ara %isuali?ar o resultado, digitar replot e, em seguida, clicar na tecla )nter/
05: O co m ando set #la"el Xno m e#Y + usado para inserir u m a legenda no ei#o das a"scissas, onde no m e# +
o no m e da legenda a ser inserida, ;ue de%e !icar entre aspas/ Ap1s clicar na tecla de aspas, de%ese
clicar na tecla de espao em "ranco para ;ue as aspas aparea m/ &or e#emplo, na lin2a de comando
do 'gnuplot, digitar set #la"el X#Y e clicar na tecla )nter/ &ara %isuali?ar o resultado, digitar
replot e, em seguida, clicar na tecla )nter/
00: O co m ando set Bla"el Xno m eBY + usado para inserir u m a legenda no ei#o das ordenadas, onde no m eB
+ o no m e da legenda a ser inserida, ;ue de%e !icar entre aspas/ &or e#emplo, na lin2a de comando do
'gnuplot, digitar set Bla"el XsenoY e clicar na tecla )nter/ &ara %isuali?ar o resultado, digitar replot e,
em seguida, clicar na tecla )nter/
02: O co m ando set title Xno m eY + usado para inser i r um t.tulo para o gr$!ico, onde no m e + o no m e do
t.tulo a ser inserido, ;ue de%e !icar entre aspa s/ &or e#emplo, na lin2a de comando do 'gnuplot,
digitar set title XTeste do aplicati%o 'gnuplotY e clicar na tecla )nter/ &ara %isuali?ar o resultado,
digitar replot e, em seguida, clicar na tecla )nter/
03: O co m ando replot ta m "+m + usado para adicionar !un@es ou cur%as a um gr$!ico j$ e#istente/ &or
e#emplo, na lin2a de comando do 'gnuplot, digitar replot cos9#: e clicar na tecla )nter/ A relao de
comandos dos itens H a 03 desta seo inseridos no 'gnuplot pode ser %ista na Figura 00/4/ O gr$!ico
correspondente + mostrado na Figura 00/-/
04: )ntrar com o comando set #rangek5:0l e testar as seguintes !un@es:
a: plot #
": plot #WW2
0-: O co m ando splot + usado para !a?er gr$!icos tridi m ensionais/ Testar os seguintes e#emplos:
a: splot #EB
": splot #WB
c: splot #WW2
0H: &ara encerrar o ' gnuplot, de%ese e#ecutar File, )#it
11.3 UTILI#A$O DO %GNUPLOT PARA FA#ER GR-FICO DE UM
AR>UIVO DE DADOS
0: O aplicati%o ' gnuplot pode ser usado para !a?er gr$!ico de um ar;ui%o de dados/ (sso ser$
e#empli!icado com o ar;ui%o dados/t#t/ &ara cri$lo com o aplicati%o Notepad, e#ecutar o seguinte:
a: Atart, &rograms, Accessories, Notepad
Figura 00/4 Comandos usados nos itens H a 03 da seo 00/2/
": *entro do espao de edio do Notepad, digitar os seguintes nOmeros em duas colunas separadas
por pelo menos um espao em "ranco:
5 5
0 0
2 4
3 ,
4 >
- 5
c: File, Aa%e
d: Na janela XAa%e AsY, dentro do campo XFile NameY, digitar dados/t#t
e: Ainda na janela XAa%e AsY, dentro do campo XAa%e in:Y, selecionar o diret1rio do projeto/ )m
seguida, clicar so"re o "oto Aa%e/
!: No aplicati%o Notepad, e#ecutar File, )#it
2: Num ar;ui%o de dados, o aplicati%o ' gnuplot interpreta a pri m eira coluna co m o os dados do ei#o #
9a"scissas: e a segunda, do ei#o B 9ordenadas : /
3: (niciali?ar o aplicati%o 'gnuplot clicando duas %e?es so"re o ar;ui%o 'gnuplot/e#e ou Application
4: Na lin2a de comando do 'gnuplot, digitar os seguintes comandos j$ %istos na seo anterior,
clicando na tecla )nter ap1s cada um deles:
set #la"el X#Y
set Bla"el XBY
set title XTeste do 'gnuplotY
set grid
Figura 00/- Zr$!ico resultante dos comandos usados nos itens H a 03 da seo 00/2/
-: O co m ando set data stBle linespoints + utili?ado para colocar um s. m "olo 9c.rculo, ;uadrado etc: em
cada par #B dos dados e unir os pontos com retas entre ele s/ Na lin2a de comando do aplicati%o
'gnuplot, digitar set data stBle linespoints e, em seguida, clicar na tecla )nter/
H: &ara gerar o gr$!ico com as coordenadas #B do ar;ui%o dados/t#t, na lin2a de comando do aplicati%o
'gnuplot, digitar plot Xdados/t#tY e, em seguida, clicar na tecla )nter/ *e%er$ surgir o gr$!ico
correspondente aos comandos usados nesta seo, ;ue + mostrado na Figura 00/H/
>: )ncerrar o 'gnuplot com File, )#it
Figura 00/H Zr$!ico resultante dos comandos usados nos itens 0 a H da seo 00/3/
11.4 UTILI#A$O DO %GNUPLOT COM AR>UIVO DE COMANDOS
0: O aplicati%o ' gnuplot ta m "+m pode ser usado para !a?er gr$!ico de um ar;ui%o de dados utili?ando
um ar;ui%o com os co m andos do pr1prio ' gnuplot/ (sso !acilita m uito a gerao de gr$!icos de !or m a
auto m ati?ada/ A seguir, este no%o procedimento + aplicado ao mesmo e#emplo da seo anterior
utili?ando o ar;ui%o comandos/t#t/ &ara cri$lo com o aplicati%o Notepad, e#ecutar o seguinte:
a: Atart, &rograms, Accessories, Notepad
": *entro do espao de edio do Notepad, digitar os seguintes comandos do 'gnuplot:
set #la"el X#Y
set Bla"el XBY
set title XTeste do 'gnuplotY
set grid
set data stBle linespoints
plot Xdados/t#tY
c: File, Aa%e
d: Na janela XAa%e AsY, dentro do campo XFile NameY, digitar comandos/t#t
e: Ainda na janela XAa%e AsY, dentro do campo XAa%e in:Y, selecionar o diret1rio do projeto/ )m
seguida, clicar so"re o "oto Aa%e/
!: No aplicati%o Notepad, e#ecutar File, )#it
2: (niciali?ar o aplicati%o 'gnuplot clicando duas %e?es so"re o ar;ui%o 'gnuplot/e#e ou
Application
3: &ara gerar o gr$!ico utili?ando um ar;ui%o de co m andos, de%ese usar o co m ando load Xno m eY, onde
no m e representa o no m e do ar;ui%o com co m andos do ' gnuplot, ;ue de%e !icar entre aspa s /
&ortanto, na lin2a de comando do aplicati%o 'gnuplot, digitar load Xcomandos/t#tY e clicar na
tecla )nter/ )m seguida, de%er$ surgir o mesmo gr$!ico da seo anterior, j$ mostrado na Figura
00/H/ *e%ese notar ;ue este no%o gr$!ico !oi gerado sem ;ual;uer comando ser digitado na lin2a de
comando do 'gnuplot, e#ceto o comando load/
4: )ncerrar o 'gnuplot com File, )#it
-: Com o ;ue !oi %isto nesta seo, podese, agora, gerar ar;ui%os 9dados/t#t: com cur%as de resultados
9os pares coordenados #B: o"tidos de programas em FORTRAN/ ), dentro dos programas em
FORTRAN, c2amar o aplicati%o 'gnuplot para gerar os gr$!icos correspondentes utili?ando
ar;ui%os de comandos 9comandos/t#t: do 'gnuplot/ Na pr1#ima seo + mostrado como !a?er isso/
11." 0ro4r/m/11.5,&
0: Nesta seo ser$ usado o mesmo projeto criado na seo 00/0/ &ortanto, no Fortran, seguindo o
procedi m entopadro , criar e inserir no projeto o programa!onte programa00/!,5
2: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 00/0/
3: O"jeti%os do progra m a:
a: Zerar um ar;ui%o com as coordenadas # e B de uma cur%a
": &lotar esta cur%a com o aplicati%o 'gnuplot
4: Coment$rios so"re o programa:
a: O uso dos comandos 6A) e AVAT)= j$ !oi e#plicado na seo -/3 do cap.tulo -/
": O comando AVAT)= %in2a sendo usado para ;ue o aplicati%o Notepad a"risse ar;ui%os com
resultados dos programas/ No programa00/!,5 ele tam"+m + usado para acionar o aplicati%o
'gnuplot e gerar um gr$!ico, com o procedimento %isto na seo 00/4/
c: O ar;ui%o de comandos do 'gnuplot utili?ado no programa + a;uele criado na seo anterior,
c2amado comandos/t#t/
-: Algorit m o do progra m a:
a: 6nir a "i"lioteca &ORTF(D ao programa para usar o comando AVAT)=
": *e!inir os tipos de todas as %ari$%eis
c: Fer o nOmero de pontos a usar para gerar o gr$!ico
d: Calcular as coordenadas # e B, onde B I #
3
, e gra%$las num ar;ui%o c2amado *A*OA/TdT
e: Com o aplicati%o Notepad, mostrar o conteOdo do ar;ui%o *A*OA/TdT
!: Com o aplicati%o 'gnuplot, gerar um gr$!ico com os dados do ar;ui%o *A*OA/TdT utili?ando
os comandos do ar;ui%o CO=AN*OA/TdT/
BSE 0%RT<I6
RE&< G, F
I'TE,ER 0%'T%, 0%'T%S, .ER
Ta"ela 00/0 &rograma00/!,5/
WRITE(,) !Entre com o numero de pontos!
RE&+(,) 0%'T%S
%0E'(@, $I<E- !+&+%S.TGT!)
+% 0%'T% - =, 0%'T%S
G - 0%'T% : =
F - G3
WRITE(@,*)) G, F
*) $%R"&T( ( ( =0E=).( ) )
E'+ +%
7<%SE(@)
.ER - SFSTE" (!'otepad +&+%S.TGT!)
.ER - SFSTE" (!Wgnuplot 7%"&'+%S.TGT!)
E'+
H: )#ecutar Duild, Compile para compilar o programa/
>: Zerar o programae#ecut$%el !a?endo Duild, Duild/
J: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura 00/>,
dentro da ;ual temse:
a: Na primeira lin2a, o coment$rio )ntre com o numero de pontos, resultado do comando
WRITE(,) !Entre com o numero de pontos! do programa/
": Na segunda lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o %alor da %ari$%el
&ONTOA, resultado do comando RE&+(,) 0%'T%S do programa/ &ara ;ue o programa continue
sua e#ecuo + necess$rio digitar 00, por e#emplo, e, em seguida, clicar na tecla )nter/
Figura 00/> 3anela *OA do programa00/!,5/
c: )m seguida, o aplicati%o Notepad apresenta as coordenadas # e B, onde B I #
3
, gra%adas no
ar;ui%o c2amado *A*OA/TdT, cujo conteOdo + mostrado na Figura 00/J/
Figura 00/J Ar;ui%o *A*OA/TdT do programa00/!,5/
d: Fec2ar o aplicati%o Notepad, com File, )#it/ *e%e surgir o gr$!ico mostrado na Figura 00/,/
,: At+ entender, analisar os resultados do programa00/!,5, mostrados nas Figura 00/> a 00/,,
considerando cada lin2a do programa!onte e as e#plica@es descritas nas se@es anteriores deste
cap.tulo/
05: )#ecutar no%amente o programa com outro nOmero de pontos/
00: )ncerrar a sesso seguindo o procedi m entopadro /
11.' EXERC.CIOS
)#erc.cio 00/0
Adaptar o programa00/!,5 para ;ue ele gere o gr$!ico B versus # onde B I logaritmo decimal de #
)#erc.cio 00/2
Adaptar o programa00/!,5 para ;ue ele gere o gr$!ico B versus # onde B I cosseno 2iper"1lico de #
Figura 00/, Zr$!ico gerado com o programa00/!,5/
043 Cap.tulo 02/ Au"rotinas
C/012u3o 12. SUB*ROTINAS
OBJETIVOS DO CAPTULO
Conceitos de: su"rotina, programaprincipal, projeto com di%ersos programas!onte, passagem de
argumentos
Comandos do FORTRAN: &ROZRA=, )dT)RNAF, A6DRO6T(N), CAFF, CONTA(NA
12.1 0ro4r/m/12/
&ara iniciali?ar as ati%idades deste cap.tulo, de%ese e#ecutar:
0: &ara acessar o programa Fortran, no 'indo8s: Atart, &rograms, Fortran &o8erAtation 4/5,
=icroso!t *e%eloper Atudio
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa02a
3: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
principal0/!,5
4: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 02/0/
-: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte rotina0/!,5
H: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 02/2/
>: O"jeti%os do progra m a:
a: Aplicar os no%os comandos &ROZRA=, )dT)RNAF, A6DRO6T(N) e CAFF do FORTRAN
": 6tili?ar uma su"rotina e#terna ao programaprincipal
J: Coment$rios so"re o programa:
a: Neste programa so usados ;uatro no%os co m andos do FORTRAN: &ROZRA=, )dT)RNAF,
A6DRO6T(N) e CAFF/ )les so aplicados com o ;ue se deno m ina em progra m ao de su"
rotina/
": Au"rotinas so progra m as inseridos ou usados por um progra m aprincipal/
c: O progra m aprincipal + o progra m a!onte ;ue con t+m o algorit m o ;ue se deseja e#ecutar e ;ue usa
as su"rotinas/
d: As su"rotinas podem estar contidas dentro do progra m aprincipal ou podem estar dentro de
outros progra m as!onte/ O primeiro caso ser$ e#empli!icado na seo 02/4 deste cap.tulo/ 3$ o
segundo caso + e#empli!icado na presente seo e nas duas seguintes/ Neste caso, isto +, ;uando
2$ m ais de um progra m a!onte ;ue constitui um projeto, usase o co m ando &ROZRA= para
de!inir ;ual progra m a!onte + o progra m apri n cipal/ ) o co m ando )dT)RNAF + usado para
044 Cap.tulo 02/ Au"rotinas
in!or m ar ao progra m aprincipal ;uais so os outros progra m as!onte ;ue !a?em parte do projeto/
Outra !or m a de usar su"rotinas + utili?ar o c o m ando 6A) para incluir u m a "i"lioteca dentro do
programaprincipal, para ;ue este possa c2amar as su"rotinas desejadas da "i"lioteca/
0R%,R&" 7&0ITB<%V=(&
EGTER'&< R%TI'&=
RE&< &, 6, 7
Ta"ela 02/0 &rograma!onte principal0/!,5/
WRITE(,) !Entre com o valor de &!
RE&+(,) &
WRITE(,) !Entre com o valor de 6!
RE&+(,) 6
7&<< S%"& ( &, 6, 7 )
WRITE(,) !& 9 6 - !, 7
E'+ 0R%,R&" 7&0ITB<%V=(&
e: Muando 2$ m ais de um prog r a m a!onte no projeto, pri m eiro de%ese co m pilar os progra m as!onte
;ue cont<m su"rotinas/ O progra m aprincipal de%e ser co m pilado por Olti m o/
!: Cada su"rotina pode depender de %ari$%eis do programaprincipal ou pode ser um programa
totalmente independente/ Neste caso, com poucas adapta@es, um programa j$ e#istente pode ser
trans!ormado em uma su"rotina de um outro programa/
g: A principal %antagem de se usar su"rotinas + di%idir um programa muito grande ou comple#o em
unidades menores, ou su"programas, ;ue so mais !$ceis de implementar e ;ue !acilitam a
deteco de erros/
2: Cada su"rotina de%e ter um no m e espec.!ico, ;ue + de!inido com o co m ando A6DRO6T(N)/
)ste no m e + usado para c2a m ar ou usar cada su"rotina no local desejado/ As su"rotinas so
ati%adas ou c2a m adas atra%+s do co m ando CAFF/
i: As su"rotinas podem ser escritas pelo pr1prio progra m ador ou por outros progra m adores, na
!or m a de progra m as!onte ou "i"liotecas/
j: Na lin2a 0R%,R&" 7&0ITB<%V=(&, do programa!onte principal0/!,5, de!inese o in.cio e o nome
do programaprincipal como sendo CA&(T6FO]02A/ ) na Oltima lin2a, com o comando E'+
0R%,R&" 7&0ITB<%V=(&, de!inese o !im do programaprincipal/ O nome do programa no tem
utilidade pr$tica nen2uma/ *e%ese perce"er ;ue ele + di!erente do nome do projeto e do nome do
programa!onte/
Ta"ela 02/2 &rograma!onte rotina0/!,5/
SB6R%BTI'E S%"& ( G, F, Y )
RE&< G, F, Y
Y - G 9 F
E'+ SB6R%BTI'E S%"&
K: Na lin2a EGTER'&< R%TI'&=, do programa!onte principal0/!,5, declarase ;ue o programa!onte
rotina0/!,5 !a? parte do programa!onte principal0/!,5/ *e%ese notar ;ue no comando
)dT)RNAF + declarado o nome do programa!onte ;ue cont+m a su"rotina, e no o nome da
su"rotina/
l: Na lin2a 7&<< S%"& ( &, 6, 7 ), do programa!onte principal0/!,5, c2amase a su"rotina de
nome AO=A e trans!erese a ela os %alores das %ari$%eis ;ue esto entre par<nteses, isto +, as
%ari$%eis A, D e C, ;ue !oram declaradas como %ari$%eis reais no programaprincipal/
m: Na lin2a SB6R%BTI'E S%"& ( G, F, Y ), do programa!onte rotina0/!,5, de!inese o in.cio e o
nome da su"rotina como sendo AO=A e, ainda, ;uais as %ari$%eis ;ue so rece"idas e de%ol%idas
ao programaprincipal, no caso as %ari$%eis d, V e \/ ) na Oltima lin2a, com o comando E'+
SB6R%BTI'E S%"&, de!inese o !im da su"rotina AO=A/
n: As %ari$%eis de u m a su"rotina ;ue so rece"idas e de%ol%idas ao progra m aprincipal so
deno m inadas de argu m entos da su"rotina/ )las t<m ;ue ser do m es m o tipo das %ari$%eis usadas
no progra m aprincipal ;ue c2a m a a su"rotina, m as no precisam ter o m es m o no m e/ No +
o"rigat1rio ;ue as su"rotinas ten2am argu m entos/
,: Algorit m o do progra m a:
a: No programaprincipal, declarar ;ue o programa!onte rotina0/!,5 !a? parte do programaprincipal
": No programaprincipal, de!inir as %ari$%eis A, D e C como sendo do tipo real
c: No programaprincipal, ler o %alor das %ari$%eis A e D
d: No programaprincipal, c2amar a su"rotina AO=A, trans!erindo a ela os %alores atuais das
%ari$%eis A, D e C
e: Na su"rotina AO=A, rece"er os %alores das %ari$%eis d, V e \, trans!eridos do programa
principal
!: Na su"rotina AO=A, reali?ar a soma das %ari$%eis d e V e atri"uir o resultado N %ari$%el \
g: Na su"rotina AO=A, ao encontrar o !im da su"rotina, %oltar ao programaprincipal no ponto
onde a su"rotina !oi c2amada, trans!erindo os %alores atuais das %ari$%eis d, V e \, da su"rotina,
para as %ari$%eis A, D e C do programaprincipal
2: No programaprincipal, escre%er o %alor atual da %ari$%el C
i: No programaprincipal, encerrar a e#ecuo do programa
05: )#ecutar Duild, Compile para compilar o programa!onte rotina0/!,5/
00: )#ecutar Duild, Compile para compilar o programa!onte principal0/!,5/
02: Zerar o programae#ecut$%el !a?endo Duild, Duild/
03: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, surge uma janela, mostrada na Figura 02/0,
dentro da ;ual temse:
Figura 02/0 Resultado do programa02a/
a: Na primeira lin2a, o coment$rio )ntre com o %alor de A, resultado do comando WRITE(,)
!Entre com o valor de &! do programa/
": Na segunda lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o %alor da %ari$%el A,
resultado do comando RE&+(,) & do programa/ &ara ;ue o programa continue sua e#ecuo +
necess$rio digitar 0, por e#emplo, e, em seguida, clicar na tecla )nter/
c: Na terceira lin2a, o coment$rio )ntre com o %alor de D, resultado do comando WRITE(,)
!Entre com o valor de 6! do programa/
d: Na ;uarta lin2a, o programa p$ra e !ica aguardando ;ue seja !ornecido o %alor da %ari$%el D,
resultado do comando RE&+(,) 6 do programa/ &ara ;ue o programa continue sua e#ecuo +
necess$rio digitar 2, por e#emplo, e, em seguida, clicar na tecla )nter/
e: Na ;uinta lin2a, + apresentado o resultado da soma das %ari$%eis A e D, calculado dentro da su"
rotina AO=A/
04: At+ entender, analisar os resultados do programa02a, mostrados na Figura 02/0, considerando cada
lin2a dos dois programas!onte en%ol%idos e as e#plica@es descritas nos itens J e , acima/
0-: )#ecutar no%amente o programa com outros dados/
0H: No Fortran, para !ec2ar o projeto atual, e#ecutar File, Close 'orKspace
12.2 0ro4r/m/12=
0: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa02"
2: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
principal2/!,5
3: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 02/3/
0R%,R&" 7&0ITB<%V=(6
EGTER'&< R%TI'&S(
I'TE,ER I'TEIR%
RE&< &, 6, 7
Ta"ela 02/3 &rograma!onte principal2/!,5/
WRITE(,) !Entre com o valor de &!
RE&+(,) &
WRITE(,) !Entre com o valor de 6!
RE&+(,) 6
7&<< S%"& ( &, 6, 7 )
WRITE(,) !& 9 6 - !, 7
WRITE(,) !Entre com um valor #nte#ro para calcular seu 1ator#al!
RE&+(,) I'TEIR%
7&<< $&T%RI&< ( I'TEIR% )
E'+ 0R%,R&" 7&0ITB<%V=(6
4: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
rotinas2/!,5
-: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 02/4/
Ta"ela 02/4 &rograma!onte rotinas2/!,5/
SB6R%BTI'E S%"& ( G, F, Y )
RE&< G, F, Y
Y - G 9 F
E'+ SB6R%BTI'E S%"&
SB6R%BTI'E $&T%RI&< ( ' )
I'TE,ER I, ', $&T
$&T - =
I$ ( ' J ) ) T>E'
WRITE(,) !'ao eD#ste 1ator#al de !, '
E<SE
+% I - (, '
$&T - $&T I
E'+ +%
E'+ I$
WRITE(,) !% 1ator#al de!, ', ! eh - !, $&T
E'+ SB6R%BTI'E $&T%RI&<
H: O"jeti%os do progra m a:
a: (mplementar um programa!onte com duas su"rotinas
": 6tili?ar duas su"rotinas e#ternas ao programaprincipal
>: Coment$rios so"re o programa:
a: 6m progra m a!onte pode ser constitu.do por u m a ou %$rias su"rotinas/ 6m e#emplo + o
programa!onte rotinas2/!,5 ;ue cont+m duas su"rotinas/
": Na lin2a 7&<< $&T%RI&< ( I'TEIR% ), do programa!onte principal2/!,5, c2amase a su"rotina
de nome FATOR(AF e trans!erese a ela o %alor da %ari$%el ;ue est$ entre par<nteses, isto +, a
%ari$%el (NT)(RO, ;ue !oi declarada como %ari$%el do tipo inteiro no programaprincipal/
J: Algorit m o do progra m a:
a: No programaprincipal, declarar ;ue o programa!onte rotinas2/!,5 !a? parte do programa
principal
": No programaprincipal, de!inir as %ari$%eis A, D e C como sendo do tipo real e a %ari$%el
(NT)(RO como do tipo inteiro
c: No programaprincipal, ler o %alor das %ari$%eis A e D
d: No programaprincipal, c2amar a su"rotina AO=A, trans!erindo a ela os %alores atuais das
%ari$%eis A, D e C
e: Na su"rotina AO=A, rece"er os %alores das %ari$%eis d, V e \, trans!eridos do programa
principal
!: Na su"rotina AO=A, reali?ar a soma das %ari$%eis d e V e atri"uir o resultado N %ari$%el \
g: Na su"rotina AO=A, ao encontrar o !im da su"rotina, %oltar ao programaprincipal no ponto
onde a su"rotina !oi c2amada, trans!erindo os %alores atuais das %ari$%eis d, V e \, da su"rotina,
para as %ari$%eis A, D e C do programaprincipal
2: No programaprincipal, escre%er o %alor atual da %ari$%el C
i: No programaprincipal, ler o %alor da %ari$%el (NT)(RO
j: No programaprincipal, c2amar a su"rotina FATOR(AF, trans!erindo a ela o %alor atual da
%ari$%el (NT)(RO
K: Na su"rotina FATOR(AF, rece"er o %alor da %ari$%el N, trans!erido do programaprincipal
l: Na su"rotina FATOR(AF, reali?ar o c$lculo do !atorial da %ari$%el N e atri"uir o resultado N
%ari$%el FAT
m: Na su"rotina FATOR(AF, escre%er o %alor da %ari$%el FAT
n: Na su"rotina FATOR(AF, ao encontrar o !im da su"rotina, %oltar ao programaprincipal no
ponto onde a su"rotina !oi c2amada, trans!erindo o %alor atual da %ari$%el N, da su"rotina, para a
%ari$%el (NT)(RO do programaprincipal
o: No programaprincipal, encerrar a e#ecuo do programa
,: )#ecutar Duild, Compile para compilar o programa!onte rotinas2/!,5/
05: )#ecutar Duild, Compile para compilar o programa!onte principal2/!,5/
00: Zerar o programae#ecut$%el !a?endo Duild, Duild/
02: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, o"t+mse o resultado mostrado na Figura 02/2/
03: At+ entender, analisar os resultados do programa02", mostrados na Figura 02/2, considerando cada
lin2a dos dois programas!onte en%ol%idos e as e#plica@es descritas nos itens > e J acima/
04: )#ecutar no%amente o programa com outros dados/
0-: No Fortran, para !ec2ar o projeto atual, e#ecutar File, Close 'orKspace
Figura 02/2 Resultado do programa02"/
12.3 0ro4r/m/12;
0: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa02c
2: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
principal3/!,5
3: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 02/-/
0R%,R&" 7&0ITB<%V=(7
EGTER'&< R%TI'&3
7&<< %BTR&S
E'+ 0R%,R&" 7&0ITB<%V=(7
Ta"ela 02/- &rograma!onte principal3/!,5/
4: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
rotinas2/!,5
-: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 02/4/ O conteOdo do ar;ui%o rotinas2/!,5 tam"+m pode ser copiado diretamente
do projeto anterior, programa02"/
H: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte rotina3/!,5
>: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 02/H/
J: O"jeti%os do progra m a:
a: (mplementar um programa com tr<s su"rotinas di%ididas em dois programas!onte
": Fa?er uma su"rotina c2amar outras su"rotinas
c: 6tili?ar uma su"rotina sem argumentos
SB6R%BTI'E %BTR&S
EGTER'&< R%TI'&S(
I'TE,ER I'TEIR%
RE&< &, 6, 7
Ta"ela 02/H &rograma!onte rotina3/!,5/
WRITE(,) !Entre com o valor de &!
RE&+(,) &
WRITE(,) !Entre com o valor de 6!
RE&+(,) 6
7&<< S%"& ( &, 6, 7 )
WRITE(,) !& 9 6 - !, 7
WRITE(,) !Entre com um valor #nte#ro para calcular seu 1ator#al!
RE&+(,) I'TEIR%
7&<< $&T%RI&< ( I'TEIR% )
E'+ SB6R%BTI'E %BTR&S
,: Coment$rios so"re o programa:
a: O programa02c !a? e#atamente o mesmo ;ue o programa02", da seo anterior/ A di!erena + ;ue
tudo o ;ue antes era !eito no programaprincipal agora + !eito pela su"rotina O6TRAA, ;ue +
c2amada pelo programaprincipal cuja Onica !uno dele + essa c2amada/
": 6 m a su"rotina pode c2a m ar u m a ou di%ersas su"rotinas/ &or e#emplo, a su"rotina O6TRAA
c2ama as su"rotinas AO=A e FATOR(AF/
05: Algoritmo do programa: + o mesmo da seo 02/2, item J/
00: )#ecutar Duild, Compile para compilar o programa!onte rotinas2/!,5/
02: )#ecutar Duild, Compile para compilar o programa!onte rotina3/!,5/
03: )#ecutar Duild, Compile para compilar o programa!onte principal3/!,5/
04: Zerar o programae#ecut$%el !a?endo Duild, Duild/
0-: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, o"t+mse o resultado j$ mostrado na Figura
02/2/
0H: At+ entender, analisar os resultados do programa02c, mostrados na Figura 02/2, considerando cada
lin2a dos tr<s programas!onte en%ol%idos e as e#plica@es pertinentes/
0>: No Fortran, para !ec2ar o projeto atual, e#ecutar File, Close 'orKspace
12.4 0ro4r/m/12<
0: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa02d
2: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
principal4/!,5
3: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 02/>/ *e%ese perce"er ;ue ;uase todo o conteOdo do ar;ui%o principal4/!,5 j$
!oi digitado no projeto programa02c e, portanto, ele pode ser copiado dos ar;ui%os rotinas2/!,5 e
rotina3/!,5/
4: O"jeti%os do progra m a:
a: (mplementar um programa com su"rotinas inseridas dentro do programaprincipal
": 6tili?ar su"rotina de "i"lioteca
-: Coment$rios so"re o programa:
a: O programa02d + praticamente id<ntico ao programa02c, da seo anterior/ Q$ apenas duas
di!erenas/ A primeira + ;ue as tr<s su"rotinas 9O6TRAA, AO=A e FATOR(AF: ;ue antes
esta%am dentro de dois programas!onte 9rotinas2/!,5 e rotina3/!,5: agora esto inseridas dentro
do pr1prio programaprincipal/
": O co m ando CONTA(NA do FORTRAN + usado para separar o !im do progra m aprincipal do
in.cio das su"rotinas contidas dentro do progra m aprincipal, con!orme podese %er na Ta"ela
02/>/
c: A segunda di!erena + ;ue, ap1s a c2amada da su"rotina O6TRAA, !oi inserido uma c2amada da
su"rotina T*AT), ;ue + uma su"rotina pertencente N "i"lioteca =A(=AF=A/ ), para utili?ar
esta "i"lioteca, no in.cio do programaprincipal !oi empregado o comando 6A) junto com o nome
da "i"lioteca/
d: A "i"lioteca =A(=AF=A cont+m m uitas su"rotinas com di%ersas !inalidades/ A lista co m pleta
das su"rotinas desta "i"lioteca, in!or m a@es detal2adas e e#e m plos so"re cada u m a delas podem
ser %istos no m anual online do Fortran e m : R (n!oCie 8 , (=AF Fi"raries Re!erence/
H: Algoritmo do programa: + o mesmo da seo 02/2, item J, acrescido ao !inal da c2amada da su"
rotina T*AT) e da escrita da data corrente/
0R%,R&" 7&0ITB<%V=(+
BSE "SI"S<"S
I'TE,ER +I&, "ES, &'%
7&<< %BTR&S
Ta"ela 02/> &rograma!onte principal4/!,5/
7&<< T+&TE ( +I&, "ES, &'% )
WRITE(,=) +I&, "ES, &'%
= $%R"&T (8, ?G, !+ata de hoQe eh !, I(, !8!, I(, !8!, I*)
7%'T&I'S
/ :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
SB6R%BTI'E %BTR&S
I'TE,ER I'TEIR%
RE&< &, 6, 7
WRITE(,) !Entre com o valor de &!
RE&+(,) &
WRITE(,) !Entre com o valor de 6!
RE&+(,) 6
7&<< S%"& ( &, 6, 7 )
WRITE(,) !& 9 6 - !, 7
WRITE(,) !Entre com um valor #nte#ro para calcular seu 1ator#al!
RE&+(,) I'TEIR%
7&<< $&T%RI&< ( I'TEIR% )
E'+ SB6R%BTI'E %BTR&S
/ :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
SB6R%BTI'E S%"& ( G, F, Y )
RE&< G, F, Y
Y - G 9 F
E'+ SB6R%BTI'E S%"&
/ :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
SB6R%BTI'E $&T%RI&< ( ' )
I'TE,ER I, ', $&T
$&T - =
I$ ( ' J ) ) T>E'
WRITE(,) !'ao eD#ste 1ator#al de !, '
E<SE
+% I - (, '
$&T - $&T I
E'+ +%
E'+ I$
WRITE(,) !% 1ator#al de!, ', ! eh - !, $&T
E'+ SB6R%BTI'E $&T%RI&<
/ :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
E'+ 0R%,R&" 7&0ITB<%V=(+
>: )#ecutar Duild, Compile para compilar o programa!onte principal4/!,5/
J: Zerar o programae#ecut$%el !a?endo Duild, Duild/
,: Ao se e#ecutar o programa, atra%+s de Duild, )#ecute, o"t+mse o resultado mostrado na Figura
02/3/
05: At+ entender, analisar os resultados do programa02d, mostrados na Figura 02/3, considerando cada
lin2a do programa!onte e as e#plica@es pertinentes/
00: )ncerrar a sesso seguindo o procedimentopadro/
Figura 02/3 Resultado do programa02d/
12." EXERC.CIO
)#erc.cio 02/0
Alterar o programa02d, da seo 02/4, da seguinte !orma:
0: Adaptar a su"rotina FATOR(AF e sua c2amada na su"rotina O6TRAA para ;ue o %alor do !atorial
seja passado a su"rotina O6TRAA
2: (mplementar a su"rotina )ACR)C) para escre%er num ar;ui%o os resultados das %ari$%eis A, D, C,
(NT)(RO e !atorial/ )sta no%a su"rotina de%er$ ser c2amada dentro da su"rotina O6TRAA/
3: (mplementar a su"rotina ARM6(CO para mostrar, com o aplicati%o Notepad, o conteOdo do ar;ui%o
criado pela su"rotina )ACR)C)/ A su"rotina ARM6(CO de%er$ ser c2amada pela su"rotina
O6TRAA, ap1s a c2amada da su"rotina )ACR)C)/
0-H Cap.tulo 03/ Cari$%eis do tipo real dupla
C/012u3o 13. VARI-VEIS DO TIPO REAL DUPLA
OBJETIVOS DO CAPTULO
Conceitos de: %ari$%eis de preciso simples e dupla, %ari$%eis do tipo real simples e dupla, mistura de
%ari$%eis do tipo inteiro com real simples e real dupla
Fun@es matem$ticas intr.nsecas e !ormatos de edio para %ari$%eis do tipo real dupla
Comandos do FORTRAN: R)AF, R)AFW4, R)AF94:, R)AFWJ, R)AF9J:, *O6DF) &R)C(A(ON e
(=&F(C(T NON)
&ara iniciali?ar as ati%idades deste cap.tulo, de%ese acessar o programa Fortran, no 'indo8s
atra%+s de: Atart, &rograms, Fortran &o8erAtation 4/5, =icroso!t *e%eloper Atudio
13.1 0ro4r/m/13/.5,&
0: O"jeti%os do progra m a:
a: *e!inir uma %ari$%el do tipo real de dupla preciso usando o comando R)AFWJ
": Comparar a preciso de %ari$%eis do tipo real simples e dupla
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa03a
3: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programa03a/!,5
4: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 03/0/
-: Coment$rios so"re o programa:
a: No cap.tulo 3 !oram a"ordadas as %ari$%eis do tipo real/ )las so usadas para de!inir %ari$%eis do
tipo real, isto +, %ari$%eis ;ue podem guardar ou arma?enar na mem1ria do computador nOmeros
reais, positi%os ou negati%os, como 0/5, _0/5, 0/0, 3/040H ou _5/553/ &ara de!inir u m a %ari$%el do
tipo real num progra m a usase o co m ando R)AF/ As %ari$%eis de!inidas com o co m ando R)AF
podem guardar na m e m 1ria do co m putador %alores no inter%alo apro#i m ado de 0/0>e3J a
3/45eE3J e a preciso + de H casas deci m ais/ )stas %ari$%eis ta m "+m podem ser c2a m adas de reais
si m ples ou de preciso si m ples/
": O no%o co m ando R)AFWJ + usado para de!inir %ari$%eis do tipo real dupla ou de preciso dupla/
As %ari$%eis de!inidas com o co m ando R)AFWJ podem guardar na m e m 1ria do co m putador
%alores no inter%alo apro#i m ado de 2/22e35J a 0/>,eE35J e a preciso + de 0- casas deci m ais/
)m geral, estas %ari$%eis so mais ade;uadas em computao cient.!ica/ )ntretanto elas e#igem o
do"ro da m e m 1ria co m putacional em relao Ns %ari$%eis reais si m ple s/
c: A lin2a RE&< & de!ine a %ari$%el A como sendo do tipo real simples/
0-> Cap.tulo 03/ Cari$%eis do tipo real dupla
d: A lin2a RE&<A 6 de!ine a %ari$%el D como sendo do tipo real dupla/
RE&< &
RE&<A 6
Ta"ela 03/0 &rograma03a/!,5/
WRITE(,) !Entre com o valor de & (real s#mples) -!
RE&+(,) &
WRITE(,) !Entre com o valor de 6 (real dupla) -!
RE&+(,) 6
WRITE(,) !.alor de & - !, &
WRITE(,) !.alor de 6 - !, 6
E'+
H: )#ecutar Duild, Compile para compilar o programa
>: Zerar o programae#ecut$%el !a?endo Duild, Duild/
J: )#ecutar o programa, atra%+s de Duild, )#ecute, com o %alor 0 para as duas %ari$%eis/ O resultado
de%e ser o mostrado na Figura 03/0/ *e%ese notar ;ue o nOmero de casas decimais da %ari$%el A
9real simples: + H, e da %ari$%el D 9real dupla: + 0-/
Figura 03/0 Resultado da e#ecuo do programa03a/!,5 com A e D I 0/
,: )#ecutar no%amente o programa com o %alor 0234-H>J, para as duas %ari$%eis e analisar os
resultados/
05: )#ecutar no%amente o programa com o %alor 5/550 para as duas %ari$%eis e analisar os
resultados/
00: )#ecutar no%amente o programa com o %alor 0/234-H>J,50234-H>J,5 para as duas %ari$%eis e
analisar os resultados/ Notar ;ue o algaris m o da Olti m a casa deci m al + arredondado e os
algaris m os e#cedentes so despre?ado s /
02: )#ecutar no%amente o programa com outros dados e analisar os resultados/
03: No Fortran, para !ec2ar o projeto atual, e#ecutar File, Close 'orKspace
03/2 programa03"/!,5
0: O"jeti%os do progra m a:
a: 6sar di%ersas !ormas para de!inir %ari$%eis reais simples e dupla
": Reali?ar c$lculos elementares en%ol%endo %ari$%eis do tipo inteiro, real simples e real dupla
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa03"
3: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programa03"/!,5
4: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 03/2/
-: Coment$rios so"re o programa:
a: As %ari$%eis do tipo real si m ples podem ser de!inidas atra%+s dos co m andos R)AF, R)AFW4 e
R)AF94:/ )#emplos so as de!ini@es das %ari$%eis A, D e C/
": As %ari$%eis do tipo real dupla podem ser de!inidas atra%+s dos co m andos R)AFWJ, R)AF9J: e
*O6DF) &R)C(A(ON/ )#emplos so as de!ini@es das %ari$%eis ), F e Z/
c: Os c$lculos das %ari$%eis *, D e C so e#atamente os mesmos mostrados no programa53d/!,5 do
cap.tulo 3, seo 3/2, para e#plicar as conse;L<ncias de misturar %ari$%eis do tipo inteiro e real
simples num c$lculo/ )stas mesmas e#plica@es %alem para as %ari$%eis reais dupla F e Z/
d: Muando se atri"ui u m a %ari$%el real si m ples a u m a real dupla, esta tem sua preciso deteriorada
para real si m ples/ 6m e#emplo + o c$lculo da %ari$%el )/ (sso de%e sempre ser e%itado/ Ae o
o"jeti%o + usar preciso dupla num progra m a, todas as %ari$%eis e os c$lculos de%em en%ol%er
preciso dupla, e#ceto em alguns tipos de c$lculo com %ari$%eis inteira s /
H: )#ecutar Duild, Compile para compilar o programa
>: Zerar o programae#ecut$%el !a?endo Duild, Duild/
J: )#ecutar o programa, atra%+s de Duild, )#ecute, com o %alor H/, para a %ari$%el A/
,: Analisar os resultados mostrados na Figura 03/2/ *e%ese notar a di!erena de preciso no
arredondamento do c$lculo das %ari$%eis C e Z/ Tam"+m de%ese notar a deteriorao da preciso da
%ari$%el real dupla ) causada ao se igualar ela N %ari$%el real simples A: todos os algarismos ;ue
aparecem na %ari$%el ) ap1s os ?eros so li#o, tam"+m c2amado de erro de arredondamento/
I'TE,ER +
RE&< &
RE&<* 6
RE&<(*) 7
RE&<A E
RE&<(A) $
+%B6<E 0RE7ISI%' ,
Ta"ela 03/2 &rograma03"/!,5/
WRITE(,) !Entre com o valor de & (real s#mples) -!
RE&+(,) &
+ - &
6 - = 8 +
7 - =.) 8 +
E - &
$ - = 8 +
, - =.) 8 +
WRITE(,) !.alor de + (#nte#ro) - !, +
WRITE(,) !.alor de 6 (real s#mples) - !, 6
WRITE(,) !.alor de 7 (real s#mples) - !, 7
WRITE(,) !.alor de E (real dupla) - !, E
WRITE(,) !.alor de $ (real dupla) - !, $
WRITE(,) !.alor de , (real dupla) - !, ,
E'+
05: )#ecutar no%amente o programa com outros %alores para a %ari$%el A e analisar os resultados/
00: No Fortran, para !ec2ar o projeto atual, e#ecutar File, Close 'orKspace
Figura 03/2 Resultado da e#ecuo do programa03"/!,5 com A I H/,/
13.3 0ro4r/m/13;.5,&
0: O"jeti%os do progra m a:
a: =ostrar a import7ncia de serem de!inidas todas as %ari$%eis de um programa
": 6tili?ar o comando (=&F(C(T NON)
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa03c
3: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programa03c/!,5
4: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 03/2, isto +, copiar o programa03"/!,5 do projeto anterior/
-: )liminar a primeira lin2a do programa, ou seja, I'TE,ER +/
H: )#ecutar Duild, Compile para compilar o programa/ =esmo a %ari$%el * no tendo sido de!inida,
no ocorre erro de compilao/ Muando u m a %ari$%el no + de!inida, por de!ault, assu m ese ;ue todas
as %ari$%eis iniciadas pelas letras ( at+ N, em ordem al!a"+tica, so do tipo inteiro, e as de m ais so do
tipo real si m ple s /
>: Zerar o programae#ecut$%el !a?endo Duild, Duild/
J: )#ecutar o programa, atra%+s de Duild, )#ecute, com o %alor H/, para a %ari$%el A/ )m princ.pio, os
mesmos resultados mostrados na Figura 03/2 de%eriam ser o"tidos/ &or+m, podese notar na
Figura 03/3 ;ue isso no ocorre, ressaltandose: a %ari$%el * passou a ser uma %ari$%el real simplesG
com isso, !oram alterados os %alores das %ari$%eis D, C, F e Z/
,: (ncluir na primeira lin2a do programa03c/!,5 o comando (=&F(C(T NON)/ )le de%e ser
colocado antes de ;ual;uer declarao de tipo de % a ri$%el/ Reco m endase !orte m ente se m pre usar o
co m ando (=&F(C(T NON) por;ue ele o"riga o progra m ador a declarar e#plicita m ente os tipos de
todas as %ari$%eis e m pregadas no progra m a/ Assi m , se 2ou%er a digitao errUnea do no m e de u m a
%ari$%el, o compilador apontar$ o erro/
Figura 03/3 Resultado da e#ecuo do programa03"/!,5 sem de!inir a %ari$%el inteira */
05: )#ecutar Duild, Compile para compilar a no%a %erso do programa/ *e%ese notar ;ue agora
ocorrer$ erro de compilao, apontando ;ue a %ari$%el * no !oi declarada/
00: (ncluir a declarao da %ari$%el * como sendo do tipo inteiro, con!orme + mostrado na Ta"ela
03/3/
02: )#ecutar Duild, Compile para compilar o programa/
03: Zerar o programae#ecut$%el !a?endo Duild, Duild/
04: )#ecutar o programa, atra%+s de Duild, )#ecute, com o %alor H/, para a %ari$%el A/ Agora os
resultados so os mesmos mostrados na Figura 03/2, con!orme esperado/
0-: No Fortran, para !ec2ar o projeto atual, e#ecutar File, Close 'orKspace
I"0<I7IT '%'E
I'TE,ER +
RE&< &
RE&<* 6
RE&<(*) 7
RE&<A E
RE&<(A) $
+%B6<E 0RE7ISI%' ,
Ta"ela 03/3 &rograma03c/!,5/
WRITE(,) !Entre com o valor de & (real s#mples) -!
RE&+(,) &
+ - &
6 - = 8 +
7 - =.) 8 +
E - &
$ - = 8 +
, - =.) 8 +
WRITE(,) !.alor de + (#nte#ro) - !, +
WRITE(,) !.alor de 6 (real s#mples) - !, 6
WRITE(,) !.alor de 7 (real s#mples) - !, 7
WRITE(,) !.alor de E (real dupla) - !, E
WRITE(,) !.alor de $ (real dupla) - !, $
WRITE(,) !.alor de , (real dupla) - !, ,
E'+
13.4 0ro4r/m/13<.5,&
0: O"jeti%os do progra m a:
a: 6sar !un@es matem$ticas intr.nsecas do FORTRAN com %ari$%eis reais do tipo dupla
": 6sar !ormatos de edio com %ari$%eis reais do tipo dupla
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa03d
3: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programa03d/!,5
4: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 03/4/
BSE 0%RT<I6
I"0<I7IT '%'E
RE&< &*, 6*, 7*, 0#*
RE&<A &A, 6A, 7A, 0#A
I'TE,ER .ER
Ta"ela 03/4 &rograma03d/!,5/
WRITE(,) !Entre com o valor de &A (real dupla) -!
RE&+(,) &A
%0E'(2,1#le-!sa#da=3d.tDt!)
&* - &A
WRITE(2,) !&* - &A -!, &*
6* - &6S(&*)
6A - +&6S(&A)
WRITE(2,) !6* - "Zdulo com &6S(&*) -!, 6*
WRITE(2,) !6A - "Zdulo com +&6S(&A) -!, 6A
C= = L,G10(B=)
C- = DL,G10(B-)
WRITE(<,*) C=6 L&7)#i"'& +$%i')* %&' L,G10(B=) =, C=
WRITE(<,*) C-6 L&7)#i"'& +$%i')* %&' DL,G10(B-) =, C-
Pi= = AC,2(-1.0$0)
Pi- = DAC,2(-1.0+0)
WRITE(<,*) Pi %&' AC,2(-1.0$0) = , Pi=
WRITE(<,*) Pi %&' DAC,2(-1.0+0) = , Pi-
WRITE(<,*) A-, = A- /$' .&#')"&
.ER - SFSTE"(!'otepad sa#da=3d.tDt!)
== $%R"&T( ?G, !&A -!, =0E=?.3, =8, I
?G, !6A -!, =0E=?.3, =8, I
?G, !7A -!, =0E=?.3, =8 )
=( $%R"&T ( 3(=0E=).=), !- var#5ve#s &A, 6A e 7A no 1ormato 3(=0E=).=)! )
(= $%R"&T (!&A no 1ormato $A.( -!, $A.(, =8, I
!&A no 1ormato $?.) -!, $?.), =8, I
!&A no 1ormato E=?.3 -!, E=?.3, =8, I
!&A no 1ormato =0E=?.( -!, =0E=?.(, =8, I
!&A no 1ormato =0E=?.(E3 -!, =0E=?.(E3, =8 )
E'+
-: Coment$rios so"re o programa:
WRITE(<,21) A-, A-, A-, A-, A-
WRITE(<,11) A-, B-, C-
WRITE(<,12)
CL,2E(<)
A-, B-, C-
a: Os tipos de !un@es m ate m $ticas intr.nsecas do FORTRAN so os m es m os para %ari$%eis reais
si m ples ou dupla/ =as os no m es so distintos para preser%ar a preciso das %ari$%eis reais duplaG
em geral, acrescentase a letra * N !rente do co m ando usado com %ari$%eis do tipo real
si m ple s / &or e#emplo: a !uno ADA9d: usada para calcular o m1dulo da %ari$%el d do tipo real
simples passa a ser *ADA ;uando d + do tipo real dupla/
": As Ta"elas 03/- e 03/H m ostram algu m as !un@es m ate m $ticas intr.nsecas do FORTRAN para
%ari$%eis do tipo real dupla/ )stas ta"elas so as correspondentes Ns Ta"elas -/- e -/H
para
%ari$%eis do tipo real simples/
Ta"ela 03/- Algumas !un@es matem$ticas do
FORTRAN
com argumentos e resultados sendo %ari$%eis do tipo real
dupla/
Funo Comando O"ser%ao
=1dulo ou %alor a"soluto V I *ADA9d:
Rai? ;uadrada V I *AMRT9d:
)#ponencial: Y = e
X
V I *)d&9d:
Fogaritmo natural V I *FOZ9d:
Fogaritmo decimal V I *FOZ059d:
Ainal V I *A(ZN9d,\: V I %alor a"soluto de d %e?es o sinal de \
=.nimo V I *=(N09d,\,': V I %alor m.nimo entre d, \ e 'G o
argumento pode conter 2 ou mais %ari$%eis
=$#imo V I *=Ad09d,\,': V I %alor m$#imo entre d, \ e 'G o
argumento pode conter 2 ou mais %ari$%eis
c: A lista co m pleta de !un@es m ate m $ticas intr.nsecas do FORTRAN pode ser %ista no m anual do
Fortran/ &ara acess$lo, dentro da su"janela do lado es;uerdo, de%ese e#ecutar: clicar u m a %e?
so"re o s. m "olo R(n!oCie 8 G e acessar as op@es Re!erence, &rocedures, Numeric &rocedures e
as op@es Re!erence, &rocedures, Trigonometric, )#ponential, Root, and Fogat2mic &rocedures/
d: Os tipos de !or m atos de edio usados c o m %ari$%eis do tipo real si m ples ta m "+m podem
ser usados com %ari$%eis do tipo real dupla/ )stes !or m atos !oram %istos no cap.tulo H, seo
H/3/ 6m outro !or m ato ;ue pode ser con%eniente + 0&) d /V)\, onde a ter m inao )\ indica
e#poente e \ o nO m ero de algaris m os para o e#poent e / &or e#emplo, no programa03d/!,5
usase o !ormato
0&)0-/2)3/
e: Nos argu m entos de !un@es intr.nsecas para %ari$%eis do tipo real dupla de%ese de!inir
os nO m eros usandose a letra * 9ou d: em %e? de ) 9ou e: 9das %ari$%eis reais si m ples:
para
representar o e#poente/ )m c$lculos ou e#press@es ;ue en%ol%am nO m eros reais, ta m "+m de%ese
!a?er isso/ Ae estas reco m enda@es no !orem seguidas ocorrer$ erro de co m pilao ou perda de
preciso nos c$lculos/ &or e#emplo, no programa03d/!,5 usase 0/5e5 como argumento da
!uno real simples ACOA para calcular o %alor de , e 0/5d5 como argumento da !uno real
dupla *ACOA/
!: A escala de prioridades entre os operadores m ate m $ticos e as regras adotadas nas opera@es
m ate m $ticas, descritas nas Ta"elas 3/4 e 3/- ta m "+m se aplicam Ns %ari$%eis do tipo real dupla,
onde pertinente/
Ta"ela 03/H Algumas !un@es trigonom+tricas do FORTRAN
com argumentos e resultados sendo %ari$%eis do tipo real dupla/
Funo Comando O"ser%ao
Aeno V I *A(N9d: d em radianos
Cosseno V I *COA9d: d em radianos
Tangente V I *TAN9d: d em radianos
Arcoseno V I *AA(N9d: V em radianos
Arcocosseno V I *ACOA9d: V em radianos
Arcotangente V I *ATAN9d: V em radianos
Aeno 2iper"1lico V I *A(NQ9d:
Cosseno 2iper"1lico V I *COAQ9d:
Tangente 2iper"1lica V I *TANQ9d:
H: )#ecutar Duild, Compile para compilar o programa
>: Zerar o programae#ecut$%el !a?endo Duild, Duild/
J: )#ecutar o programa, atra%+s de Duild, )#ecute, com o %alor 0/234-H>J,5 para a %ari$%el AJ/
,: Analisar os resultados mostrados na Figura 03/4/
05: )#ecutar no%amente o programa com outros %alores para a %ari$%el AJ e analisar os
resultadosG por e#emplo, AJ I 0eE3, 0/5d3, 0/2e35/
00: )ncerrar a sesso seguindo o procedi m entopadro /
13." EXERC.CIOS
)#erc.cio 03/0
&ara testar as opera@es matem$ticas "$sicas, re!a?er o programa53e/!,5, do cap.tulo 3, seo 3/3, usando
%ari$%eis do tipo real dupla em %e? de real simples/
)#erc.cio 03/2
&ara testar o uso da escala de prioridades entre os operadores matem$ticos e as regras adotadas nas
opera@es matem$ticas, descritas nas Ta"elas 3/4 e 3/-, re!a?er o programa53!/!,5, do cap.tulo 3, seo
3/-, usando, onde pertinente, %ari$%eis do tipo real dupla em %e? de real simples/
Figura 03/4 Resultado da e#ecuo do programa03d/!,5 no ar;ui%o saida03d/t#t com AJ I
0/234-H>J,5/
)#erc.cio 03/3
)scre%er as e#press@es em linguagem FORTRAN ;ue correspondem Ns seguintes e#press@es alg+"ricas,
onde A, D e F so nOmeros reais de preciso dupla, e ( e 3 so nOmeros inteiros:
)#erc.cio 03/4
0: )#ecutar o programa03d/!,5 com AJ I 0/2eE35J/ *e%ese notar ;ue o programa ter$ pro"lema
durante a e#ecuo/ &or ;ue isso ocorreR
2: (mplementar uma no%a %erso do programa03d/!,5 com a eliminao de tudo relacionado Ns %ari$%eis
reais de preciso simples/
a: Zerar o e#ecut$%el desta no%a %erso e e#ecut$lo com AJ I 0/2eE35J/ *e%ese notar ;ue agora o
programa + e#ecutado sem nen2um pro"lema/ &or ;ue isso ocorreR O"ser%ar o ;ue acontece com a
representao dos resultados atra%+s dos !ormatos usados, principalmente com relao aos
e#poentes/
": )#ecutar no%amente o programa com AJ I 2/2e35J/
c: )#ecutar no%amente o programa com AJ I 2/5eE35J/ O ;ue aconteceR &or ;u<R
d: )#ecutar no%amente o programa com outros %alores para AJ/
0HJ Cap.tulo 04/ Ar;ui%os de sa.da, de entrada e internos
C/012u3o 14. AR>UIVOS DE SA.DA6 DE ENTRADA E
INTERNOS
OBJETIVOS DO CAPTULO
Conceitos de: ar;ui%o de entrada, ar;ui%o interno, ar;ui%o te#to, ar;ui%o "in$rio, dispositi%o e nome
de ar;ui%o gen+ricos
Comandos do FORTRAN: uso a%anado de O&)N, 'R(T) e AVAT)=
No comando O&)N, usar os par7metros FOR=ATT)*, 6NFOR=ATT)*, R)'(N* e A&&)N*
&ara iniciali?ar as ati%idades deste cap.tulo, de%ese acessar o programa Fortran, no 'indo8s,
atra%+s de: Atart, &rograms, Fortran &o8erAtation 4/5, =icroso!t *e%eloper Atudio
14.1 0ro4r/m/14/.5,&
0: O"jeti%os do progra m a: relem"rar os con2ecimentos atuais so"re
9a: o uso de janela *OA para entrar dadosG
9": escre%er resultados num ar;ui%o, com o nome do ar;ui%o e o nOmero do dispositi%o sendo pr+
de!inidosG e
9c: a"rir o ar;ui%o de resultados com o aplicati%o Notepad/
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa04a
3: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programa04a/!,5
4: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 04/0/
-: )#ecutar Duild, Compile para compilar o programa/
H: Zerar o programae#ecut$%el !a?endo Duild, Duild/
>: )#ecutar o programa atra%+s de Duild, )#ecute com o %alor J, por e#emplo/ O resultado de%e ser o
mostrado na Figura 04/0/
J: )#ecutar no%amente o programa com outros dados e analisar os no%os resultados/
,: No Fortran, para !ec2ar o projeto atual, e#ecutar File, Close 'orKspace/
BSE 0%RT<I6
I"0<I7IT '%'E
RE&<A 0#
I'TE,ER B'IT, .ER
0# - +&7%S(:=.)d))
0H, Cap.tulo 04/ Ar;ui%os de sa.da, de entrada e internos
Ta"ela 04/0 &rograma04a/!,5
WRITE(,) !Entre com o valor de B'IT (#nte#ro) -!
RE&+(,) B'IT
%0E'(2,1#le-!sa#da=*a.tDt!)
WRITE(2,==) B'IT, 0#
7<%SE(2)
.ER - SFSTE"(!'otepad sa#da=*a.tDt!)
== $%R"&T( ?G, !B'IT -!, I*, =8, I
?G, !0# -!, =0E(?.=? )
E'+
Figura 04/0 Resultado do programa04a/!,5/
14.2 0ro4r/m/14=.5,&
0: O"jeti%os do progra m a:
9a: )ntrada de dados atra%+s de janela *OAG
9": escre%er resultados num ar;ui%o cujo nome e o nOmero do dispositi%o so gen+ricos e de!inidos
pelo usu$rio atra%+s dos dados do programaG e
9c: a"rir o ar;ui%o de resultados de nome gen+rico com o aplicati%o Notepad/
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa04"
3: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programa04"/!,5
4: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 04/2/
BSE 0%RT<I6
I"0<I7IT '%'E
RE&<A 0#
I'TE,ER B'IT, .ER
7>&R&7TER(?)) S&I+&, TEGT%
0# - +&7%S(:=.)d))
Ta"ela 04/2 &rograma04"/!,5
WRITE(,) !Bn#dade de sa#da (#nte#ro) -!
RE&+(,) B'IT
WRITE(,) !'ome do arKu#vo de sa#da (caracter) -!
RE&+(,) S&I+&
TEGT% - !'otepad ! 88 S&I+&
%0E'(B'IT, 1#le - S&I+& )
WRITE(B'IT,==) B'IT, 0#, S&I+&, TEGT%
7<%SE(B'IT)
== $%R"&T( =8, ?G, !B'IT -!, I*, I
=8, ?G, !0# -!, =0E(?.=?, I
=8, ?G, !S&I+& - !, &?), I
=8, ?G, !TEGT% - !, &?) )
.ER - SFSTE"( TEGT% )
E'+
-: Coment$rios so"re o programa:
9a: Na lin2a %0E'(B'IT, 1#le - S&I+& ), de%ese notar ;ue no co m ando O&)N, no lugar do
nO m ero do dispositi%o ;ue identi!ica o ar;ui%o, + usado u m a %ari$%el c2amada 6N(T, ;ue + um
dado do programa/ ) o no m e do ar;ui%o, ;ue aparece ap1s a pala%rac2a%e F(F), ta m "+m + u m a
%ari$%e l , c2amada AA(*A, ;ue + de!inida pelo usu$rio atra%+s dos dados do programaG o"ser%a
se ;ue no se de%e usar ap1stro!os ou aspas com esta %ari$%el, como era !eito antes, por e#emplo
no programa04a/!,5/ Os nomes das %ari$%eis 6N(T e AA(*A podem ser outros ;uais;uer/
9": Na lin2a WRITE(B'IT,==) B'IT, 0#, S&I+&, TEGT%, de%ese notar ;ue no comando 'R(T),
no lugar do nOmero do dispositi%o ;ue identi!ica o ar;ui%o, + usado uma %ari$%el c2amada
6N(T, ;ue + um dado do programa/
9c: Na lin2a 7<%SE(B'IT), de%ese notar ;ue no comando CFOA), no lugar do nOmero do
dispositi%o ;ue identi!ica o ar;ui%o, + usado uma %ari$%el c2amada 6N(T, ;ue + um dado do
programa/
9d: Na lin2a .ER - SFSTE"( TEGT% ), de%ese notar ;ue no comando AVAT)=, no lugar de um
te#to espec.!ico, como era !eito antes, por e#emplo no programa04a/!,5, + usado uma %ari$%el
c2amada T)dTO/
H: )#ecutar Duild, Compile para compilar o programa/
>: Zerar o programae#ecut$%el !a?endo Duild, Duild/
J: )#ecutar o programa atra%+s de Duild, )#ecute com:
6nidade de sa.da I J
Nome do ar;ui%o de sa.da I saida/t#t
O resultado de%e ser o mostrado na Figura 04/2/
Figura 04/2 Resultado do programa04"/!,5 para os dados do item J/
,: )#ecutar o programa atra%+s de Duild, )#ecute com:
6nidade de sa.da I ,
Nome do ar;ui%o de sa.da I saida/t#t
05: )#ecutar o programa atra%+s de Duild, )#ecute com:
6nidade de sa.da I ,
Nome do ar;ui%o de sa.da I saida04"/t#t
00: )#ecutar o programa atra%+s de Duild, )#ecute com:
6nidade de sa.da I ,
Nome do ar;ui%o de sa.da I saida
02: Analisar os resultados da e#ecuo do programa com os dados dos itens J a 00/
03: Alterar a lin2a %0E'(B'IT, 1#le - S&I+& )
para %0E'(B'IT, 1#le - S&I+&, 1orm - !1ormatted! )
)m seguida, e#ecutar no%amente os itens H a J, acima/ O resultado de%e ser o mostrado na Figura
04/2/ (sso ocorre por;ue o par7 m etro XFOR=ATT)*Y, no co m ando O&)N, ;ue aparece ap1s a
pala%rac2a%e FOR=, + a opo de!ault/ Ou seja, usandoo ou no, o resultado + o mesmo/ )le
signi!ica ;ue o ar;ui%o + do tipo te#to, isto +, ao a"rilo, conseguese ler o conteOdo, principal m ente
os nO m eros, escritos na "ase deci m a l /
04: Alterar a lin2a %0E'(B'IT, 1#le - S&I+&, 1orm - !1ormatted! )
para %0E'(B'IT, 1#le - S&I+&, 1orm - !un1ormatted! )
Alterar tam"+m a lin2a WRITE(B'IT,==) B'IT, 0#, S&I+&, TEGT%
para WRITE(B'IT) B'IT, 0#, S&I+&, TEGT%
)m seguida, e#ecutar no%amente os itens H a J, acima/ O resultado de%e ser o mostrado na Figura
04/3/ O par7 m etro X6NFOR=ATT)*Y, no co m ando O&)N, ;ue aparece ap1s a pala%rac2a%e
FOR=, + usado para escre%er resultados num ar;ui%o do tipo "in$rio/ (sto +, ao a"rilo, no se
consegue ler o conteOdo, de !or m a geral, principal m ente os nO m eros, escritos na "ase "in$ria/ &ara
escre%er em !or m a "in$ria, no co m ando ' R(T) de%ese indicar apenas o nO m ero do dispositi%o do
ar;ui%o, con!orme e#empli!icado neste item 04/ O !or m ato "in$rio + m uito indicado para gra%ar
grandes ;uantidades de resultados, pois precisa m enos espao em disco do ;ue o !or m ato te#to/
0-: No Fortran, para !ec2ar o projeto atual, e#ecutar File, Close 'orKspace/
Figura 04/3 Resultado do programa04"/!,5 para o item 04/
14.3 0ro4r/m/14;.5,&
0: O"jeti%o do progra m a: adicionar resultados num ar;ui%o j$ e#istente/
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa04c
3: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programa04c/!,5
4: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 04/2, ;ue + o programa04"/!,5/
-: Alterar a lin2a %0E'(B'IT, 1#le - S&I+& )
para %0E'(B'IT, 1#le - S&I+&, pos#t#on - !re[#nd! )
H: Coment$rios so"re o programa:
O par7 m etro XR) ' (N*Y, no co m ando O&)N, ;ue aparece ap1s a pala%rac2a%e &OA(T(ON + a
opo de!ault/ Ou seja, usandoo ou no, o res u ltado + o m es m o/ )le + usado para !a?er com ;ue
resultados sejam escritos a partir do in.cio de um ar;ui%o, seja o ar;ui%o no%o ou j$ e#istent e /
>: )#ecutar Duild, Compile para compilar o programa/
J: Zerar o programae#ecut$%el !a?endo Duild, Duild/
,: )#ecutar o programa atra%+s de Duild, )#ecute com:
6nidade de sa.da I J
Nome do ar;ui%o de sa.da I saida/t#t
O resultado de%e ser o mostrado na Figura 04/2/
05: )#ecutar o programa atra%+s de Duild, )#ecute com:
6nidade de sa.da I ,
Nome do ar;ui%o de sa.da I saida/t#t
O no%o resultado di!ere do mostrado na Figura 04/2 apenas em 6N(T I ,/
00: Alterar a lin2a %0E'(B'IT, 1#le - S&I+&, pos#t#on - !re[#nd! )
para %0E'(B'IT, 1#le - S&I+&, pos#t#on - !append! )
O par7 m etro XA&&)N*Y, no co m ando O&)N, ;ue apa r ece ap1s a pala%rac2a%e &OA(T(ON + usado
para !a?er com ;ue resultados sejam escritos a partir do !im de um ar;ui%o j$ e#istente/ Ae o ar;ui%o
!or no%o, os resultados sero escritos a partir do seu in.cio/
02: )#ecutar no%amente os itens > e J, acima/
03: )#ecutar no%amente o item ,, acima/ O resultado da e#ecuo do programa04c/!,5 de%e ser o
mostrado na Figura 04/4/ *e%ese perce"er ;ue ele representa a soma das e#ecu@es dos itens 05 e
03/
04: No Fortran, para !ec2ar o projeto atual, e#ecutar File, Close 'orKspace/
14.4 0ro4r/m/14<.5,&
0: O"jeti%os do progra m a:
9a: ler os dados do programa de um ar;ui%o, em %e? de usar a janela *OAG e
9": a"rir o ar;ui%o de dados com o aplicati%o Notepad/
Figura 04/4 Resultado do programa04c/!,5 para o item 03/
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa04d
3: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programa04d/!,5
4: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 04/3/
-: Coment$rios so"re o programa:
9a: O programa04"/!,5 + praticamente igual ao programa04d/!,5/ A di!erena est$ na !orma de
entrar os dados do programa/ No primeiro + usada a janela *OA e, no segundo, um ar;ui%o de
dados/
9": Na lin2a %0E'(=, 1#le - !dados.tDt! ) do programa04d/!,5, de!inese o nOmero 0 como o
dispositi%o associado ao ar;ui%o de dados c2amado Xdados/t#tY/
BSE 0%RT<I6
I"0<I7IT '%'E
RE&<A 0#
I'TE,ER B'IT, .ER
7>&R&7TER(?)) S&I+&, TEGT%
Ta"ela 04/3 &rograma04d/!,5
.ER - SFSTE"(!'otepad dados.tDt! )
%0E'(=, 1#le - !dados.tDt! )
RE&+(=,) B'IT
RE&+(=,) S&I+&
7<%SE(=)
0# - +&7%S(:=.)d))
TEGT% - !'otepad ! 88 S&I+&
%0E'(B'IT, 1#le - S&I+& )
WRITE(B'IT,==) B'IT, 0#, S&I+&, TEGT%
7<%SE(B'IT)
== $%R"&T( =8, ?G, !B'IT -!, I*, I
=8, ?G, !0# -!, =0E(?.=?, I
=8, ?G, !S&I+& - !, &?), I
=8, ?G, !TEGT% - !, &?) )
.ER - SFSTE"( TEGT% )
E'+
9c: Nas lin2as RE&+(=,) B'IT e RE&+(=,) S&I+& os dois dados so lidos, %ari$%eis 6N(T e
AA(*A/ *e%ese notar ;ue so dois comandos R)A*, cada um sendo usado para ler uma Onica
%ari$%el/ Assim, ap1s o programa ler o conteOdo da %ari$%el 6N(T na primeira lin2a do ar;ui%o
Xdados/t#tY, tudo ;ue esti%er nesta lin2a ap1s o %alor de 6N(T no + considerado pelo programa/
&ortanto, podem ser inseridos coment$rios nos ar;ui%os de dados para !icar claramente de!inido
ao ;ue corresponde cada dado/ O mesmo se aplica ao %alor da %ari$%el AA(*A na segunda lin2a
do ar;ui%o Xdados/t#tYG o ;ue est$ ap1s este dado, na mesma lin2a, no + considerado pelo
programa/
9d: Reco m endase se m pre !a?er isso: um dado por lin2a e, em seguida, na m es m a lin2a, um
co m ent$rio para in!or m ar o ;ue signi!ica a %ari$%el/ Al+m disso, nunca se de%e usar !or m ato para
ler dadosG este + o m oti%o do asterisco nos dois co m andos R)A*/ Os !or m atos de%em ser usados
apenas para escre%er resultados/
9e: Todos os co m ent$rios j$ !eitos nos cap.tulos anteriores e neste so"re o co m ando O&)N, para
ar;ui%os de resultados ou de sa.da, ta m "+m %alem para ar;ui%os de entrada ou de dados/
H: )#ecutar Duild, Compile para compilar o programa/
>: Zerar o programae#ecut$%el !a?endo Duild, Duild/
J: Antes de e#ecutar um no%o progra m a ;ue use ar;u i%o de dados, + necess$rio criar o ar;ui%o de dados
e inserir nele os respecti%os dados/ No caso do programa04d/!,5, + necess$rio criar o ar;ui%o
Xdados/t#tY e inserir os dois dados ;ue correspondem Ns %ari$%eis 6N(T e AA(*A/ &ara !a?er isso,
e#ecutar o seguinte:
9a: Atart, &rograms, Accessories, Notepad
9": *entro do espao de edio do Notepad, editar:
A Bn#dade de sa#da (#nte#ro)
sa#da.tDt 'ome do arKu#vo de sa#da (caracter)
9c: File, Aa%e
9d: Na janela XAa%e AsY, em XFile NameY, colocar Xdados/t#tYG em XAa%e in:Y, selecionar o diret1rio
do projeto/ )m seguida, clicar so"re o "oto XAa%eY/ Finalmente, selecionar File, )#it/
O resultado de%e ser o mostrado na Figura 04/-/
Figura 04/- Ar;ui%o de dados Xdados/t#tY do programa04d/!,5/
,: )#ecutar o programa atra%+s de Duild, )#ecute/ O resultado de%er$ ser:
9a: A a"ertura do ar;ui%o Xdados/t#tY com o programa Notepad/ Ae o ar;ui%o no e#istir no
diret1rio do projeto, ocorrer$ um erro/ Ae o usu$rio ;uiser, poder$ alterar o conteOdo das
%ari$%eis no ar;ui%o Xdados/t#tY/ *epois, de%ese gra%ar o ar;ui%o alterado com File, Aa%e/
Finalmente, !ec2ar o ar;ui%o com File, )#it/
9": )m seguida, ocorrer$ a a"ertura do ar;ui%o Xsaida/t#tY com o programa Notepad/ O conteOdo
de%er$ ser o mesmo mostrado na Figura 04/2/ Fec2ar o ar;ui%o com File, )#it/
9c: Na janela do *OA, o resultado de%er$ ser apenas a !rase X&ress anB KeB to continueY
05: )#ecutar no%amente o programa atra%+s de Duild, )#ecute com:
6nidade de sa.da I ,
Nome do ar;ui%o de sa.da I saida/t#t
Analisar o no%o resultado/
00: )#ecutar no%amente o programa com outros dados e analisar o no%o resultado/
02: )ncerrar a sesso seguindo o procedi m entopadro /
14." 0ro4r/m/148.5,&
0: O"jeti%o do progra m a: usar ar;ui%os internos/
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa04e
3: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programa04e/!,5
4: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 04/4/
-: Coment$rios so"re o programa:
9a: At+ agora o dispositi%o associado a um ar;ui%o de resultados ou de dados era e#plicitamente um
nOmero ou uma %ari$%el do tipo inteiro, por e#emplo: a lin2a WRITE(2,==) B'IT, 0# do
programa04a/!,5, na ;ual o dispositi%o + o nOmero ,G e a lin2a WRITE(B'IT,==) B'IT, 0#,
S&I+&, TEGT% do programa04"/!,5, na ;ual o dispositi%o + a %ari$%el inteira 6N(T/ O
dispositi%o associado a um ar;ui%o de resultados ou de dados ta m "+m pode ser u m a %ari$%el do
tipo caracte r /
9": Na lin2a WRITE(TEGT%(,) B'IT do programa04e/!,5, de!inese a %ari$%el T)dTO2, do tipo
caracter, como o dispositi%o no ;ual ser$ escrito o conteOdo da %ari$%el 6N(T, ;ue + do tipo
inteiro/
9c: Na lin2a WRITE(TEGT%3,) 0# do programa04e/!,5, de!inese a %ari$%el T)dTO3, do tipo
caracter, como o dispositi%o no ;ual ser$ escrito o conteOdo da %ari$%el &i, ;ue + do tipo real
dupla/
9d: Na lin2a WRITE(TEGT%*,) TEGT% 88 TEGT%3 do programa04e/!,5, de!inese a %ari$%el
T)dTO4, do tipo caracter, como o dispositi%o no ;ual ser$ escrito o conteOdo da %ari$%el
T)dTO concatenada com o conteOdo da %ari$%el T)dTO3, sendo am"as do tipo caracter/
9e: Na lin2a RE&+(TEGT%3,) TEGT%? do programa04e/!,5, de!inese a %ari$%el T)dTO3, do tipo
caracter, como o dispositi%o do ;ual ser$ lido o conteOdo da %ari$%el T)dTO-, ;ue + do tipo
caracter/
BSE 0%RT<I6
I"0<I7IT '%'E
RE&<A 0#
I'TE,ER B'IT, .ER
Ta"ela 04/4 &rograma04e/!,5
7>&R&7TER(3)) S&I+&, TEGT%, TEGT%(, TEGT%3, TEGT%?
7>&R&7TER(@)) TEGT%*
0# - +&7%S(:=.)d))
WRITE(,) !Bn#dade de sa#da (#nte#ro) -!
RE&+(,) B'IT
WRITE(,) !'ome do arKu#vo de sa#da (caracter) -!
RE&+(,) S&I+&
TEGT% - !'otepad ! 88 S&I+&
WRITE(TEGT%(,) B'IT
WRITE(TEGT%3,) 0#
WRITE(TEGT%*,) TEGT% 88 TEGT%3
RE&+(TEGT%3,) TEGT%?
%0E'(B'IT, 1#le - S&I+& )
WRITE(B'IT,==) B'IT, 0#, S&I+&, TEGT%, TEGT%(, TEGT%3, TEGT%*, TEGT%?
7<%SE(B'IT)
== $%R"&T( =8, ?G, !B'IT -!, I*, I
=8, ?G, !0# -!, =0E(?.=?, I
=8, ?G, !S&I+& - !, &3), I
=8, ?G, !TEGT% - !, &3), I
=8, ?G, !TEGT%( - !, &3), I
=8, ?G, !TEGT%3 - !, &3), I
=8, ?G, !TEGT%* - !, &@), I
=8, ?G, !TEGT%? - !, &3) )
.ER - SFSTE"( TEGT% )
E'+
H: )#ecutar Duild, Compile para compilar o programa/
>: Zerar o programae#ecut$%el !a?endo Duild, Duild/
J: )#ecutar o programa atra%+s de Duild, )#ecute com:
6nidade de sa.da I J
Nome do ar;ui%o de sa.da I saida/t#t
O resultado de%e ser o mostrado na Figura 04/H/
Analisar o resultado/
Figura 04/H Resultado do programa04e/!,5, com o item J/
,: )#ecutar no%amente o programa atra%+s de Duild, )#ecute com outros dados/ Analisar o no%o
resultado/
05: )ncerrar a sesso seguindo o procedi m entopadro /
14.' EXERC.CIOS
)#erc.cio 04/0
Aeguindo o algoritmo do programa04d/!,5, Ta"ela 04/3, re!a?er o e#erc.cio 03/0 atendendo:
9a: um ar;ui%o para entrar os dados do programaG
9": no in.cio da e#ecuo do programa, a"rir automaticamente o ar;ui%o de dados com o aplicati%o
NotepadG
9c: um ar;ui%o para escre%er os resultados do programa, com o nome do ar;ui%o sendo de!inido pelo
usu$rioG
9d: no !inal da e#ecuo do programa, a"rir automaticamente o ar;ui%o de resultados com o aplicati%o
Notepad/
)#erc.cio 04/2
Aeguindo o algoritmo do programa04d/!,5, Ta"ela 04/3, re!a?er o e#erc.cio 03/2 atendendo aos mesmos 4
itens do e#erc.cio 04/0/
)#erc.cio 04/3
Aeguindo o algoritmo do programa04d/!,5, Ta"ela 04/3, re!a?er o e#erc.cio ,/3 atendendo aos mesmos 4
itens do e#erc.cio 04/0/
)#erc.cio 04/4
Aeguindo o algoritmo do programa04d/!,5, Ta"ela 04/3, re!a?er o programa da seo 02/4, Ta"ela 02/>,
atendendo aos mesmos 4 itens do e#erc.cio 04/0/
)#erc.cio 04/-
(mplementar uma no%a %erso do programa04d/!,5 para ;ue:
9a: o nome do ar;ui%o de dados seja de!inido pelo usu$rioG e
9": no in.cio da e#ecuo do programa, o ar;ui%o de dados seja a"erto automaticamente com o aplicati%o
Notepad/
0J0 Cap.tulo 0-/ (niciali?ao, tempo de C&6 e *OA
C/012u3o 1". INICIALI#A$O6 TEMPO DE CPU E DOS
OBJETIVOS DO CAPTULO
(niciali?ar %ari$%eis e constantes junto com suas de!ini@es
Cers@es *)D6Z e R)F)AA) de um programae#ecut$%el
Comandos do FORTRAN: &ARA=)T)R, Formato Afdg
Funo do FORTRAN: T(=)F
Comandos do *OA: =S*(R, CO&V, )RAA), C*, R)NA=), Xar;ui%oY/DAT
&ara iniciali?ar as ati%idades deste cap.tulo, de%ese acessar o programa Fortran, no 'indo8s,
atra%+s de: Atart, &rograms, Fortran &o8erAtation 4/5, =icroso!t *e%eloper Atudio
1".1 0ro4r/m/1"/.5,&
0: O"jeti%os do progra m a:
9a: usar os no%os comandos do FORTRAN: &ARA=)T)R e !ormato Afdg
9": ao de!inir %ari$%eis, iniciali?ar seus %aloresG e
9c: escre%er %ari$%eis do tipo caracter com taman2o e#ato de seu conteOdo, usando o comando
FOR=AT/
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa0-a
3: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programa0-a/!,5
4: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 0-/0/
BSE 0%RT<I6
I"0<I7IT '%'E
I'TE,ER .ER, G
Ta"ela 0-/0 &rograma0-a/!,5
7>&R&7TER(?)) S&I+&, TEGT%, 7%"E'T&RI%
I'TE,ER :: B'IT - ()
RE&<A, 0&R&"ETER :: 0# - 3.=*=?2E9))
.ER - SFSTE"(!'otepad +&+%S.TGT! )
%0E'(=, 1#le - !+&+%S.TGT! )
RE&+(=,) 7%"E'T&RI%
RE&+(=,) S&I+&
7<%SE(=)
%0E'(B'IT, 1#le - S&I+& )
WRITE(B'IT,=)) B'IT, 0#
=) $%R"&T( 8, ?G, !B'IT - !, I*, I
(8, ?G, !0# - !, =0E(?.=? )
WRITE(B'IT,==) 7%"E'T&RI%
== $%R"&T( 8, &?), ! - 7%"E'T&RI%! )
G - <E'(TRI"(&+CBST<(7%"E'T&RI%)))
WRITE(B'IT,=() TRI"(&+CBST<(7%"E'T&RI%))
=( $%R"&T( 8, &JGL, ! - 7%"E'T&RI%! )
7<%SE(B'IT)
TEGT% - !'otepad ! 88 S&I+&
.ER - SFSTE"( TEGT% )
E'+
-: Coment$rios so"re o programa:
9a: Na lin2a I'TE,ER :: B'IT - () est$ sendo de!inida a %ari$%el 6N(T como sendo do tipo
inteiro e est$ sendo atri"u.do o %alor 25 a ela/ Ou seja, ela est$ sendo iniciali?ada com o %alor
25/
9": Na lin2a RE&<A, 0&R&"ETER :: 0# - 3.=*=?2E9)) est$ sendo de!inida a %ari$%el &i como
sendo do tipo real de dupla preciso, est$ sendo atri"u.do o %alor 3/040-, a ela/ Ou seja, ela est$
sendo iniciali?ada com o %alor 3/040-,/ Al+m disso, ela est$ sendo de!inida como uma constante
atra%+s do comando &ARA=)T)R/
9c: Cari$%eis iniciali?adas podem ser alteradas dentro do progra m a/
9d: Cari$%eis iniciali?adas e de!inidas co m o constantes, com o co m ando &ARA=)T)R, no podem
ser alteradas dentro do progra m a/ (sso gera erro de co m pila o /
9e: *i%ersas %ari$%eis podem ser iniciali?adas nu m a m es m a lin2a de progra m a/ Dasta separ$las por
%.rgula/
9!: Na lin2a WRITE(B'IT,=() TRI"(&+CBST<(7%"E'T&RI%)) escre%ese a %ari$%el
CO=)NTAR(O no ar;ui%o de!inido por 6N(T, com o !ormato de!inido pelo nOmero 02/ O uso
das !un@es TR(= e A*36ATF permite eliminar espaos em "ranco e#istentes no conteOdo da
%ari$%el CO=)NTAR(O, con!orme %isto no Cap.tulo 4/
9g: Na lin2a =( $%R"&T( 8, &JGL, ! - 7%"E'T&RI%! ) o identi!icador A, usado para escre%er
%ari$%eis do tipo caracter, est$ sendo usado nu m a !or m a a%anada, ;ue per m ite escre%er
%ari$%eis do tipo caracter com o ta m an2o e#ato de seu conteOdo/ (sto +, sem espaos em "ranco,
;ue ocorrem de%ido ao pr+di m ensiona m ento ;ue + necess$rio !a?er ao se de!inir u m a %ari$%el
caracte r , no caso 7>&R&7TER(?)) S&I+&, TEGT%, 7%"E'T&RI%/ Na sintase Afdg, d + uma
%ari$%el inteira, de!inida por G - <E'(TRI"(&+CBST<(7%"E'T&RI%))), cujo %alor resulta da
aplicao da !uno F)N/
H: )#ecutar Duild, Compile para compilar o programa/
>: Zerar o programae#ecut$%el !a?endo Duild, Duild/
J: Antes de e#ecutar o programa, + necess$rio criar o ar;ui%o de dados e inserir nele os respecti%os
dados/ No caso do programa0-a/!,5, + necess$rio criar o ar;ui%o X*A*OA/TdTY e inserir os dois
dados ;ue correspondem Ns %ari$%eis CO=)NTAR(O e AA(*A/ 6sar, por e#emplo, os dados
mostrados na Figura 0-/0/
Figura 0-/0 )#emplo de ar;ui%o de dados para o programa0-a/!,5/
,: )#ecutar o programa atra%+s de Duild, )#ecute/ O resultado de%e ser o mostrado na Figura 0-/2/
05: )#ecutar no%amente o programa com outros dados e analisar os no%os resultados/
00: No Fortran, para !ec2ar o projeto atual, e#ecutar File, Close 'orKspace/
1".2 0ro4r/m/1"=.5,&
0: O"jeti%os do progra m a:
9a: usar uma no%a !uno do FORTRAN: T(=)FG e
9": mostrar a di!erena, em termos de tempo de processamento, das %ers@es *)D6Z e R)F)AA)
de um programae#ecut$%el/
Figura 0-/2 Resultado do programa0-a/!,5 para os dados da Figura 0-/0/
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa0-"
3: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programa0-"/!,5
4: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 0-/2/
BSE 0%RT<I6
I"0<I7IT '%'E
I'TE,ER .ER, 0&SS%S, I
7>&R&7TER(?)) S&I+&, TEGT%
I'TE,ER :: B'IT - ()
RE&<A T=, T(, S%"&
Ta"ela 0-/2 &rograma0-"/!,5
.ER - SFSTE"(!'otepad +&+%S.TGT! )
%0E'(=, 1#le - !+&+%S.TGT! )
RE&+(=,) 0&SS%S
RE&+(=,) S&I+&
7<%SE(=)
T= - TI"E$()
S%"& - ).)+)
+% I - =, 0&SS%S
S%"& - S%"& 9 I
E'+ +%
T( - TI"E$()
%0E'(B'IT, 1#le - S&I+& )
WRITE(B'IT,==) 0&SS%S, S%"&, T=, T(, T(:T=
== $%R"&T( =8, ! 0RI"EIR& S%"& !, I
=8, ?G, !0&SS%S - !, I=(, I
=8, ?G, !S%"& - !, =0E(?.=)E3, I
=8, ?G, !T= (segundos) - !, =0E(?.=)E3, I
=8, ?G, !T( (segundos)- !, =0E(?.=)E3, I
=8, ?G, !Tempo de 70B - T( : T= (segundos)- !, =0E(?.=)E3 )
T= - TI"E$()
S%"& - ).)+)
+% I - =, 0&SS%S
S%"& - S%"& 9 I
E'+ +%
T( - TI"E$()
WRITE(B'IT,=() 0&SS%S, S%"&, T=, T(, T(:T=
=( $%R"&T( =8, ! SE,B'+& S%"& !, I
=8, ?G, !0&SS%S - !, I=(, I
=8, ?G, !S%"& - !, =0E(?.=)E3, I
=8, ?G, !T= (segundos) - !, =0E(?.=)E3, I
=8, ?G, !T( (segundos)- !, =0E(?.=)E3, I
=8, ?G, !Tempo de 70B - T( : T= (segundos)- !, =0E(?.=)E3 )
7<%SE(B'IT)
TEGT% - !'otepad ! 88 S&I+&
.ER - SFSTE"( TEGT% )
E'+
-: Coment$rios so"re o programa:
9a: A !uno T(=)F !a? parte da "i"lioteca & O RTF(D/ )la + usada para m edir o te m po de
processa m ento ou te m po de C&6 do progra m a entre dois pontos desejados/ O te m po de C&6 + o
te m po e!eti%a m ente gasto pelo processador do co m putador e#ecutando um progra m a ou parte de
um progra m a/
9": A !uno T(=)F m ede o te m po de C&6 em segundos/
9c: A !uno T(=)F + usada como na lin2a T= - TI"E$() do programa, onde T0 de%e ser uma
%ari$%el do tipo real dupla/
9d: *entro de um progra m a, a pri m eira c2a m ada da !uno de T(=)F ?era a contagem de te m po/ As
c2a m adas sucessi%as, registram o te m po total tr anscorrido entre a ?eragem e um ponto espec.!ico
do progra m a/ *esta !or m a, o te m po de processa m ento entre dois pontos + igual N di!erena entre
os te m pos registrados nestes dois ponto s /
9e: Como se poder$ perce"er nos e#emplos, a ! uno T(=)F no tem preciso m uito ele%ada/ A
repetio de um progra m a pode gerar di!erenas de at+ m 5/5- segundo/
9!: No FORTRAN, a m edio do te m po de proc e ssa m ento de um progra m a ta m "+m pode ser !eita
com as !un@es *T(=) e )T(=), e a su"rotina C&6]T(= )/
9g: No FORTRAN ,-, por de!ault, u m a %ari$%el do tipo inteiro no pode ter %alor m aior do ;ue 2
30



0, ;ue corresponde a 2 04> 4J3 H4>, ou seja, m ais de 2 "il2@es/
92: &or de!ault, ;uando se co m pila e se gera o e#ecut$%el de um progra m a, o"t+ m se a c2a m ada
%erso *)D6Z/ )la + Otil para se encontr a r erros de edio ou de uso dos co m andos do
FORTRAN, isto +, erros de sinta#e ou erros de co m pilao/ =as, em ter m os de te m po de
processa m ento, a %erso *)D6Z + m ais lenta 9podendo c2egar a -5b: do ;ue a %erso
R)F)AA)/ Al+m disso, a %erso *)D6Z geral m ente resulta num progra m ae#ecut$%el cujo
ar;ui%o precisa de m ais m e m 1ria em disco do ;ue a %erso R)F)AA)/ &ara de!inir o tipo de
%erso do progra m a, no m enu principal do Fortran, de%ese e#ecutar XDuild, Aet *e!ault
Con!iguration///Y, escol2er a opo desejada e clicar no "oto OS/ *epois, de%ese co m pilar e
gerar o e#ecut$%el do progra m a/
H: )#ecutar Duild, Compile para compilar o programa/
>: Zerar o programae#ecut$%el !a?endo Duild, Duild/
J: Antes de e#ecutar o programa, + necess$rio criar o ar;ui%o de dados e inserir nele os respecti%os
dados/ No caso do programa0-"/!,5, + necess$rio criar o ar;ui%o X*A*OA/TdTY e inserir os dois
dados ;ue correspondem Ns %ari$%eis &AAAOA e AA(*A/ 6sar, por e#emplo, os dados
mostrados na Figura 0-/3, onde &AAAOA + igual a 055 mil2@es/
,: )#ecutar o programa atra%+s de Duild, )#ecute/ O resultado + mostrado na Figura 0-/4/ Os tempos
de processamento se re!erem N e#ecuo do programa num microcomputador &entium ((( de >-5
=Q?/ Analisandose o programa, de%ese perce"er ;ue os dois tempos de C&6 de%eriam ter
e#atamente o mesmo %alor, mas na Figura 0-/4 notase ;ue 2$ uma di!erena entre eles de 5/50 s/ A
cada e#ecuo do programa, tanto os %alores do tempo de C&6 ;uanto suas di!erenas podem %ariar/
Figura 0-/3 )#emplo de ar;ui%o de dados para o programa0-"/!,5/
Figura 0-/4 Resultado do programa0-"/!,5 para os dados da Figura 0-/3, %erso *)D6Z/
05: )#ecutar no%amente o programa com outros dados e analisar os no%os resultados/ 6tili?ar, por
e#emplo, &AAAOA I 05 mil2@es, 0 mil2o e 0 "il2o/
00: Ceri!icar se dentro do diret1rio do projeto e#iste um su"diret1rio c2amado *)D6Z/ Ae no, isto +,
se o diret1rio e#istente !or c2amado R)F)AA), onde se l< *)D6Z, nos itens 02 a 04, a"ai#o, de%e
se ler R)F)AA) e %ice%ersa/
02: =udar a %erso do programa para R)F)AA)/ &ara !a?er isso, e#ecutar Duild, Aet *e!ault
Con!iguration///, escol2er a opo R)F)AA), clicar no "oto OS/ *epois, e#ecutar Duild,
Compile para compilar no%amente o programa/ Zerar o no%o programae#ecut$%el !a?endo Duild,
Duild/
03: Ceri!icar se dentro do diret1rio do projeto tam"+m e#iste um su"diret1rio c2amado
R)F)AA)/
04: )#ecutar o programa atra%+s de Duild, )#ecute/ O no%o resultado + mostrado na Figura 0-/-/
No%amente, os dois tempos de C&6 de%eriam ter e#atamente o mesmo %alor, mas na Figura 0-/-
notase ;ue 2$ uma di!erena entre eles de 5/5,, s/ Comparandose os tempos de processamento,
%eri!icase ;ue a %erso *)D6Z + mais lenta cerca de 43b do ;ue a %erso R)F)AA)/
Figura 0-/- Resultado do programa0-"/!,5 para os dados da Figura 0-/3, %erso R)F)AA)/
0-: )#ecutar no%amente o programa com outros dados e analisar os no%os resultados/ 6tili?ar, por
e#emplo, &AAAOA I 05 mil2@es, 0 mil2o e 0 "il2o/
0H: No Fortran, para !ec2ar o projeto atual, e#ecutar File, Close 'orKspace/
1".3 0ro4r/m/1";.5,&
0: O"jeti%o do progra m a: utili?ar comandos do *OA durante a e#ecuo do programa/
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa0-c
3: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programa0-c/!,5
4: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 0-/3, ;ue + o programa0-c/!,5/
BSE 0%RT<I6
I"0<I7IT '%'E
I'TE,ER +%S
Ta"ela 0-/3 &rograma0-c/!,5
7>&R&7TER(?)) S&I+&, 7%"E'T&RI%
I'TE,ER :: B'IT - ()
+%S - SFSTE"(!'otepad +&+%S.TGT! )
%0E'(=, 1#le - !+&+%S.TGT! )
RE&+(=,) 7%"E'T&RI%
RE&+(=,) S&I+&
7<%SE(=)
%0E'(B'IT, 1#le - S&I+& )
WRITE(B'IT,==) 7%"E'T&RI%, S&I+&
== $%R"&T(=8, !7%"E'T&RI% - !, &?), I
(8, !S&I+& - !, &?) )
7<%SE(B'IT)
/ ed#Mo de comandos no arKu#vo EGE7BT&.6&T
%0E'(B'IT, 1#le - !EGE7BT&.6&T! )
WRITE(B'IT,) !"\+IR 7:ETE"0E$%RTR&'!
WRITE(B'IT,) !7%0F ! 88 TRI"(S&I+&) 88 ! 7:ETE"0E$%RTR&'E! 88 TRI"(S&I+&)
WRITE(B'IT,) !ER&SE ! 88 TRI"(S&I+&)
WRITE(B'IT,) !7+ 7:ETE"0E$%RTR&'E!
WRITE(B'IT,) !RE'&"E !88 TRI"(S&I+&) 88 ! '%.%.TGT!
7<%SE (B'IT)
/ 1#m
+%S - SFSTE" ( !EGE7BT&.6&T! )
+%S - SFSTE"( !'otepad 7:ETE"0E$%RTR&'E'%.%.TGT! )
E'+
-: Coment$rios so"re o programa:
9a: O co m ando do *OA c2a m ado =S*(R + usado para criar um no%o diret1ri o / )le + usado na
!orma:
=S*(R *(R)TOR(O
onde *(R)TOR(O + o nome do diret1rio a ser criado, incluindo o camin2o completo desde a rai?
do Q* 92ard disK: ou dis;uete/ Ae o camin2o no + especi!icado, o diret1rio + criado dentro do
diret1rio no ;ual o comando + e#ecutado/
9": O co m ando do *OA c2a m ado CO&V + usado para copiar um ar;ui%o em outro/ )le + usado na
!orma:
CO&V ARM0 ARM2
onde ARM0 + o nome do ar;ui%o a ser copiado em outro ar;ui%o com o nome de ARM2/ 3unto a
ARM0 e ARM2 de%ese de!inir o diret1rio de cada ar;ui%o, incluindo o camin2o completo desde
a rai? do Q* 92ard disK: ou dis;uete/ Ae os diret1rios e camin2os no so especi!icados, ARM0
de%e e#istir no diret1rio no ;ual o comando + e#ecutado, e ARM2 + gerado no mesmo diret1rio/
9c: O co m ando do *OA c2a m ado )RAA) + us a do para eli m inar ou deletar um ar;ui%o/ )le + usado
na !orma:
)RAA) ARM
onde ARM + o nome do ar;ui%o a ser eliminado/ 3unto a ARM de%ese de!inir o seu diret1rio,
incluindo o camin2o completo desde a rai? do Q* 92ard disK: ou dis;uete/ Ae o diret1rio e
camin2o no so especi!icados, ARM de%e e#istir no diret1rio no ;ual o comando + e#ecutado/
9d: O co m ando do *OA c2a m ado C* + usado para m udar a e#ecuo do progra m a para outro
diret1rio/ )le + usado na !orma:
C* *(R)TOR(O
onde *(R)TOR(O + o nome do diret1rio para o ;ual passa a ser e#ecutado o programa,
incluindo o camin2o completo desde a rai? do Q* 92ard disK: ou dis;uete/ Au"entendese ;ue o
diret1rio e#iste dentro do diret1rio no ;ual o comando + e#ecutado/
9e: O co m ando do *OA c2a m ado R)NA=) + usado para m udar o no m e de um ar;ui% o/ )le + usado
na !orma:
R)NA=) ARM0 ARM2
onde ARM0 + o nome do ar;ui%o e#istente, e ARM2 + o no%o nome/ A;ui %alem os mesmos
coment$rios para ARM0 e ARM2 !eitos no item 9":, acima/
9!: Ao se e#ecutar um ar;ui%o com e#tenso X /DATY, so e#ecutados todos os co m andos *OA
dentro deste ar;ui%o, lin2a por lin2a, de ci m a para "ai# o /
9g: )#emplos de aplicao dos comandos acima so apresentados no programa/
92: )#istem di%ersos outros co m andos do *OA ;ue podem ser e m pregados em !uno do o"jeti%o
desejado/
H: )#ecutar Duild, Compile para compilar o programa/
>: Zerar o programae#ecut$%el !a?endo Duild, Duild/
J: Antes de e#ecutar o programa, + necess$rio criar o ar;ui%o de dados e inserir nele os respecti%os
dados/ No caso do programa0-c/!,5, + necess$rio criar o ar;ui%o X*A*OA/TdTY e inserir os dois
dados ;ue correspondem Ns %ari$%eis CO=)NTAR(O e AA(*A/ 6sar, por e#emplo, os dados
mostrados na Figura 0-/0/
,: Algoritmo do programa:
9a: ocorre a a"ertura do ar;ui%o X*A*OA/TdTY
9": so lidos os dois dados
9c: criase o ar;ui%o o ar;ui%o de sa.daG escre%ese nele os dois dados lidosG e !ec2ase este ar;ui%o
9d: criase o ar;ui%o X)d)C6TA/DATYG dentro dele, so escritas di%ersas instru@es *OAG !ec2ase
este ar;ui%o
9e: acessase o *OA para e#ecutar as instru@es contidas no ar;ui%o X)d)C6TA/DATY
9!: acessase o *OA para a"rir, com o aplicati%o Notepad, o ar;ui%o XNOCO/TdTY locali?ado em
XC:TT)=&TFORTRANTY
05: )#ecutar o programa atra%+s de Duild, )#ecute/ Analisar os resultados/ A Figura 0-/H mostra o
conteOdo do ar;ui%o X)d)C6TA/DATY, gerado pelo programa0-c/!,5G %eri!icar sua e#ist<ncia no
diret1rio do projeto/ A Figura 0-/> mostra os comandos ;ue !oram e#ecutados no *OA, como
resultado da e#ecuo do ar;ui%o X)d)C6TA/DATY/ A Figura 0-/J mostra o conteOdo do ar;ui%o
de resultado do programa0-c/!,5G de%ese notar ;ue seu nome + XNOCO/TdTY e ;ue ele se locali?a
no diret1rio XC:TT)=&TFORTRANTYG %eri!icar sua e#ist<nciaG al+m disso, o ar;ui%o de sa.da !oi
eliminado do diret1rio do projeto/
00: )ncerrar a sesso seguindo o procedi m entopadro /
Figura 0-/H ConteOdo do ar;ui%o X)d)C6TA/DATY gerado pelo programa0-c/!,5/
Figura 0-/> 3anela *OA resultante da e#ecuo do programa0-c/!,5/
Figura 0-/J Resultado da e#ecuo do programa0-c/!,5/
1".4 EXERC.CIOS
)#erc.cio 0-/0
Adaptar o programa0-a/!,5, Ta"ela 0-/0, para:
9a: iniciali?ar uma %ari$%el do tipo caracterG
9": iniciali?ar uma constante do tipo caracterG
9c: iniciali?ar duas %ari$%eis do tipo inteiro numa mesma lin2a de programaG
9d: iniciali?ar duas constantes do tipo inteiro numa mesma lin2a de programaG e
9e: escre%er num ar;ui%o os conteOdos das %ari$%eis e constantes dos itens 9a: a 9d:/
)#erc.cio 0-/2
Adaptar o programa0-"/!,5, Ta"ela 0-/2, para usar a !uno *T(=) junto com T(=)F e comparar o
tempo de C&6 medido por cada !uno/
)#erc.cio 0-/3
Adaptar o programa0-"/!,5, Ta"ela 0-/2, para ;ue a %ari$%el AO=A seja do tipo inteiro/ Notar a reduo
do tempo de C&6 ;ue ocorre/
)#erc.cio 0-/4
Adaptar o programa0-"/!,5, Ta"ela 0-/2, para o"ter e escre%er o tempo de C&6 gasto entre a primeira e a
Oltima c2amada da !uno T(=)F/
)#erc.cio 0-/-
Adaptar o programa0-"/!,5, Ta"ela 0-/2, para incluir, antes da Oltima c2amada da !uno T(=)F, a
instruo
R)A*9W,W: X)spere alguns segundos e pressione a tecla )NT)RY
Analisar o e!eito desta instruo %a?ia no tempo de C&6/
)#erc.cio 0-/H
Adaptar o programa0-c/!,5, Ta"ela 0-/3, %isando generali?ar o nome do diret1rio
XC:TT)=&TFORTRANTY
para ;ual;uer nome ;ue o usu$rio de!ina atra%+s do ar;ui%o de dados/
0,4 Cap.tulo 0H/ =em1ria e su"rotinas 2
C/012u3o 1'. MEMBRIA E SUB*ROTINAS 2
OBJETIVOS DO CAPTULO
)stimar e %eri!icar a mem1ria computacional necess$ria para e#ecutar um programa
6tili?ar su"rotina recursi%a
Controlar o !lu#o de in!orma@es para dentro e para !ora de su"rotinas
Comandos do FORTRAN: *)AFFOCAT), R)C6RA(C), (NT)NT9(N,O6T,(NO6T:
&ara iniciali?ar as ati%idades deste cap.tulo, de%ese acessar o programa Fortran, no 'indo8s,
atra%+s de: Atart, &rograms, Fortran &o8erAtation 4/5, =icroso!t *e%eloper Atudio
1'.1 0ro4r/m/1'/.5,&
0: O"jeti%os do progra m a:
9a: mostrar como estimar a mem1ria computacional necess$ria para e#ecutar um programaG e
9": usar um no%o comando do FORTRAN: *)AFFOCAT)/
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa0Ha
3: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programa0Ha/!,5
4: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 0H/0/
-: Coment$rios so"re o programa:
9a: O co m ando *)AFFOCAT) + usado para eli m inar da m e m 1ria do co m putador %ari$%eis para as
;uais !oi reser%ado m e m 1ria por m eio do co m ando AFFOCAT)/ &ara us$lo "asta a pala%ra
*)AFFOCAT) e, dentro de par<nteses, as di%ersas %ari$%eis separadas por %.rgula/ No +
necess$rio indicar no%a m ente o ta m an2o das %ari$%eis, pois isso j$ + con2ecido do co m ando
AFFOCAT)/ O co m ando *)AFFOCAT) s1 pode ser usado com %ari$%eis cuja m e m 1ria !oi
alocada com o co m ando AFFOCAT )/
9": Na lin2a +E&<<%7&TE ( & ) a %ari$%el A, do tipo inteiro, com N elementos, est$ sendo
eliminada da mem1ria do computador/
9c: A estimati%a da mem1ria necess$ria para e#ecutar um programa pode ser o"tida atra%+s da
seguinte e;uao:
Memria9kB: I
4 W 9
N
int eiro
E N
real simples
: E J W
N
0524
real dupla
E 0W 9L W
N
caracer
: 90H/0:
0,- Cap.tulo 0H/ =em1ria e su"rotinas 2
onde N
i!eiro
, N
real simples
e N
real dupla
representam o nOmero total de elementos de conjuntos ou
matri?es de %ari$%eis do tipo inteiro, real simples e real dupla, respecti%amenteG N
caracer
representa o nOmero total de elementos de %ari$%eis do tipo caracter ;ue tem comprimento ou
nOmero de caracteres igual a L/ *entro do Oltimo par<nteses de%em ser inclu.dos os produtos de
outras %ari$%eis do tipo caracter com outros comprimentos/ Os %alores 4, J e 0 representam o
nOmero de "Btes ;ue cada um dos tipos de %ari$%eis ocupa de mem1ria para um Onico elemento/
O %alor 0524 + um !ator usado para con%erter o nOmero de "Btes em Kilo"Btes 9KD:/
BSE 0%RT<I6
I"0<I7IT '%'E
I'TE,ER .ER, '
Ta"ela 0H/0 &rograma0Ha/!,5
I'TE,ER, &<<%7&T&6<E, +I"E'SI%'(:) :: &
RE&<A, &<<%7&T&6<E, +I"E'SI%'(:) :: 6
7>&R&7TER(=)), &<<%7&T&6<E, +I"E'SI%'(:) :: 7
7>&R&7TER(?)) S&I+&, TEGT%
RE&<A "=, "(, "3, "*
I'TE,ER :: B'IT - ()
WRITE(,) !.er memor#a em uso no pr#me#ro comandoT depo#s cl#Kue Enter!
RE&+(,)
.ER - SFSTE"(!'otepad +&+%S.TGT! )
%0E'(=, 1#le - !+&+%S.TGT! )
RE&+(=,) '
RE&+(=,) S&I+&
7<%SE(=)
&<<%7&TE ( &('), 6('), 7(') )
WRITE(,) !.er memor#a apos &<<%7&TE para &, 6 e 7!
RE&+(,)
& - =
6 - =.)+)
7 - !caracteres!
WRITE(,) !.er memor#a apos atr#3u#cao de valores para &, 6 e 7!
RE&+(,)
31 = N*=.0 / 102=
32 = N*-.0 / 102=
33 = N*1.0*10 / 102=
3= = 31 + 32 + 33
%0E'(B'IT, 1#le - S&I+& )
WRITE(B'IT,) !"emor#a est#mada para &, #nte#ros (]#lo6^tes) - !, "=
WRITE(B'IT,) !"emor#a est#mada para 6, rea#s (]#lo6^tes) - !, "(
WRITE(B'IT,) !"emor#a est#mada para 7, caracteres (]#lo6^tes) - !, "3
WRITE(B'IT,) !"emor#a est#mada para &, 6 e 7 (]#lo6^tes) - !, "*
7<%SE(B'IT)
TEGT% - !'otepad ! 88 S&I+&
.ER - SFSTE"( TEGT% )
+E&<<%7&TE ( & )
WRITE(,) !.er memor#a com 6 e 7!
RE&+(,)
+E&<<%7&TE ( 6 )
WRITE(,) !.er memor#a com 7!
RE&+(,)
+E&<<%7&TE ( 7 )
WRITE(,) !.er memor#a sem &, 6 e 7!
RE&+(,)
E'+
H: )#ecutar Duild, Compile para compilar o programa/
>: Zerar o programae#ecut$%el !a?endo Duild, Duild/
J: Antes de e#ecutar o programa, + necess$rio criar o ar;ui%o de dados e inserir nele os respecti%os
dados/ No caso do programa0Ha/!,5, + necess$rio criar o ar;ui%o X*A*OA/TdTY e inserir os dois
dados ;ue correspondem Ns %ari$%eis N e AA(*A/ 6sar, por e#emplo, os dados mostrados na Figura
0H/0/
,: &ara %er a mem1ria e!eti%amente usada pelo programa, de%ese a"rir o gerenciador de tare!as ou
TasK =anager, e#ecutando:
9a: clicar o "oto do lado direito do mouse so"re a "arra de tare!as do 'indo8s 9":
clicar o "oto do lado es;uerdo do mouse so"re a opo XTasK =anager///Y 9c: clicar
na opo X&rocessesY do menu principal do TasK =anager
Figura 0H/0 )#emplo de ar;ui%o de dados para o programa0Ha/!,5/
05: )#ecutar o programa atra%+s de Duild, )#ecute/
00: Con!orme indica a janela *OA, %er no TasK =anager ;ual a mem1ria inicial ;ue o programa est$
usando/ &ara isso, de%ese selecionar a janela do TasK =anager e encontrar o processo c2amado
programa0Ha/e#e/ Na lin2a deste processo, na Oltima coluna designada por X=em 6sageY, + indicada
a mem1ria em Kilo"Btes 9KD: ;ue o programa est$ usando no momento/ Neste e#emplo, de%e ser de
-J4 KD, como mostrado na Figura 0H/2/ (sso signi!ica ;ue, mesmo sem a"rir mem1ria para %ari$%eis
do tipo conjunto, %etores ou matri?es com o comando AFFOCAT), a e#ecuo de um programa
re;uer uma determinada mem1ria/ )la + necess$ria para guardar as instru@es do programa e os
outros tipos de %ari$%eis/
02: Continuar a e#ecutar o programa0Ha/e#e, mantendo a janela do TasK =anager a"erta para %er a cada
etapa do programa ;uanto de mem1ria ele est$ usando/ *e%ese perce"er ;ue:
9a: ao ser a"erto o ar;ui%o de dados com o aplicati%o Notepad, a mem1ria aumenta para H02 KDG
9": ap1s a leitura dos dados e !ec2amento do aplicati%o Notepad, a mem1ria est$ em H4J KDG
9c: ao ser usado o comando AFFOCAT) com as %ari$%eis A, D e C, a mem1ria so"e para HHJ KDG
isso signi!ica ;ue de !ato no est$ ainda sendo usada a mem1ria para estas %ari$%eis, a no ser
uma indicao das posi@es de mem1ria ;ue sero ocupadasG
9d: ap1s a atri"uio de %alores Ns %ari$%eis A, D e C a mem1ria so"e para 220J4 KDG agora, de !ato,
o espao de mem1ria a"erto com o comando AFFOCAT) para as %ari$%eis A, D e C est$ sendo
usadoG
9e: ap1s a eliminao da %ari$%el A, a mem1ria cai para 0J2>H KDG
9!: ap1s a eliminao das %ari$%eis A e D, a mem1ria cai para 054H5 KDG
9g: ap1s a eliminao das %ari$%eis A, D e C, a mem1ria cai para H>H KDG
92: !inalmente, ;uando surgir na janela *OA 9Figura 0H/3: a !rase X&ress anB KeB to continueY,
signi!ica ;ue o programa !oi encerrado e ele no ocupa mais mem1ria alguma, como se pode %er
no TasK =anager/
Figura 0H/2 =em1ria inicial usada pelo programa0Ha/e#e/
03: A Figura 0H/4 mostra a mem1ria estimada com a );/ 90H/0: para as %ari$%eis A, D e C do
programa0Ha/e#e/ Na Ta"ela 0H/2 temse a comparao entre a mem1ria estimada 9Figura 0H/4: e a
mem1ria e!eti%amente usada, ;ue !oi o"tida do TasK =anager, nos su"itens 9d: a 9g: do item 02,
acima/
04: )#ecutar no%amente o programa com outros %alores para N e analisar os no%os resultados/
0-: No Fortran, para !ec2ar o projeto atual, e#ecutar File, Close 'orKspace/
Figura 0H/3 3anela *OA ap1s a e#ecuo do programa0Ha/e#e/
Figura 0H/4 =em1ria estimada para e#ecutar o programa0Ha/e#e/
Ta"ela 0H/2 Comparao entre mem1ria estimada e e!eti%a para as %ari$%eis A, D e C do
programa0Ha/!,5/
Cari$%el =em1ria usada 9KD: =em1ria estimada 9KD: )rro b
A 3,02 3,5H 5/0-
D >J0H >J02 5/5-
C ,>J4 ,>HH 5/0J
A, D e C 20-5J 204J4 5/00
1'.2 0ro4r/m/1'=.5,&
0: O"jeti%os do progra m a:
9a: utili?ar su"rotina recursi%aG e
9": usar um no%o comando do FORTRAN: R)C6RA(C)
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa0H"
3: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programa0H"/!,5
4: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 0H/3/
-: Coment$rios so"re o programa:
9a: )m algu m as aplica@es pode ser necess$rio ;ue u m a su"rotina ten2a ;ue c2a m ar ela pr1pria/
Neste caso, na de!inio da su"rotina + necess$rio usar o co m ando XR)C6RA(C)Y antes do
no m e da su"rotina/ 6m e#emplo + dado no programa0H"/!,5 na lin2a RE7BRSI.E SB6R%BTI'E
TESTE
9": A c2a m ada da su"rotina + !eita da !or m a j$ descrita no cap.tulo 02, isto +, usando o co m ando
CAFF seguido do no m e da su"rotina/ 6m e#emplo + dado no programa0H"/!,5 na lin2a 7&<<
TESTE
0R%,R&" RE7BRSI.%
I'TE,ER S%"&, \, I, "E'%S
S%"& - )
"E'%S - )
Ta"ela 0H/3 &rograma0H"/!,5
+% I - =, (
WRITE(,) !"&I'8c#clo: I,\,S%"&,"E'%S-!, I, \, S%"&, "E'%S
\ - *
7&<< TESTE
E'+ +%
WRITE(,) !"&I'81ora do c#clo: \, S%"&, "E'%S - !, \, S%"&, "E'%S
7%'T&I'S
/ :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
RE7BRSI.E SB6R%BTI'E TESTE
I$ ( \ -- = ) T>E'
WRITE(,) !R%TI'&,I$: \-=, S%"&, "E'%S - !, \, S%"&, "E'%S
E<SE
S%"& - S%"& 9 =
\ - \ : =
WRITE(,) !R%TI'&,E<SE: \, S%"&, "E'%S - !, \, S%"&, "E'%S
7&<< TESTE
"E'%S - "E'%S : =
WRITE(,) !R%TI'&,&0%S 7&<<: \, S%"&, "E'%S - !, \, S%"&, "E'%S
E'+ I$
E'+ SB6R%BTI'E TESTE
/ :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
E'+ 0R%,R&" RE7BRSI.%
H: )#ecutar Duild, Compile para compilar o programa/
>: Zerar o programae#ecut$%el !a?endo Duild, Duild/
J: Algorit m o do progra m a:
9a: de!ini@es iniciais de %ari$%eis e suas atri"ui@es
9": no programa principal, iniciase um ciclo para a %ari$%el (
9c: dentro deste ciclo, c2amase a su"rotina T)AT), do tipo recursi%a
9d: dentro da su"rotina T)AT), so e#ecutados uma condio e alguns comandos, e c2amase a
pr1pria su"rotina T)AT)
9e: a su"rotina T)AT) continua a c2amar ela pr1pria at+ ;ue seja satis!eita a condio
9!: em seguida, comease a retornar para !ora da su"rotina T)AT) tantas %e?es ;uanto ela !oi
c2amada por ela pr1pria, desde a Oltima c2amada at+ a primeira
9g: !inalmente, retornase ao programa principal e encerrase a sua e#ecuo
,: )#ecutar o programa atra%+s de Duild, )#ecute/ O resultado + mostrado na Figura 0H/-/ Analisar os
resultados/
05: Alterar os %alores do ciclo ( e de S no programa principal/ )#ecutar no%amente o programa e
analisar os no%os resultados/
00: No Fortran, para !ec2ar o projeto atual, e#ecutar File, Close 'orKspace/
1'.3 0ro4r/m/1';.5,&
0: O"jeti%os do progra m a:
9a: controlar o !lu#o de in!orma@es para dentro e para !ora de su"rotinasG e
9": usar um no%o comando do FORTRAN: (NT)NT com par7metros (N, O6T e (NO6T/
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa0Hc
3: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
programa0Hc/!,5
Figura 0H/- Resultado do programa0H"/!,5/
4: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 0H/4/
-: Coment$rios so"re o programa:
9a: O uso do co m ando (=&F(C(T NON) no progra m aprincipal o"riga ;ue sejam declaradas
e#plicita m ente todas as %ari$%eis usadas no p r ogra m aprincipal e em todas as su"rotinas do
m es m o progra m a/ Caso contr$rio, ocorrer$ erro de compilao/
9": Todas as %ari$%eis de!inidas no progra m aprincipal so %$lidas dentro das su"rotinas do progra m a/
)las so c2a m adas de %ari$%eis glo"ais/ &or e#emplo, as %ari$%eis A, D, C, *, ) e F do
programa0Hc/!,5, de!inidas na lin2a I'TE,ER &, 6, 7, +, E, $, so %ari$%eis glo"ais do
programa/
9c: As %ari$%eis de!inidas dentro de u m a su"r o tina so %$lidas so m ente dentro da pr1pria su"
rotina/ )las so c2a m adas de %ari$%eis locais/ Aeus %alores ou conteOdos podem ser passados
para outras su"rotinas ou para o progra m aprincipal atra%+s dos argu m entos da su"rotina/ &or
e#emplo, as %ari$%eis R e A do programa0Hc/!,5, de!inidas na lin2a I'TE,ER R, S, so
%ari$%eis locais da su"rotina T)AT)/
9d: Todas as atri"ui@es !eitas a %ari$%eis glo"ais so recon2ecidas dentro das su"rotinas do
progra m a/
9e: Todas as atri"ui@es !eitas a %ari$%eis loca is no so recon2ecidas !ora das su"rotinas do
progra m a/
0R%,R&" 7&0ITB<%V=;7
I"0<I7IT '%'E
I'TE,ER &, 6, 7, +, E, $
Ta"ela 0H/4 &rograma0Hc/!,5
WRITE(,) !Entre com o valor de & (#nte#ro)!
RE&+(,) &
WRITE(,) !Entre com o valor de 6 (#nte#ro)!
RE&+(,) 6
C = 100
D = A
E = B
> = A + B
WRITE(,) !no programa pr#nc#pal, antes da su3:rot#na: 7 - =)) - !, 7
WRITE(,) !no programa pr#nc#pal, antes da su3:rot#na: $ - &96 - !, $
7&<< S%"& ( &, 6, 7, +, E )
WRITE(,) !no programa pr#nc#pal, depo#s da su3:rot#na: $ - ((&96) - !, $
WRITE(,) !no programa pr#nc#pal, depo#s da su3:rot#na: 7 - &96 - !, 7
/ :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
7%'T&I'S
/ :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
SB6R%BTI'E S%"& ( G, F, Y, T, R )
I'TE,ER, I'TE'T(I') :: G, F
I'TE,ER, I'TE'T(%BT) :: Y
I'TE,ER, I'TE'T(I'%BT) :: T
I'TE,ER R, S
S - ?)
WRITE(,) !dentro da su3:rot#na: S - ?) - !, S
WRITE(,) !dentro da su3:rot#na: Y - 7 - !, Y
Y - G 9 F
WRITE(,) !dentro da su3:rot#na: Y - &96 - !, Y
WRITE(,) !dentro da su3:rot#na: T - & - !, T
T - T 9 =)
R - R 9 =)
WRITE(,) !dentro da su3:rot#na: T - &9=) - !, T
WRITE(,) !dentro da su3:rot#na: R - 69=) - !, R
WRITE(,) !dentro da su3:rot#na: $ - &96 - !, $
WRITE(,) !dentro da su3:rot#na: & - !, &
$ - ( $
WRITE(,) !dentro da su3:rot#na: $ - ((&96) - !, $
E'+ SB6R%BTI'E S%"&
/ :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
E'+ 0R%,R&" 7&0ITB<%V=;7
9!: O co m ando (NT)NT + usado para controlar o !lu#o de in!or m a@es para dentro e para !ora das
su"rotinas/ )le + usado ;uando se de!ine cada %ari$%el e m pregada co m o argu m ento das su"
rotinas/
9g: O co m ando (NT)NT + utili?ado com tr<s par7 m etros 9(N, O6T e (NO6T: ;ue de!inem o sentido
do !lu#o da in!or m a o/
92: O co m ando (NT)NT9(N: per m ite ;ue a %ari$%el apenas rece"a in!or m ao de !ora da su"rotin a/
6m e#emplo + dado no programa0Hc/!,5 na lin2a I'TE,ER, I'TE'T(I') :: G, F/ As
%ari$%eis d e V s1 podem rece"er in!ormao de !ora da su"rotina T)AT)/ A tentati%a de
atri"uir %alor a elas dentro da su"rotina gerar$ erro de compilao/ =as elas podem ser
empregadas em e#press@es dentro da su"rotina, como na lin2a Y - G 9 F
9i: O co m ando (NT)NT9O6T: per m ite ;ue a %ari$%el apenas en%ie in!or m ao para !ora da su"
rotina/ 6m e#emplo + dado no programa0Hc/!,5 na lin2a I'TE,ER, I'TE'T(%BT) :: Y/ A
%ari$%el \ s1 pode en%iar in!ormao para !ora da su"rotina T)AT)/
9j: O co m ando (NT)NT9(NO6T: per m ite ;ue a %ari$%el rece"a in!or m ao de !ora da su"rotina e
ta m "+m ;ue ela en%ie in!or m ao para !ora da su"rotin a/ 6m e#emplo + dado no
programa0Hc/!,5 na lin2a I'TE,ER, I'TE'T(I'%BT) :: T/ A %ari$%el T pode rece"er e en%iar
in!ormao na su"rotina T)AT)/
9K: Muando no se usa o co m ando (NT)NT nu m a %ari$ % el ;ue + argu m ento de u m a su"rotina, por
de!ault, assu m ese im plicita m ente ;ue ela !oi de!inida co m o (NT)NT9(NO6T:/ 6m e#emplo +
dado no programa0Hc/!,5 na lin2a I'TE,ER R, S, mas apenas para a %ari$%el R, uma %e? ;ue a
%ari$%el A no + argumento da su"rotina T)AT)/
9l: Reco m endase o uso do co m ando (NT)NT/ )le e%ita erros de l1gica, principal m ente em
progra m as grandes com m uitas %ari$%eis/
9m: Reco m endase usar co m o %ari$%eis glo"ais a p enas a;uelas ;ue so e!eti%a m ente usadas no
progra m aprincipal/ Cari$%eis utili?adas em su"rotinas de%em ser de ! i nidas apenas nas pr1prias
su"rotinas/
H: )#ecutar Duild, Compile para compilar o programa/
>: Zerar o programae#ecut$%el !a?endo Duild, Duild/
J: )#ecutar o programa atra%+s de Duild, )#ecute, usando por e#emplo A I 0 e D I 2/ O resultado +
mostrado na Figura 0H/H/ Analisar os resultados considerando os coment$rios do item -/
,: )#ecutar no%amente o programa com outros %alores para A e D, e analisar os no%os resultados/
05: )ncerrar a sesso seguindo o procedimentopadro/
Figura 0H/H Resultado do programa0Hc/!,5/
1'.4 EXERC.CIOS
)#erc.cio 0H/0
)stimar e %eri!icar a mem1ria computacional necess$ria para usar uma matri? "idimensional, cujos
elementos so do tipo inteiro, com d0 por V0 elementos/
)#erc.cio 0H/2
)stimar e %eri!icar a mem1ria computacional necess$ria para usar uma matri? "idimensional, cujos
elementos so do tipo real dupla, com d2 por V2 elementos/
)#erc.cio 0H/3
)stimar e %eri!icar a mem1ria computacional necess$ria para usar uma matri? "idimensional, cujos
elementos so do tipo caracter, cada um com 055 caracteres, com d3 por V3 elementos/
)#erc.cio 0H/4
3untar as matri?es dos e#erc.cios 0H/0 a 0H/3 num Onico programa para estimar e %eri!icar a mem1ria
computacional total ;ue + necess$ria para as tr<s matri?es/
)#erc.cio 0H/-
Adaptar a su"rotina FATOR(AF, da Ta"ela 02/4, do cap.tulo 02, para ser uma su"rotina do tipo
recursi%a/ ) implementar um programaprincipal para ela/
)#erc.cio 0H/H
Adaptar o programa02d, Ta"ela 02/>, do cap.tulo 02, para:
9a: usar onde pertinente o comando (NT)NT com (N, O6T e (NO6TG
9": usar o comando (=&F(C(T NON) no programaprincipalG
9c: ter uma su"rotina com a !inalidade de ler os dados de um ar;ui%oG
9d: ter uma su"rotina com a !inalidade de escre%er os resultados num ar;ui%oG e
9e: ter uma su"rotina com a !inalidade de a"rir os ar;ui%os de dados e de sa.da com o aplicati%o
Notepad/
)#erc.cio 0H/>
Adaptar o programa0Hc/!,5, Ta"ela 0H/4, deste cap.tulo, para ter como argumentos da su"rotina T)AT)
%ari$%eis do tipo real dupla, caracteres e um conjunto unidimensional 9%etor: com elementos do tipo
inteiro/
25J Cap.tulo 0>/ =1dulos
C/012u3o 1). MBDULOS
OB(ETIVOS DO CAP.TULO
6tili?ar m1dulos
Comandos do FORTRAN: =O*6F), )N* =O*6F), &R(CAT), &6DF(C
&ara iniciali?ar as ati%idades deste cap.tulo, de%ese acessar o programa Fortran, no 'indo8s,
atra%+s de: Atart, &rograms, Fortran &o8erAtation 4/5, =icroso!t *e%eloper Atudio
1).1 0ro4r/m/1)/.5,&
0: O"jeti%os do progra m a:
9a: e#empli!icar o uso e as caracter.sticas "$sicas de m1dulos em FORTRANG e
9": usar dois no%os comandos do FORTRAN: =O*6F), )N* =O*6F)/
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa0>a
3: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte dados/!,5
4: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 0>/0/
-: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte saida/!,5
H: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 0>/2/
>: No Fortran, seguindo o procedi m entopadro , criar e inserir no projeto o programa!onte
principal/!,5
J: *entro do espao de edio do Fortran, na su"janela maior, copiar e#atamente o te#to em %ermel2o
mostrado na Ta"ela 0>/3/
,: Coment$rios so"re o programa:
9a: 6m m 1dulo + pratica m ente igual a um progra m aprincipal/ A maior di!erena + ;ue num m1dulo
no se pode ter comandos e#ecut$%eis antes do comando CONTA(NA, ao contr$rio do ;ue
ocorre num programaprincipal/
9": A de!inio de m 1dulo em FORTRAN de%e seguir a sinta#e m ostrada na Ta"ela 0>/4/ O no m e
do m 1dulo segue as regras %$lidas para %ari$%eis em FORTRAN, no podendo ser igual a
nen2um outro no m e de m 1dulo, %ari$%el ou su"r o tina do progra m a/ No caso de no 2a%er su"
rotinas num m 1dulo, o co m ando CONTA(NA no de%e ser usadoG um e#e m plo disso + um
m 1dulo usado para de!inir as %ari$%eis glo"ais do progra m a/
9c: O uso de m1dulos !acilita muito a estruturao de programas de grande porte pr1prios/
25, Cap.tulo 0>/ =1dulos
9d: &ara no 2a%er pro"lemas com de!inio de %ari$%eis, de%ese usar o comando (=&F(C(T
NON) dentro de cada m1dulo/
9e: 6m m 1dulo pode ser usado dentro de u m a su"rotina, de outro m 1dulo ou dentro de um
progra m aprincipal atra%+s do co m ando 6A) seguido do no m e do m 1dulo/
9!: *entro de um m 1dulo, as %ari$%eis de!inidas antes do co m ando CONTA(NA so recon2ecidas
por todas as su"rotinas do m 1dulo, ou seja, e l as so %ari$%eis glo"ais do m 1dulo onde esto
de!inidas/
9g: 6m progra m a!onte pode conter um ou %$rios m 1dulos em se;L<ncia/
92: A co m pilao dos progra m as!onte ;ue cont<m m 1dulos de%e ser !eita na seguinte orde m : 90: os
m 1dulos ;ue no dependem de outrosG 92: os m 1dulos ;ue dependem de outrosG e 93: o
progra m aprincipal/
05: )#ecutar Duild, Compile para compilar o programa!onte dados/!,5/ Repetir para saida/!,5 e
principal/!,5, nesta ordem/
00: Zerar o programae#ecut$%el !a?endo Duild, Duild/
"%+B<E +&+%S
I"0<I7IT '%'E
RE&<A I, C
7%'T&I'S
SB6R%BTI'E <EV+&+%S
Ta"ela 0>/0 &rograma!onte dados/!,5
WRITE(,) !Entre com o valor de I!
RE&+(,) I
WRITE(,) !Entre com o valor de C!
RE&+(,) C
E'+ SB6R%BTI'E <EV+&+%S
E'+ "%+B<E +&+%S
02: )#ecutar o programa atra%+s de Duild, )#ecute/ 6sar, por e#emplo, os %alores 0 e 2 para as %ari$%eis (
e 3, respecti%amente/ Neste caso, os resultados da e#ecuo de%em ser os mostrados nas Figuras 0>/0 e
0>/2/
03: Analisar os resultados mostrados nas Figuras 0>/0 e 0>/2 considerando os tr<s programas!onte e os
coment$rios do item ,, acima/
04: No Fortran, para !ec2ar o projeto atual, e#ecutar File, Close 'orKspace/
"%+B<E S&I+&
BSE +&+%S
I"0<I7IT '%'E
RE&<A \
7%'T&I'S
SB6R%BTI'E 7&<7B<%S
\ - I 9 C
E'+ SB6R%BTI'E 7&<7B<%S
SB6R%BTI'E RESB<T&+%S
BSE 0%RT<I6
I'TE,ER .ER
I'TE,ER 7
7>&R&7TER(()) 6
6 - !teste de 1ortran!
7 - @
Ta"ela 0>/2 &rograma!onte saida/!,5
%0E'(=, 1#le - !S&I+&.TGT! )
WRITE(=,3) I, C, \
3 $%R"&T( (8, !I - !, =0E=).3, I
(8, !C - !, =0E=).3, I
(8, !\ - !, =0E=).3 )
WRITE(=,*) 6, 7
* $%R"&T(=8, ?G, &, !- 6!, I
(8, ?G, I?, !- 7! )
7<%SE(=)
.ER - SFSTE"(!'otepad S&I+&.TGT! )
E'+ SB6R%BTI'E RESB<T&+%S
E'+ "%+B<E S&I+&
0R%,R&" 0R%,R&"&=@&
BSE S&I+&
I"0<I7IT '%'E
7&<< <EV+&+%S
7&<< 7&<7B<%S
7&<< RESB<T&+%S
Ta"ela 0>/3 &rograma!onte principal/!,5
WRITE(,) !I, C, \ - !, I, C, \
E'+ 0R%,R&" 0R%,R&"&=@&
"%+B<E '%"E
Ta"ela 0>/4 Ainta#e de um m1dulo em FORTRAN/
comandos BSE e EGTER'&<
de1#n#MNes de var#5ve#s
7%'T&I'S
su3:rot#nas
E'+ "%+B<E '%"E
1).2 0ro4r/m/1)=.5,&
0: O"jeti%o do progra m a: entender o uso de m1dulos num programa composto por ;uatro m1dulos/
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa0>"
3: Acessar o site !tp:^^!tp/de m ec/u!pr/"r^*isciplinas^T m >J4^progra m a0>"^
Figura 0>/0 Ar;ui%o com resultados do programa0>a/e#e/
Figura 0>/2 3anela *OA ap1s a e#ecuo do programa0>a/e#e/
4: Clicar com o "oto do lado direito do mouse so"re o ar;ui%o calculos/!,5
-: )scol2er a opo Aa%e Target As
H: Na opo Aa%e in, locali?ar o diret1rio do projeto
>: Clicar no "oto Aa%e
J: Repetir os itens 4 a >, acima, para os ar;ui%os dados/!,5, dados/t#t, modulo/!,5, resultados/!,5 e
%aria%eis/!,5
,: Coment$rios so"re o programa:
9a: )le + composto por ;uatro m1dulos, sendo cada um editado num programa!onte/
9": O m1dulo CAR(AC)(A + usado para de!inir todas as %ari$%eis usadas no programa/
9c: O programaprincipal incorpora apenas o m1dulo R)A6FTA*OA/ =as este, tem incorporado
dentro de si o m1dulo CAFC6FOA, ;ue incorpora o m1dulo *A*OA, ;ue !inalmente incorpora
o m1dulo CAR(AC)(A/ Assim, todos os m1dulos esto tam"+m implicitamente inseridos dentro
do programaprincipal/ A ordem de compilao de%e ser a in%ersa desta se;L<ncia/
05: )studar os ;uatro m1dulos e o programaprincipal considerando os coment$rios do item , desta
seo e da anterior/
00: )#ecutar Duild, Compile para compilar o programa!onte %aria%eis/!,5/ Repetir para dados/!,5,
calculos/!,5, resultados/!,5 e principal/!,5, nesta ordem/
02: Zerar o programae#ecut$%el !a?endo Duild, Duild/
03: )#ecutar o programa atra%+s de Duild, )#ecute/ 6sar, os dados con!orme mostrado na Figura
0>/3/
04: Analisar os resultados mostrados na Figuras 0>/4/
Figura 0>/3 Ar;ui%o de dados do programa0>"/e#e/
Figura 0>/4 Ar;ui%o de resultados do programa0>"/e#e/
0-: )#ecutar no%amente o programa usando tipo]de]calculo I 2 e analisar os no%os resultados/
0H: )#ecutar no%amente o programa usando tipo]de]calculo I 3 e analisar os no%os resultados/
0>: No Fortran, para !ec2ar o projeto atual, e#ecutar File, Close 'orKspace/
1).3 0ro4r/m/1);.5,&
0: O"jeti%os do progra m a:
9a: de!inir %ari$%eis pO"licas e pri%adas em m1dulosG
9": usar dois no%os comandos do FORTRAN: &6DF(C e &R(CAT)G e
9c: entender o uso de m1dulos com %ari$%eis pO"licas e pri%adas num programae#emplo/
2: No Fortran, seguindo o procedi m entopadro , criar um projeto com o nome programa0>c
3: Acessar o site !tp:^^!tp/de m ec/u!pr/"r^*isciplinas^T m >J4^progra m a0>c^
4: Clicar com o "oto do lado direito do mouse so"re o ar;ui%o "ase/!,5
-: )scol2er a opo Aa%e Target As
H: Na opo Aa%e in, locali?ar o diret1rio do projeto
>: Clicar no "oto Aa%e
J: Repetir os itens 4 a >, acima, para os ar;ui%os "ase2/!,5 e main/!,5
,: Coment$rios so"re o programa:
9a: *ois no%os co m andos do FORTRAN, associados ao uso de m 1dulos, so usados neste progra m a:
&6DF(C e &R(CAT )/
9": O co m ando &R(CAT) + e m pregado para de!inir u m a %ari$%el co m o pri%ati%a do m 1dulo no ;ual
ela + de!inida/ Ou seja, ela s1 + recon2ecida pelas su"rotinas de!inidas dentro do pr1prio
m1dulo/ )la no + recon2ecida como %ari$%el dentro de outros m1dulos ou do programa
principal ;ue utili?em o m1dulo no ;ual ela est$ de!inida/ 6m e#emplo + dado na lin2a
#nteger,pr#vate :: ' do m1dulo &R(=)(RO: a %ari$%el N s1 + recon2ecida como tal dentro
do m1dulo &R(=)(ROG o mesmo ocorre com a %ari$%el R/ As %ari$%eis R e N do m1dulo
A)Z6N*O so di!erentes das %ari$%eis R e N do m1dulo &R(=)(RO/
9c: O co m ando &6DF(C + e m pregado para de!inir u m a %ari$%el co m o glo"a l/ (sto +, ela +
recon2ecida pelas su"rotinas de!inidas dentro do pr1prio m1dulo, e tam"+m dentro de outros
m1dulos ou do programaprincipal ;ue utili?em o m1dulo no ;ual ela est$ de!inida/ 6m e#emplo
+ dado na lin2a #nteger,pu3l#c :: \ do m1dulo &R(=)(RO: a %ari$%el S + recon2ecida
como tal dentro do m1dulos &R(=)(RO e A)Z6N*O, e do programaprincipal/
9d: Todas as %ari$%eis de!inidas num m 1dulo antes do co m ando CONTA(NA so assu m i das co m o
&6DF(C, a m enos ;ue sejam e#plicita m ente de!inidas co m o &R(CAT )/ 6m e#emplo + dado na
lin2a #nteger :: < do m1dulo &R(=)(RO: a %ari$%el F + entendida como &6DF(C/
9e: =as todas as %ari$%eis de!inidas nu m a su"rotina so assu m i das co m o &R(CAT)/
05: )studar os dois m1dulos e o programaprincipal considerando os coment$rios do item , desta
seo e da seo 0>/0/
00: )#ecutar Duild, Compile para compilar o programa!onte "ase/!,5/ Repetir para "ase2/!,5 e
main/!,5, nesta ordem/
02: Zerar o programae#ecut$%el !a?endo Duild, Duild/
03: )#ecutar o programa atra%+s de Duild, )#ecute/ O resultado de%e ser o mostrado na Figura 0>/-/
04: Analisar os resultados/
0-: )ncerrar a sesso seguindo o procedimentopadro/
Figura 0>/- Ar;ui%o com resultados do programa0>c/e#e/
1).4 EXERC.CIOS
)#erc.cio 0>/0
9a: Trans!ormar o programa02d/!,5 num m1dulo/
9": Fa?er o mesmo para o programa0Hc/!,5/
9c: Criar um programaprincipal para e#ecutar as rotinas destes dois m1dulos/
20H Cap.tulo 0J/ Aoluo de s+ries e ra.?es de e;ua@es
C/012u3o 1+. SOLU$O DE SCRIES E RA.#ES DE E>UA!ES
OBJETIVOS DO CAPTULO
Calcular o resultado de s+ries in!initas
Aplicar os m+todos de iterao linear, "isseo e Ne8ton para determinar ra.?es de e;ua@es
Re%isar o uso de ar;ui%os de dados e de resultados, Notepad e 'gnuplot
Alterar dinamicamente ar;ui%o de comandos do programa de gr$!icos 'gnuplot e usar no%os
comandos
&ara iniciali?ar as ati%idades deste cap.tulo, de%ese acessar o programa Fortran, no 'indo8s,
atra%+s de: Atart, &rograms, Fortran &o8erAtation 4/5, =icroso!t *e%eloper Atudio
1+.1 0ro4r/m/1+/.5,&
0: O"jeti%os do progra m a:
9a: e#empli!icar o c$lculo do resultado de s+ries in!initasG
9": re%isar o uso de ar;ui%os de dados e de resultados, Notepad e 'gnuplotG e
9c: alterar dinamicamente ar;ui%o de comandos do programa de gr$!icos 'gnuplot e usar no%os
comandos/
2: No Fortran, seguindo o procedi m entopadr o , criar um projeto com o nome projeto]0J
3: Acessar o site !tp:^^!tp/de m ec/u!pr/"r^*isciplinas^T m >J4^projeto]0J
4: Clicar com o "oto do lado direito do mouse so"re o ar;ui%o programa0Ja/!,5
-: )scol2er a opo Copiar para pasta/// 9Aa%e Target As:
H: Focali?ar a pasta do projeto
>: Clicar no "oto OS
J: Repetir os itens 3 a >, acima, para os ar;ui%os dados0Ja/t#t, comandos0Ja/gnu, 'gnuplot/e#e
,: No Fortran, seguindo o procedi m entopadr o , inserir no projeto o programa!onte
programa0Ja/!,5, mostrado na Ta"ela 0J/0.
05: )studar o programaprincipal considerando os coment$rios do item 00, a"ai#o/
00: Coment$rios so"re o programa:
9a: O programa0Ja/!,5 + composto pelo programaprincipal e seis su"rotinas/
9": A su"rotina *A*OA + usada para ler os dados do programa do ar;ui%o dados0Ja/t#t/
9c: A su"rotina A)R()]0 + usada para calcular a soma dos N termos da seguinte s+rie geom+trica
in!inita:

90J/0:
9d: A su"rotina A)R()]2 + usada para calcular o %alor de atra%+s da soma dos N termos da
seguinte s+rie in!inita:
9e: A su"rotina A)R()]3 + usada para calcular o %alor do nOmero e atra%+s da soma dos N termos
da seguinte s+rie in!inita, onde cada termo en%ol%e a su"rotina FATOR(AF:
9!: As su"rotinas das tr<s s+ries tam"+m calculam o erro para a soluo e#ata e escre%em no
ar;ui%o saida0Ja/t#t o nOmero e %alor de cada termo da s+rie, a soma dos termos e o erro/
9g: A su"rotina ZRAF(CO: a"re o ar;ui%o comandos0Ja/gnuG pula as sete primeiras lin2as deste
ar;ui%oG na oita%a lin2a, escre%e um coment$rio para representar o t.tulo do gr$!ico de acordo
com a s+rie escol2ida para c$lculoG na nona lin2a, escre%e outro coment$rio, ;ue + o comando
replot do 'gnuplotG !inalmente, esta su"rotina e#ecuta o programa 'gnuplot para !a?er o
gr$!ico semilog do erro do c$lculo da s+rie escol2ida, em !uno do nOmero de termos N usado/
92: O programaprincipal: c2ama a su"rotina *A*OAG cria o ar;ui%o saida0Ja/t#tG escre%e nele um
coment$rio na primeira lin2a para indicar o signi!icado de cada coluna de resultadosG o s.m"olo
# + usado para in!ormar ao 'gnuplot ;ue a lin2a + apenas um coment$rio, e no dados para o
gr$!icoG dependendo do tipo de s+rie escol2ida pelo usu$rio + c2amada a su"rotina ade;uadaG o
Notepad a"re o ar;ui%o de sa.daG e, + c2amada a su"rotina para !a?er o gr$!ico do erro/
02: )#ecutar Duild, Compile para compilar o programa/
03: Zerar o programae#ecut$%el !a?endo Duild, Duild.
04: )#ecutar o programa atra%+s de Duild, )#ecute/ 6sar, os dados mostrados na Figura 0J/0.
program ser#es
use portl#3
Ta"ela 0J/0 &rograma0Ja/!,5
#mpl#c#t none
#nteger :: #, n, ver, t#poVser#e
realA :: soma, eDato, erro, termo
call dados
open(;,1#le-!sa#da=Aa.tDt!)
[r#te(;,=))
=) 1ormat(!_ #!, t=@,!termo!, t*@,!soma!, t@@,!erro!)
select case ( t#poVser#e )
case ( = )
call ser#eV=
case ( ( )
call ser#eV(
case ( 3 )
call ser#eV3
end select
close(;)
ver - s^stem (!'otepad sa#da=Aa.tDt!)
call gra1#co
/:::::::::::::::::::::::::::::::::::::::::::::::::
conta#ns
/:::::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne dados
ver - s^stem (!'otepad dados=Aa.tDt!)
open(?,1#le-!dados=Aa.tDt!)
read(?,) t#poVser#e
read(?,) n
close(?)
end su3rout#ne dados
/:::::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne ser#eV=
/ calcula soma de uma sUr#e geomUtr#ca
eDato - =
soma - )
do # - =, n
termo - =.)d) 8 ( (.)d) # )
soma - soma 9 termo
erro - da3s(eDato : soma)
[r#te(;,=)) #, termo, soma, erro
=) 1ormat( #A, 3(=pe3).=?e3) )
end do
end su3rout#ne ser#eV=
/:::::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne ser#eV(
/ calcula soma da sUr#e de p#
eDato - dacos(:=.)d))
soma - )
do # - ), n
termo - *.)d) ((:=)#) 8 ( (.)d) # 9 = )
soma - soma 9 termo
erro - da3s(eDato : soma)
[r#te(;,=)) #, termo, soma, erro
=) 1ormat( #A, 3(=pe3).=?e3) )
end do
end su3rout#ne ser#eV(
/:::::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne ser#eV3
/ calcula soma da sUr#e de e
realA 1ator#alV#
eDato - deDp(=.)d))
soma - )
do # - ), n
call 1ator#al ( #, 1ator#alV#)
termo - = 8 1ator#alV#
soma - soma 9 termo
erro - da3s(eDato : soma)
[r#te(;,=)) #, termo, soma, erro
=) 1ormat( #A, 3(=pe3).=?e3) )
end do
end su3rout#ne ser#eV3
/:::::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne 1ator#al(Q,1at)
/ calcula o 1ator#al de Q
#nteger Q
realA 1at, ]
1at - =
do ] - (, Q
1at - 1at ]
end do
end su3rout#ne 1ator#al
/:::::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne gra1#co
#nteger ]
open(2,1#le-!comandos=Aa.gnu!)
do ] - =, @
read(2,)
end do
select case ( t#poVser#e )
case ( = )
[r#te(2,) !set t#tle `sUr#e geomUtr#ca`!
case ( ( )
[r#te(2,) !set t#tle `sUr#e de p#`!
case ( 3 )
[r#te(2,) !set t#tle `sUr#e de e`!
end select
[r#te(2,) !replot!
close(2)
ver - s^stem (!Wgnuplot comandos=Aa.gnu!)
end su3rout#ne gra1#co
/:::::::::::::::::::::::::::::::::::::::::::::::::
end program ser#es
Figura 0J/0 Ar;ui%o de dados do programa0Ja/!,5/
0-: Analisar os resultados mostrados nas Figuras 0J/2 e 0J/3/
0H: )#ecutar no%amente o programa usando tipo]serie I 2 e analisar os no%os resultados/
0>: )#ecutar no%amente o programa usando tipo] serie I 3 e analisar os no%os resultados/
0J: )#ecutar no%amente o programa usando outros dados e analisar os no%os resultados/
Figura 0J/2 &arte do ar;ui%o de resultados do programa0Ja/!,5 para os dados da Fig/ 0J/0/
Figura 0J/3/ Zr$!ico com resultados do programa0Ja/!,5 para os dados da Fig/ 0J/0/
1+.2 0ro4r/m/1+=.5,&
0: O"jeti%o do progra m a: para uma e;uao ;uadr$tica espec.!ica, aplicar os m+todos de iterao linear,
"isseo e Ne8ton para determinar suas ra.?es/
2: Nesta seo ser$ usado o mesmo projeto da seo anterior/ &ortanto, de%ese e#ecutar o seguinte no
Fortran:
a: Clicar so"re o nome do programa!onte/
": )dit, Cut para retirar o programa!onte do projeto/
c: Clicar dentro do campo de edio de programa!onte/
d: File, Close/
3: Acessar o site !tp:^^!tp/de m ec/u!pr/"r^*isciplinas^T m >J4^projeto]0J
4: Clicar com o "oto do lado direito do mouse so"re o ar;ui%o programa0J"/!,5
-: )scol2er a opo Copiar para pasta/// 9Aa%e Target As:
H: Focali?ar a pasta do projeto
>: Clicar no "oto OS
J: Repetir os itens 3 a >, acima, para os ar;ui%os dados0J"/t#t e comandos0J"/gnu
,: No Fortran, seguindo o procedi m entopadr o , inserir no projeto o programa!onte programa0J"/!,5,
mostrado na Ta"ela 0J/2/
05: )studar o programaprincipal considerando os coment$rios do item 00, a"ai#o/
00: Coment$rios so"re o programa:
9a: O programa0J"/!,5 + composto pelo programaprincipal e cinco su"rotinas/
9": &ara as su"rotinas *A*OA e ZRAF(CO e o programaprincipal %alem os mesmos coment$rios
da seo anterior, e#ceto ;ue os ar;ui%os en%ol%idos so agora dados0J"/t#t, comandos0J"/gnu
e saida0J"/t#t/
9c: As su"rotinas F(N)AR, D(AA)CAO e N)'TON resol%em a e;uao
"
#
$" + % = 0
90J/4:
atra%+s dos m+todos de iterao linear, "isseo e Ne8ton para determinar suas ra.?es/ *etal2es
so"re estes m+todos podem ser encontrados na maioria dos li%ros de c$lculo num+rico/
02: )#ecutar Duild, Compile para compilar o programa/
03: Zerar o programae#ecut$%el !a?endo Duild, Duild.
04: )#ecutar o programa atra%+s de Duild, )#ecute/ 6sar, os dados mostrados na Figura 0J/4.
0-: Analisar os resultados mostrados nas Figuras 0J/- e 0J/H/
0H: )#ecutar no%amente o programa usando tipo]metodo I 2 e analisar os no%os resultados/
0>: )#ecutar no%amente o programa usando tipo]metodo I 3 e analisar os no%os resultados/
0J: )#ecutar no%amente o programa usando tipo]metodo I 3, n I 25, e#ato I 3 e #o I 055 e analisar
os no%os resultados/
0,: )#ecutar no%amente o programa usando outros dados e analisar os no%os resultados/
25: No Fortran, para !ec2ar o projeto atual, e#ecutar File, Close 'orKspace/
program ra#Ses
use portl#3
Ta"ela 0J/2 &rograma0J"/!,5
#mpl#c#t none
#nteger :: #, n, ver, t#poVmetodo
realA :: eDato, erro, Do, D, r
call dados
D - Do
open(;,1#le-!sa#da=A3.tDt!)
[r#te(;,=))
=) 1ormat(!_ #!, t=@,!D!, t*@,!erro!)
erro - da3s(eDato : D)
[r#te(;,==) ), D, erro
== 1ormat( #A, ((=pe3).=?e3) )
select case ( t#poVmetodo )
case ( = )
call l#near
case ( ( )
call 3#ssecao
case ( 3 )
call ne[ton
end select
close(;)
ver - s^stem (!'otepad sa#da=A3.tDt!)
call gra1#co
/:::::::::::::::::::::::::::::::::::::::::::::::::
conta#ns
/:::::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne dados
ver - s^stem (!'otepad dados=A3.tDt!)
open(?,1#le-!dados=A3.tDt!)
read(?,) t#poVmetodo
read(?,) n
read(?,) eDato
read(?,) Do
read(?,) r
close(?)
end su3rout#ne dados
/:::::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne l#near
/ calcula ra#S de uma eKuaMo Kuadr5t#ca com o mUtodo da #teraMo l#near
do # - =, n
D - ( ( D ( ) 9 ; ) 8 ?
erro - da3s(eDato : D)
[r#te(;,=)) #, D, erro
=) 1ormat( #A, ((=pe3).=?e3) )
end do
end su3rout#ne l#near
/:::::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne 3#ssecao
/ calcula ra#S de uma eKuaMo Kuadr5t#ca com o mUtodo da 3#sseMo
realA a, 3, 1a, 1D
a - Do : r
3 - Do 9 r
do # - =, n
1D - D( : ?D 9 ;
1a - a( : ?a 9 ;
#1 ( 1D1a J ) ) then
3 - D
else
a - D
end #1
D - (a 9 3) 8 (
erro - da3s(eDato : D)
[r#te(;,=)) #, D, erro
=) 1ormat( #A, ((=pe3).=?e3) )
end do
end su3rout#ne 3#ssecao
/:::::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne ne[ton
/ calcula ra#S de uma eKuaMo Kuadr5t#ca com o mUtodo de 'e[ton
realA 1, 1l
do # - =, n
1 - D( : ?D 9 ;
1l - (D : ?
D - D : 1 8 1l
erro - da3s(eDato : D)
[r#te(;,=)) #, D, erro
=) 1ormat( #A, ((=pe3).=?e3) )
end do
end su3rout#ne ne[ton
/:::::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne gra1#co
#nteger ]
open(2,1#le-!comandos=A3.gnu!)
do ] - =, @
read(2,)
end do
select case ( t#poVmetodo )
case ( = )
[r#te(2,) !set t#tle `mUtodo da #teraMo l#near`!
case ( ( )
[r#te(2,) !set t#tle `mUtodo da 3#sseMo`!
case ( 3 )
[r#te(2,) !set t#tle `mUtodo de 'e[ton`!
end select
[r#te(2,) !replot!
close(2)
ver - s^stem (!Wgnuplot comandos=A3.gnu!)
end su3rout#ne gra1#co
/:::::::::::::::::::::::::::::::::::::::::::::::::
end program ra#Ses
Figura 0J/4 Ar;ui%o de dados do programa0J"/!,5/
1+.3 EXERC.CIOS
)#erc.cio 0J/0
Adaptar o programa0Ja/!,5 para incluir as seguintes op@es de s+ries:
Figura 0J/- &arte do ar;ui%o de resultados do programa0J"/!,5 para os dados da Fig/ 0J/4/
)#erc.cio 0J/2
Adaptar o programa0Ja/!,5 para usar preciso simples em todos os c$lculos com nOmeros reais/
Comparar os resultados com a %erso original do programa0Ja/!,5 na ;ual usase preciso dupla/
)#erc.cio 0J/3
Adaptar o programa0J"/!,5 para usar preciso simples em todos os c$lculos com nOmeros reais/
Comparar os resultados com a %erso original do programa0J"/!,5 na ;ual usase preciso dupla/
)#erc.cio 0J/4
Adaptar o programa0J"/!,5 para resol%er a seguinte e;uao:
"
2
" H = 0
90J/,:
Figura 0J/H Zr$!ico com resultados do programa0J"/!,5 para os dados da Fig/ 0J/4/
22J Cap.tulo 0,/ *eri%adas e integrais num+ricas
C/012u3o 1,. DERIVADAS E INTEGRAIS NUMCRICAS
OBJETIVOS DO CAPTULO
Calcular deri%adas num+ricas com ;uatro tipos de apro#ima@es num+ricas do m+todo de di!erenas
!initas: 6*A, **A, C*A2 e C*A4/
Calcular integrais num+ricas com tr<s tipos de apro#ima@es num+ricas: regras do ret7ngulo, trap+?io
e Aimpson/
&ara iniciali?ar as ati%idades deste cap.tulo, de%ese acessar o programa Fortran, no 'indo8s,
atra%+s de: Atart, &rograms, Fortran &o8erAtation 4/5, =icroso!t *e%eloper Atudio
0,/0 programa0,a/!,5
0: O"jeti%o do progra m a: calcular deri%adas num+ricas com ;uatro tipos de apro#ima@es num+ricas do
m+todo de di!erenas !initas: 6*A, **A, C*A2 e C*A4/
2: No Fortran, seguindo o procedimentopadro, criar um projeto com o nome projeto]0,
3: Acessar o site !tp:^^!tp/demec/u!pr/"r^*isciplinas^Tm>J4^projeto]0,
4: Clicar com o "oto do lado direito do mouse so"re o ar;ui%o programa0,a/!,5
-: )scol2er a opo Copiar para pasta/// 9Aa%e Target As:
H: Focali?ar a pasta do projeto
>: Clicar no "oto OS
J: Repetir os itens 3 a >, acima, para os ar;ui%os dados0,a/t#t, comandos0,a/gnu, 'gnuplot/e#e
,: No Fortran, seguindo o procedimentopadro, inserir no projeto o programa!onte
programa0,a/!,5, mostrado na Ta"ela 0,/0.
05: )studar o programaprincipal considerando os coment$rios do item 00, a"ai#o/
00: Coment$rios so"re o programa:
9a: O programa0,a/!,5 + composto pelo programaprincipal e ;uatro su"rotinas/
9": A su"rotina *A*OA + usada para ler os dados do programa do ar;ui%o dados0,a/t#t/
9c: A su"rotina )d&ON)NC(AF + usada para calcular a deri%ada num+rica da !uno ! I e
#
com
;uatro tipos de apro#ima@es num+ricas do m+todo de di!erenas !initas:
22, Cap.tulo 0,/ *eri%adas e integrais num+ricas
onde 2 I #, inter%alo em # usado para apro#imar cada deri%ada/ )sta su"rotina tam"+m calcula
o erro de cada uma das ;uatro apro#ima@es num+ricas em relao N soluo anal.tica da
deri%ada ;ue + e
#
.
9d: A su"rotina &OT)NC(A + usada para calcular a deri%ada num+rica da !uno ! I #
-
com os
;uatro tipos de apro#ima@es num+ricas das );s/ 90,/0: a 90,/4:/ )sta su"rotina tam"+m calcula
o erro de cada uma das ;uatro apro#ima@es num+ricas em relao N soluo anal.tica da
deri%ada ;ue + -#
4
.
9e: A su"rotina ZRAF(CO a"re o ar;ui%o comandos0,a/gnu e desce as primeiras do?e lin2as deste
ar;ui%o/ Na lin2a seguinte, escre%e um coment$rio para representar o t.tulo do gr$!ico de acordo
com a !uno escol2ida para calcular a deri%ada/ ) na lin2a seguinte, escre%e outro coment$rio,
;ue + o comando replot do 'gnuplot/ Finalmente, esta su"rotina e#ecuta o programa 'gnuplot
para !a?er o gr$!ico loglog do erro do c$lculo da deri%ada da !uno escol2ida, para cada uma
das ;uatro apro#ima@es num+ricas, em !uno do nOmero de re!inos de 2 de!inido nos dados do
programa/
9!: O programaprincipal: 90: de!ine suas %ari$%eis glo"aisG 92: c2ama a su"rotina *A*OAG 93: cria
o ar;ui%o saida0,a/t#tG 94: escre%e nele um coment$rio na primeira lin2a para indicar o
signi!icado de cada coluna de resultados 9o s.m"olo # + usado para in!ormar ao 'gnuplot ;ue a
lin2a + apenas um coment$rio, e no dados para o gr$!ico:G 9-: dependendo do tipo de !uno
escol2ida pelo usu$rio, + c2amada a su"rotina ade;uadaG 9H: o Notepad a"re o ar;ui%o de sa.daG
e, 9>: + c2amada a su"rotina para !a?er o gr$!ico dos erros com os comandos mostrados na
Figura 0,/0/
02: )#ecutar Duild, Compile para compilar o programa/
03: Zerar o programae#ecut$%el !a?endo Duild, Duild.
04: )#ecutar o programa atra%+s de Duild, )#ecute/ 6sar, os dados mostrados na Figura 0,/2.
program der#vadas
use portl#3
#mpl#c#t none
Ta"ela 0,/0 &rograma0,a/!,5
235 Cap.tulo 0,/ *eri%adas e integrais num+ricas
#nteger :: # / nHmero da aproD#maMo de cada delta
#nteger :: < / nHmero de re1#nos de hmaD
#nteger :: ver / auDl#o de S^stem
#nteger :: t#poV1uncao / t#po de 1unMo a der#var
realA :: hmaD / ma#or delta
realA :: r / raSo de re1#no dos deltas
realA :: G / coordenada para calcular a der#vada
realA :: eDato / soluMo analt#ca da der#vada
call dados / la os dados do programa
open(;,1#le-!sa#da=2a.tDt!) /
[r#te(;,=))
=) 1ormat(!_!, t?,!h!, t(),!E(B+S)!, t3?,!E(++S)!, t?),!E(7+S:()!, t;?,!E(7+S:*)!)
select case ( t#poV1uncao )
case ( = )
call eDponenc#al
case ( ( )
call potenc#a
end select
close(;)
ver - s^stem (!'otepad sa#da=2a.tDt!)
call gra1#co
/:::::::::::::::::::::::::::::::::::::::::::::::::
conta#ns
/:::::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne dados
ver - s^stem (!'otepad dados=2a.tDt!)
open(?,1#le-!dados=2a.tDt!)
read(?,) t#poV1uncao
read(?,) hmaD
read(?,) r
read(?,) <
read(?,) G
close(?)
end su3rout#ne dados
/:::::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne eDponenc#al
realA :: D[, h, 1p, 1[, 1lVB+S, 1lV++S, De, 1e, 1lV7+S(, I
D[[, Dee, 1[[, 1ee, 1lV7+S*
/ calcula a der#vada da eDponenc#al de G
eDato - deDp(G)
do # - ), <
h - hmaD 8 ( r # )
D[ - G : h
De - G 9 h
D[[ - G : (h
Dee - G 9 (h
1p - deDp(D)
1[ - deDp(D[)
1e - deDp(De)
1[[ - deDp(D[[)
1ee - deDp(Dee)
1lVB+S - ( 1p : 1[ ) 8 h
1lV++S - ( 1e : 1p ) 8 h
1lV7+S( - ( 1e : 1[ ) 8 (( h)
1lV7+S* - ( A1e : A1[ 9 1[[ : 1ee ) 8 (=( h)
[r#te(;,=)) h, da3s(eDato:1lVB+S), da3s(eDato:1lV++S), I
da3s(eDato:1lV7+S(), da3s(eDato:1lV7+S*)
=) 1ormat( ?(=pe=?.?) )
end do
end su3rout#ne eDponenc#al
/:::::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne potenc#a
realA :: D[, h, 1p, 1[, 1lVB+S, 1lV++S, De, 1e, 1lV7+S(, I
D[[, Dee, 1[[, 1ee, 1lV7+S*
/ calcula a der#vada de G?
eDato - ?G*
do # - ), <
h - hmaD 8 ( r # )
D[ - G : h
De - G 9 h
D[[ - G : (h
Dee - G 9 (h
1p - D?
1[ - D[?
1e - De?
1[[ - D[[?
1ee - Dee?
1lVB+S - ( 1p : 1[ ) 8 h
1lV++S - ( 1e : 1p ) 8 h
1lV7+S( - ( 1e : 1[ ) 8 (( h)
1lV7+S* - ( A1e : A1[ 9 1[[ : 1ee ) 8 (=( h)
[r#te(;,=)) h, da3s(eDato:1lVB+S), da3s(eDato:1lV++S), I
da3s(eDato:1lV7+S(), da3s(eDato:1lV7+S*)
=) 1ormat( ?(=pe=?.?) )
end do
end su3rout#ne potenc#a
/:::::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne gra1#co
#nteger ]
open(2,1#le-!comandos=2a.gnu!)
do ] - =, =(
read(2,)
end do
select case ( t#poV1uncao )
case ( = )
[r#te(2,) !set t#tle `der#vada de eDponenc#al(G)`!
case ( ( )
[r#te(2,) !set t#tle `der#vada de G?`!
end select
[r#te(2,) !replot!
close(2)
ver - s^stem (!Wgnuplot comandos=2a.gnu!)
end su3rout#ne gra1#co
/:::::::::::::::::::::::::::::::::::::::::::::::::
end program der#vadas
0-: Analisar os resultados mostrados nas Figuras 0,/3 e 0,/4/ )#ceto nos maiores %alores de 2, as
apro#ima@es 6*A e **A apresentam ;uase os mesmos %alores de erro/ Con!orme pre%isto pela
teoria, as apro#ima@es C*A2 e C*A4 apresentam os menores %alores de erro para um mesmo 2/
Teoricamente, o erro de cada apro#imao de%eria sempre se redu?ir com a reduo de 2, e de%eria
atingir o %alor nulo para 2 I 0. &or+m, na pr$tica, os erros de arredondamento imp@em um limite
m.nimo ao erro de cada apro#imao, como mostrado na Figura 0,/4 para o C*A2 e C*A4/
0H: )#ecutar no%amente o programa usando d I 05 e analisar os no%os resultados/
0>: )#ecutar no%amente o programa usando d I 5/0 e analisar os no%os resultados/
0J: )#ecutar no%amente o programa usando tipo de !uno I 2 e analisar os no%os resultados/
0,: )#ecutar no%amente o programa usando outros dados e analisar os no%os resultados/
Figura 0,/0 Ar;ui%o de comandos para o aplicati%o 'gnuplot do programa0,a/!,5/
Figura 0,/2 Ar;ui%o de dados do programa0,a/!,5/
Figura 0,/3 Ar;ui%o de resultados do programa0,a/!,5 para os dados da Fig/ 0,/2/
Figura 0,/4/ Zr$!ico com resultados do programa0,a/!,5 para os dados da Fig/ 0,/2/
1,.2 0ro4r/m/1,=.5,&
0: O"jeti%o do progra m a: calcular integrais num+ricas com tr<s tipos de apro#ima@es num+ricas:
regras do ret7ngulo, trap+?io e Aimpson/
2: Nesta seo ser$ usado o mesmo projeto da seo anterior/ &ortanto, de%ese e#ecutar o seguinte no
Fortran:
a: Clicar so"re o nome do programa!onte/
": )dit, Cut para retirar o programa!onte do projeto/
c: Clicar dentro do campo de edio de programa!onte/
d: File, Close.
3: Acessar o site !tp:^^!tp/demec/u!pr/"r^*isciplinas^Tm>J4^projeto]0,
4: Clicar com o "oto do lado direito do mouse so"re o ar;ui%o programa0,"/!,5
-: )scol2er a opo Copiar para pasta/// 9Aa%e Target As:
H: Focali?ar a pasta do projeto
>: Clicar no "oto OS
J: Repetir os itens 3 a >, acima, para os ar;ui%os dados0,"/t#t e comandos0,"/gnu
,: No Fortran, seguindo o procedimentopadro, inserir no projeto o programa!onte programa0,"/!,5,
mostrado na Ta"ela 0,/2/
05: )studar o programaprincipal considerando os coment$rios do item 00, a"ai#o/
program #ntegra#s
use portl#3 #mpl#c#t none
Ta"ela 0,/2 &rograma0,"/!,5
#nteger :: # / nHmero do re1#no dos elementos de #ntegraMo
#nteger :: Q / nHmero do elemento de #ntegraMo
#nteger :: 'm#n / nHmero mn#mo de elementos de #ntegraMo
#nteger :: < / nHmero de re1#nos de elementos de #ntegraMo
#nteger :: r / raSo de aumento de elementos de #ntegraMo
#nteger :: ver / auDl#o de S^stem
#nteger :: t#poV1uncao / t#po de 1unMo a der#var
realA :: h / tamanho dos elementos de #ntegraMo
realA :: eDato / soluMo analt#ca da der#vada
call dados / la os dados do programa
open(;,1#le-!sa#da=23.tDt!) /
[r#te(;,=))
=) 1ormat(!_!, t?,!h!, t(),!E(retbngulo)!, t3?,!E(trapUS#o)!, t?),!E(s#mpson)!)
select case ( t#poV1uncao )
case ( = )
call eDponenc#al
case ( ( )
call potenc#a
end select
close(;)
ver - s^stem (!'otepad sa#da=23.tDt!)
call gra1#co
/:::::::::::::::::::::::::::::::::::::::::::::::::
conta#ns
/:::::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne dados
ver - s^stem (!'otepad dados=23.tDt!)
open(?,1#le-!dados=23.tDt!)
read(?,) t#poV1uncao
read(?,) 'm#n
read(?,) r
read(?,) <
close(?)
end su3rout#ne dados
/:::::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne eDponenc#al
realA :: Dp, 1p, ret, trap, D[, 1[, s#mp, De, 1e
/ calcula a #ntegral da eDponenc#al de G entre ) e =
eDato - deDp(=.)d)) : =
do # - ), <
h - =.)d) 8 ( 'm#n (r #) )
ret - ).)d)
trap - ).)d)
do Q - =, 'm#n(r#)
Dp - h(Q:).?d))
1p - deDp(Dp)
ret - ret 9 1p h
Dp - hQ
D[ - Dp : h
1[ - deDp(D[)
1p - deDp(Dp)
trap - trap 9 h(1[91p)8(
end do
s#mp - ).)d)
do Q - (, 'm#n(r#), (
Dp - h(Q:=)
D[ - Dp : h
De - Dp 9 h
1[ - deDp(D[)
1e - deDp(De)
1p - deDp(Dp)
s#mp - s#mp 9 h(1[9*1p91e)83
end do
[r#te(;,=)) h, da3s(eDato:ret), da3s(eDato:trap), da3s(eDato:s#mp)
=) 1ormat( *(=pe=?.?) )
end do
end su3rout#ne eDponenc#al
/:::::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne potenc#a
realA :: Dp, 1p, ret, trap, D[, 1[, s#mp, De, 1e
/ calcula a #ntegral de G? entre ) e =
eDato - = 8 ;.)d)
do # - ), <
h - =.)d) 8 ( 'm#n (r #) )
ret - ).)d)
trap - ).)d)
do Q - =, 'm#n(r#)
Dp - h(Q:).?d))
1p - Dp?
ret - ret 9 1p h
Dp - hQ
D[ - Dp : h
1[ - D[?
1p - Dp?
trap - trap 9 h(1[91p)8(
end do
s#mp - ).)d)
do Q - (, 'm#n(r#), (
Dp - h(Q:=)
D[ - Dp : h
De - Dp 9 h
1[ - D[?
1e - De?
1p - Dp?
s#mp - s#mp 9 h(1[9*1p91e)83
end do
[r#te(;,=)) h, da3s(eDato:ret), da3s(eDato:trap), da3s(eDato:s#mp)
=) 1ormat( *(=pe=?.?) )
end do
end su3rout#ne potenc#a
/:::::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne gra1#co
#nteger ]
open(2,1#le-!comandos=23.gnu!)
do ] - =, ==
read(2,)
end do
select case ( t#poV1uncao )
case ( = )
[r#te(2,) !set t#tle `#ntegral de eDponenc#al(G) entre ) e =`!
case ( ( )
[r#te(2,) !set t#tle `#ntegral de G? entre ) e =`!
end select
[r#te(2,) !replot!
close(2)
ver - s^stem (!Wgnuplot comandos=23.gnu!)
end su3rout#ne gra1#co
/:::::::::::::::::::::::::::::::::::::::::::::::::
end program #ntegra#s
00: Coment$rios so"re o programa:
9a: O programa0,"/!,5 + composto pelo programaprincipal e ;uatro su"rotinas/
9": A su"rotina *A*OA + usada para ler os dados do programa do ar;ui%o dados0,"/t#t/
9c: A su"rotina )d&ON)NC(AF + usada para calcular a integral num+rica da !uno & ' e
"
com tr<s
tipos de apro#ima@es num+ricas:
onde "
k
I (Wk/ )sta su"rotina tam"+m calcula o erro de cada uma das tr<s apro#ima@es
num+ricas em relao N soluo anal.tica da integral ;ue + e0/
9d: A su"rotina &OT)NC(A + usada para calcular a integral num+rica da !uno & ' "
-
com os tr<s
tipos de apro#ima@es num+ricas das );s/ 90,/-: a 90,/>:/ )sta su"rotina tam"+m calcula o erro
de cada uma das tr<s apro#ima@es num+ricas em relao N soluo anal.tica da integral ;ue + 0^H/
9e: A su"rotina ZRAF(CO a"re o ar;ui%o comandos0,".gnu e desce as primeiras on?e lin2as deste
ar;ui%o/ Na lin2a seguinte, escre%e um coment$rio para representar o t.tulo do gr$!ico de acordo
com a !uno escol2ida para calcular a integral/ ) na lin2a seguinte, escre%e outro coment$rio,
;ue + o comando replot do 'gnuplot/ Finalmente, esta su"rotina e#ecuta o programa 'gnuplot
para !a?er o gr$!ico loglog do erro do c$lculo da integral da !uno escol2ida, para cada uma das
tr<s apro#ima@es num+ricas, em !uno do nOmero 9N: de inter%alos 9(: de integrao de!inido
com os dados do programa/
9!: O programaprincipal: 90: de!ine suas %ari$%eis glo"aisG 92: c2ama a su"rotina *A*OAG 93: cria
o ar;ui%o saida0,"/t#tG 94: escre%e nele um coment$rio na primeira lin2a para indicar o
signi!icado de cada coluna de resultados 9o s.m"olo # + usado para in!ormar ao 'gnuplot ;ue a
lin2a + apenas um coment$rio, e no dados para o gr$!ico:G 9-: dependendo do tipo de !uno
escol2ida pelo usu$rio, + c2amada a su"rotina ade;uadaG 9H: o Notepad a"re o ar;ui%o de sa.daG
e, 9>: + c2amada a su"rotina para !a?er o gr$!ico dos erros com os comandos mostrados na Figura
0,/-/
Figura 0,/- Ar;ui%o de comandos para o aplicati%o 'gnuplot do programa0,"/!,5/
02: )#ecutar Duild, Compile para compilar o programa/
03: Zerar o programae#ecut$%el !a?endo Duild, Duild.
04: )#ecutar o programa atra%+s de Duild, )#ecute/ 6sar, os dados mostrados na Figura 0,/H.
0-: Analisar os resultados mostrados nas Figuras 0,/> e 0,/J/ Con!orme pre%isto pela teoria, as
apro#ima@es das regras do ret7ngulo e trap+?io de%em ter erros similares, en;uanto ;ue o erro da
regra de Aimpson de%e ser o menor, para um mesmo (. Teoricamente, o erro de cada apro#imao
de%eria sempre se redu?ir com a reduo de (, e de%eria atingir o %alor nulo para ( I 0. &or+m, na
pr$tica, os erros de arredondamento imp@em um limite m.nimo ao erro de cada apro#imao, como
mostrado na Figura 0,/J para a regra de Aimpson/
0H: )#ecutar no%amente o programa usando tipo de !uno I 0 e analisar os no%os resultados/
0>: )#ecutar no%amente o programa usando outros dados e analisar os no%os resultados/
0J: No Fortran, para !ec2ar o projeto atual, e#ecutar File, Close 'orKspace/
Figura 0,/H Ar;ui%o de dados do programa0,"/!,5/
Figura 0,/> Ar;ui%o de resultados do programa0,"/!,5 para os dados da Fig/ 0,/H/
1,.3
EXERC.CIOS
)#erc.cio 0,/0
Acrescentar uma su"rotina no programa0,a/!,5 para calcular a deri%ada de & I 3e
"
. (ncluir a no%a opo
de !uno no ar;ui%o de dados e no programa/ Apresentar ar;ui%o com o erro dos ;uatro tipos de
apro#ima@es e respecti%o gr$!ico/
)#erc.cio 0,/2
Acrescentar uma su"rotina no programa0,a/!,5 para calcular a deri%ada de & I "
4
. (ncluir a no%a opo
de !uno no ar;ui%o de dados e no programa/ Apresentar ar;ui%o com o erro dos ;uatro tipos de
apro#ima@es e respecti%o gr$!ico/
Figura 0,/J/ Zr$!ico com resultados do programa0,"/!,5 para os dados da Fig/ 0,/H/
)#erc.cio 0,/3
Acrescentar uma su"rotina no programa0,"/!,5 para calcular a integral de & I 3e
"
. (ncluir a no%a opo
de !uno no ar;ui%o de dados e no programa/ Apresentar ar;ui%o com o erro dos tr<s tipos de
apro#ima@es e respecti%o gr$!ico/
)#erc.cio 0,/4
Acrescentar uma su"rotina no programa0,"/!,5 para calcular a integral de & I "
4
/ (ncluir a no%a opo de
!uno no ar;ui%o de dados e no programa/ Apresentar ar;ui%o com o erro dos tr<s tipos de apro#ima@es
e respecti%o gr$!ico/
244 Cap.tulo 25/ Aoluo de sistemas de e;ua@es
C/012u3o 2&. SOLU$O DE SISTEMAS DE E>UA!ES
OBJETIVOS DO CAPTULO
Aplicar, num Onico programa, di%ersos recursos e comandos do FORTRAN %istos nos cap.tulos
anteriores/
Resol%er sistemas de e;ua@es lineares com m+todos diretos e iterati%os/
&ara iniciali?ar as ati%idades deste cap.tulo, de%ese acessar o programa Fortran, no 'indo8s,
atra%+s de: Atart, &rograms, Fortran &o8erAtation 4/5, =icroso!t *e%eloper Atudio
2&.1 0ro4r/m/2&/.5,&
0: O"jeti%o do progra m a: resol%er um pro"lema de conduo de calor unidimensional permanente
atra%+s de simulao num+rica com o m+todo de di!erenas !initas/ A soluo dos sistemas de
e;ua@es lineares do pro"lema + o"tida com m+todos diretos e iterati%os/
2: No Fortran, seguindo o procedimentopadro, criar um projeto com o nome projeto]25a
3: Acessar o site !tp:^^!tp/demec/u!pr/"r^*isciplinas^Tm>J4^projeto]25a
4: Clicar com o "oto do lado direito do mouse so"re o ar;ui%o programa25a/!,5
-: )scol2er a opo Copiar para pasta/// 9Aa%e Target As:
H: Focali?ar a pasta do projeto
>: Clicar no "oto OS
J: Repetir os itens 3 a >, acima, para os ar;ui%os %aria%eis/!,5, sol%ers]0*/!,5, dados/!,5,
coe!icientes/!,5, resultados/!,5, programa25a/ent, comandos25a/gnu e 'gnuplot/e#e
,: No Fortran, seguindo o procedimentopadro, inserir no projeto o programa!onte %aria%eis/!,5,
mostrado na Ta"ela 25/0.
05: Repetir o item , para os programas!onte: sol%ers]0*/!,5 9Ta"ela 25/2:, dados/!,5 9Ta"ela 25/3:,
coe!icientes/!,5 9Ta"ela 25/4:, resultados/!,5 9Ta"ela 25/-: e programa25a/!,5 9Ta"ela 25/H:/
00: )studar o programaprincipal considerando os coment$rios do item 02, a"ai#o/
02: Coment$rios so"re o programa:
9a: O programa25a/!,5 + composto pelo programaprincipal e cinco m1dulos, editados em seis
programas!onte di!erentes/
9": No m1dulo CAR(AC)(A, contido no programa!onte %aria%eis/!,5, so de!inidas as %ari$%eis
glo"ais do programa/ )ste m1dulo no cont+m nen2uma su"rotina/
9c: O m1dulo AOFC)RA]0*, contido no programa!onte sol%ers]0*/!,5, + dedicado N soluo de
sistemas de e;ua@es lineares do tipo
24- Cap.tulo 25/ Aoluo de sistemas de e;ua@es
A) I B 925/0:
originados de pro"lemas unidimensionais/ A + a matri? de coe!icientes, ) + o %etor inc1gnita e B
+ o %etor dos termos independentes/ A dimenso de A + N#N, e de ) e B, N#0, onde N + o
nOmero de inc1gnitas 9): do pro"lema/ )ste m1dulo cont+m ;uatro su"rotinas/ Tr<s delas so
m+todos para resol%er sistemas de e;ua@es/ O m+todo de eliminao de Zauss resol%e uma
matri? A do tipo c2eia de !orma direta/ O m+todo de ZaussAeidel resol%e uma matri? A do tipo
c2eia mas de !orma iterati%a/ Neste programae#emplo, os m+todos eliminao de Zauss e
ZaussAeidel esto adaptados para resol%er uma matri? A do tipo tridiagonal, isto +, apenas tr<s
diagonais da matri? A t<m %alores nonulos/ Finalmente o m+todo T*=A 9Tri*iagonal =atri#
Algorit2m: resol%e uma matri? A do tipo tridiagonal de !orma direta/ Al+m disso, e#iste uma
rotina ;ue calcula a norma l0 m+dia do res.duo das e;ua@es do sistema, de!inido por
* I B a A) 925/2:
O %alor da norma + usado para comparar com uma toler7ncia especi!icada pelo usu$rio %isando
interromper o processo iterati%o do m+todo de ZaussAeidel/
9d: O m1dulo *A*OA, contido no programa!onte dados/!,5, tem duas su"rotinas/ 6ma + usada
para ler os dados do programa, do ar;ui%o programa25a/ent/ A outra + usada para escre%er os
dados lidos num ar;ui%o de sa.da de nome gen+rico/
9e: O m1dulo CO)F(C()NT)A, contido no programa!onte coe!icientes/!,5, tem duas su"rotinas/
6ma + usada para de!inir os %alores dos coe!icientes da matri? A e do termo independente B do
sistema de e;ua@es das N %ari$%eis ). Ao de!inidos os %alores dos coe!icientes apenas em tr<s
diagonais da matri? A. (sso ocorre por;ue estes coe!icientes so originados da discreti?ao de
uma e;uao di!erencial ;ue modela a conduo de calor unidimensional em regime
permanenteG e a apro#imao usada, do m+todo de di!erenas !initas, + a di!erena central de 2n
ordem, C*A2, %ista no cap.tulo 0,/ O %alor de B depende da de!inio do usu$rio no ar;ui%o de
dados, gerando %alores nulos ou nonulos/ A outra su"rotina + usada para escre%er os %alores
dos coe!icientes e do termo independente num ar;ui%o de sa.da de nome gen+rico/
9!: O m1dulo R)A6FTA*OA, contido no programa!onte resultados/!,5, tam"+m tem duas su"
rotinas/ A primeira + usada para: 90: c2amar a su"rotina de c$lculo de coe!icientes e termos
independentesG 92: escre%er os coe!icientesG 93: resol%er a );/ 925/0: com um dos tr<s m+todos
dispon.%eis, de acordo com a escol2a do usu$rio no ar;ui%o de dadosG 94: cronometrar o tempo
de C&6G 9-: c2amar a segunda su"rotina do m1duloG e 9H: escre%er o tempo de C&6 num
ar;ui%o de sa.da de nome gen+rico/ A segunda su"rotina deste m1dulo + usada para: 90: criar o
ar;ui%o T/datG 92: escre%er neste ar;ui%o a soluo anal.tica e num+rica de ), e seu erroG 93:
escre%er um t.tulo no ar;ui%o comandos25a/gnuG e 94: c2amar o aplicati%o 'gnuplot para !a?er
o gr$!ico de ) com os comandos mostrados na Figura 25/0/
9g: O programaprincipal: 90: apresenta coment$rios descre%endo um resumo das caracter.sticas do
programaG 92: o"t+m a data e a 2ora do sistema operacionalG 93: c2ama a su"rotina de leitura dos
dados do programaG 94: cria o ar;ui%o de sa.da de nome gen+ricoG 9-: escre%e nele o t.tulo da
simulao, a data e 2oraG 9H: !a? a alocao de mem1riaG 9>: calcula a coordenada X
correspondente a ) em N pontosG 9J: c2ama a su"rotina ;ue escre%e os dadosG 9,: c2ama a su"
rotina ;ue resol%e a );/ 925/0:G 905: com o aplicati%o Notepad, mostra o conteOdo do ar;ui%o de
sa.da/
92: Os campos de coe!icientes, ) e gr$!ico so escritos com uma !re;L<ncia 9+: de!inida pelo
usu$rio/
module var#5ve#s
use portl#3
#mpl#c#t none
Ta"ela 25/0 Caria%eis/!,5
#nteger :: ' / nHmero total de nZs
#nteger :: # / nHmero do nZ
/ # - =, nZ no contorno esKuerdo
/ # - ', nZ no contorno d#re#to
/ ( J- # J- ':=, nZs #nternos
#nteger :: matr#S / t#po de matr#S: = - sem 1onteT ( - com 1onte
#nteger :: solver / t#po de solver: = - El#m#naMo de ,auss (E,)
/ ( - ,auss:Se#del (,S)
/ 3 - T+"& #nteger ::
#teracao / nHmero de #teraMNes para o ,S #nteger :: [
/ 1reKcanc#a de escr#ta de resultados
realA :: Tol / tolerbnc#a so3re resduo para o ,S
realA :: tcpu / tempo de 70B em segundos #nteger :: ver
/ auDl#o do comando S^stem realA,d#mens#on(:),allocata3le :: T
/ soluMo numUr#ca realA,d#mens#on(:),allocata3le :: D /
coordenada espac#al nodal realA,d#mens#on(:),allocata3le :: a0 /
coe1#c#ente central de u
realA,d#mens#on(:),allocata3le :: aW / coe1#c#ente esKuerdo de u
realA,d#mens#on(:),allocata3le :: aE / coe1#c#ente d#re#to de u
realA,d#mens#on(:),allocata3le :: 30 / termo 1onte de u
character() :: caso / nome do arKu#vo de sada
character?) :: t#tle / ttulo do gr51#co
character;( :: head / ttulo do gr51#co 9 d#a
character=( :: d#a / data da s#mulaMo
characterA :: hora / hor5r#o da s#mulaMo
#nteger* :: var(A) / data e hora
character() :: vardate / data e hora
character() :: vart#me / data e hora
character() :: varSone / data e hora
character@) :: noteVcaso / notepad 9 caso
character( :: auD=,auD(
character* :: auD3
character?) :: auD
end
module solversV=+
Ta"ela 25/2 Aol%ers]0*/!,5
/ o3Qet#vo: resolver s#stema l#near de eKuaMNes algU3r#cas
/ or#g#nado de pro3lemas un#d#mens#ona#s
use var#ave#s
#mpl#c#t none
conta#ns
/:::::::::::::::::::::::::::::::::::::::::::::::::
/ "Utodo d#reto el#m#naMo de ,auss
su3rout#ne E, (',ap,3,c,d,T)
#mpl#c#t none
#nteger :: # / nHmero do nZ
#nteger :: ##, Q
realA :: mQ#, S
#nteger,#ntent(#n) :: ' / nHmero de nZs
realA,d#mens#on(:,:),allocata3le :: & / matr#S de coe1#c#entes
realA,#ntent(#n), d#mens#on(') :: ap / coe1#c#ente a0
realA,#ntent(#n), d#mens#on(') :: 3 / coe1#c#ente aW
realA,#ntent(#n), d#mens#on(') :: c / coe1#c#ente aE
realA,#ntent(#n), d#mens#on(') :: d / termo 1onte 30
realA,#ntent(out),d#mens#on(') :: T / #ncZgn#ta
allocate ( &(','9=) )
& - ).)d)
/ gera a matr#S de coe1#c#entes & com o termo #ndependente
do # - =,'
#1 (# L =) &(#,#:=) - :3(#)
&(#,#) - ap(#)
#1 (# J ') &(#,#9=) - :c(#)
&(#,'9=) - d(#)
end do
/ Escalonamento
do # - =,':=
do ## - #9=,'
mQ#- &(##,#) 8 &(#,#)
do Q - #,'9=
&(##,Q) - &(##,Q) : mQ#&(#,Q)
end do
end do
end do
/Su3st#tu#cao retroat#va
T(') - &(','9=) 8 &(',')
do # - ':=,=,:=
S - )
do Q - #9=,'
S - S 9 &(#,Q)T(Q)
end do
T(#) - (&(#,'9=) : S) 8 &(#,#)
end do
deallocate ( & )
end su3rout#ne E,
/:::::::::::::::::::::::::::::::::::::::::::::::::
/ mUtodo #terat#vo de ,auss:Se#del
su3rout#ne ,S (',#te,tol,a,3,c,d,T)
#mpl#c#t none
#nteger :: # / nHmero do nZ
#nteger :: #t / nHmero da #teraMo
#nteger :: #te / nHmero de #teraMNes
#nteger,#ntent(#n) :: ' / nHmero de nZs
realA, #ntent(#n) :: Tol / tolerbnc#a so3re R
realA,#ntent(#n), d#mens#on(') :: a / coe1#c#ente a0
realA,#ntent(#n), d#mens#on(') :: 3 / coe1#c#ente aW
realA,#ntent(#n), d#mens#on(') :: c / coe1#c#ente aE
realA,#ntent(#n), d#mens#on(') :: d / termo 1onte 30
realA,#ntent(out),d#mens#on(') :: T / #ncZgn#ta
realA :: R / norma l= mUd#a dos resduos
T - ).)d)
do #t - =, #te
T(=) - ( c(=)T(() 9 d(=) ) 8 a(=)
do # - (, ':=
T(#) - ( 3(#)T(#:=) 9 c(#)T(#9=) 9 d(#) ) 8 a(#)
end do
T(') - ( 3(')T(':=) 9 d(') ) 8 a(')
call norma (',a,3,c,d,T,R)
#1 ( R J- Tol ) then
[r#te(=),=) #t, Tol, R
= 1ormat(88, `% processo #terat#vo converg#u em`, IA, ` #teraMNes`, I
8, `para a tolerbnc#a de`, =pe=).(, I
8, `& norma l= mUd#a dos resduos U`, =pe=).(, 8)
eD#t
end #1
end do
#1 ( R L Tol ) then
[r#te(=),() #te, Tol, R
( 1ormat(88, `% processo #terat#vo 'd% converg#u em`, IA, ` #teraMNes`, I
8, `para a tolerbnc#a de`, =pe=).(, I
8, `& norma l= mUd#a dos resduos U`, =pe=).(, 8)
end #1
end su3rout#ne ,S
/:::::::::::::::::::::::::::::::::::::::::::::::::
/ calcula a norma l= mUd#a do resduo das eKuaMNes
su3rout#ne norma (',a,3,c,d,T,R)
#mpl#c#t none
#nteger :: # / nHmero do nZ #nteger,#ntent(#n) :: ' /
nHmero de nZs realA,#ntent(#n), d#mens#on(') :: a /
coe1#c#ente a0
realA,#ntent(#n), d#mens#on(') :: 3 / coe1#c#ente aW
realA,#ntent(#n), d#mens#on(') :: c / coe1#c#ente aE
realA,#ntent(#n), d#mens#on(') :: d / termo 1onte 30
realA,#ntent(out),d#mens#on(') :: T / #ncZgn#ta
realA,#ntent(#nout) :: R / norma l= mUd#a dos resduos
R - ).)d)
R - R 9 da3s ( c(=)T(() 9 d(=) : T(=)a(=) )
do # - (, ':=
R - R 9 da3s ( 3(#)T(#:=) 9 c(#)T(#9=) 9 d(#) : T(#)a(#) )
end do
R - R 9 da3s ( 3(')T(':=) 9 d(') : T(')a(') )
R - R 8 '
end su3rout#ne norma
/:::::::::::::::::::::::::::::::::::::::::::::::::
/ mUtodo d#reto Tr#:+#agonal "atr#D &lgor#thm (T+"&)
su3rout#ne T+"& (',a,3,c,d,T)
#mpl#c#t none
#nteger :: # / nHmero do nZ
realA :: d#v / var#5vel auD#l#ar
#nteger,#ntent(#n) :: ' / nHmero de nZs
realA,d#mens#on(:),allocata3le :: 0 / coe1#c#ente do tdma
realA,d#mens#on(:),allocata3le :: R / coe1#c#ente do tdma
realA,#ntent(#n), d#mens#on(') :: a / coe1#c#ente a0
realA,#ntent(#n), d#mens#on(') :: 3 / coe1#c#ente aW
realA,#ntent(#n), d#mens#on(') :: c / coe1#c#ente aE
realA,#ntent(#n), d#mens#on(') :: d / termo 1onte 30
realA,#ntent(out),d#mens#on(') :: T / #ncZgn#ta
allocate(0('),R('))
0(=) - c(=) 8 a(=)
R(=) - d(=) 8 a(=)
do # - (, '
d#v - a(#) : 3(#)0(#:=)
0(#) - c(#) 8 d#v
R(#) - (d(#) 9 3(#)R(#:=))8d#v
end do
T(') - R(')
do # - ':=, =, :=
T(#) - 0(#)T(#9=) 9 R(#)
end do
deallocate(0,R)
end su3rout#ne tdma
/:::::::::::::::::::::::::::::::::::::::::::::::::
end module solversV=+
module dados
Ta"ela 25/3 *ados/!,5
/ o3Qet#vo: ler e escrever os dados
use var#ave#s
/:::::::::::::::::::::::::::::::::::::::::::::::::
#mpl#c#t none
conta#ns
/:::::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne leVdados
ver - s^stem(`notepad programa()a.ent`) / l#sta dados
open(@,1#le-`programa()a.ent`)
read(@,) caso
read(@,) '
read(@,) matr#S
read(@,) solver
read(@,) #teracao
read(@,) Tol
read(@,) [
read(@,) t#tle
close(@)
end su3rout#ne leVdados
/:::::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne mostraVdados
#nteger :: comp
comp - len(tr#m(adQustl(caso)))
[r#te(=),=) tr#m(adQustl(caso)), ', matr#S, solver, #teracao, Tol
= 1ormat(8,?D,`+&+%S`,88, I
aJcompL,` - caso`,8, I
#;,` - nHmero de nZs`,8, I
#;,` - t#po de matr#S: = - 1onte nuloT ( - 1onte no:nulo`,8, I
#;,` - t#po de solver: =-El.,aussT (-,ST 3-T+"&`,8, I
#;,` - nHmero de #teraMNes para o ,S`,8, I
=pe=).(,` - tolerbnc#a so3re o resduo para o ,S`)
end su3rout#ne mostraVdados
/:::::::::::::::::::::::::::::::::::::::::::::::::
end module dados
module coe1#c#entes
Ta"ela 25/4 Coe!icientes/!,5
/ o3Qet#vo: calcular os coe1#c#entes e termos 1ontes
/ das eKuaMNes d#scret#Sadas
use dados
#mpl#c#t none
conta#ns
/:::::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne l#staVcoe1#c#entes
[r#te(=),*)
* 1ormat(8,?D,`7%E$I7IE'TES E $%'TES`,88, I
t;,`nZ`,t=;,`G`,t3;,`oeste`,t?;,`central`, I
t@;,`leste`,t2;,`1onte`,8)
do # - =, '
#1 ( #--= .or. #--n .or. mod(#,[)--) ) I
[r#te(=),() #, G(#), a[(#), a0(#), ae(#), 30(#)
end do
( 1ormat(#;,*D,?(=pe().2))
end su3rout#ne l#staVcoe1#c#entes
/:::::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne coe1#c#entesVeV1ontes
/ volumes #nternos
do # - (, ':=
a[(#) - =.)d)
ae(#) - =.)d)
a0(#) - a[(#) 9 ae(#)
end do
select case ( matr#S )
case ( = ) / 1onte nulo
30 - ).)d)
case ( ( ) / 1onte no:nulo
30 - : (.)d) 8 ( (':=)( )
end select
/ contorno esKuerdo
)?(1) = 0.0+0
)$(1) = 0.0+0
)P(1) = 1.0+0
:P(1) = 0.0+0
/ contorno d#re#to
)?(N) = 0.0+0
)$(N) = 0.0+0
)P(N) = 1.0+0
:P(N) = 1.0+0
end su3rout#ne coe1#c#entesVeV1ontes
/:::::::::::::::::::::::::::::::::::::::::::::::::
end module coe1#c#entes
module resultados
Ta"ela 25/- Resultados/!,5
/ o3Qet#vo: calcular soluMo numUr#ca e
/ apresentar gr51#cos dos resultados
/:::::::::::::::::::::::::::::::::::::::::::::::::
use coe1#c#entes
use solversV=+
#mpl#c#t none
conta#ns
/ :::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne solucaoVnumer#ca
/ c5lculo dos coe1#c#entes e termos 1ontes
call coe1#c#entesVeV1ontes
/ escr#ta dos coe1#c#entes e termos 1ontes
call l#staVcoe1#c#entes
tcpu - t#me1() / Sera cronemetro
/ soluMo do s#stema de eKuaMNes
select case ( solver )
case ( = ) / El#m#naMo de ,auss
call E, (',a0,a[,ae,30,T)
case ( ( ) / ,auss:Se#del
call ,S (',#teracao,Tol,a0,a[,ae,30,T)
case ( 3 ) / T+"&
call tdma (',a0,a[,ae,30,T)
end select
tcpu - t#me1()
/ escr#ta da var#5vel pr#m5r#a e sua v#sual#SaMo
call escreveVT
[r#te(=),=) tcpu
= 1ormat(8, 1=*.3, ` - tempo de processamento (segundos)`)
end su3rout#ne solucaoVnumer#ca
/:::::::::::::::::::::::::::::::::::::::::::::::::
su3rout#ne escreveVT
realA :: TVeDato / auD#l#ar
#nteger :: Q / auD#l#ar
/ a3ertura de arKu#vo para gravar resultados de T (analt#co e numUr#co)
open(@,1#le-`T.dat`)
[r#te(=),=)
= 1ormat(8,t*,`G`,t(A,`T (analt#co)`,t?(,`T (numUr#co)`,t@;,`erro`,8)
do # - =, '
select case ( matr#S )
case ( = ) / 1onte nulo
TVeDato - (#:=.)d)) 8 (':=)
case ( ( ) / 1onte no:nulo
TVeDato - ( (#:=.)d)) 8 (':=) ) (
end select
#1 ( #--= .or. #--n .or. mod(#,[)--) ) then
[r#te( @,() G(#), TVeDato, T(#), TVeDato : T(#)
[r#te(=),() G(#), TVeDato, T(#), TVeDato : T(#)
( 1ormat(*(=pe(*.=?))
end #1
end do
close(@)
/ adapta arKu#vo de comandos para 1aSer gr51#co
open(@,1#le-`comandos()a.gnu`)
do Q - =, A
read(@,)
end do
[r#te(@,3) head
3 1ormat(!set t#tle `!,a;(,8,!replot!)
close(@)
/ mostra o gr51#co de T
ver - s^stem(`[gnuplot comandos()a.gnu`)
end su3rout#ne escreveVT
/:::::::::::::::::::::::::::::::::::::::::::::::::
end module resultados
Ta"ela 25/H &rograma25a/!,5
program programa()a
/ +#1uso de calor un#d#mens#onal permanente
/ .erso or#g#nal =.) ((? "a# )@)
/ .erso atual =.) ((? "a# )@)
/ Hlt#ma alteraMo - (; "a# )@
/ autor: 7arlos >enr#Kue "arch# (7ur#t#3a, +E"E78B$0R)
/ "%+E<% "&TE"fTI7% (resumo)
/ EKuaMo d#1erenc#al: d(T8dD( - S
/ 7ond#Mo de contorno de +#r#chlet em D - ): T()) - )
/ 7ond#Mo de contorno de +#r#chlet em D - =: T(=) - =
/ D - coordenada espac#al (var#5vel #ndependente)
/ T - temperatura (var#5vel dependente)
/ S - termo 1onte
/ SoluMo analt#ca conhec#da da eKuaMo d#1erenc#al
/ SoluMo analt#ca conhec#da da eKuaMo d#scret#Sada
/ "%+E<% 'B"WRI7% (resumo)
/ IncZgn#ta (var#5vel pr#m5r#a, dependente): T
/ "Utodo numUr#co: d#1erenMas 1#n#tas
/ $unMo de #nterpolaMo: 7+S (var#5vel pr#m5r#a T)
/ &s cond#MNes de contorno so apl#cadas 1orMando os
/ coe1#c#entes e 1ontes a sat#s1aSer a 7.7.
/ "alha un#1orme
/ Solvers: El#m#naMo de ,auss, ,auss:Se#del e T+"&
/ 0rec#so: dupla
/ <#nguagem $%RTR&' 2?
/ &pl#cat#vo usado: $ortran *.) "#croso1t
/ T#po de proQeto: 7onsole
/ EDpresso genUr#ca do s#stema de eKuaMNes d#scret#Sado:
/ a0(#)T(#) - a[(#)T(#:=) 9 ae(#)T(#9=) 9 30(#)
/ onde # - =, (, ... ' (nHmero de nZs)
/ &RRBI.%S envolv#dos no programa:
/ programa()a.12) - programa pr#nc#pal
/ coe1#c#entes.12) - calcula coe1#c#entes e 1ontes do s#stema l#near
/ dados.12) - la e l#sta os dados do programa
/ resultados.12) - resolve eKuaMNes e gera l#stagens dos resultados
/ solversV=+.12 - Solvers El#m#naMo de ,auss, ,auss:Se#del e T+"&
/ var#ave#s.12) - de1#ne todas as var#5ve#s glo3a#s do programa
/ programa()a.ent - arKu#vo de dados do programa
/ !caso! - l#stagem dos resultados
/ T.dat - arKu#vo de dados para 1aSer gr51#co
/ comandos()a.gnu - arKu#vo de comandos para gerar gr51#co
/ notepad.eDe - apl#cat#vo ed#tor dos arKu#vos t#po teDto
/ Wgnuplot.eDe - apl#cat#vo gerador de gr51#co
/ :::::::::::::::::::::::::::::::::::::::::::::::
use dados
use resultados
/ :::::::::::::::::::::::::::::::::::::::::::::::
#mpl#c#t none
#nteger :: comp
/:::::::::::::::::::::::::::::::::::::::::::::::::
call dateVandVt#me(vardate,vart#me,varSone,var)
[r#te(auD,) var(3)
auD= - tr#m(adQustl(auD))
[r#te(auD,) var(()
auD( - tr#m(adQustl(auD))
[r#te(auD,) var(=)
auD3 - tr#m(adQustl(auD))
d#a - `(`88tr#m(auD=)88`8`88tr#m(auD()88`8`88auD388`)`
[r#te(auD,) var(?)
auD= - tr#m(adQustl(auD))
[r#te(auD,) var(;)
auD( - tr#m(adQustl(auD))
[r#te(auD,) var(@)
auD3 - tr#m(adQustl(auD))
hora - tr#m(auD=)88`:`88tr#m(auD()88`:`88auD3
call leVdados
head - tr#m(t#tle)88! !88tr#m(d#a)88!`!
open(=),1#le-caso)
comp - len(tr#m(adQustl(t#tle)))
[r#te(=),=A) tr#m(adQustl(t#tle)), d#a, hora
=A 1ormat(8,`Ttulo - `, aJcompL, I
88,?D,`+#a - `,a=(,?D,`>ora - `,aA)
/ alocaMo de memZr#a
allocate ( G('), T(') )
allocate ( a[('), a0('), ae('), 30(') )
do # - =, '
G(#) - (#:=.)d)) 8 (':=)
end do
call mostraVdados
call solucaoVnumer#ca
close (=))
noteVcaso - `notepad `88caso
ver - s^stem(noteVcaso) / l#sta arKu#vo de resultados
/ :::::::::::::::::::::::::::::::::::::::::::::::
End
Figura 25/0 Ar;ui%o de comandos para o aplicati%o 'gnuplot do programa25a/!,5/
03: )#ecutar Duild, Compile para compilar o programa!onte %aria%eis/!,5/ )m seguida, e#ecutar
Duild, Compile para compilar os demais programas!onte na seguinte ordem: sol%ers]0*/!,5,
dados/!,5, coe!icientes/!,5, resultados/!,5 e programa25a/!,5/
04: Zerar o programae#ecut$%el !a?endo Duild, Duild/
0-: )#ecutar o programa atra%+s de Duild, )#ecute/ 6sar os dados mostrados na Figura 25/2/
0H: Analisar os resultados mostrados nas Figuras 25/3 e 25/4/ O erro apresentado pela soluo na
Figura 25/4 de%ese aos erros de arredondamento/
0>: )#ecutar no%amente o programa usando os mesmos dados da Figura 25/2, e#ceto, matri? I 0 e
analisar os no%os resultados/
0J: )#ecutar no%amente o programa usando os mesmos dados da Figura 25/2, e#ceto, matri? I 0 e
sol%er I 3, e analisar os no%os resultados/ Notar a reduo signi!icati%a no tempo de C&6 ao se usar o
m+todo T*=A em relao ao m+todo de )liminao de Zauss/
0,: )#ecutar no%amente o programa usando os mesmos dados da Figura 25/2, e#ceto, matri? I 2 e
sol%er I 3, e analisar os no%os resultados/
Figura 25/2 Ar;ui%o de dados do programa25a/!,5/
Figura 25/3/ Zr$!ico com resultados do programa25a/!,5 para os dados da Fig/ 25/2/
20.2 EXERCCIOS
)#erc.cio 25/0
)#ecutar no%amente o programa25a/!,5 usando os mesmos dados da Figura 25/2, e#ceto, matri? I 0 e
sol%er I 2/ &or tentati%a e erro, usar um %alor para a %ari$%el XiteracaoY ;ue seja su!iciente para satis!a?er
a toler7ncia 9Tol: estipulada na Figura 25/2/ Comparar o tempo de C&6 resultante neste caso, para o
m+todo de ZaussAeidel, N;uele do m+todo T*=A 9item 0J: e do m+todo de )liminao de Zauss 9item
0>:/
Figura 25/4 Ar;ui%o de resultados do programa25a/!,5 para os dados da Fig/ 25/2/
)#erc.cio 25/2
)#ecutar no%amente o programa25a/!,5 usando os mesmos dados da Figura 25/2, e#ceto, matri? I 2 e
sol%er I 2/ &or tentati%a e erro, usar um %alor para a %ari$%el XiteracaoY ;ue seja su!iciente para satis!a?er
a toler7ncia 9Tol: estipulada na Figura 25/2/ Comparar o tempo de C&6 resultante neste caso, para o
m+todo de ZaussAeidel, N;uele do m+todo T*=A 9item 0,: e do m+todo de )liminao de Zauss 9item
0H:/
0 &rocedimento: Criar e inserir programa!onte no projeto
&rocedimento: CR(AR ) (NA)R(R &ROZRA=AFONT) NO &RO3)TO
)#plica@es detal2adas esto na seo 0/> do cap.tulo 0/
&ara iniciar a edio ou escrita de um programa!onte em linguagem FORTRAN + necess$rio criar
e inserir um ar;ui%o dentro do projeto/ (sso + !eito atra%+s dos seguintes passos:
0: No menu do Fortran, e#ecutar: (nsert, Files into &roject
2: Na janela (nsert Files into &roject, e#ecutar o seguinte:
a: Na opo File Name, digitar o nome do programa!onte a ser criado/ Aempre de%ese usar !,5
como e#tenso dos nomes dos ar;ui%os do tipo programa!onte/ )le indica ;ue o programa est$ ou
ser$ escrito na linguagem FORTRAN ,5 ou ,-/
": Clicar so"re o "oto OS
3: Na janela =icroso!t *e%eloper Atudio, clicar so"re o "oto Ves
4: Na su"janela do lado es;uerdo do Fortran, clicar so"re o sinal E ao lado do nome do projetoG de%er$
aparecer o nome do programa!onte ;ue !oi inserido no projeto
-: Clicar duas %e?es so"re o nome do programa!onte ;ue !oi inserido
H: Na janela =icroso!t *e%eloper Atudio, clicar so"re o "oto Ves
>: O programa!onte inserido no projeto j$ est$ pronto para ser editado na su"janela do lado direito do
Fortran
&rocedimento: Criar projeto do tipo Console Application 0
Pro;8<im8D2o? CRIAR PRO(ETO DO TIPO CONSOLE
APPLICATION
)#plica@es detal2adas esto na seo 0/H do cap.tulo 0/
&ara criar um projeto do tipo Console Application, de%em ser e#ecutados os seguintes passos:
0: No menu do Fortran: File, Ne8/
2: Na janela Ne8, clicar so"re a opo &roject 'orKspace/ *epois, clicar so"re o "oto OS/
3: Na janela Ne8 &roject 'orKspace, + necess$rio e#ecutar o ;ue segue:
a: )ntre os seis tipos de projetos apresentados na opo TBpe, clicar so"re Console Application no
caso deste tipo de projeto no estar selecionado 9realado em a?ul:/
": Na opo Focation estar$ indicado um diret1rio 9pasta: de!ault, ou seja, um diret1rio escol2ido
pelo pr1prio Fortran em !uno de sua con!igurao atual/ P poss.%el ;ue no seja o diret1rio
desejado/ Neste caso, de%ese clicar so"re o "oto Dro8se para indicar o diret1rio onde se ;uer
criar o projeto/ Ao se !a?er isso, surgir$ a janela C2oose *irectorB na ;ual de%ese e#ecutar:
Na opo *ri%es, escol2er \:TTA)RC)R0TAlunos2554]0
Na opo *irectorB name, clicar duas %e?es so"re o nome do diret1rio ;ue + id<ntico ao
user name usado para acessar a rede 'indo8s do *)=)C^6F&R
Clicar so"re o "oto OS/
c: )star$ de %olta a janela Ne8 &roject 'orKspace/ Clicar dentro do espao de edio da opo
Name/ )scre%er o nome do projeto/ *e%ese perce"er ;ue o nome do projeto, digitado na opo
Name, aparece automaticamente na opo Focation/ )m seguida, de%ese clicar so"re o "oto
Create/ Ap1s isso, o Fortran criar$ um diret1rio com o nome do projeto indicado, dentro do
diret1rio j$ selecionado/
0 &rocedimento: Fim de sesso
Pro;8<im8D2o? FIM DE SESS$O
&ara concluir o uso do Fortran e do 'indo8s, de%ese e#ecutar o seguinte:
0: &ara encerrar as ati%idades com um projeto, "asta e#ecutar no menu do Fortran: File, Close
'orKspace
2: Na janela =icroso!t *e%eloper Atudio, clicar so"re o "oto Ves
3: &ara !ec2ar o aplicati%o Fortran, "asta !a?er o seguinte em seu menu: File, )#it
4: &ara !ec2ar o 'indo8s, e#ecutar: Atart, A2ut *o8n[
-: Na janela A2ut *o8n 'indo8s, escol2er a opo Close all programs and log on as a di!!erent
userR/ Clicar so"re o "oto Ves
REFERANCIAS BIBLIOGR-FICAS
A*A=A, 3/ C/G DRA(N)R*, '/ A/G =ART(N, 3/ T/G A=(TQ, D/ T/G 'AZ)N)R, 3/ F/ FO*)*AN ,$
Ha!d-ook. Complee ISO/ANSI *e&ere!ce/ Fondon : =(T &ress, 0,,>/
FORD)FFON), A/ F/ C/G )D)RA&ACQ)R, Q/ F/ L0ica de Pro0rama12o/ 2
a
ed/ Ao &aulo : =aKron
DooKs, 2555/
QAQN, D/ Forra! ,3 &or Scie!iss a!d 4!0i!eers/ Ne8 VorK : C2apman c Qall, 0,,4/
=ORA)A, &/ A/ Curso B5sico de L0ica de Pro0rama12o6 Campinas, 2555/
RA=AFQO, 3/ A/ A/ I!rodu12o 7 I!&orm5ica/ Ao &aulo : DerKeleB, 2555/
Re!er<ncias "i"liogr$!icas
0

S-ar putea să vă placă și