[D] Convenes usadas nestas notas: [D] Definio. [C] Comentrio. [CF] Comando Fortran. [SO] Comando do Sistema Operacional usado. [E] Comando de edio do editor de te!to usado. [E] E!emplo. ["] "ro#lema. [$] $tividade. [%] %&ria da rea '(ar)o*. [D] +tecla, si)nifica uma dada tecla -ue deve ser pressionada. [C] .comandos -ue voc/ deve di)itar. estaro sempre entre aspas.
[C] $o iniciar as atividades da aula do dia0 si)a os se)uintes passos para a utili1ao da sua conta: 2. Fa1er a cone!o com o computador -ue cont3m a sua conta0 atrav3s do pro)rama SS4 '-ue est contido no pro)rama "56 -ue normalmente usamos*0 com o computador diamante0 atrav3s de seu nome completo 'diamante7lfct.fc.unesp.#r* ou do seu n8mero '9::.2;<.2<=.2;=*. 9. $o prompt do $nu0 di)itar o seu username 'ou login, -ue 3 o nome da conta do usurio* e password 'sen>a*. ?. Editar os seus ar-uivos 'de pro)ramas e dados* com o editor @OE di)itando .(oe nome.e!t.A+enter,. ;. Compilar o seu pro)rama nome.fB: usando o comando: .)fortran nome.fB: 7o nomedoe!ecutvel . A +enter,. <. Se no for poss&vel a compilao0 volte ao passo ?0 para corri)ir erros. C. E!ecute o seu pro)rama com o comando .nomedoe!ecutvel. A +enter,. D. Se no for poss&vel a e!ecuo0 volte ao passo ?. =. $pEs a e!ecuo de todas as suas tarefas0 saia de sua conta usando o comando .logout". 0.2. O editor de textos "JOE" [C] Em um sistema 5ni!0 tal como no DOS e FindoGs0 e!istem muitos editores de te!to dispon&veis. Hamos a-ui nos referir a um dos mais simples editores de te!to do 5ni! -ue0 ao mesmo tempo0 oferece uma -uantidade #oa de recursos 'e se encontra instalado na m-uina $nu*. rata7se do editor joe. O (oe 3 #aseado nas teclas de controle usados no Fordstar outros editores de te!tos de pro)ramas da Iorland 'tur#opascal0 tur#oc0 etc.*. Juitos dos comandos so invocados di)itando7se Ctrl7K se)uido por outra tecla. O editor0 tanto para criar um ar-uivo novo como para editar um ( e!istente0 3 evocado como: joe nomedoarquivo
[C] "ara o#ter uma (anela com comandos do (oe0 apEs entrar no pro)rama0 di)ite Ctrl7K> e aparecer uma lista)em de comandos. Di)ite novamente Ctrl7K> para -ue a (anela desaparea. Jais informaes so#re o (oe 'por e!emplo0 como editar dois pro)ramas em duas (anelas ao mesmo tempo* podem ser o#tidas pelo comando .man (oe. -uando em uma sesso de tra#al>o na $nu.
[C] $ se)uir temos uma ta#ela com comandos do (oe0 sendo -ue o s&m#olo L indica a tecla Ctrl.
LK> mostra a tela da a(uda LKd salva e no sai LK! salva e sai LK- sai e no salva Lc sai e per)unta se salva Comandos para mover7se dentro do ar-uivo Lv desce uma tela Lu volta uma tela L! vai para a prE!ima palavra L1 volta para a palavra anterior Lp volta para a lin>a anterior Ln vai para a lin>a se)uinte Le vai para o fim da lin>a La vai para o in&cio da lin>a LKu vai para o in&cio do ar-uivo LKv vai para o fim do ar-uivo LKl vai para uma lin>a de n8mero espec&fico Comandos para apa)ar te!to Ld apa)a um caracter LG apa)a uma palavra LM apa)a uma lin>a LN ou LO desfa1 a ultima apa)ada Comandos para procura e troca LKf procura e troca Ll procura a prE!ima ocorr/ncia do mesmo te!to Comandos para tra#al>ar com #locos LK# marca o in&cio do #loco LKK marca o fim do #loco LKc copiar o #loco marcado para a locali1ao atual LKm move o #loco marcado para a locali1ao atual LKM apa)a o #loco marcado [C] "ara criar te!to0 usa7se o teclado do micro como se fosse uma m-uina de escrever0 sendo -ue a tecla +enter, fa1 o retorno de carro 'ou se(a: nova lin>a* e a tecla +#acKspace, apa)a os erros -ue cometemos.
[C] "ara .passear. pelo te!to0 use as teclas: +flec>a para cima,0 +flec>a para #ai!o,0 +flec>a para o lado direito, e +flec>a para o lado es-uerdo,.
[C] SEJ"PE dei!e uma lin>a em #ranco no final do ar-uivo. Qsto 3 necessrio ao se usar o (oe para ar-uivos de Fortran 'pro)ramas e dados*. 0.. !iste"a Opera#ional [D] O .Sistema Operacional. 'SO* 3 um pro)rama -ue )erencia os ar-uivos arma1enados em discos r&)idos e fle!&veis: arma1enamento0 recuperao e outras operaes.
[C] $l3m de )erenciar os discos0 o SO tam#3m pode alterar al)umas caracter&sticas do computador em relao R tela de v&deo0 teclado0 impressoras0 etc...
[D] 5m .ar-uivo. 3 um documento -ual-uer 'um pro)rama0 por e!emplo* arma1enado em dispositivos 'discos* de arma1enamento do computador. $ traduo desta palavra do in)l/s para o portu)u/s foi infeli10 pois para nEs0 um ar-uivo -uer di1er um mEvel -ue )uarda uma coleo de pastas. Sa lin)ua)em de informtica0 por3m0 a traduo infeli1 3 arrai)ada e -uer di1er uma coleo de dados arma1enados (untos 'o con(unto de todas as letras di)itadas em um pro)rama formam um ar-uivo*.
[C] $ .Estrutura de DiretErios.. Da mesma forma -ue as pastas de um ar-uivo de escritErio cont3m )rupos de documentos afins0 os diretErios podem conter )rupos de ar-uivos afins0 -ue so a)rupados em .su#7diretErios.. $ estrutura de diretErios pode ser representada por um es-uema: .diretErio rai1. diretErios su#7diretErios T T T77777777777777777777777fiscomp2 T T T77777777777777777777777cartas T T T77777777777777777777777tarefas T T T7777777777777777777777777777777777f&sica T T T7777777777777777777777777777777777#iolo)ia
[C] 5m comando do SO pode possuir at3 ? partes: o .nome do comando.0 os parUmetros '-ue so o#ri)atErios para al)uns comandos* e as .opes. '-ue so opcionais para -uase todos os comandos*. Escreveremos um comando com a se)uinte conveno: nomedocomando [parUmetro2] [parUmetro9]...[parUmetroS] +7opo2, +7opo9,...+7opoS,
[C] $pEs entrar na conta0 resulta uma su#lin>a piscando na tela0 a -ual c>amamos de .lin>a de comando.. Esta su#lin>a piscante c>ama7se .cursor.. O cursor mostra onde os comandos podem ser di)itados. Vuando voc/ di)ita um caracter0 o cursor se move um espao para a direita. Se voc/ cometer um erro0 pressione a tecla +W, ou +#acKspace, para eliminar um caractere R es-uerda. erminada a di)itao0 #asta pressionar a tecla +enter, ou +return, para -ue o comando se(a e!ecutado.
[C] "ara interromper a e!ecuo de um comando0 tecle +ctrlAc,.
[C] "ode7se o#ter uma descrio completa de um comando di)itando7se: man nomedocomando
[SO] .cd.: muda ou e!i#e o diretErio atual. E!emplos: cd tarefas : muda para o su#7diretErio tarefas cd .. : muda para o diretErio de cima
[SO] .cp.: fa1 uma cEpia de um ar-uivo. E!emplos: cp pro)2.f pro)2a.f : fa1 uma cEpia de pro)2.f -ue se c>ama pro)2a.f
[SO] .rm.: elimina ar-uivos especificados. E!emplos: rm pro)2.f : apa)a o ar-uivo pro)2.f rm pro)X.f : apa)a todos os ar-uivos -ue comecem por pro) e terminem com .f
[SO] .ls 7la.: e!i#e uma lista de ar-uivos e su#diretErios de um diretErio 'o apelido0 na $S5 3 .dir.*.
[SO] .mv.: modifica o nome de um ar-uivo. E!emplo: mv pro)2.f pro)9.f : troca o nome de pro)2.f para pro)9.f
[SO] .cat.: e!i#e o conte8do de um ar-uivo de te!to. E!emplo: cat pro)2.f
Cap&tulo 2: Soes "reliminares 1.1. Introdu$%o [C] .O -ue todo computador pode realmente fa1er 3 se)uir ordens muito simples0 as -uais foram cuidadosamente consideradas e refletidas por um pro)ramador e escritas em uma lin)ua)em de pro)ramao0 como o Fortran.. 1.2. Co"putadores [C] 4 somente ; tipos de instrues -ue um computador pode reali1ar: 2. $rma1enamento e recuperao de informaes da memEriaY 9. ClculosY ?. Entrada e sa&da de dadosY ;. Controle de pro)rama. [C] Es-uema de um computador:
1.. Al&orit"os [D] 5m .al)oritmo. 3 um con(unto de instrues passo7a7passo para resolver um pro#lema.
[D] 5m al)oritmo correto deve possuir ? -ualidades: 2. Cada passo no al)oritmo deve ser uma instruo -ue possa ser reali1ada. 9. $ ordem dos passos deve ser precisamente determinada. ?. O al)oritmo deve ter fim. [$] Ela#orao em )rupos de ? de um al)oritmo para -ue um dos elementos do )rupo desempen>e a se)uinte tarefa: Sair de uma posio na sala de aula0 -ue ser determinada pelo professor0 at3 o interruptor das lu1es e providenciar o desli)amento destas. $s operaes corporais poss&veis devem ser determinadas antes do comeo do tra#al>o em )rupo0 em con(unto entre os alunos e o professor. $pEs o t3rmino do tra#al>o dos )rupos0 o professor escol>er aleatoriamente tra#al>os0 os ler em vo1 alta0 determinando se os passos do al)oritmo esto contidos no con(unto de operaes permitidas. Se isto for verdade0 um dos elementos do )rupo ler em vo1 alta os passos -ue sero e!ecutados por outro mem#ro do )rupo. Su)estes de operaes permitidas: camin>ar0 )irar o corpo ')raus e sentido*0 levantamento de #rao ')raus e sentido*0 movimento de mo0 ce)ueira do e!ecutor0 etc. 1.'. (ia&ra"as de )luxo [D] .Dia)ramas de Flu!o. fornecem uma representao )rfica de um al)oritmo.
[D] "rincipais s&m#olos de dia)ramas de flu!o:
1.*. +in&ua&ens de ,ro&ra"a$%o [D] 5m .pro)rama de computador. 3 um al)oritmo escrito numa lin)ua)em de pro)ramao0 como o Fortran.
[C] E!istem ? n&veis de lin)ua)ens de pro)ramao: 2. Zin)ua)ens de #ai!o n&vel 'ou de m-uina*. 9. Zin)ua)ens de n&vel intermedirio 'ou sim#Elica montadora*. ?. Zin)ua)ens de alto n&vel 'ou de compiladores*. 1.*.1 +in&ua&e" de -./uina [D] Cada instruo 3 constitu&da de 9 partes: cEdi)o de operao operando's* [D] O .cEdi)o de operao. instrui o computador para reali1ar uma funo espec&fica: adio0 su#trao0 leitura0 escrita0 comparao0 movimento de dados0 etc...
[D] O's* operando's* especifica'm* o endereo do dado a ser operado0 endereo do dispositivo de entrada[sa&da0 etc...
[E] E!emplo do trec>o principal de um pro)rama em lin)ua)em de m-uina para calcular <$A2CI P \ 7777777777 7 D C onde os valores de $0 I0 C0 D e P esto arma1enados nos endereos 2:::0 2::;0 2:290 2:9: e 9:<: da memEria.
CEdi)o da Operao Operando Comentrio 2; 2::: carre)a $ no acumulador 29 \< multiplica o acumulador por < 2< ?::: arma1ena conte8do acumulado no endereo ?::: 2; 2::; carre)a I no acumulador 29 \2C multiplica acumulador por 2C 2: ?::: adiciona acumulador com conte8do de ?::: 2? 2:29 divide acumulador pelo conte8do de 2:29 22 2:9: su#trai do acumulador o conte8do de 2:9: 2< 9:<: arma1ena acumulador em 9:<: [C] Sa realidade0 um pro)rama real em lin)ua)em de m-uina0 para ser compreendido por ela0 )eralmente 3 escrito no sistema #inrio.
1.*.2. +in&ua&e" !i"0li#a -ontadora [C] $s lin)ua)ens sim#Elicas procuram facilitar a tarefa do pro)ramador0 criando mnem]nicos para as operaes.
[C] Os pro)ramas montadores tradu1em um pro)rama fonte 'ou se(a0 em lin)ua)em sim#Elica* em um pro)rama o#(eto 'ou se(a0 em lin)ua)em de m-uina*. [E] O trec>o de pro)rama visto acima0 ficaria em uma lin)ua)em sim#Elica parecido com:
Operao Operando Comentrio C$P $ carre)a $ J5Z < multiplica por < $PJ J" arma1ena o resultado em J" C$P I carre)a I J5Z 2C multiplica por 2C $DQ J" adiciona o resultado com o conte8do de J" DQH C divide o resultado por C S5I D su#trai o resultado de D $PJ P arma1ena o resultado em P 1.*.. +in&ua&ens de Co"piladores [C] 5ma lin)ua)em de compilador 'ou de alto n&vel* tem por o#(etivo permitir ao pro)ramador se utili1ar de uma lin)ua)em muito prE!ima R-uela utili1ada no am#iente no -ual se coloca a tarefa a ser reali1ada.
[C] Os pro)ramas compiladores tradu1em um pro)rama fonte0 escritos em uma lin)ua)em de alto n&vel0 em um pro)rama o#(eto em lin)ua)em de m-uina.
[E] O trec>o de pro)rama visto acima0 ficaria na lin)ua)em de alto n&vel Fortran id/ntico a: P \ '<.:X$ A 2C.:XI* [ C 7 D
[C] Etapas do processamento de um pro)rama em lin)ua)em de alto n&vel:
1.1.,assos no (esen2ol2i"ento de ,ro&ra"as
Captulo 2: A +in&ua&e" )ortran: Con#eitos 3.si#os 2.1 Introdu$%o [C] FOPP$S \ FOPmula P$Sslation 'em portu)u/s: traduo de fErmulas*.
[D] O Fortran 3 uma lin)ua)em simples cu(o voca#ulrio consiste de um con(unto de palavras0 con>ecidas como .palavras7c>ave. 'para se ter uma id3ia0 no FortranDD eram cerca de ;<:Y atualmente o n8mero 3 #em maior*.
[D] 5m .comando. Fortran 3 uma sentena escrita nesta lin)ua)em. 5m pro)rama consiste numa se-^/ncia de comandos0 cada um escrito numa lin>a.
2.2. (e4ini$5es da +in&ua&e" [D] Programa Principal 3 uma unidade -ue pode c>amar outras unidades de pro)rama0 mas -ue no pode ser c>amado por estas. O pro)rama principal 3 -uem rece#e o controle da e!ecuo no in&cio da fase de e!ecuo.
[D] Subprograma 3 uma unidade de pro)rama -ue 3 c>amada por outra unidade de pro)rama. "ode ser de dois tipos: su#rotina ou funo. 5sualmente um su#pro)rama rece#e parUmetros de entrada e retorna parUmetros de sa&da.
[D] Funo Intrnseca 3 uma funo suprida pelo compilador e -ue reali1a operaes so#re n8meros ou caracteres.
[D] Programa Eecut!vel 3 um pro)rama ( em lin)ua)em de m-uina -ue pode ser e!ecutado pelo computador. Consiste de um pro)rama principal e su#pro)ramas.
[D] "omando Eecut!vel 3 a-uele -ue efetua clculos0 testes0 providencia entrada ou sa&da de dados0 altera o flu!o de e!ecuo ou atri#ui valores a variveis.
[D] "omando #o$Eecut!vel 3 a-uele -ue descreve as caracter&sticas de uma unidade de pro)rama0 dos dados ou de informaes de edio.
[D] %nidade de Programa 3 uma se-^/ncia de comandos terminando com um comando ESD.
[D] &rquivos de 'ados so unidades de entrada e sa&da de dados0 pass&veis de serem lidos[escritos por um pro)rama.
2.. Itens sint.ti#os do )ortran [D] Sintae 3 a parte da )ramtica -ue estuda a disposio das palavras na frase e a das frases no discurso.
[D] "onstantes so valores ou n8meros -ue ocorrem num pro)rama.
[D] #ome simb(lico 3 uma se-^/ncia de uma ou mais letras ou d&)itos0 o primeiro dos -uais deve ser uma letra.
[D] )ari!veis so valores ou n8meros ou con(untos de caracteres -ue ocorrem num pro)rama e -ue podem sofrer variaes durante a e!ecuo do pro)rama. Sa realidade uma varivel 3 o nome de uma locali1ao da memEria.
[D] #*mero de comando 3 um n8mero de um a cinco d&)itos0 um dos -uais deve ser diferente de 1ero e 3 usado para identificar um comando. Deve estar locali1ado no in&cio da lin>a.
[D] Palavra c+ave 3 uma se-^/ncia de letras -ue identificam e!clusivamente comandos Fortran.
[D] ,perador 3 um ente similar a um operador matemtico.
[C] Halores so o#tidos da memEria -uando eles so usados no lado direito do sinal de i)ual.
[C] O#serve -ue o sinal de .\. no indica uma i)ualdade e sim uma atri#uio.
[C] O Fortran permite -ue voc/ defina diferentes tipos de variveis. 5sa7se variveis inteiras para arma1enar n8meros inteiros0 variveis reais para n8meros reais0 variveis comple!as para n8meros comple!os0 variveis caracter para palavras e frases0 etc.
[C] Hoc/ pode definir os tipos de variveis no seu pro)rama atrav3s de .comandos de definio de tipo..
[CF] E!istem vrios comandos Fortran para a definio de tipo de varivel0 entre os -uais .C4$P$CEP.0 .QSE%EP. e .PE$Z..
[C] Os clculos podem ser feitos atrav3s de comandos de atri#uio0 escrevendo7se uma .e!presso. no lado direito do sinal de i)ual.
[C] S&m#olos de operaes matemticas 'tam#3m con>ecidos como .operadores aritm3ticos.*: adio0 .A.Y su#trao0 .7.Y multiplicao0 .X.Y diviso0 .[.Y potenciao0 .XX..
[C] "ode7se usar par/nteses para a)rupar termos em e!presses Fortran0 como 3 feito em l)e#ra.
2.'. Cara#teres usados no )ortran [D] O con(unto de caracteres Fortran 3 constitu&do de: letras 'ou caracteres alfa#3ticos*0 d&)itos 'ou caracteres num3ricos* e s&m#olos especiais como \0 A0 70 [0 X0 etc.
[C] _ preciso tomar cuidado em relao aos s&m#olos especiais0 pois estes podem variar de funo dependendo do fa#ricante do compilador.
2.*. 6"a 2is%o &eral do )ortran [E] E!emplo de um pro)rama para calcular a m3dia das notas de uma prova de uma turma e determinar o n8mero de notas acima e a#ai!o de <0:. Hamos usar a e-uao a#ai!o para calcular a m3dia da turma: 0 sendo -ue: J \ m3dia da turma0 nota'i* \ nota do aluno i0 S \ n8mero total de alunos. O cEdi)o do pro)rama poderia ser: program media - programa para calcular a media de uma turma - programador. F"/avarda implicit none integer i,nt,ns0,ni0 real mt,nota,soma soma1232 ns012 ni012 print 4,5'igite o numero total de alunos. 5 read 4, nt do i16,nt print 4,5'igite a nota do aluno 5,i read 4,nota soma1soma7nota i89nota:1032; t+en ns01ns076 else ni01ni076 endi8 enddo mt1soma<nt print 4,5444 =esultados 4445 print 4,5>edia da turma. 5,mt print 4,5#otas superiores ou iguais a 032 1 5,ns0 print 4,5#otas in8eriores a 032 1 5,ni0 stop end
[C] He(a fi)ura a se)uir contendo o flu!o)rama para o pro)rama media.fB:. [C] 5ma .varivel. Fortran 3 um nome para uma locali1ao de memEria. Hariveis no e!emplo acima: nt0 ns<0 ni<0 mt0 nota0 soma0 i.
[C] O .valor. de uma varivel 3 a informao arma1enada na locali1ao de memEria -ue 3 representada pela varivel.
[D] 5m .comando de atri#uio. 3 o tipo de comando -ue permite arma1enar um valor em uma varivel. Comandos de atri#uio no e!emplo acima: soma1232 ns012 ni012 soma1soma7nota ns01ns076 ni01ni076 mt1soma<nt
[C] Vuando voc/ atri#ui um valor a uma varivel0 o valor anteriormente arma1enado 3 destru&do.
[C] Os comandos num pro)rama Fortran so0 normalmente0 e!ecutados na ordem em -ue so escritos. Entretanto0 pode7se alterar esta ordem de e!ecuo atrav3s dos .comandos de controle de flu!o..
[CF] 5m comando de controle -ue representa uma deciso 3 a construo .QF74ES7EZSE.0 -ue 3 sempre terminado por um comando ESDQF.
[C] He(a fi)ura a se)uir para uma tomada de deciso e desvio do flu!o de e!ecuo. [E] He(a fi)ura a se)uir para o flu!o)rama para o al)oritmo -ue decide aprovar ou reprovar um aluno0 #aseado na sua m3dia final. [C] Comandos Fortran para o flu!o)rama anterior: if'mf,\<.:*t>en situacao\`aprovado` else situacao\`reprovado` endif
[CF] 5m comando de controle -ue representa um lao 3 o comando .DO.0 -ue 3 sempre terminado por um comando ESDDO.
[C] Em FortranDD0 um comando DO pode terminar por um comando numerado.
[C] He(a a se)uir um flu!o)rama de um lao de repetio. [E] He(a a se)uir o flu!o)rama para o al)oritmo para somar todos os n8meros naturais de 2 a 2:. [C] Comandos Fortran para o flu!o)rama anterior: soma\: do i\202:02 soma\somaAi enddo
[E] He(a a se)uir o flu!o)rama para o al)oritmo para somar todos os n8meros naturais pares de 2 a 2:. [C] Comandos Fortran para o flu!o)rama anterior: soma\: do i\902:09 soma\somaAi enddo
[CF] "ara di1er ao computador para parar a e!ecuo de seu pro)rama0 voc/ usa o comando .SO"..
[CF] $ 8ltima lin>a em -ual-uer unidade de pro)rama Fortran 3 sempre o comando .ESD..
2.1. Codi4i#a$%o de pro&ra"as e" )ortran 2.1.1. )or"ato +i2re 7)ortran80 e posteriores9 [D] Cada comando 3 escrito numa lin>a.
[C] Cada lin>a de comando possui at3 2?9 colunas. O editor de te!to 3 capa1 de tra#al>ar com um n8mero maior de colunas 'cuidadoa*.
[D] Continuao de comandos: muitas ve1es um comando no ca#e nas colunas dispon&veis em uma lin>a 'ou no se -uer escrever tudo numa lin>a*. 5ma .lin>a de continuao. pode ento ser definida simplesmente colocando7se um caractere b no final da lin>a e continua7se na de #ai!o. "ode7se fa1er isto at3 ?B ve1es se)uidas0 de modo -ue um comando pode ter at3 ;: lin>as. Como su)esto de #oa pro)ramao0 as colunas [20<] podem ficar em #ranco.
[C] "ara a codificao de ar-uivos de dados de entrada e sa&da0 estes se)uem a estrutura -ue porventura se(a definida no prEprio pro)rama -ue vai ler[escrever neste ar-uivo.
2.1.2. )or"ato )ixo 7)ortran:: e anteriores9 [D] Cada comando 3 escrito numa lin>a e cada lin>a0 por sua ve10 3 dividida em .campos.0 -ue so con(untos de colunas.
[C] Cada lin>a de comando possui =: colunas. O editor de te!to 3 capa1 de tra#al>ar com um n8mero maior de colunas 'cuidadoa*.
[D] Cada lin>a 3 dividida em ; campos0 -ue so formados pelos con(untos de colunas [20<]0 [C]0 [D0D9] e [D?0=:].
[D] "ampo de n*meros de comando0 colunas [20<]: um n8mero de comando '-ual-uer n8mero inteiro e maior -ue 1ero0 consistindo de < d&)itos* pode ser escrito nas colunas de 2 a <. Irancos e 1eros R es-uerda so i)norados.
[D] "ampo de continuao de comandos0 coluna [C]: muitas ve1es um comando no ca#e nas CC colunas dispon&veis em uma lin>a. 5ma .lin>a de continuao. pode ento ser definida simplesmente colocando7se um caractere -ual-uer diferente de #ranco e 1ero na coluna C. "ode7se fa1er isto at3 2B ve1es se)uidas0 de modo -ue um comando pode ter at3 9: lin>as. $s colunas [20<] devem ficar em #ranco.
[D] "ampo de comandos0 colunas [D0D9]: somente nestas colunas pode7se escrever um comando Fortran.
[D] "ampo de identi8icao0 colunas [D?0=:]: este campo 3 usado somente para identificao do pro)rama. Qsto 3 uma >erana muito vel>a0 pouco usado >o(e. %eralmente o compilador -ue ainda se importa com a identificao do pro)rama0 escreve os primeiros = caracteres do nome do pro)rama nestas colunas.
[D] /in+as de coment!rio0 coluna [2]: -ual-uer lin>a -ue conten>a uma letra .c. ou um asterisco .X. na coluna 2 so i)noradas em Fortran. So usadas para inserir comentrios dentro de um pro)rama Fortran.
[C] "ara a codificao de ar-uivos de dados de entrada e sa&da0 estes se)uem a estrutura -ue porventura se(a definida no prEprio pro)rama -ue vai ler[escrever neste ar-uivo.
Captulo : Constantes; <ari.2eis e Conjuntos .1 Introdu$%o [C] Este cap&tulo trata de definir corretamente os componentes #sicos dos comandos Fortran. $l)uns ( vimos no cap&tulo anterior0 como .itens de sinta!e..
[D] .Constantes. so valores fi!os0 tais como n8meros. Estes valores no podem ser alterados pelos comandos do pro)rama. E!emplos: ?.:0 ?0 `palavra`.
[C] .Hariveis. so nomes sim#Elicos -ue representam valores arma1enados na memEria do computador. Estes valores podem ser alterados pelos comandos do pro)rama.
[D] .Con(untos. so )rupos de variveis0 cu(os valores so arma1enados ad(acentemente e podem ser referenciados individualmente atrav3s de um nome sim#Elico com um &ndice. So con>ecidos tam#3m como .variveis inde!adas. 'HQ*.
[D] 5m .operador. 3 um s&m#olo espec&fico para uma determinada operao. E!emplo: A 'soma*.
[D] .E!presses. so com#inaes de constantes0 variveis0 elementos de con(untos e operadores. E!emplo: ?.:Xvar2Avar9.
[E] So .comando de atri#uio. a#ai!o: fat \ a'?* X ; X 'I A 9.<* temos a .e!presso. a'?*X;X'IA9.<*. Sesta e!presso temos duas .constantes. '; e 9.<*0 uma .varivel. 'I*0 uma varivel inde!ada 'a'?**0 dois .operadores. 'X e A* e par/nteses. Hemos tam#3m -ue temos uma constante inteira ';* e uma real '9.<*Y as variveis a'?* e I dependem de como ten>am sido definidas.
[E] So trec>o de pro)rama a#ai!o: print X0 `di)ite a velocidade inicial:` read X0 v:M )\B.= dt\:.2 do i \20np t'i*\iXdt M'i*\v:MXt'i*7:.<X)Xt'i*XX9 enddo ... do i\20np print X0t'i*0M'i* enddo vemos o uso das .variveis inde!adas. t'i* e M'i*.
.2. Constantes [D] 5ma .constante. 3 uma -uantidade fi!a e invarivel.
[D] O Fortran distin)ue tr/s classes de constantes: num3ricas0 lE)icas e cadeias de caracteres.
[D] $s constantes num3ricas -ue mais nos interessam so: 7 Qnteiras: para n8meros inteiros decimais 'escritos sem o ponto decimal*. 7 Peais: para n8meros decimais 'ou fracionrios*. 7 Dupla preciso: para n8meros reais com mais d&)itos si)nificativos -ue o normal. 7 Comple!os: para n8meros comple!os.
[D] $s constantes lE)icas podem ser: 7 .true. : representa o valor .verdade.. 7 .false. : representa o valor .falso..
[D] $s constantes .cadeias de caracteres. so uma se-^/ncia de caracteres alfanum3ricos e[ou especiais sempre entre aspas.
[C] O comando "$P$JEEP pode ser usado para associar um nome sim#Elico a uma constante.
.2.1. Constantes Inteiras [C] O intervalo m!imo de valores poss&veis para constantes inteiras varia de m-uina para m-uina. O menor intervalo 3 de [7BBBB0ABBBB].
.2.2. Constantes =eais [D] 5ma constante real 3 uma cadeia de d&)itos escrita com ponto decimal0 com um e!poente ou com am#os0 e!pressando um n8mero real. E!.: :.29?0 29?.:E7:?0 729?.:E7:? .
[C] O intervalo de valores poss&veis para o e!poente0 #em como a preciso do n8mero '-uantidade m!ima de d&)itos si)nificativos* varia de m-uina para m-uina. O menor intervalo con>ecido 3 de 2: 79= a 2: A9= . $ preciso do n8mero 3 tipicamente no m&nimo de D d&)itos.
.2.. Constantes Cara#teres [C] O comprimento m!imo de uma cadeia de caracteres )eralmente no 3 menor -ue 9<<.
.. <ari.2eis [D] 5ma varivel possui um nome e um tipo0 podendo assumir diversos valores.
[D] Pe)ras para nomes de variveis: 2. Os nomes devem comear com uma letra. 9. Os nomes podem conter letras e d&)itos. [D] ipos de variveis: inteiras0 reais0 dupla preciso0 comple!as0 lE)icas e caracteres0 -ue possuem caracter&sticas similares Rs constantes.
..1. <ari.2eis Inteiras [D] Se no for usado o comando QJ"ZQCQ SOSE0 por conveno0 toda varivel num3rica cu(o nome inicia por uma das letras i0 (0 K0 l0 m ou n0 3 uma varivel inteira.
[C] $s variveis inteiras podem assumir valores na mesma fai!a das constantes inteiras.
..2 <ari.2eis =eais [D] Se no for usado o comando QJ"ZQCQ SOSE0 por conveno0 toda varivel num3rica cu(o nome no inicia por uma das letras i0 (0 K0 l0 m ou n0 3 uma varivel real.
[C] $s variveis reais podem assumir valores na mesma fai!a -ue as constantes reais.
... <ari.2eis Cara#tere [D] 5ma varivel caractere 3 uma varivel -ue 3 declarada como caractere atrav3s dos comandos de especificao e!pl&cita ou do comando QJ"ZQCQ. $ -uantidade de caracteres numa varivel caractere 3 especificada -uando da declarao da varivel caractere.
[E] He(a os se)uintes e!emplos de comandos de especificao de variveis caractere: 2. implicit c>aracterX9= 'M01* 9. c>aracterX?C lin>a ?. c>aracter somaX2<0matri1XC; emos -ue lin>a0 soma e matri1 so especificadas como variveis caractere contendo ?C0 2< e C; caracteres0 respectivamente. $l3m disso0 todas as variveis cu(a primeira letra 3 M ou 1 so tam#3m declaradas como variveis caractere contendo 9= caracteres cada uma.
.'. Conjuntos [C] Sesta seo nos ocuparemos dos con(untos de variveis0 ou variveis inde!adas 'HQ*0 ( definidos no in&cio deste cap&tulo.
[C] 5ma HQ possui um nome0 um tipo e um con(unto de &ndices 'ou um 8nico &ndice*.
[D] .Hetor. 3 uma HQ -ue possui um 8nico &ndice0 e por isto 3 dito uma HQ unidimensional.
[E] $ varivel t no trec>o de pro)rama a#ai!o 3 um vetor: dimension t'2:* t'2*\:.2 t'9*\:.9 t'?*\:.? ... t'2:*\2.:
[D] .Jatri1. 3 uma HQ -ue possui dois con(untos de &ndices e por isto 3 dita #idimensional.
[E] $ varivel a no trec>o de pro)rama a#ai!o 3 uma matri1: dimension a'?0?* do i \ 20? do ( \ 20? a'i0(* \ :.: enddo enddo 7 Pepresentao Jatricial da varivel a: 7 Forma de arma1enamento na memEria:
... a 22 a 92 a ?2 a 29 a 99 a ?9 a 2? a 9? a ?? ... [D] Di1emos -ue uma HQ 3 uma matri1 n7dimensional -uando esta possui um con(unto de n &ndices.
[D] So Fortran DD0 uma HQ no podia possuir mais do -ue D &ndices.
.'.1 (e#laradores de Conjuntos [CF] Comando DQJESSQOS: permite especificar uma determinada varivel como sendo uma varivel inde!ada.
[E] E!emplos do uso do comando DQJESSQOS: 2* dimension a'=* onde = 3 n8mero m!imo de diferentes a`s. 9* dimension a'=*0#'<0C* sendo -ue < e C so os valores m!imos do primeiro e se)undo &ndices '-ue resultam em ?: diferentes #`s*. ?* inte)er a real # dimension a'=*0#'<0C* sendo -ue o vetor a 3 um vetor de n8meros inteiros e # uma matri1 de n8meros reais. ;* dimension c'::2:*0d'2:;02:?02:<* sendo -ue: c \ vetor de 22 elementos0 sendo o primeiro c':* e o 8ltimo c'2:*Y d \ matri1 tridimensional de C: elementos0 sendo -ue o primeiro elemento 3 d'20202* e o 8ltimo 3 d';0?0<*
Captulo ': Express5es
'.1. Introdu$%o [D] 5ma .e!presso. Fortran 3 definida como uma com#inao de itens sintticos0 isto 3: uma e!presso pode consistir de uma 8nica constante0 de uma 8nica varivel0 de um 8nico elemento de con(unto0 ou uma com#inao de constantes0 variveis0 elementos de con(untos0 unidos com um ou mais operadores e0 possivelmente0 a)rupados com par/nteses.
[D] .Operadores. especificam as computaes a serem reali1adas so#re os valores dos elementos #sicos.
[D] $s e!presses0 no Fortran0 so classificadas em aritm3ticas0 caracteres0 relacionais e lE)icas.
'.2. Express5es Arit">ti#as [D] 5ma .e!presso aritm3tica. 3 usada para e!pressar uma computao num3rica. O clculo desta e!presso produ1 um valor num3rico cu(o tipo 3 inteiro0 real0 dupla preciso ou comple!o.
[D] Os .operadores aritm3ticos. so definidos pela ta#ela a#ai!o: Operador Definio 5so Si)nificado 7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 XX potenciao aXX# a elevado R pot/ncia # X multiplicao aX# a multiplicado por # [ diviso a[# a dividido por # A adio aA# a mais # 7 su#trao a7# a menos # 7 menos unrio 7a a com sinal invertido
[C] Em e!presses contendo um 8nico operando0 o tipo do operando define o tipo de e!presso.
[C] Em e!presses com mais de um tipo de operando0 o tipo da e!presso depende dos tipos dos operandos e dos operadores.
[D] "ara todas as operaes 'com e!ceo da potenciao*: 2. Se os operandos forem do mesmo tipo0 este ser o tipo da e!presso. 9. Se os operandos forem de tipos diferentes0 o tipo da e!presso ser o tipo do operando de maior preced/ncia0 dada pela ta#ela a#ai!o: ipo "reced/ncia 7777777777777777777777777777777777777777777 inteiro 2 real 9 dupla preciso ? comple!o ;
[D] Pe)ras para ordem de computao: 2. "ar/nteses podem ser usados para a)rupar operandos em uma e!presso. Vual-uer e!presso entre par/nteses 3 calculada antes do clculo da e!presso da -ual ela 3 uma parte. "ar/nteses mais internos so calculados antes. 9. Com e!ceo do uso dos par/nteses0 as operaes so reali1adas na se)uinte ordem de preced/ncia: Operao "reced/ncia 77777777777777777777777777777777777777777777777777777777777777 A e 7 mais #ai!a X e [ intermediria XX mais alta ?. "ara operadores de mesma preced/ncia0 o clculo se desenvolve da es-uerda para a direita. ;. "otenciaes consecutivas so reali1adas da direita para a es-uerda.
'.. Express5es =ela#ionais [D] 5ma .e!presso relacional. 3 usada para comparar os valores de duas e!presses aritm3ticas 'ou os valores de duas e!presses caractere*.
[D] $ comparao entre duas e!presses aritm3ticas 3 feita atrav3s dos .operadores relacionais..
[C] O clculo de uma e!presso relacional produ1 um resultado lE)ico0 com um valor .verdade. ou .falso.. $ e!presso 3 interpretada como .verdade. se os valores dos operandos satisfa1em a relao matemtica especificada pelo operador0 e .falso. se eles no satisfa1em a relao.
[D] .Operadores Pelacionais. so a-ueles definidos na ta#ela a#ai!o: Operador Definio 5so Si)nificado 777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 'somente FortranB: e posteriores* \\ i)ual a $\\I $ 3 i)ual a I O [\ diferente de $[\I $ 3 diferente de IO + menor -ue $+I $ 3 menor a IO +\ menor ou i)ual $+\I $ 3 menor ou i)ual a IO , maior -ue $,I $ 3 maior -ue I O ,\ maior ou i)ual $,\I $ 3 maior ou i)ual a IO 'todos* .e-. i)ual a 'e-ual* $.e-.I $ 3 i)ual a I O .ne. diferente de 'not e-ual* $.ne.I $ 3 diferente de IO .lt. menor -ue 'less t>an* $.lt.I $ 3 menor a IO .le. menor ou i)ual 'less or e-ual* $.le.I $ 3 menor ou i)ual a IO .)t. maior -ue ')reater t>an* $.)t.I $ 3 maior -ue I O .)e. maior ou i)ual ')reater or e-ual* $.)e.I $ 3 maior ou i)ual a IO
'.'. Express5es +&i#as [D] 5ma e!presso lE)ica 3 usada para reali1ar um clculo lE)ico.
[D] Os .operadores lE)icos. so 'listamos somente os principais*: Operador Definio 5so Si)nificado 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 .not. ne)ao .not.$ se $ 3 verdade0 .not.$ 3 falso .and. con(uno $.and.I para a e!presso ser verdade0 $ e I precisam ser verdade .or. dis(uno $.or.I para a e!presso ser verdade0 $ 0ou I0 precisa ser verdade
[E] E!emplos: 2* if'!2.e-.!.and.!9.e-.!2* t>en c 9* fim\.false. do G>ile'.not.fim* c #loco de comandos enddo
[D] Pe)ras para clculos de e!presses lE)icas. 2. "ar/nteses podem ser usados e so calculados antes. 9. Os operadores aritm3ticos so calculados em se)undo lu)ar. ?. Os operadores relacionais so calculados em terceiro lu)ar. ;. $s operaes lE)icas so reali1adas na se)uinte ordem de preced/ncia: Operador "reced/ncia 777777777777777777777777777777777777777777777777777777777777777777 .not. mais alta .and. intermediria .or. mais #ai!a
Captulo *: Co"andos de Atri0ui$%o *.1. Introdu$%o [D] O .comando de atri#uio. 3 usado para atri#uir um valor a 'ou definir* uma varivel ou a um elemento de con(unto.
[C] Os comandos de atri#uio calculam uma e!presso e atri#uem o valor resultante a uma varivel ou elemento de con(unto.
[D] $ forma de um comando de atri#uio 3: varivel\e!presso
[D] Os comandos de atri#uio so classificados como: aritm3ticoY caractereY lE)ico. [E] E!emplos: aritm3tico: varnum\?.:Xa[# caractere: varcar\`di)ite o valor de !:` lE)ico: varlo)\.true. ou varlo)\a+#.and.#\\c [C] $pEs o clculo da e!presso0 o valor 3 convertido0 se necessrio0 para o tipo de varivel de acordo com a se)uinte re)ra: ipo da varivel Halor atri#u&do 7777777777777777777777777777777777777777777777777777777777777777 inteiro a parte inteira da e!presso real o valor real da e!presso dupla preciso o valor dupla preciso da e!presso comple!o o valor comple!o da e!presso
Captulo 1: Co"andos de Espe#i4i#a$%o: (e#lara$%o de ?ipos de <ari.2eis 1.1. Introdu$%o [D] Os comandos de declarao de tipo so: QJ"ZQCQ0 QSE%EP0 PE$Z0 DO5IZE "PECQSQOS0 COJ"ZEd0 ZO%QC$Z e C4$P$CEP.
1.2. Co"ando I-,+ICI? [CF] $ forma )eral do comando 3: QJ"ZQCQ tipo 'a[0a]...* [0tipo 'a[0a]*]
[C] O comando QJ"ZQCQ permite -ue se defina o tipo de todas as variveis -ue comeam por uma determinada letra.
[E] E!emplos: 2* implicit real'i* 7 fa1 com -ue todas as variveis -ue comecem pela letra i se(am reais. 9* implicit real'i0(0K0l* 7 fa1 com -ue as variveis com iniciais de i a l se(am reais. ?* implicit real'i7l* 7 idem. ;* implicit real'i7l*0inte)er'a0#* 7 fa1 a mesma coisa -ue o comando anterior mais a definio -ue as variveis com iniciais a ou # se(am inteiras. <* implicit none 7 fa1 com -ue todas as variveis do pro)rama ten>am -ue ter o seu tipo o#ri)atoriamente pr37 definidas.
1.. Co"andos de Espe#i4i#a$%o Expl#ita 1..1. Co"ando Inte&er [D] O comando QSE%EP 3 usado para declarar variveis inteiras.
[CF] $ forma )eral do comando QSE%EP 3: QSE%EP nome [0nome]... ou QSE%EP nomevi['d[0d]...*] sendo -ue nomevi 3 o nome de uma varivel inde!ada inteira.
1..2. Co"ando =EA+ [D] O comando PE$Z 3 usado para declarar variveis reais.
[CF] $ forma )eral do comando PE$Z 3: PE$Z nome[0nome]... ou PE$Z nomevi['d[0d]...*] sendo -ue nomevi 3 o nome de uma varivel inde!ada real.
[E] E!emplos: real a0#0c real d'2:2:02:=*
1... Co"ando (O63+E ,=ECI!ION [D] O comando DO5IZE "PECQSQOS 3 usado para duplicar o n8mero de al)arismos si)nificativos de uma varivel ou de um con(unto.
[CF] $ forma )eral do comando DO5IZE "PECQSQOS 3: DO5IZE "PECQSQOS nome[0nome]... ou DO5IZE "PECQSQOS nomevi['d[0d]...*] sendo -ue nomevi 3 o nome de uma varivel inde!ada de dupla preciso.
1..'. Co"ando CO-,+E@ [D] O comando COJ"ZEd 3 usado para declarar variveis do tipo comple!o.
1..*. Co"ando +OGICA+ [D] O comando ZO%QC$Z 3 usado para declarar variveis do tipo lE)ico.
1..1. Co"ando CAA=AC?E= [D] O comando C4$P$CEP 3 usado para declarar variveis do tipo caractere.
[CF] $ forma )eral do comando C4$P$CEP 3: C4$P$CEPXcomp nome[0nome]... ou C4$P$CEP nomeXcomp[0nomeXcomp]... sendo -ue comp 3 o comprimento da's* varivel'eis* caractere.
Captulo :: Co"andos de Espe#i4i#a$%o: (esi&na$%o de Breas de -e"ria :.1. Introdu$%o [C] Seste cap&tulo0 aprenderemos a reservar reas de memEria0 com os se)uintes o#(etivos: 2. Determinar a -uantidade de memEria -ue deve ser reservada para variveis inde!adas. 9. Qndicar reas de memEria -ue podem ser acessadas por diferentes unidades de pro)rama. :.2. Co"ando (I-EN!ION [D] O comando DQJESSQOS 3 usado para especificar nomes sim#Elicos como nomes de variveis inde!adas0 define o n8mero de dimenses '&ndices* de cada con(unto de vies e especifica os limites de cada dimenso.
[CF] $ forma )eral do comando DQJESSQOS 3: DQJESSQOS c'd[0d]...*[0c'd[0d]...*] sendo -ue: 7 .c. 3 um nome de con(untoY 7 .d. 3 um declarador de dimenso '-ue podem ser no m!imo D* e especifica os limites para cada &ndice do con(unto0 em uma das formas: superior ou in8erior.superior 7 superior: o &ndice varia de 2 at3 superior. 7 in8erior.superior: o &ndice varia de in8erior at3 superior.
[E] E!emplos: dimension a'::2:*0#'?0?*0c'?0;0<*
:.. Co"ando CO--ON [D] O comando COJJOS 3 usado para especificar reas de memEria -ue so utili1adas em comum por vrias unidades de pro)rama0 tal como o pro)rama principal e su#pro)ramas do tipo F5SCQOS ou S5IPO5QSE.
[C] freas de memEria desi)nadas por uma unidade de pro)rama no so .en!er)adas. pelas outras unidades. $ssim0 o -ue COJJOS fa1 3 permitir -ue diferentes unidades de pro)rama .en!er)uem. uma dada rea de memEria.
[CF] $ forma )eral do comando COJJOS 3: COJJOS[[r[] lista sendo -ue: 7 .r. 3 um rEtulo do #loco de variveis -ue tero suas reas de memEria especificadas. 7 .lista. 3 uma lista com nomes de variveis -ue tero suas reas de memEria especificadas.
[E] E!emplos: 2* common m0a0! 9* dimension a'2:*0#'<09:* common[#loco2[a0#
[C] O mesmo comando COJJOS0 escrito do mesmo (eito0 deve aparecer em cada unidade de pro)rama -ue pretende ter acesso Rs variveis definidas num dado #loco. :.'. 6nidades de pro&ra"as do tipo -O(6+E [C] $s unidades de pro)rama do tipo JOD5ZE e!istem a partir do Fortran B: e podem su#stituir todas as ocorr/ncias do comando COJJOS0 do comando QSCZ5DE 'no apresentado nesta apostila* e funes de comando 'Cap&tulo 22*. [C] Suma unidade de pro)rama do tipo JOD5ZE podem se definir tipos e valores de constantes e variveis. $inda 3 poss&vel incluir su#pro)ramas0 mas este tEpico no ser a#ordado. :.*. Co"ando 6!E [CF] O comando 5SE 3 utili1ado para definir uma unidade de pro)rama do tipo JOD5ZE -ue deve ser inclu&da no pro)rama. [E] E!emplo de utili1ao das unidades de pro)rama do tipo JOD5ZE e do comando 5SE: module modulo:2 inte)er:: a\90#\? end module modulo:2 module modulo:9 inte)er:: a\;0#\< end module modulo:9 pro)ram e!modls a O#(etivo: e!emplifica o uso dos su#pro)ramas do tipo JOD5ZE use modulo:2 implicit none inte)er c0d a Sas duas lin>as a se)uir0 sero usados os valores de a e # declarados a no mEdulo modulo:2: c\aA# d\aX# print X0a0#0c0d a Sa su#rotina a#ai!o0 ainda sero usados os valores de a e # declarados a no mEdulo modulo:20 demonstrando a compartil>ao de dados entre o a pro)rama principal e um su#pro)rama: call su#rotina:2 a $ su#rotina a#ai!o 3 id/ntica R anterior0 com a 8nica diferena -ue a utili1a novos valores para a e # declarados no mEdulo modulo:9: call su#rotina:9 stop end su#routine su#rotina:2 use modulo:2 implicit none inte)er c0d c\aA# d\aX# print X0a0#0c0d return end su#routine su#rotina:9 use modulo:9 implicit none inte)er c0d c\aA# d\aX# print X0a0#0c0d return end :.1. Co"ando ,A=A-E?E= [D] O comando "$P$JEEP fornece um meio de se representar uma constante por um s&m#olo0 como na Jatemtica0 em ve1 de represent7la por um valor.
[CF] $ forma )eral do comando "$P$JEEP 3: "$P$JEEP'ns\e[0ns\e]...* sendo -ue: 7 .ns. 3 um nome sim#Elico. 7 .e. 3 uma constante ou uma e!presso constante.
[C] "$P$JEEP 3 um comando de especificao e deve ser escrito entre os comandos de especificao. "or3m cada constante sim#Elica deve ser definida antes de -ual-uer refer/ncia a ela.
[C] Os novos s&m#olos das constantes definidas dentro de um comando "$P$JEEP se)uem as mesmas re)ras para os nomes de variveis 'em relao ao tipo*.
[C] O valor de uma constante definida em "$P$JEEP (amais 3 ou pode ser alterado durante a e!ecuo do pro)rama.
[E] E!emplo: O real pi parameter'pi\?.2;2<B9D* O
:.:. Co"ando ,=OG=A- [D] O comando "PO%P$J 3 usado para identificar o pro)rama principal.
[C] odo pro)rama possui um 8nico pro)rama principal.
[CF] $ forma )eral de "PO%P$J 3: pro)ram nome sendo -ue: 7 .nome. 3 um nome sim#Elico definido para o pro)rama principal.
:.C. Co"andos A++OCA?E; (EA++OCA?E E A++OCA?A3+E [CF] Os comandos $ZZOC$E0 DE$ZZOC$E E $ZZOC$$IZE t/m por funo permitir -ue uma varivel inde!ada possa ser dimensionada durante a e!ecuo do pro)rama.
[CF] $ZZOC$$IZE: indica -ue a varivel inde!ada vai ter os valores m&nimos e m!imos para o seu's* &ndice's* determinados em al)um ponto do pro)rama. $ rea de memEria para esta varivel ainda no est reservada.
[CF] $ZZOC$E: dimensiona a varivel inde!ada e reserva 'aloca* um espao de memEria para ela.
[CF] DE$ZZOC$E: desaloca0 mas no e!tin)ue0 a varivel inde!ada0 li#erando a memEria antes por ela ocupada.
[E] So e!emplo a se)uir temos vrios trec>os de um pro)rama sendo -ue as variveis inde!adas $0 I0 C e D esto sendo dimensionadas0 alocadas e desalocadas usando os comandos $ZZOC$E0 DE$ZZOC$E E $ZZOC$$IZE: ... inte)er i0(0K0l0m0n inte)er0dimension':0:*0allocata#le :: a real0dimension':*0allocata#le :: #0c real0dimension':0:0:*0allocata#le :: d ... print X0`Di)ite os minimos e ma!imos das 9 dimensoes de $:` read X0i0(0K0l allocate'a'i:(0K:l** ... print X0`Di)ite o minimo e o ma!imo da unica dimensao de I:` read X0i0( print X0`Di)ite o minimo e o ma!imo da unica dimensao de C:` read X0K0l allocate'#'i:(*0c'K:l** ... print X0`Di)ite os minimos e ma!imos das ? dimensoes de D:` read X0i0(0K0l0m0n allocate'd'i:(0K:l0m:n** ... deallocate'a0d* ... deallocate'#* ... deallocate'c* ...
Captulo C: Co"andos de Controle de )luxo e ,ro&ra"a$%o Estruturada C.1. Introdu$%o [C] Sormalmente0 a e!ecuo dos comandos num pro)rama 3 feita na ordem em -ue os comandos so escritos: de cima para #ai!o0 lin>a por lin>a0 de acordo com a estrutura se-^encial. Entretanto voc/ pode usar comandos para transferir o controle de flu!o para outra parte da mesma unidade de pro)rama ou para outra unidade de pro)rama.
[C] O controle pode ser transferido somente para um comando e!ecutvel.
[D] "or ve1es0 um comando pode ser identificado por um .n8mero de comando.0 consistindo de um n8mero inteiro0 escrito antes do comando0 no in&cio da lin>a. Cada n8mero de comando deve ser 8nico dentro da unidade de pro)rama. Eles servem principalmente para a especificao de formatos de entrada e[ou sa&da de dados. Evita7se >o(e o uso anti)o do n8mero de comando0 -ue servia de refer/ncia para uma transfer/ncia de controle de flu!o. Qsto favorece a criao de cEdi)os de pro)rama .espa)uete.0 sendo -ue o controle de flu!o pode ser mudado de maneira a#surda0 dificultando e invia#ili1ando a manuteno dos pro)ramas.
C.2. Estruturas de Controle [C] $s estruturas #sicas de controle so:
2. Estrutura se-^encial. 9. Estrutura de tomada de deciso 'if7t>en7else if7else7endif*. ?. Estrutura de lao: faa7en-uanto 'G>ile7loop*. Estrutura de lao repetio 'repeat7loop*. ;. Estrutura de seleo de caso 'select case*. C.. Co"andos GO ?O [CF] Os comandos %O O transferem o controle de flu!o para um comando e!ecutvel na mesma unidade de pro)rama. Os tr/s tipos de %O O so: 2. %O O incondicional. 9. %O O computado. ?. %O O assinalado. C..1. Co"ando GO ?O in#ondi#ional [CF] O comando %O O incondicional transfere o controle para o comando identificado pelo n8mero de comando especificado no %O O.
[CF] $ forma )eral do comando %O O incondicional 3: )o to n sendo -ue .n. 3 um n8mero de comando e!ecutvel.
C.'. Co"andos I) [CF] Os comandos QF transferem o controle do flu!o ou e!ecutam outro comando 'ou um #loco de comandos* dependendo do resultado verdadeiro ou falso de uma e!presso lE)ica contida no particular comando QF. Os tr/s tipos de comandos QF so: 2. QF aritm3tico. 9. QF lE)ico. ?. QF #loco. [CF] Os comandos EZSE0 EZSE QF e ESD QF so tam#3m apresentados nesta seo0 pois eles so usados somente em con(unto com um comando QF #loco.
C.'.1. Co"ando I) l&i#o [CF] O comando QF lE)ico calcula uma e!presso lE)ica[relacional e e!ecuta ou i)nora um comando e!ecutvel contido no prEprio QF0 dependendo do valor 'falso ou verdadeiro* dessa e!presso.
[CF] $ forma )eral do comando QF lE)ico 3: if 'e* c sendo -ue: 7 .e. 3 uma e!presso lE)ica ou relacional. 7 .c. 3 o comando -ue ser e!ecutado caso a e!presso se(a verdadeY .c. no pode ser um comando DO.
[E] He(amos como fica o flu!o do pro)rama -uando este c>e)a a estas tr/s lin>as: !\a7# if'a.e-.#* !\aA# M\!XX9 O#serve -ue nas 8ltimas 9 lin>as temos tr/s comandos: 2* if'a.e-.#* 9* !\aA# ?* M\!XX9 Ento: a* Se de fato a\#0 teremos a se)uinte ordem de e!ecuo: 2 ,, 9 ,, ?. #* Se0 por outro lado0 a 3 diferente de #0 teremos a ordem de e!ecuo: 2 ,, ?.
C.'.2. Co"andos I) 0lo#o [CF] O comando QF #loco permite a e!ecuo de um determinado #loco de comandos0 dependendo do valor da's* e!presses lE)ica's*[relacional'is* nele contido.
[CF] $ forma )eral do comando QF #loco 3: if 'e2* t>en #loco2 else if 'e9* t>en #loco9 else if 'e?* t>en #loco? ... else #loco n endif sendo -ue e20 e90e?0 ... so e!presses lE)icas[relacionais. Deve ficar claro -ue somente um dos #locos de comandos ser e!ecutado.
[C] O menor QF #loco 3 a estrutura: if 'e* t>en #loco endif Hemos -ue os comandos EZSE QF e EZSE so opcionais.
[CF] O comando QF 4ES permite a e!ecuo condicional de um #loco de comandos e!ecutveis. _ o#ri)atErio usar em con(uno o comando ESDQF para fec>ar o comando.
[CF] $ forma )eral do comando QF 4ES 3: if 'e* t>en sendo -ue .e. 3 uma e!presso lE)ica[relacional 'portanto produ1indo um resultado verdadeiro ou falso*.
[C] Se a e!presso .e. for verdadeira0 a e!ecuo passa para o prE!imo comando e!ecutvel e da& para o comando ESDQF. Se for falsa0 o controle 3 transferido para o prE!imo comando: EZSE QF 4ES0 EZSE ou ESDQF.
[CF] O comando EZSE fornece uma rota alternativa para um comando QF 4ES ou EZSE QF 4ES. Sua forma )eral 3 simplesmente: else
[CF] O comando EZSE QF 4ES com#ina as funes dos comandos EZSE e QF 4ES0 pois fornece uma rota alternativa e torna poss&vel uma estrutura QF #loco com mais de uma alternativa.
[CF] $ forma )eral do comando EZSE QF 4ES 3: else if 'e* t>en sendo -ue .e. 3 uma e!presso lE)ica[relacional.
[C] Se a e!presso for verdadeira0 o controle passa para o prE!imo comando e!ecutvel e da& para o comando ESDQF. Se for falsa0 passa para o prE!imo comando EZSE QF 4ES0 EZSE ou ESDQF.
[CF] O comando ESDQF ou ESD QF finali1a uma estrutura QF #loco. Sua forma )eral 3 simplesmente: end if
[E] E!emplo: ... print X0`Di)ite a nota do aluno: ` read X0nota if'nota,\<.:* t>en print X0`O aluno foi aprovado.` elseif'nota,\?.<* t>en print X0`O aluno foi reprovado mas podera cursar o PE.` else print X0`O aluno foi reprovado e nao podera cursar o PE.` endif O
C.'.. Estruturas de I) 0lo#o en#aixados [C] 5m #loco de comandos e!ecutveis dentro de um comando QF #loco pode conter outra estrutura QF #loco. E isto pode se repetir indefinidamente. ... print X0`Di)ite a nota do aluno: ` read X0nota if'nota,\<.:* t>en if'nota,\B.<* t>en print X0`O aluno foi aprovado com louvor.` elseif'nota,\=.:* t>en print X0`O aluno foi aprovado com distincao.` else print X0`O aluno foi aprovado.` endif elseif'nota,\?.<* t>en print X0`O aluno foi reprovado mas podera cursar o PE.` else print X0`O aluno foi reprovado e nao podera cursar o PE.` endif O
C.*. Co"ando (O [CF] O comando DO 3 um comando de controle -ue permite -ue um #loco de comandos se(a repetitivamente e!ecutado. O n8mero de e!ecues depende da varivel de controle.
[CF] $ forma )eral do comando DO 3: do v \ vi 0 vf [0 incr] sendo -ue: 7 .v. 3 a varivel do controle do lao DO. 7 .vi. 3 o valor inicial de v. 7 .vf. 3 o valor final ou m!imo de v. 7 .incr. 3 o incremento de v. Se for omitido0 3 suposto como de valor 2. [CF] O comando ESDDO ou ESD DO finali1a uma estrutura DO. Sua forma )eral 3 simplesmente: enddo [E] E!emplo: do i\:02::0< #loco de comandos enddo
[C] E!istem duas estruturas DO: 2* $ estrutura DO 7 ESD DO 'repeat loop* repete um #loco de comandos condicionado ao valor de uma varivel de controle -ue deve variar de modo fi!o e pr37determinado: do v\vi0vf0incr #loco de comandos end do 9* $ estrutura DO F4QZE 7 ESD DO 'G>ile loop* e!ecuta o lao DO en-uanto uma e!presso lE)ica[relacional for verdadeira: do G>ile 'var.)e.:* #loco de comandos end do
[CF] O comando DO impl&cito 3 uma terceira forma do comando DO e somente pode ser usando em comandos de entrada ou sa&da de dados. [E] E!emplos de uso do comando DO impl&cito: print X0'var'i*0i\202:02* print X0'var'i0(*0(\2:09:09* read'202::*'var'i*0i\90=09* Grite''?09::*'var'i0(*0(\20<02*
C.*.1. +a$os de (O en#aixados [C] _ poss&vel encai!ar dois ou mais comandos DO. [C] "ara as estruturas DO encai!adas0 o primeiro comando ESD DO apEs o comando DO0 fec>a o lao.
C.1. Co"ando E@I? [CF] O comando EdQ termina a#ruptamente um lao DO0 direcionando o flu!o do pro)rama para a primeira lin>a de comando apEs o ESDDO da-uele respectivo comando DO envolvido. C.:. Co"ando CDC+E [CF] O comando C6CZE reinicia a#ruptamente um lao DO0 direcionando o flu!o do pro)rama para a lin>a do comando DO dentro do -ual ele est inserido. C.C. Co"ando CON?IN6E [CF] O comando COSQS5E 3 um comando e!ecutvel -ue somente passa o controle para o prE!imo comando e!ecutvel. $ forma )eral 3: continue
C.8. Co"ando !?O, [CF] O comando SO" termina a e!ecuo do pro)rama. $pesar de sua locali1ao dentro do pro)rama em )eral ser a pen8ltima lin>a de comando0 ele pode ser colocado em -ual-uer posio dentro do pro)rama.
[CF] $ forma )eral do comando SO" 3: stop [varcar] sendo -ue .varcar. 3 uma varivel caracter -ue ser e!i#ida na sa&da padro 'em )eral0 a tela do monitor do operador*.
C.10. Co"ando EN( [CF] O comando ESD indica o final de uma unidade de pro)rama para o compilador. Sua forma )eral 3: end e deve o#ri)atoriamente ser colocado na 8ltima lin>a do pro)rama.
C.11. Co"ando !E+EC? CA!E [C] $ estrutura SEZEC C$SE permite a e!ecuo de apenas uma entre muitas opes poss&veis. [CF] $ estrutura SEZEC C$SE possui a se)uinte forma: select case 'var* case 'umNvalorNdeNvar* #loco de comandos 2 case 'outroNvalorNdeNvar* #loco de comandos 9 case 'outroNaindaNvalorNdeNvar* #loco de comandos ? ... end select
[E] E!emplo: ... print X0`Di)ite um numero de 2 a 2:: ` read X0nu select case 'nu* case '2:;* print X0`$ opcao foi um numero no intervalo [20;]` case '<* print X0`$ opcao foi pelo numero <` case 'C:2:* print X0`$ opcao foi um numero no intervalo [C02:]` end select ...
Captulo 8: Co"andos de EntradaE!ada 8.1. Introdu$%o [D] Os .Comandos de Entrada. fornecem um m3todo de transferir dados de um dispositivo perif3rico 'como um teclado* ou de um ar-uivo interno para a memEria principal. Este processo 3 c>amado de .leitura de dados..
[D] Os .Comandos de Sa&da. fornecem um meio de transferir dados da memEria principal para um dispositivo perif3rico 'como um monitor de v&deo ou impressora* ou um ar-uivo interno. Este processo 3 c>amado de .escrita. ou .)ravao. de dados.
[C] $l)uns comandos de E[S permitem -ue se edite os dados durante a sua transfer/ncia.
[D] Seste cap&tulo somente sero apresentados os comandos de E[S -ue transferem dados 'PE$D0 "PQS0 FPQE*. Comandos au!iliares no sero discutidos. 8.2. =e&istros; Ar/ui2os e 6nidades [D] 5m .caractere. 3 um 8nico s&m#olo0 tal como a letra ?0 o d&)ito @ ou um asterisco 4.
[D] 5m .campo. 3 uma sucesso de caracteres0 -ue representa al)uma informao0 tal como &#A,#I, ou 6BC3@D.
[D] 5m .re)istro. 3 um )rupo de campos -ue re8ne informaes so#re um 8nico item0 tal como: &#A,#I, BE$26$6FGD E0@G3B6 'nome* 'data nasc.* 'salrio* [D] 5m .ar-uivo. 3 um )rupo de re)istros0 tal como:
& # A , # I , B E $ 2 6 $ 6 F G D E 0 @ G 3 B 6 & = # & / ' , B B $ 6 2 $ 6 F @ 0 F C D 3 E 0 > 3 " = I S A I # & 2 D $ 2 F $ 6 F @ B 6 B G @ 3 0 E emos acima um ar-uivo0 com tr/s re)istros0 cada re)istro com tr/s campos e comprimento total de 9D caracteres.
[C] Cada comando de E[S opera so#re um 8nico re)istro.
[D] 5ma unidade de E[S 3 um meio de se referir a um ar-uivo. 5sa7se n8meros de unidades de E[S para distin)uir um ar-uivo de outro.
[C] Certos n8meros de unidades podem ser pr37definidos. $ssim0 por e!emplo0 o n8mero < pode indicar o teclado e C pode indicar o monitor de v&deo.
[C] O comando O"ES esta#elece a cone!o entre o n8mero da unidade e um particular ar-uivo.
8.. Co"ponentes dos Co"andos de EE! [C] Os comandos de E[S so constitu&dos de ? partes: comando 'especificadores* [lista] sendo -ue: especi8icadores definem apropriadamente a e!ecuo do comandoY lista define a's* varivel'eis* so#re a's* -ual'is* opera o comando. 8..1. +ista de Espe#i4i#adores de Controle de EE! [C] E!istem muitos especificadores de controle de entrada e sa&da. Heremos somente os mais importantes para o iniciante.
[D] 5SQ: o especificador de unidade desi)na a unidade e!terna de E[S ou o ar-uivo interno a ser usado para o comando de E[S no -ual ele aparece. Seu uso 3: [unit\]u ou [unit\]X sendo -ue: 7 .u. 3 uma e!presso inteira -ue desi)na o n8mero de E[S. 7 .X. desi)na a unidade de entrada padro em PE$D e sa&da padro em "PQS ou FPQE.
[C] Os caracteres .unit\. somente podem ser omitidos no caso do especificador de unidade ser o primeiro na lista de especificadores.
[D] FJ: o especificador de formato desi)na o formato a ser usado para o comando de E[S formatado ou o comando de E[S com lista direta. Seu uso 3 [fmt\]f ou [fmt\]X sendo -ue: 7 .f. 3 um identificador de formatoY 7 .X. desi)na uma formatao em lista direta.
[C] Os caracteres .fmt\. somente podem ser omitidos se o especificador de formato for o se)undo especificador e ainda o primeiro especificador for o de unidade sem os caracteres .unit\. .
[D] O identificador de formato .f. pode ser um n8mero de um comando FOPJ$. Ou uma e!presso inteira '-ue aca#a por indicar um comando FOPJ$*. Ou especificaes de formato 'em forma de varivel caractere*.
[E] E!emplos. odos eles fa1em a mesma coisa e ainda o comando PE$D poderia ser su#stitu&do pelo comando FPQE. E!emplo 2: read'unit\20fmt\2::* a0# 2:: format'i<0f2:.?* E!emplo 9: read'202::* a0# 2:: format'i<0f2:.?* E!emplo ?: read'20X* a0#
8..2. +ista de EE! [D] 5ma lista de E[S tem a forma: s[0s]c sendo -ue .s. 3 uma lista de itens simples ou uma lista de DO impl&cito.
[C] 5m item da lista pode ser um nome de varivel0 um nome de con(unto0 um nome de elemento de con(unto0 um nome de su#cadeia caractere ou uma lista de DO impl&cito. So caso de lista de sa&da0 ainda pode ser uma e!presso.
[E] E!emplos de listas de E[S 'sem DO impl&cito*: read'<02::* $0I0C0D read'?09:* d060C'@*0D'?0;*0E'Q0g0D*0 read';0292*Q0$'Q*0@0I'Q0@* Grite'90?:9* $ZF$0IE$ Grite'C0299* %$J$';X@A90<XQA90;Xg*0C0D'Z*
[E] Pe)istro de entrada contendo os dados Z0 J e S0 -ue so definidos como n8meros inteiros: 2::99?;<CD=B -ue 3 lido pelos comandos: read'<0C:* Z0J0S C: format'Q?0Q90QD* apresentar os se)uintes valores: Z\2:: J\99 S\?;<CD=B .
[CF] 5ma lista de DO impl&cito tem a se)uinte forma: 'd 0 i \ e20 e9 [0e?] * sendo -ue: 7 .d. 3 uma lista de E[S. 7 i 0 e20 e9 e e? t/m as mesmas formas0 funes e efeitos -ue num comando DO.
[E] $o inv3s de usar: print X0 $'2*0$'9*0$'?*0$';*0$'<*0$'C*0$'D*0$'=*0$'B* use print X0 '$'i*0 i \ 20B* .
8.'. Co"andos =EA( [D] Os comandos PE$D transferem dados de entrada para a memEria de tra#al>o.
[C] QJ"OP$SE: cada novo comando PE$D passa a ler dados em uma nova lin>a.
8.'.1. Co"andos =EA( se/Fen#iais [CF] $s formas aceitas dos comandos PE$D se-^encial so: read'[unit\]u0[fmt\]f* [lista] ou read f [0 lista] sendo -ue .f. pode ser su#stitu&do por .X. para desi)nar uma lista direta. Se .u. for su#stitu&do por .X. 0 a leitura ser feita na unidade de entrada padro.
[E] E!emplos: read'unit\?0fmt\2::* a0#0c 2:: format'?f<.9* 3 i)ual a: read'?02::* a0#0c 2:: format'?f<.9* -ue ainda podem ser simplificados para: read'?0X* a0#0c 'lista direta* ou read'X0X* a0#0c 'a-ui a leitura passa a ser feita a partir da entrada padro*
8.*. Co"andos G=I?E 7,=IN?9 [D] Os comandos FPQE '"PQS* transferem dados arma1enados na memEria do computador para dispositivos de sa&da 'v&deo0 ar-uivos ou impressora*.
[C] QJ"OP$SE: cada novo comando FPQE '"PQS* passa a escrever dados em uma nova lin>a.
8.*.1. Co"andos G=I?E 7,=IN?9 se/Fen#iais [CF] $s formas aceitas dos comandos FPQE se-^encial so: Grite'[unit\]u0[fmt\]f* [lista] sendo -ue .f. pode ser su#stitu&do por .X. para lista direta.
[E] E!emplos: Grite'unit\D0fmt\9::* a0#0c 9:: format'?f<.9* ou Grite'D09::* a0#0c 9:: format'?f<.9* 'i)ual ao comando anterior* ou Grite'D09::* a0#0c 9:: format'?f<.9* 'praticamente i)ual aos comandos anteriores* ou Grite'X0X* a0#0c 'escreve na sa&da padro*
[C] $ diferena entre FPQE e "PQS 3 -ue este 8ltimo somente escreve na sa&da padro 'o v&deo0 no nosso caso*. "or isso "PQS dispensa o especificador de unidade.
[CF] $ forma aceita do comando "PQS 3: print f [0 lista] sendo -ue .f. pode ser su#stitu&do por .X. para lista direta.
8.1. Co"andos de Condi$%o de Ar/ui2os de EE! 8.1.1. Co"ando O,EN [C] O comando O"ES serve para iniciali1ar um ar-uivo.
[CF] $ forma )eral simplificada do comando O"ES 3: open'[unit\]u[0file\`a`][0status\`#`]* sendo -ue: 7 .u. 3 o n8mero da unidade. 7 `a` 3 uma e!presso caractere -ue especifica o nome do ar-uivoY 7 `#` especifica a condio do ar-uivo0 -ue pode ser: 7`SEF`0 para ar-uivos novos0 -ue vo ser criados pelo pro)ramaY 7`OZD`0 para ar-uivos ( e!istentes 'em )eral0 ar-uivos de entrada de dados*Y 7`SCP$C4`0 para ar-uivos -ue so criados pelo pro)rama e -ue devem ser apa)ados no final da e!ecuo deste. 7 `5SgSOFS`0 para ar-uivos para os -uais no se aplica nen>uma das condies acima.
8.1.2. Co"ando C+O!E [D] O comando CZOSE serve para finali1ar um ar-uivo. _ o oposto de O"ES.
[CF] $ forma )eral simplificada do comando CZOSE 3: close'[unit\]u* sendo -ue .u. 3 o n8mero da unidade.
Captulo 10: Co"ando )O=-A? e Espe#i4i#a$5es de )or"ato 10.1. Introdu$%o [D] FOPJ$ 3 o comando -ue cont3m uma lista de especificaes de formato -ue permite ao pro)ramador ter controle so#re os dados de entrada e sa&da.
[E] E!emplo do uso de um comando de formatao: "PQS 2: 0 S0 d0 6 2: FOPJ$ ' Q?0 F=.?0 F<.2* sendo -ue: 7 "PQS e FOPJ$ so comandos 'ou palavras7c>ave*Y 7 .2:. 3 n8mero de comandoY 7 .S0d06. 3 lista de sa&daY 7 .Q?0F=.?0F<.2. so especificaes de formato.
10.2. Co"ando )O=-A? [D] $ forma )eral do comando FOPJ$ 3: n format 'ef [0ef [0c0ef]]* sendo -ue: 7 .n. 3 um n8mero de comandoY 7 .ef. 3 uma especificao de formato 'converso ou edio*.
[C] "ode7se usar o mesmo comando FOPJ$ em diversos PE$D0 FPQE ou "PQS.
10.. Espe#i4i#a$5es de )or"ato 7E)9 de Con2ers%o [D] $s EF de converso mais usadas so: Especificao Converte dados 77777777777777777777777777777777777777777777777777777777777777777777777777 [a] Q G inteiros decimais [a] F G.d reais decimais0 sem e!poente [a] E G.d reais decimais0 com e!poente [a] D G.d reais decimais dupla preciso0 com e!poente [a] % G.d reais decimais0 com ou sem e!poente [a] Z G lE)icos [a] $ G caracteres sendo -ue: 7 .a. 3 uma constante inteira0 sem sinal e no7nula0 usada para indicar o n8mero de ve1es -ue a mesma EF 3 se)uidamente usada. 7 .G. 3 uma constante inteira0 sem sinal e no7nula0 usada para indicar a lar)ura total do campo e!terno 'incluindo d&)itos0 espaos0 sinais al)3#ricos A ou 7 0 ponto decimal e e!poente*. 7 .d. 3 uma constante inteira0 sem sinal e -ue indica a -uantidade de d&)itos R direita do ponto decimal dentro do campo de lar)ura G. Sa sa&da0 todos os valores so arredondados.
[E] E!emplos: E!emplo 2. "ara escrever na tela do monitor as variveis n8mericas var2\222 var9\9999.99 var?\? var;\;;.;; pode7se usar a se)uinte com#inao de comandos: print <0var20var90var?0var; < format'i?0fD.90i20f<.9* E!emplo 9: para escrever na tela do monitor a se)uinte lista de variveis var2\.true. var9\`america` var?\222 var;\9999.99 var<\???.??eA:< pode7se usar a se)uinte com#inao de comandos: print C0var20var90var?0var;0var< C format'l20aD0i?0fD.90e2:.9*
10.'. Espe#i4i#a$5es de )or"ato de Edi$%o [D] $s especificaes de edio mais usadas no Fortran so: Especificao Funo 77777777777777777777777777777777777777 G ! espaamento [ nova lin>a sendo -ue .G. representa o n8mero de espaos dese(ados.
10.*. Espe#i4i#a$5es de )or"ato e" Grupos =epetidos [E] O comando: <9: format' i<0 i<0 f=.?0 e2C.D0 f=.?0 e2C.D0 f=.?0 e2C.D* pode ser escrito de maneira mais redu1ida: <9: format' 9i<0 ?'f=.?0 e2C.D**
Captulo 11: !u0pro&ra"as 11.1. Introdu$%o [D] 5m .su#pro)rama.0 como o prEprio nome di10 3 uma se-^/ncia de comandos -ue fa1em parte de um pro)rama.
[C] 5m pro)rama e!ecutvel consiste num 8nico pro)rama principal e su#pro)ramas opcionais.
[D] 5ma .funo. 3 um tipo de su#pro)rama -ue sempre retorna um valor 8nico.
[D] 5ma .su#rotina. 3 um tipo de su#pro)rama -ue retorna uma -uantidade varivel de valores ou no retorna nen>um valor.
[D] 5ma .funo intr&nseca. 3 um su#pro)rama do tipo funo fornecido pelo compilador.
11.2. Ar&u"entos de !u0pro&ra"as [D] 5m .ar)umento de su#pro)rama. 3 uma entidade -ue transfere um valor para ou de um su#pro)rama.
[D] 4 duas esp3cies de ar)umentos: atuais e mudos.
[D] Os ar)umentos .atuais. so escritos no comando -ue c>ama o su#pro)rama.
[D] Os ar)umentos .mudos. so especificados na definio do su#pro)rama.
[C] Vuando o controle de e!ecuo 3 transferido para o su#pro)rama0 os ar)umentos mudos so associados com os ar)umentos atuais na #ase de 2 para 2.
[E] Se 'i0 ('9*0 <* 3 uma lista de ar)umentos atuais e 'K0 l0 m* 3 uma lista associada de ar)umentos mudos0 ento K 3 i)ual a i0 l 3 i)ual a ('9* e m 3 i)ual a <.
11.. )un$5es Intrnse#as 7)I9 [C] $s funes intr&nsecas so procedimentos to usados -ue ac>ou7se por #em inclui7las como parte inte)rante do Fortran0 e portanto0 ( vem definidas.
[D] 5ma FQ sempre 3 usada em uma e!presso e retorna o valor calculado da funo para o ar)umento0 -ue se encontra entre par/nteses: FQ'ar)umento*
[E] E!emplos: M \ cos'!* 0 FQ \ cos 0 nome: cossenoY ar)umento \ !. M \ 9.:Xcos'!XX9* 0 FQ \ cos 0 nome: cossenoY ar)umento \ !XX9.
[C] %eralmente os livros de Fortran cont3m uma lista completa de todas as FQ.
[C] $EShiO: 5m mesmo tipo de FQ pode ter vrios nomes0 dependendo do tipo de ar)umento e do tipo do valor de retorno.
[C] $ ta#ela a#ai!o cont3m al)umas das funes intr&nsecas mais usadas em Fortran. "ara informaes mais completas0 ve(a o livro te!to.
)6NHIO (E!C=IHIO A=G6-EN?O =E!6+?A(O int'!* converte para o tipo inteiro0 truncando a mantissa real inteiro real'!* converte para o tipo real inteiro real nint'!* arredonda para o inteiro mais prE!imo real inteiro aint'!* trunca a mantissa real real anint'!* arredonda para o inteiro mais prE!imo real real c>ar'!* converte inteiro para caractere inteiro caractere ic>ar'!* converte caractere para inteiro caractere inteiro a#s'!* valor a#soluto 'ou mEdulo* num3rico mant3m mod'!01* resto da diviso de ![1 num3rico mant3m ma!'!010G0...* encontra o maior valor entre os ar)umentos num3rico mant3m min'!010G0...* encontra o menor valor entre os ar)umentos num3rico mant3m len'!* comprimento de uma varivel ou constante caractere caractere inteiro inde!'!01* locali1a a varivel ou constante caractere ! dentro da varivel ou constante 1 caractere inteiro s-rt'!* rai1 -uadrada num3rico real e!p'!* e!ponencial num3rico real lo)'!* lo)aritmo natural e neperiano num3rico real lo)2:'!* lo)aritmo decimal num3rico real sin'!* seno radianos real cos'!* cosseno radianos real tan'!* tan)ente radianos real cotan'!* cotan)ente radianos real 11.'. )un$5es )un#tion [D] 5m su#pro)rama funo F5SCQOS 3 usado do mesmo modo -ue se usa uma funo intr&nseca. $ diferena 3 -ue o su#pro)rama F5SCQOS 3 escrito pelo prEprio pro)ramador. Qsto serve para resolver pro#lemas como0 por e!emplo0 para se ter uma funo -ue o#ten>a o valor de M'!*\! 9 A?!A9. $ funo M'!* no teria -ue ser reescrita diversas ve1es ao lon)o do pro)rama0 evitando7se erros.
[D] O su#pro)rama F5SCQOS sempre comea com o comando no7e!ecutvel F5SCQOS0 se)uido por uma se-^/ncia de comandos e termina com um comando ESD. O controle de e!ecuo 3 retornado para o pro)rama principal atrav3s de um comando PE5PS '-ue tam#3m 3 um comando o#ri)atErio*.
[D] Pe)ras para o uso de su#pro)ramas F5SCQOS: 2. Deve >aver concordUncia entre os ar)umentos passados e rece#idos0 no pro)rama principal e no su#pro)rama. 9. Se um ar)umento 3 uma varivel inde!ada0 o n8mero de seus elementos no su#pro)rama pode ser menor ou i)ual0 mas no maior0 -ue no pro)rama principal. ?. O 8nico valor retornado ao pro)rama principal est arma1enado no nome da funo. ;. "ara retornar para o pro)rama principal 3 preciso usar o comando PE5PS. <. Os su#pro)ramas )eralmente so escritos apEs o pro)rama principal0 -uando editados no mesmo ar-uivo. C. "odem ser usados n8meros de comandos e nomes de variveis usados tam#3m no pro)rama principal. So tratados como coisas diferentes e independentes. D. O tipo do valor retornado pelo su#pro)rama F5SCQOS depende do nome da funo. 11.'.1. Co"ando )6NC?ION [D] O comando F5SCQOS deve aparecer como o primeiro comando no su#pro)rama.
[CF] $ forma )eral do comando F5SCQOS 3: [tipo] function nome '[a[0a]]* sendo -ue: 7 .tipo. 3 um dos tipos de variveis permitidas no Fortran. 7 .nome. 3 o nome da funo e o#edece Rs re)ras para os nomes das variveis. 7 .a. 3 um ar)umento -ue 3 passado para ser processado pela funo.
[CF] $ forma de c>amar um su#pro)rama F5SCQOS 3 a se)uinte 'aparecendo o#ri)atoriamente numa e!presso*: nome '[#[0#]* sendo -ue: 7.nome. 3 o nome de um su#pro)rama. 7 .#. 3 um ar)umento.
[E] E!emplo. pro)ram volcil implicit none real volume0area0raio0> print X0`Di)ite o raio e a altura do cilindro: ` read X0raio0> volume\area'raio*X> print X0volume stop end real function area'!* implicit none real ! area\?.2;2<B9DX!XX9 return end
11.*. )un$5es de Co"ando [D] Vuando uma funo envolve uma 8nica lin>a de computao0 no 3 necessrio escrever um su#pro)rama.
11.*.1. (e4ini$%o de )un$%o de Co"ando [CF] 5ma funo de comando 3 definida por um comando da forma: nome '[a[0a]O]* \ e sendo -ue: 7 .nome. 3 o nome de uma funo e se)ue as mesmas re)ras para nomes de variveis. 7 .a. 3 um ar)umento. 7 .e. 3 uma e!presso.
[D] 5sa7se uma funo de comando como se usa uma funo intr&nseca. [D] $ funo de comando 3 um comando no7e!ecutvel e portanto deve ser declarada no in&cio do pro)rama0 antes de -ual-uer comando e!ecutvel.
[E] E!emplo: pro)ram e!emplo implicit none real area0raio inte)er i area'raio* \ ?.2;2<B9DXraioXX9 do i \ 20 2: read'X0X* raio Grite'X0X* area'raio* enddo stop end [D] 5ma su#rotina difere de uma funo nos se)uintes modos: 2. 5ma su#rotina no retorna um valor. 9. "ara c>amar 'e!ecutar* uma su#rotina usa7se o comando C$ZZ. ?. $ lista de ar)umentos da su#rotina 3 uma via de duas mos: leva e tra1 valores. ;. 5ma su#rotina pode retornar muitos valores0 um valor0 ou nen>um valor. 11.1.1. Co"ando !63=O6?INE [D] O comando S5IPO5QSE deve aparecer como o primeiro comando num su#pro)rama tipo su#rotina.
[CF] $ forma )eral do comando S5IPO5QSE 3: S5IPO5QSE nome ['[a[0a]O]*] sendo -ue: 7 .nome. 3 o nome da su#rotina. 7 .a. 3 um ar)umento.
11.1.2. Co"ando CA++ [CF] 5ma su#rotina 3 e!ecutada atrav3s de um comando C$ZZ0 -ue possui a se)uinte forma )eral: C$ZZ nome ['[#[0#]O]*] sendo -ue: 7 .nome. 3 um nome de su#rotina. 7 .#. 3 um ar)umento.
[E] Este 3 um e!emplo simples0 sendo -ue seria at3 desnecessrio o uso de um su#pro)rama do tipo S5IPO5QSE para 1erar ? matri1es: pro)ram matri12 a O#(etivo: e!emplo do uso de su#rotinas a "ro)ramador: FCZavarda implicit none inte)er n0i0( parameter'n\?* real a'n0n*0#'n0n*0c'n0n* call 1erador'a0#0c0n* do i\20n print X0'a'i0(*0(\20n* enddo stop end su#routine 1erador'!0M010K* implicit none inte)er K0i0( real !'K0K*0M'K0K*01'K0K* do i\20K do (\20K !'i0(*\:.: M'i0(*\:.: 1'i0(*\:.: enddo enddo return end
11.:. (i"ens5es Ajust.2eis [C] 5ma varivel inde!ada 'vi* dimensionada no pro)rama principal pode ser repassada para uma su#rotina. E na su#rotina0 os &ndices de dimenso podem ser diferentes -ue a-ueles definidos no pro)rama principal 'a vi pode ser redimensionada*.
Jndi#e de ?pi#os Captulo 0: Notas Introdutrias :.2. $ssuntos %erais :.9. O editor de te!tos :.?. Sistema Operador de Discos Captulo 1: No$5es ,reli"inares 2.2. Qntroduo 2.9. Computadores 2.?. $l)oritmos 2.;. Dia)ramas de Flu!o 2.D. Zin)ua)ens de "ro)ramao 2.D.2 Zin)ua)em de J-uina 2.D.9. Zin)ua)em Sim#Elica de J-uina 2.D.?. Zin)ua)ens de Compiladores 2.=. "assos no Desenvolvimento de "ro)ramas Captulo 2: A +in&ua&e" )ortran: Con#eitos 3.si#os 9.2 Qntroduo 9.9. Definies da Zin)ua)em 9.?. Qtens sintticos do Fortran 9.;. Caracteres usados no Fortran 9.<. 5ma viso )eral do Fortran 9.C. Codificao de pro)ramas em Fortran 9.C.2. Formato Zivre 9.C.9. Formato Fi!o Captulo : Constantes; <ari.2eis e Conjuntos ?.2 Qntroduo ?.9. Constantes ?.9.2. Constantes Qnteiras ?.9.9. Constantes Peais ?.9.22. Constantes Caracteres ?.?. Hariveis ?.?.2. Hariveis Qnteiras ?.?.9 Hariveis Peais ?.?.?. Hariveis Caracteres ?.;. Con(untos ?.;.2 Declaradores de Con(untos Captulo ': Express5es ;.2. Qntroduo ;.9. E!presses $ritm3ticas ;.; E!presses Pelacionais ;.< E!presses ZE)icas Captulo *: Co"andos de Atri0ui$%o <.2 Qntroduo Captulo 1: Co"andos de Espe#i4i#a$%o: (e#lara$%o de ?ipos de <ari.2eis C.2 Qntroduo C.9. Comando QJ"ZQCQ C.?. Comandos de Especificao E!pl&cita C.?.2. Comando QSE%EP C.?.9. Comando PE$Z C.?.?. Comando DO5IZE "PECQSQOS C.?.;. Comando COJ"ZEd C.?.<. Comando ZO%QC$Z C.?.C. Comando C4$P$CEP Captulo :: Co"andos de Espe#i4i#a$%o: (esi&na$%o de Breas de -e"ria D.2. Qntroduo D.9. Comando DQJESSQOS D.? Comando COJJOS D.;. 5nidades de pro)ramas do tipo JOD5ZE D.<. Comando 5SE D.C. Comando "$P$JEEP D.D. Comando "PO%P$J D.=. Comandos $ZZOC$E0 DE$ZZOC$E E $ZZOC$$IZE Captulo C: Co"andos de Controle de )luxo e ,ro&ra"a$%o Estruturada =.2. Qntroduo =.9. Estruturas de Controle =.?. Comandos %O O =.?.2. Comando %O O incondicional =.;. Comandos QF =.;.9. Comando QF lE)ico =.;.?. Comandos QF #loco =.;.<. Estruturas de QF #loco encai!ados =.<. Comando DO =.<.9. Zaos de DO encai!ados =.C. Comando EdQ =.D. Comando C6CZE =.=. Comando COSQS5E =.B Comando SO" =.2:. Comando ESD =.22. Comando SEZEC C$SE Captulo 8: Co"andos de EntradaE!ada * B.2. Qntroduo B.9. Pe)istros0 $r-uivos e 5nidades B.?. Componentes dos Comandos de E[S B.?.2. Zista de Especificadores de Controle de E[S B.?.9. Zista de E[S B.;. Comandos PE$D B.;.2. Comandos PE$D se-^enciais B.<. Comandos FPQE '"PQS* B.<.2. Comandos FPQE '"PQS* se-^enciais B.C. Comandos de Condio de $r-uivos de E[S B.C.2. Comando O"ES B.C.9. Comando CZOSE Captulo 10: Co"ando )O=-A? e Espe#i4i#a$5es de )or"ato 2:.2. Qntroduo 2:.9. Comando FOPJ$ 2:.?. Especificaes de Formato 'EF* de Converso 2:.;. Especificaes de Formato de Edio 2:.<. Especificaes de Formato em %rupos Pepetidos Captulo 11: !u0pro&ra"as 22.2. Qntroduo 22.9. $r)umentos de Su#pro)ramas 22.?. Funes Qntr&nsecas 'FQ* 22.;. Funes Function 22.;.2. Comando F5CQOS 22.<. Funes de Comando 22.<.2. Definio de Funo de Comando 22.C. Su#pro)ramas Su#rotinas 22.C.2. Comando S5IPO5QSE 22.C.9. Comando C$ZZ 22.D. Dimenses $(ustveis