Resolução de equações não lineares com o método da bissecção em Fortran
1. CURSO SUPERIOR DE CIÊNCIA DA COMPUTAÇÃO
PARADIGMAS DE LINGUAGEM DE PROGRAMAÇÃO
PROFº. HEITOR KAZUO YOKOMIZO
1811283419 – RAFAEL CIANCI DA SILVA
- FELIPE SEWAYBRICKER LOMBARDI
1809308367 - FRANCISCO MARIANO DE C. NETO
ATPS PARADIGMA DA LINGUAGEM
Sorocaba
2012 – 8º Semestre
2. História e evolução da linguagem Fortran:
Pode-se classificar o Fortran como o "avô" de todas as linguagens computacionais
cientificas. O nome FORTRAN deriva de FORmula TRANslation, que indica que esta
linguagem estava destinada, desde o inicio, para a tradução de equações cientificas
numa linguagem computacional. Antes da existência desta linguagem, os programas
eram essencialmente escritos em linguagem de máquina, o que era um processo lento e
enfastiante. Fortran foi um produto verdadeiramente revolucionário. Inicialmente, o
programador podia prever o algoritmo desejado como uma série de equações algébricas
standard, e o compilador Fortran convertia em linguagem de máquina que o
computador reconhecia e executava. A linguagem Fortran original comparada com
outras versões mais modernas era bastante rudimentar. Continha apenas um número
limitado de tipos de declaração e suportava apenas as variáveis do tipo Real Data e
Integer, também não existiam subrotinas. Foi uma primeira tentativa para escrever
linguagem computacional de alto nível, no entanto foram encontradas muitas
deficiências pelos utilizadores regulares. Assim, a IBM desenvolveu o FORTRAN II em
1958. Desenvolvimentos posteriores continuaram durante 1962, quando o FORTRAN IV
foi disponibilizado. Este foi um grande passo e tornou-se a versão standard nos 15 anos
seguintes. Em 1966 FORTRAN IV foi adoptado como um ANSI ficando conhecido como
FORTRAN 66. A linguagem fortran sofreu outra grande alteração em 1977. FORTRAN
77 facilitava a escrita devido à melhor estrutura que esta linguagem apresentava,
tornando-se rápidamente O FORTRAN. Introduziu várias estruturas , tais como: o bloco
IF; e foi a primeira versão onde as variáveis CHARACTER eram mais fáceis de
manipular. Mais tarde, surgiu uma nova versão, o FORTRAN 90. Esta linguagem não é
tão rígida como o FORTRAN 77. Em 1997 apareceu o FORTRAN 95. Este acrescenta
novas características à linguagem fortran, como por exemplo: construções FORALL,
funções puras e alguns novos procedimentos intrísecos. Em conjunto clarifica inúmeras
ambiguidades no FORTRAN 90 standard.
Observações:
Um programa completo em fortran é composto pelo programa principal e por um
qualquer número de sub-programas. Existem dois tipos de sub-programas:
Subroutine - é caracterizada por uma lista de argumentos e é chamada no programa
principal através da instrução CALL. Functions - esta apresenta como resultado um
único valor e é chamada no programa principal através do nome que lhe foi atribuído.
Os sub-programas deverão ser agrupados no final do programa principal.
As variáveis ou constantes podem ser:
Integer- número inteiro (positivo, negativo ou nulo), que pode ser representado por um
conjunto de dígitos que não contém aspas, nem ponto decimal.
Real - as variáveis deste tipo podem ser representadas com números com ponto decimal
ou com notação exponencial. As aspas não são válidas.
Character - as variáveis deste tipo são incluídas entre apóstrofes ou aspas. O número
de caracteres constitui o comprimento da variável.
Logical - variáveis do tipo: .TRUE. ou .FALSE..
Há ainda a considerar outros tipos, tais como: Complex, Double Precision.
Geralmente utiliza-se a instrução IMPLICIT NONE, a qual obriga a que o utilizador
tenha que declarar todas as variáveis. Os identificadores são nomes usados para
identificar programas, constantes, variáveis, etc. Estes devem começar por uma letra,
seguido de outras letras, dígitos ou underscores.
3. Instruções de transferência de controlo e outras:
Program - esta instrução só aparece como a primeira instrução do programa principal.
Stop - suspende a execução do programa.
Pause - suspende temporariamente a execução do programa.
Continue - esta instrução não tem qualquer efeito no que respeita ao resultado da
execução do programa.
Return - esta instrução permite sair do subprograma, voltando ao local onde é efectuada
a chamada do mesmo subprograma.
Rewind - permite voltar ao inicio de um ficheiro de dados, mesmo depois de já terem
sido lidos alguns dados do mesmo.
End - termina uma unidade do programa (programa principal ou um subprograma).
If
If aritmético
If lógico
If then
If then else
Else if
....
End if
Ciclo Do
....
End Do ou Continue
Estrutura de um programa exemplo em FORTRAN:
Program exemplo
Implicit none
Declaração das variáveis
Leitura e escrita de dados
Algoritmo do problema
Escrita dos resultados
End program
EQUAÇÕES NÃO LINEARES:
A resolução de equações não lineares, pode ser utilizada, por exemplo, para determinar
as raízes de uma dada equação f(x)=0 , isto é, os zeros da função ou ainda obter o vector
solução de um determinado sistema. Ao contrário do que sucede com as equações
algébricas lineares e quadráticas não se conhecem fórmulas explicitas para as soluções
destas equações. Assim recorre-se a métodos aproximados para as resolver. Para
problemas cuja determinação da solução é difícil e não exata utilizam-se métodos
iterativos para o efeito. Nos métodos iterativos parte-se de uma aproximação inicial da
solução e utiliza-se um processo que permite calcular uma aproximação melhorada. Este
processo é repetido até que o valor calculado se aproxime da solução exata do problema
em questão, satisfazendo o critério de precisão estabelecido. Os métodos, para resolução
de equações não lineares, podem ser classificados como:
Métodos com delimitação prévia da solução:
Método da bissecção;
Método da falsa posição
Método da falsa posição modificada;
4. Método de Muller.
Métodos abertos:
Método da secante;
Método de Newton;
Método de Richmond;
Método das substituições sucessivas;
Método de Steffensen.
Os métodos com delimitação prévia da solução convergem sempre. Neste caso (à
excepção do método de Muller) a solução é delimitada no intervalo genérico [a;b], tal
que:
f(a).f(b)<0
Ao contrário dos primeiros, os métodos abertos não necessitam de uma delimitação
prévia, mas apenas uma aproximação inicial à solução. Estes métodos podem não
convergir, sendo que alguns têm uma condição que assegura a sua convergência.Este
trabalho incidirá sobre o método da bissecção:
Método da bissecção:
Permite a construção de subintervalos por divisões sucessivas a metade e relativamente
aos quais se verifica a condição de o produto dos seus valores na função seja menor que
zero. Desta forma confirma-se um zero da função f a intervalos tão pequenos quanto
desejados. É um método de fácil implantação (não necessita do conhecimento de
derivadas) mas que por vezes apresenta uma convergência muito lenta. A ordem de
convergência é linear (p=1) e a razão de convergência c=0.5.
Histórico
FORTRAN é a mais antiga das linguagens de programação de alto nível podendo ser
considerada a mãe de quase todas linguagens de programação moderna. Foi criada em
1956 por Jonh Backus como a 1ª tentativa de padronizar a programação de
computadores que era feita até aquele momento apenas em assembly.
FORTRAN foi desenvolvida inicialmente para resolução de problemas científicos e
matemáticos, sendo muito utilizada ainda nos meios técnicos-científicos. O primeiro
compilador FORTRAN representou um marco na história da Computação, no tempo em
que computadores tinham bem pouca memória (da ordem de 15 kb mais ou menos),
eram bastante lentos e tinham Sistemas Operacionais primitivos (quando tinham um).
Naquele tempo, a única forma conhecida de se programar um computador era através da
linguagem Assembly. Os pioneiros do FORTRAN não tinham idéia do potencial da
linguagem que estavam criando, e nem sequer sonhavam em escrever programas em
linguagem de alto nível, mas sem querer, eles criaram a primeira Linguagem de Alto
Nível bem sucedida. O primeiro compilador FORTRAN foi projetado e escrito em
1954-1957 pela IBM por um grupo liderado por John W. Backus e contou com a
participação de excelentes programadores como Sheldon F. Best, Harlan Herrick, Peter
Sheridan, Roy Nutt, Robert Nelson, Irving Ziller, Richard Goldberg, Lois Haibt and
David Sayre. Backus também foi responsável pelo projeto do primeiro computador a
usar o FORTRAN, o IBM 704. A invenção ficou famosa rapidamente, o que não era de
se admirar, visto que programas que levavam semanas para serem escritos poderiam
agora ser feitos em questão de horas, além de exigir muito menos trabalho. Outra grande
vantagem da invenção era a portabilidade dos programas escritos em FORTRAN. A
5. linguagem foi adotada pelas comunidades militares e usada extensivamente em
programas espaciais e projetos militares. Como os computadores naquele tempo eram
usados quase que exclusivamente para cálculos e por pessoas do meio acadêmico e
científico, a linguagem foi desenvolvida sem praticamente nenhuma preocupação com
estruturação lógica ou clareza em sua codificação que facilitasse a escrita de programas
grandes, mesmo porque não havia programas realmente grandes naquela época.
FORTRAN passou por algumas grandes revisões:
FORTRAN IV (FORTRAN 66)
Esta versão foi feita em meados da década de 60 e foi a primeira padronização da
linguagem, que gerou um grande número de versões diferentes a partir dela. Programas
escritos em FORTRAN 66 são raros hoje em dia.
FORTRAN 77
Uma grande reformulação foi feita em meados da década de 70 e várias novas
características foram adicionadas à versão anterior. A versão FORTRAN 77 foi o
grande apogeu dessa linguagem de programação por assim dizer e há mais programas
escritos nesta versão do que em qualquer outra de suas revisões, mesmo as mais
recentes.
FORTRAN 90
No final da década de 80, a versão 90 do FORTRAN foi elaborada, embora outras
linguagens de programação mais modernas tivessem tomado conta do mercado, quase
que substituindo completamente sua utilização. Muitas características novas foram
acrescentadas a esta versão, como por exemplo recursão, ponteiros e o tipo de dado
TYPE, o qual permite uma maior abstração dos dados. Além disso, algumas das
restrições anteriores foram retiradas.
FORTRAN 95, F
A versão mais recente do FORTRAN trás como novidade nessa linguagem a
possibilidade de se trabalhar orientado a objetos e várias outras características novas.
Alguns críticos argumentam que essa é uma tentativa de criar uma linguagem moderna
de programação totalmente baseada em FORTRAN.
História
Algol
Em 1957 as linguagens de programação estavam surgindo aos montes.
Indústrias Ynham seus padrões, Universidades Ynham seus padrões, Havia muitos
padrões, e nenhuma padronização, Algol surgiu para acabar com isto, Universal,
independente de máquina, Um comitê internacional foi criado em 1958, para estabelecer
o projeto, Muitos Algols, No final das contas, três projetos: Algol 58, Algol 60 e Algol
68. Os comitês foram ficando cada vez maiores e mais estrelados.
A longa herança
Quase toda linguagem que surgiu depois de 1958 usa
idéias de Algol: Blocos delimitadores, Estrutura léxica de formato livre, Sintaxe
definida via BNF, Escopo de bloco para variáveis locais, Tipagem estáYca com
anotações de Ypo, If‐then‐else’s aninhados, Chamada por valor, Recursão e expressões
condicionais, Alocação dinâmica de memória, Procedimentos de primeira classe,
Operadores definidos pelo usuário.
6. Polêmicas
As primeiras linguagens usavam rótulos e goto’s para criar desvios de fluxo. Algol e
similares vieram com uma nova proposta, baseada em estruturas de controle. Houve
muita polêmica. Em 1968, Edsgar Dijkstra escreveu um arYgo muito famoso: “Go to
statement considered harmful”.
A Programação Estruturada
A programação baseada em estruturas de controle, em vez de rótulos, é chamada
programação estruturada. Muitos programadores achavam difícil programar sem
go‐tos. Hoje a polêmica parece ter chegado ao final, Algumas linguagens, como Java,
nem possuem goto’s, E mesmo em linguagens onde go‐to’s existem, os programadores
raramente os usam. Esta polêmica toda surgiu com Algol.
Ortogonalidade
O projeto de Algol tentava ao máximo evitar casos especiais: Sintaxe independende da
forma dos programas. Eliminação de limites arbitrários: nomes podem ter qualquer
amanha, arranjos podem ter qualquer número de dimensões, etc. – Ortogonalidade:
conceitos podem ser combinados de qualquer forma. Ex.: declaração de parâmetros =
declaração de variáveis, arranjos de qualquer Ypo primiYvo, registros com quaisquer
campos, etc.
Exemplo de Ortogonalidade
Integers Arrays Procedures
Passar como parâmetro x x x
Armazenar em variável x x x
Armazenar em arranjo x x x
Retornar de uma função x x x
Cada combinação proibida é um caso especial, que precisa ser lembrado pelo
programador. Em Algol 68 todas as combinações acima são
possíveis. Poucas linguagens modernas levam ortogonalidade tão a sério quanto Algol.
Más noticias
Algol nunca foi tão usada quanto se esperaria, – Algol 58 deu origem a Jovial, Algol 60
foi usada como padrão de publicação de algoritmos.
Razões do insucesso:
O projeto negligenciou entrada/saída, A linguagem era considerada complicada, Alguns
erros: passagem por nome, Não havia suporte coorporaYvo ou governamental.
John Backus desenvolveu a Forma Normal de Backus, conhecido como BNF, para
descrever ALGOL 58. O método foi revisado e expandido por Peter Naur, recebendo
então o nome de Forma de Backus-Naur, e mantendo a sigla. C.A.R. Hoare disse de
ALGOL 60: "Aqui está uma linguagem tão a frente de seu tempo, que não foi uma
melhoria sobre seus predecessoras, mas também a quase todas suas sucessoras". Essa
fala foi também uma crítica velada a ALGOL 68, uma linguagem considerada inchada
demais por muitos de seus críticos (e que não teve praticamente nenhum sucesso
comercial).
7. Impacto
A definição do ALGOL 60 foi um evento-chave na história das linguagens de
programação. Foi a primeira linguagem de Programação estruturada. Nenhuma outra
linguagem teve influência tão importante nos projetos de novas linguagens.
Além disso, a especificação da linguagem também criou desafios técnicos para a
construção de compiladores, como mais tarde aconteceria com PL/I e Ada
Características
As duas características principais do Algol são: a clareza e a elegância da sua estrutura
baseada nos blocos e o estilo de sua definição, que usa uma linguagem metalingüística
para definir de forma concisa e relativamente completa a sua sintaxe. A linguagem
continuou sendo desenvolvida e enriquecida com novas construções e novos comandos
que aumentaram seu potencial. Existem outras versões do Algol, como, por exemplo, o
Algol 68, o Algol W voltado para máquinas IBM e o Algol 6000/7000 da Burroughs.
ALGOL e Burroughs
12(definição de arquivos e seus atributos, comandos para manipulação de arquivos e
variedade de formatos)[1], facilidades para o tratamento de cadeias de caracteres (tipo
string, tipo POINTER (ou Ponteiro), comandos e funções para manipulação de cadeias),
acesso a bits de memória (palavra parcial) e facilidade para definir macros (declaração
DEFINE). Esta linguagem se tornou apropriada para escrever software básico; em
particular o sistema operacional do B6700 (MCP – "Master Control Program" está
escrito em ESPOL, uma extensão do Algol, permitindo manipulações mais perto do
hardware. Há uma outra extensão, o DCALGOL, Data Communications ALGOL, usado
para escrever software de comunicação de dados.
Variantes Padrões
ALGOL 58, primeira proposta da linguagem
ALGOL 60, versão mais conhecida da linguagem
ALGOL 68, versão bem mais poderosa, porém menos conhecida
Referências bibliográficas :
CHAPMAN,S. J. ,"Introduction to fortran 90/95", McGraw-Hill, 1997;
GERALD,C. F. ; WHEATLEY,P. O. , "Applied numerical Analysis", 5th ed., Addison-
Wesley Publishing Company, Nova Iorque (