<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>http://fiscomp.if.ufrgs.br/index.php?action=history&amp;feed=atom&amp;title=FORTRAN</id>
	<title>FORTRAN - Histórico de revisão</title>
	<link rel="self" type="application/atom+xml" href="http://fiscomp.if.ufrgs.br/index.php?action=history&amp;feed=atom&amp;title=FORTRAN"/>
	<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=FORTRAN&amp;action=history"/>
	<updated>2026-05-18T12:38:46Z</updated>
	<subtitle>Histórico de revisões para esta página neste wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=FORTRAN&amp;diff=5566&amp;oldid=prev</id>
		<title>Luisgustta: /* Variáveis */</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=FORTRAN&amp;diff=5566&amp;oldid=prev"/>
		<updated>2021-10-01T20:33:08Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Variáveis&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;pt-BR&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Edição anterior&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Edição das 20h33min de 1 de outubro de 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l68&quot;&gt;Linha 68:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linha 68:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Em FORTRAN existem cinco tipos de variáveis:  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Em FORTRAN existem cinco tipos de variáveis:  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  INTEGER    -&amp;gt; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;enteira&lt;/del&gt;, exemplo: 0, 1, 100 -34&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  INTEGER    -&amp;gt; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;inteira&lt;/ins&gt;, exemplo: 0, 1, 100 -34&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  REAL       -&amp;gt; real o de ponto flutuante, exemplo: 3.14, -0.003, 3.2E-10, -5.02E100 (notação científica)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  REAL       -&amp;gt; real o de ponto flutuante, exemplo: 3.14, -0.003, 3.2E-10, -5.02E100 (notação científica)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  COMPLEX    -&amp;gt; complexa, exemplo: (2.3, 0), (0, -1.0), (1.2E-5, -0.001)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  COMPLEX    -&amp;gt; complexa, exemplo: (2.3, 0), (0, -1.0), (1.2E-5, -0.001)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Luisgustta</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=FORTRAN&amp;diff=16&amp;oldid=prev</id>
		<title>Tekkito: Criou página com &#039;A linguagem de programação Fortran foi desenvolvida na década de 1950 e continua a ser usada hoje em dia. O nome tem como origens a expressão &quot;Formula Translator&quot; (ou &quot;Transl...&#039;</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=FORTRAN&amp;diff=16&amp;oldid=prev"/>
		<updated>2011-09-19T17:34:22Z</updated>

		<summary type="html">&lt;p&gt;Criou página com &amp;#039;A linguagem de programação Fortran foi desenvolvida na década de 1950 e continua a ser usada hoje em dia. O nome tem como origens a expressão &amp;quot;Formula Translator&amp;quot; (ou &amp;quot;Transl...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;A linguagem de programação Fortran foi desenvolvida na década de 1950 e continua a ser usada hoje em dia. O nome tem como origens a expressão &amp;quot;Formula Translator&amp;quot; (ou &amp;quot;Translation&amp;quot;).  A linguagem Fortran é principalmente usada em ciências da computação e análise numérica.&lt;br /&gt;
&lt;br /&gt;
O primeiro compilador de FORTRAN foi desenvolvido para o IBM 704 em 1954-57. O compilador era optimizado, pois os autores acreditavam que ninguém iria usar essa linguagem se a sua prestação não fosse comparável com a da linguagem assembly A linguagem Fortran foi largamente adoptada por cientistas para a escrita de programas numericamente intensivos, o que encorajou os produtores de compiladores a escrever compiladores que gerassem código mais rápido. A inclusão de um tipo de dados de número complexo na linguagem tornou a linguagem Fortran particularmente apta para a computação científica. Ao longo dos tempos foram-se dando algumas revisões da linguagem. Entre elas encontram-se:&lt;br /&gt;
&lt;br /&gt;
* FORTRAN IV (também conhecida como FORTRAN 66)&lt;br /&gt;
* FORTRAN 77, 90, 95&lt;br /&gt;
&lt;br /&gt;
--&amp;#039;&amp;#039;Origem: Wikipédia, a enciclopédia livre.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Olá Mundo ===&lt;br /&gt;
&lt;br /&gt;
Exemplos de código típico e mínimo para testar se o Fortran90 está instalado (ha um equivalente para cada linguagem)&lt;br /&gt;
&lt;br /&gt;
 print*,&amp;quot;olá Mundo&amp;quot; &lt;br /&gt;
 end &lt;br /&gt;
&lt;br /&gt;
==== Editar ====&lt;br /&gt;
&lt;br /&gt;
Essas duas linhas devem estar dentro de um arquivo (ex: &amp;#039;&amp;#039;ola.f90)&amp;#039;&amp;#039;, isto pode ser feito com cat linha por linha ou com um editor de texto (&amp;#039;&amp;#039;jed&amp;#039;&amp;#039; ou &amp;#039;&amp;#039;emacs&amp;#039;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
==== Compilar ====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;ola.f90&amp;#039;&amp;#039; deve ser compilado, isto é traduzido de linguagem de Fortran (&amp;#039;&amp;#039;código fonte&amp;#039;&amp;#039;) para &amp;#039;&amp;#039;&amp;#039;Assembler&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;código objeto&amp;#039;&amp;#039; ou de maquina) com a seguinte instrução:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;gt; f90 ola.f90 -o ola&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;f90&amp;#039;&amp;#039; invoca o compilador que faz a dita conversão&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;-o nome&amp;#039;&amp;#039;  é uma opção para nomear o código objeto (o programa executável) que no exemplo terá o nome &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;ola&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
sem essa opção o executável criado terá o nome &amp;#039;&amp;#039;&amp;#039;a.out&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==== Rodar ====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;ola.f90&amp;#039;&amp;#039; não é executável, o computador não sabe o que fazer com ele, para isso o compilador traduz para una série de instruções que o computador sim sabe executar)&lt;br /&gt;
&lt;br /&gt;
Para rodar fazemos:&lt;br /&gt;
&amp;#039;&amp;#039;&amp;gt; ./ola  &amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
./ na frente é necessário para o interprete de comandos (&amp;#039;&amp;#039;shell&amp;#039;&amp;#039;) saber que o programa está no diretório de trabalho (veremos depois como configurar a sessão para não ter que digitar esses caracteres)&lt;br /&gt;
&lt;br /&gt;
&amp;gt; &amp;#039;&amp;#039;olá Mundo&amp;#039;&amp;#039;  ! será a saída na tela&lt;br /&gt;
&lt;br /&gt;
Desta forma completamos o pequeno ciclo de teste de existência de compilador Fortran 90 no computador que estamos usando e também de ter criado nosso primeiro código Fortran, compilado e executado o mesmo.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Olá Mundo&amp;#039;&amp;#039;&amp;#039; (versão com estilo padrão: &amp;#039;&amp;#039;program ... end program&amp;#039;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
program ola&lt;br /&gt;
print*,&amp;quot;olá Mundo&amp;quot;&lt;br /&gt;
end program ola&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta versão está mais no estilo que usaremos daqui para frente, mesmo que opcional a declaração&lt;br /&gt;
program nome  (terminada com end program) é útil quando temos códigos longos com sub-rotinas (estes são programas chamados pelo programa principal&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Variáveis ===&lt;br /&gt;
&lt;br /&gt;
Em linguagem de programação &amp;quot;Variáveis&amp;quot; são nomes definidos pelo programador onde podem ser armazenados &lt;br /&gt;
números ou texto para uso posterior, sobre os quais podem ser feitas operações matemáticas, lógicas ou&lt;br /&gt;
de manipulação de caracteres, e que também podem ser alteradas ou substituídas por novos conteúdos&lt;br /&gt;
dependendo das instruções do programa.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Podemos dizer que um programa é feito de constantes, variáveis e instruções de operações entre elas que definem uma tarefa a ser desenvolvida automaticamente pelo computador.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Em FORTRAN existem cinco tipos de variáveis: &lt;br /&gt;
&lt;br /&gt;
 INTEGER    -&amp;gt; enteira, exemplo: 0, 1, 100 -34&lt;br /&gt;
 REAL       -&amp;gt; real o de ponto flutuante, exemplo: 3.14, -0.003, 3.2E-10, -5.02E100 (notação científica)&lt;br /&gt;
 COMPLEX    -&amp;gt; complexa, exemplo: (2.3, 0), (0, -1.0), (1.2E-5, -0.001)&lt;br /&gt;
 LOGICAL    -&amp;gt; logica, exemplo: .TRUE. .FALSE. (só essas)&lt;br /&gt;
 CHARACTER  -&amp;gt; caracter, exemplo: &amp;quot;ola&amp;quot;, &amp;quot;Entre seu nome!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
No programa a definição de variáveis é feita no início assim&lt;br /&gt;
&lt;br /&gt;
 Program test&lt;br /&gt;
 Integer I, J, K&lt;br /&gt;
 Real  a, x, velocidade, tempo_0, Temp&lt;br /&gt;
 Logical prova&lt;br /&gt;
 Character*10 Titulo, nome&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
São as chamadas &amp;#039;&amp;#039;declarações de variáveis&amp;#039;&amp;#039;, depois seguem as instruções de execução&lt;br /&gt;
&lt;br /&gt;
=== Bytes ===&lt;br /&gt;
Em computação &amp;#039;&amp;#039;&amp;#039;byte&amp;#039;&amp;#039;&amp;#039; é uma unidade de medida de armazenagem de informação, tipicamente de oito &amp;#039;&amp;#039;&amp;#039;bits&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
O bit, pela sua vez, é a mínima quantidade de informação possível, ou seja a menor unidade de medida de armazenagem de informação.&lt;br /&gt;
É onde podemos guardar apenas dois estados: 0 ou 1, sim ou não, etc.&lt;br /&gt;
Menos do que isso não é informação nenhuma, pois de fato, menos do que isso é um estado único&lt;br /&gt;
que só pode ser sempre 0 ou 1 ou 2, mais é sempre igual, ele só pode tomar esse único valor&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;e não mudar&amp;#039;&amp;#039;&amp;#039;. Para ter informação então, no mínimo precisamos de dois estados: ora é um, ora é zero.&lt;br /&gt;
Por isso alguém chamou o bit de ... &amp;#039;&amp;#039;a mínima diferença que faz a diferença&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
A origem do &amp;#039;&amp;#039;&amp;#039;bit&amp;#039;&amp;#039;&amp;#039; é anterior ao computador, provavelmente de 1936, e o nome vem da contração de &amp;#039;&amp;#039;dígito binário&amp;#039;&amp;#039; em inglês.&lt;br /&gt;
Os dígitos binários eram usados anteriormente e são apenas uma representação dos números como é a decimal, porem com base nas potências de 2.&lt;br /&gt;
assim um número binário só pode estar composto de 0 e 1 (como um decimal esta só composto dos dígitos de 0 a 9).&lt;br /&gt;
Como exemplo o numero binário 1001100 representa o número decimal 76.&lt;br /&gt;
(&amp;#039;&amp;#039;texto em preparação&amp;#039;&amp;#039;--[[Usuário:Sebas|Sebas]] 12:42, 11 Setembro 2007 (BRT))&lt;br /&gt;
&lt;br /&gt;
[http://pt.wikipedia.org/wiki/Byte Byte]&lt;br /&gt;
[http://pt.wikipedia.org/wiki/Bit Bit]&lt;br /&gt;
&lt;br /&gt;
[http://pt.wikipedia.org/wiki/Sistema_bin%C3%A1rio_%28matem%C3%A1tica%29 Sistema binârio]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Entrada e Saída ===&lt;br /&gt;
&lt;br /&gt;
São as intruções READ e WRITE (ou PRINT) &lt;br /&gt;
O READ permite entrar dados antes ou durante a execução do programa.&lt;br /&gt;
&lt;br /&gt;
Com o WRITE podemos ver os resultado final da execução do código ou&lt;br /&gt;
acompanhar o desenvolvimento do mesmo. &lt;br /&gt;
&lt;br /&gt;
Exemplos:&lt;br /&gt;
&lt;br /&gt;
 READ (*,*) I, Velocidade&lt;br /&gt;
 ...&lt;br /&gt;
 Write (*,*) Titulo, Temp&lt;br /&gt;
&lt;br /&gt;
Esta última é equivalente a &lt;br /&gt;
&lt;br /&gt;
 PRINT*, Titulo, Temp&lt;br /&gt;
&lt;br /&gt;
Todas essa representam entrada/saída pelo terminal &lt;br /&gt;
Entrada pelo &amp;#039;&amp;#039;&amp;#039;Teclado&amp;#039;&amp;#039;&amp;#039;. Saída na &amp;#039;&amp;#039;&amp;#039;Tela&amp;#039;&amp;#039;&amp;#039;. São as chamadas entrada/saida standar&lt;br /&gt;
&lt;br /&gt;
Se quisermos ler ou gravar num arquivo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OPEN (1, FILE=&amp;quot;entrada.dat&amp;quot;)&lt;br /&gt;
READ(1,*) I, Velocidade&lt;br /&gt;
&lt;br /&gt;
OPEN (2, FILE=&amp;quot;entrada.dat&amp;quot;)&lt;br /&gt;
WRITE (2,*) Titulo, Temp&lt;br /&gt;
&lt;br /&gt;
CLOSE(1)&lt;br /&gt;
CLOSE(2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operadores matemáticos ===&lt;br /&gt;
&lt;br /&gt;
 {| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! style=&amp;quot;background:#efefef;&amp;quot; | Operador&lt;br /&gt;
 ! style=&amp;quot;background:#efefef;&amp;quot; | Função&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | &amp;#039;&amp;#039;&amp;#039;.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 | ponto decimal&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | &amp;#039;&amp;#039;&amp;#039;+&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 | soma&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | &amp;#039;&amp;#039;&amp;#039;-&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 | resta&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | &amp;#039;&amp;#039;&amp;#039;*&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 | multiplicação&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | &amp;#039;&amp;#039;&amp;#039;/&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 | divisão&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | &amp;#039;&amp;#039;&amp;#039;**&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 | potência&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | &amp;#039;&amp;#039;&amp;#039;( )&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 | parênteses&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Exemplo usando todas &lt;br /&gt;
 z = 3.14*x**(-1.4)/2 - 4.3E-10&lt;br /&gt;
&lt;br /&gt;
=== Funções intrínsecas===&lt;br /&gt;
Estas são as funções pré-definidas no compilador, entre as quais encontramos a mais comummente utilizadas como&lt;br /&gt;
raiz quadrada, trigonométricas, exponencial, etc: &lt;br /&gt;
A sintaxe de uso é o nome da função (geralmente três letras) e o argumento entre parêntesis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
raiz quadrada: sqrt&lt;br /&gt;
trigonométricas: sin, cos, tan, asin&lt;br /&gt;
exponencial: exp&lt;br /&gt;
logaritmo natural: log&lt;br /&gt;
módulo: abs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemplos:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
a = sqrt(2.)&lt;br /&gt;
b = sin(x)&lt;br /&gt;
Pi = 2.*asin(1.)  uma forma pratica de ter Pi como constante dentro de um programa&lt;br /&gt;
y = (x - exp(-lam*x**2))/sqrt(x)&lt;br /&gt;
z = x**(1./4.) Cuidado! Teste com 1/4 em lugar de 1./4. e verá a grande diferença&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;!--Lista completa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Function        Generic  Specific Data type&lt;br /&gt;
                name     name     Arg   Res&lt;br /&gt;
&lt;br /&gt;
Square root     SQRT     SQRT     R     R&lt;br /&gt;
                         DSQRT    D     D&lt;br /&gt;
                         CSQRT    C     C&lt;br /&gt;
&lt;br /&gt;
Exponential     EXP      EXP      R     R&lt;br /&gt;
                         DEXP     D     D&lt;br /&gt;
                         CEXP     C     C&lt;br /&gt;
&lt;br /&gt;
Natural         LOG      ALOG     R     R&lt;br /&gt;
 logarithm               DLOG     D     D&lt;br /&gt;
                         CLOG     C     C&lt;br /&gt;
&lt;br /&gt;
Common          LOG10    ALOG10   R     R&lt;br /&gt;
 logarithm               DLOG10   D     D&lt;br /&gt;
&lt;br /&gt;
Sine            SIN      SIN      R     R&lt;br /&gt;
                         DSIN     D     D&lt;br /&gt;
                         CSIN     C     C&lt;br /&gt;
&lt;br /&gt;
Cosine          COS      COS      R     R&lt;br /&gt;
                         DCOS     D     D&lt;br /&gt;
                         CCOS     C     C&lt;br /&gt;
&lt;br /&gt;
Tangent         TAN      TAN      R     R&lt;br /&gt;
                         DTAN     D     D&lt;br /&gt;
&lt;br /&gt;
Arcsine         ASIN     ASIN     R     R&lt;br /&gt;
                         DASIN    D     D&lt;br /&gt;
&lt;br /&gt;
Arccosine       ACOS     ACOS     R     R&lt;br /&gt;
                         DCOS     D     D&lt;br /&gt;
&lt;br /&gt;
Arctangent      ATAN     ATAN     R     R&lt;br /&gt;
                         DATAN    D     D&lt;br /&gt;
                ATAN2    ATAN2   2R     R&lt;br /&gt;
                         DATAN2  2D     D&lt;br /&gt;
&lt;br /&gt;
Hyperbolic      SINH     SINH     R     R&lt;br /&gt;
 sine                    DSINH    D     D&lt;br /&gt;
&lt;br /&gt;
Hyperbolic      COSH     COSH     R     R&lt;br /&gt;
 cosine                  DCOSH    D     D&lt;br /&gt;
&lt;br /&gt;
Hyperbolic       TANH    TANH     R     R&lt;br /&gt;
 tangent                 DTANH    D     D&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ciclos (loop) ===&lt;br /&gt;
O grande lance dos programas (e do computador claro) é poder repetir operações sem ter que fazer uma de cada vez. Ou seja, utilizando a lógica para repetir tarefas que podem ter variações especificadas pelo programador dentro de um ciclo. Vejamos um exemplo usando a instrução &amp;#039;&amp;#039;&amp;#039;Do I=... End Do&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
Do I = 1, 100&lt;br /&gt;
   x = I*0.1;   y=x**2&lt;br /&gt;
   Print*, x,y&lt;br /&gt;
End Do&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
a diferencia do shell onde maiúsculas e minúsculas são diferentes (A é diferente de a)&lt;br /&gt;
no Fortran elas *SÃO* interpretadas da mesma forma (print = PRINT = PrInT=...).&lt;br /&gt;
Porem, é recomendado, por uma questão de estilo, usar preferentemente minúsculas, &lt;br /&gt;
reservando maiúsculas para aquilo que se quer chamar a atenção.&lt;br /&gt;
&lt;br /&gt;
o Ponto e vírgula permite separar instruções diferentes em uma mesma linha&lt;br /&gt;
&lt;br /&gt;
a interpretação do &amp;#039;&amp;#039;&amp;#039;do&amp;#039;&amp;#039;&amp;#039; é a seguinte:&lt;br /&gt;
&lt;br /&gt;
    * comece com I=1&lt;br /&gt;
    * faca o que esta entre do ... end do&lt;br /&gt;
    * incremente I em 1 e veja se ultrapassou o valor máximo de I (no exemplo 100)&lt;br /&gt;
    * se a resposta e não faca de novo  com o novo valor de I&lt;br /&gt;
    * o ciclo se repete até o valor máximo de I (= 100 no exemplo)&lt;br /&gt;
    * quando I ultrapassa esse valor o laço é interrompido e o programa continua com a seguinte instrução depois de end do&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pergunta:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Qual será no exemplo acima o valor da variável I finalizado o laço?&lt;br /&gt;
&lt;br /&gt;
==== Exemplo: MRUA ====&lt;br /&gt;
Neste exemplo criamos um programa que gera a trajetória x(t) (uma dimensão) de um objeto com aceleração constante:&lt;br /&gt;
&lt;br /&gt;
 x(t) = x(0) + v(0)*t + 0.5*a*t²&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
program mrua&lt;br /&gt;
implicit none                ! isto nos obriga a declarar todas as variáveis que usaremos (recomendável)&lt;br /&gt;
real :: x0, x, v0, a, t, dt  ! variáveis reais (ponto flutuante)&lt;br /&gt;
integer :: I, N&lt;br /&gt;
&lt;br /&gt;
print*, &amp;#039;entre x0, v0, a, t, N&amp;#039;&lt;br /&gt;
read*, x0, v0, a, t, N&lt;br /&gt;
dt = t/N       ! passo de tempo: definido pelo tempo máximo e o numero de pontos da trajetória&lt;br /&gt;
t = 0&lt;br /&gt;
&lt;br /&gt;
do i = 1, N&lt;br /&gt;
   x = x0 + v*t + 0.5*a*t**2&lt;br /&gt;
   print*, t, x&lt;br /&gt;
   t = t + dt&lt;br /&gt;
end do&lt;br /&gt;
&lt;br /&gt;
end program mrua&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: este programa tem um erro que você deve descobrir&lt;br /&gt;
&lt;br /&gt;
==Controle de Fluxo (IF e CASE)==&lt;br /&gt;
&lt;br /&gt;
Possibilitam a escolha de rumos diferentes no programa dependendo de valores de variáveis ou condições entre elas.&lt;br /&gt;
&lt;br /&gt;
=== IF ... THEN ... ===&lt;br /&gt;
A sintaxe é:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (condição) then&lt;br /&gt;
     instruções executadas quando condição verdadeira&lt;br /&gt;
else&lt;br /&gt;
     instruções executadas quando condição falsa&lt;br /&gt;
end if&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para apreciar o poder dela primeiro vejamos:&lt;br /&gt;
&lt;br /&gt;
=== Operadores relacionais e lógicos ===&lt;br /&gt;
&lt;br /&gt;
 {| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! style=&amp;quot;background:#efefef;&amp;quot; | Operador&lt;br /&gt;
 ! style=&amp;quot;background:#efefef;&amp;quot; | Função&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | ==&lt;br /&gt;
 | igual&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | /=&lt;br /&gt;
 | diferente&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | &amp;gt;&lt;br /&gt;
 | maior&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | &amp;gt;=&lt;br /&gt;
 | maior ou igual&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | &amp;lt;&lt;br /&gt;
 | menor&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |&amp;lt;=&lt;br /&gt;
 | menor ou igual&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |.AND.&lt;br /&gt;
 | E lógico&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |.OR.&lt;br /&gt;
 | OU lógico&lt;br /&gt;
 |-&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |.NOR.&lt;br /&gt;
 |  NÃO lógico&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eles são usados junto com as instrucões de controlo como o IF (se), exemplo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
! exemplo de divisão a x b:&lt;br /&gt;
...&lt;br /&gt;
read*, a, b&lt;br /&gt;
&lt;br /&gt;
if (b /= 0) then&lt;br /&gt;
    c = a/b&lt;br /&gt;
else&lt;br /&gt;
     stop &amp;#039;b=0&amp;#039;&lt;br /&gt;
end if&lt;br /&gt;
print*, &amp;#039;a/b=&amp;#039;, c&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===CASE===&lt;br /&gt;
Este serve para quando temos muitas opçõs ou escolhas para tomar rumos diferentes no programa.&amp;lt;br&amp;gt;&lt;br /&gt;
Vejamos a sintaxe diretamente no exemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Select Case (J)&lt;br /&gt;
    Case(1)&lt;br /&gt;
      print*, &amp;quot;caso 1&amp;quot;&lt;br /&gt;
    Case(2)&lt;br /&gt;
      print*, &amp;quot;caso 2&amp;quot;&lt;br /&gt;
    Case (4:10)&lt;br /&gt;
      print*, &amp;quot;caso 4-10&amp;quot;&lt;br /&gt;
    ....&lt;br /&gt;
    Case Default&lt;br /&gt;
      print*, &amp;quot;não foi nenhum dos casos contemplados&amp;quot;   &lt;br /&gt;
End Select&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ciclos (Avançado)==&lt;br /&gt;
&lt;br /&gt;
=== Ciclo infinito (Do ... end Do) ===&lt;br /&gt;
Se não especificamos com um índice o numero de vezes que o laço deve ser executado este será &lt;br /&gt;
executado &amp;#039;&amp;#039;para sempre&amp;#039;&amp;#039;. Exemplo:&lt;br /&gt;
&lt;br /&gt;
 Do &lt;br /&gt;
   print*, &amp;quot;All work and no play makes Jack a dull boy&amp;quot;&lt;br /&gt;
 End Do&lt;br /&gt;
&lt;br /&gt;
vai fazer que a tela do computador pareça ter sido controlado por um espírito maligno saído do filme &amp;#039;&amp;#039;O Iluminado&amp;#039;&amp;#039;.&lt;br /&gt;
Só vamos poder cortar a loucura dela com CTRL C.&lt;br /&gt;
&lt;br /&gt;
Para que seja de utilidade usamos o &amp;#039;&amp;#039;&amp;#039;Exit&amp;#039;&amp;#039;&amp;#039;, como no exemplo abaixo:&lt;br /&gt;
&lt;br /&gt;
 Do&lt;br /&gt;
     Print*, &amp;quot;Digite o número 1 ou 2&amp;quot;&lt;br /&gt;
     Read*, num&lt;br /&gt;
     Select Case (num)&lt;br /&gt;
     Case (1)&lt;br /&gt;
        Print*, &amp;quot;Você digitou 1&amp;quot;&lt;br /&gt;
        Exit&lt;br /&gt;
     Case (2)&lt;br /&gt;
        Print*, &amp;quot;Você digitou 2&amp;quot;&lt;br /&gt;
        Exit&lt;br /&gt;
     Case Default&lt;br /&gt;
        Print*, &amp;quot;Opção inválida&amp;quot;&lt;br /&gt;
     End Select&lt;br /&gt;
 End Do&lt;br /&gt;
&lt;br /&gt;
Se queremos um programa a prova de fogo (ie que não de erro por entrada de dados) podemos fazer uma pequena modificação:&lt;br /&gt;
&lt;br /&gt;
 Do&lt;br /&gt;
     Print*, &amp;quot;Digite o número 1 ou 2&amp;quot;&lt;br /&gt;
     Read(*,*,ERR=100) num&lt;br /&gt;
     Select Case (num)&lt;br /&gt;
     Case (1)&lt;br /&gt;
        Print*, &amp;quot;Você digitou 1&amp;quot;;  Exit&lt;br /&gt;
     Case (2)&lt;br /&gt;
        Print*, &amp;quot;Você digitou 2&amp;quot;;  Exit&lt;br /&gt;
     Case Default&lt;br /&gt;
 100    Print*, &amp;quot;Opção inválida&amp;quot;&lt;br /&gt;
     End Select&lt;br /&gt;
 End Do&lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
Na qual usamos &amp;#039;&amp;#039;&amp;#039;ERR=100&amp;#039;&amp;#039;&amp;#039; para o código se recuperar de dado inesperado, transferindo o controle &lt;br /&gt;
do programa para a linha com esse número em caso de erro (texto em lugar de número por exemplo).&lt;br /&gt;
&lt;br /&gt;
=== Ciclo condicional (Do While) ===&lt;br /&gt;
O &amp;#039;&amp;#039;&amp;#039;Do While&amp;#039;&amp;#039;&amp;#039; é executado enquanto uma condição lógica é satisfeita. Exemplo:&lt;br /&gt;
&lt;br /&gt;
  I = 1&lt;br /&gt;
  Do While ( I &amp;lt;= 100 )&lt;br /&gt;
     I = I + 1; print*. I&lt;br /&gt;
  End do&lt;br /&gt;
&lt;br /&gt;
Resulta equivalente a:&lt;br /&gt;
&lt;br /&gt;
  Do I + 1, 100&lt;br /&gt;
     print*. I&lt;br /&gt;
  End do&lt;br /&gt;
&lt;br /&gt;
Porem é de utilidade quando a condição não é trivial. Exemplo:&lt;br /&gt;
&lt;br /&gt;
  fac = 1. + 1./3.;  Imax = 1.E6&lt;br /&gt;
  I = 1;  print*, I&lt;br /&gt;
  Do While ( I &amp;lt; Imax )&lt;br /&gt;
     I = fac*I;  print*, I &lt;br /&gt;
  End do&lt;br /&gt;
&lt;br /&gt;
== Arranjos (Arrays) ==&lt;br /&gt;
Tecnicamente, são tipos de dados ou variáveis estruturadas. &lt;br /&gt;
De outra forma, um arranjo é um conjunto de dados escalares, todos do mesmo tipo (REAL ou INTEGER, etc), organizados de&lt;br /&gt;
forma regular de maneira que é fácil atribuir ou extrair valores deles.&lt;br /&gt;
&lt;br /&gt;
Assim como um escalar real é definido como&lt;br /&gt;
&lt;br /&gt;
 Real A&lt;br /&gt;
&lt;br /&gt;
um &amp;#039;&amp;#039;array&amp;#039;&amp;#039; real pode ser definido assim:&lt;br /&gt;
&lt;br /&gt;
 Real A(10)&lt;br /&gt;
&lt;br /&gt;
No primeiro exemplo A pode conter apenas um valor por vez, enquanto no segundo, 10 diferentes valores podem ser armazenados&lt;br /&gt;
em A, cada um dos quais pode ser referido via o índice assim&lt;br /&gt;
&lt;br /&gt;
 A(1) = 0;  A(2:7) = 4;  A(8) = -1;  A(9:10) = 2&lt;br /&gt;
&lt;br /&gt;
  Do i =2, 10, 2&lt;br /&gt;
     print*, A(i) !imprimindo só as posições pares&lt;br /&gt;
  End do&lt;br /&gt;
&lt;br /&gt;
Rodando esse programa teremos na tela:&lt;br /&gt;
&lt;br /&gt;
   4.000000&lt;br /&gt;
   4.000000&lt;br /&gt;
   4.000000&lt;br /&gt;
  -1.000000&lt;br /&gt;
   2.000000&lt;br /&gt;
&lt;br /&gt;
===Arranjos Estáticos===&lt;br /&gt;
&lt;br /&gt;
Arranjo estático e aquele cuja dimensão (números de elementos do arranjo) é definido nas declarações (instruções no início do programa e que não são executadas durante o tempo de rodada), é um número fixo que não pode ser mais alterado durante a execução. Exemplos:&lt;br /&gt;
&lt;br /&gt;
 Real A(10), B(30)&lt;br /&gt;
 Integer GG(10,10), ax(5,20), FG(6,10,5)&lt;br /&gt;
&lt;br /&gt;
Também pode ser assim:&lt;br /&gt;
&lt;br /&gt;
 Character*10, Dimension (10,10) :: A, B, C, D&lt;br /&gt;
&lt;br /&gt;
A dimensão é definida com Dimension(10,10) para todos os &amp;#039;&amp;#039;arrays&amp;#039;&amp;#039; (A,B,C,D), todos eles da mesma forma (&amp;#039;&amp;#039;shape&amp;#039;&amp;#039;).&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NOTA:&amp;#039;&amp;#039;&amp;#039; quando mais de um atributo é aplicado a uma ou mais variáveis (&amp;#039;&amp;#039;arrays&amp;#039;&amp;#039; ou escalares) os dois pares de pontos (::)&lt;br /&gt;
entre atributos e variáveis é mandatório&lt;br /&gt;
&lt;br /&gt;
===Arranjos Dinâmicos===&lt;br /&gt;
A diferença com os anteriores é que a dimensão destes é definida durante durante a execução do programa, pudendo até ser modificada&lt;br /&gt;
durante o mesmo. Isto se consegue com o atributo ALLOCATABLE. Vejamos o exemplo:&lt;br /&gt;
&lt;br /&gt;
 Real, Allocatable :: A(:), B(:,:)&lt;br /&gt;
 Integer, Allocatable :: K(:), AJ(:,:,:)&lt;br /&gt;
&lt;br /&gt;
Nesses exemplos definimos A e K como &amp;#039;&amp;#039;arrays&amp;#039;&amp;#039; vetoriais, B matricial, e AJ tensorial.&amp;lt;br&amp;gt; &lt;br /&gt;
O número de elementos deles é definido durante o tempo de execução com ALLOCATE. &lt;br /&gt;
A seguir um exemplo que ilustra a vantagem de usar arranjos dinâmicos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Real, Allocatable :: A(:), B(:,:)&lt;br /&gt;
Integer I, N, M&lt;br /&gt;
&lt;br /&gt;
Read*, N&lt;br /&gt;
&lt;br /&gt;
Allocate (A(N), B(N,N))&lt;br /&gt;
&lt;br /&gt;
Do I = 1, N&lt;br /&gt;
   A(I) = 2*I&lt;br /&gt;
End Do&lt;br /&gt;
&lt;br /&gt;
Do i =1, N&lt;br /&gt;
   B(i,:) = A + i&lt;br /&gt;
End do&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
if (j &amp;gt; 0) then&lt;br /&gt;
  Deallocate (B)&lt;br /&gt;
else &lt;br /&gt;
  Deallocate (A)&lt;br /&gt;
end if&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
Select Case (J)&lt;br /&gt;
 Case(-1)&lt;br /&gt;
   Allocate (A(N/2)&lt;br /&gt;
 Case(2) &lt;br /&gt;
   Allocate (B(N,N/2))&lt;br /&gt;
End Select case&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Funções e Subrotinas ==&lt;br /&gt;
&lt;br /&gt;
São módulos independentes para fazer tarefas especificas definidas pelo programador.&lt;br /&gt;
Com a declaração FUNCTION é possível definir funções matemáticas diferentes ou além do conjunto de funções intrínsecas do &lt;br /&gt;
compilador. Elas podem ser de uma ou mais variáveis, porem devolvem um valor só.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ATENÇÂO&amp;#039;&amp;#039;&amp;#039; a sintaxe: na declaração de função se escreve g(x) (primeira linha nos exemplos&lt;br /&gt;
onde se declara o nome da função e das variáveis). Na definição da função se escreve:&lt;br /&gt;
&lt;br /&gt;
 g = ...&lt;br /&gt;
&lt;br /&gt;
não se colocam os argumentos ou variáveis a esquerda, elas devem aparecer só a direita da &lt;br /&gt;
instrução.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Quanto a subrotina ela e um procedimento mais geral que pode operar em um conjunto ou todas as&lt;br /&gt;
variáveis que estão no programa principal, e no retorno ao programa não há limite nas variáveis &lt;br /&gt;
que pode devolver. Vejamos a sintaxe de cada uma:&lt;br /&gt;
&lt;br /&gt;
=== Function === &lt;br /&gt;
&lt;br /&gt;
A sintaxe é:&lt;br /&gt;
&lt;br /&gt;
 REAL FUNCTION NOME(VARIAVEL)&lt;br /&gt;
 ...&lt;br /&gt;
 NOME = operações com VARIAVEL&lt;br /&gt;
 END FUNCTION NOME&lt;br /&gt;
&lt;br /&gt;
Vamos para o exemplo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Real Function g(x)&lt;br /&gt;
Implicit None&lt;br /&gt;
Real x&lt;br /&gt;
&lt;br /&gt;
  g = x**2 * sin(x)&lt;br /&gt;
&lt;br /&gt;
End Function g&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemplo de duas variáveis:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Real Function paraboloide(z,w)&lt;br /&gt;
Implicit None&lt;br /&gt;
Real z,w&lt;br /&gt;
&lt;br /&gt;
  paraboloide = z**2 + w**2&lt;br /&gt;
&lt;br /&gt;
End Function paraboloide &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
É possível também definir funções não analíticas, como por exemplo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
if (x &amp;lt;= 0) then&lt;br /&gt;
    g = 0.&lt;br /&gt;
else&lt;br /&gt;
    g = 1.&lt;br /&gt;
end if&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Logo na execução, dentro do programa principal, se chama como qualquer função intrínseca do FORTRAN.&lt;br /&gt;
Vejamos um exemplo completo de programa com definição de função.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
! este e o program principal que usa a funcao h(x)&lt;br /&gt;
Program exemplo_uso_funcao&lt;br /&gt;
Implicit None&lt;br /&gt;
Real, external :: h(x)&lt;br /&gt;
Real x, dx, y&lt;br /&gt;
Integer i,N&lt;br /&gt;
&lt;br /&gt;
Print*, &amp;quot;programa para construir tabela de h(x)&amp;quot;&lt;br /&gt;
Print*, &amp;quot;entre o primeiro e ultimo x e o numero de pontos a graficar&amp;quot;&lt;br /&gt;
Read*, x0, xf, N&lt;br /&gt;
&lt;br /&gt;
dx = (xf - x0)/N&lt;br /&gt;
&lt;br /&gt;
Do i = 0, N&lt;br /&gt;
   x = x0 + i*dx&lt;br /&gt;
   print*, x, h(x)&lt;br /&gt;
End Do&lt;br /&gt;
&lt;br /&gt;
End Program exemplo_uso_funca&lt;br /&gt;
&lt;br /&gt;
! aqui a definicao de funcao h(x)&lt;br /&gt;
Real Function h(x)&lt;br /&gt;
Real x&lt;br /&gt;
   h = exp(-x**2)/2.0&lt;br /&gt;
End Function h&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Subroutine ===&lt;br /&gt;
&lt;br /&gt;
A sintaxe de subrotina e:&lt;br /&gt;
&lt;br /&gt;
 SUBROUTINE EXEMPLO (Argumentos)&lt;br /&gt;
 ...&lt;br /&gt;
 END SUBROUTINE&lt;br /&gt;
&lt;br /&gt;
No meio todas as instruções FORTRAN são validas, pois a subrotina é&lt;br /&gt;
um programa. A idéia é que se um conjunto de operações se repete muito,&lt;br /&gt;
então resulta conveniente colocá-las num módulo e chamá-lo cada vez que &lt;br /&gt;
for necessário, assim:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PROGRAM Principal&lt;br /&gt;
...&lt;br /&gt;
  CALL EXEMPLO(Argumentos)&lt;br /&gt;
  ...&lt;br /&gt;
  DO&lt;br /&gt;
     ...&lt;br /&gt;
     CALL EXEMPLO(Argumentos)&lt;br /&gt;
     ...  &lt;br /&gt;
  END DO&lt;br /&gt;
 ...&lt;br /&gt;
END PROGRAM Principal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemplo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Program Main&lt;br /&gt;
implicit None&lt;br /&gt;
Real A(3,3)&lt;br /&gt;
&lt;br /&gt;
  Read*, B&lt;br /&gt;
  Call Matriz(A,B)&lt;br /&gt;
&lt;br /&gt;
End Program Main&lt;br /&gt;
&lt;br /&gt;
Subroutine Matriz(A,B)&lt;br /&gt;
Real A(3,3)&lt;br /&gt;
&lt;br /&gt;
  A = B&lt;br /&gt;
&lt;br /&gt;
End Subroutine Matriz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Module ===&lt;br /&gt;
&lt;br /&gt;
Esta estrutura permite definir variáveis de uso comum entre o programa principal e as subrotinas sem se preocupar de passar elas como argumentos&lt;br /&gt;
das mesmas. Vejamos um exemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Module VARIAVEIS&lt;br /&gt;
  Real a, b&lt;br /&gt;
  Integer N&lt;br /&gt;
End Module&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Depois no programa e subrotina&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Program Principal&lt;br /&gt;
Use VARIAVEIS           !o main sabe agora de a,b,N&lt;br /&gt;
Implicit None&lt;br /&gt;
...&lt;br /&gt;
  Read (*,*) a, b, N    !estes valores de a,b,N serão passados para sub&lt;br /&gt;
  Call Sub&lt;br /&gt;
...&lt;br /&gt;
End Program&lt;br /&gt;
&lt;br /&gt;
Subroutine Sub&lt;br /&gt;
Use VARIAVEIS           !a Subrutina sabe de a,b,N&lt;br /&gt;
Implicit None&lt;br /&gt;
...&lt;br /&gt;
  h = (a-b)/N           !e pode usa-las com os valores que tinham quando foi chamada&lt;br /&gt;
...&lt;br /&gt;
End Subroutine&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.rpi.edu/~szymansk/OOF90/bugs.html Erros sutis com F90]&lt;/div&gt;</summary>
		<author><name>Tekkito</name></author>
	</entry>
</feed>