CPC782 Fundamentos de Programação

Slides:



Advertisements
Apresentações semelhantes
Estruturação de Linguagens (Pascal e C++)
Advertisements

PRÓ-INFORMÁTICA QUALIFICAÇÃO PROFISSIONAL
Linguagem de Programação I
Programação de Computadores
Programação de Computadores
Estruturas de Controle
Estruturas de Repetição
Linguagem C Marco Reis.
Parte I Capítulo 5 Reutilizando código e escrevendo funções.
Programação para Engenharia I
Introdução a Programação Renata Freire
PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof
Programação Básica em Java
Introdução a Informática
Claudio Esperança Python: Comandos Básicos. Primeiros passos em programação Até agora só vimos como computar algumas expressões simples Expressões são.
LINGUAGEM ESTRUTURADA TURBO C
Rodrigo de Toledo (original: Claudio Esperança)
Sintaxe de Fortran 25/abril/2006. Comandos Fortran PROGRAM PRINT READ STOP END.
Algoritmos e Estruturas de Dados II
Linguagem C Strings.
O Portal do Estudante de Computação
O Portal do Estudante de Computação
O Portal do Estudante de Computação
O Portal do Estudante de Computação
INTRODUÇÃ A COMPUTAÇÃO ENG. CIVIL
Ada.
Estrutura de um Programa:
Introdução a Computação e Cálculo Numérico
Unidade I: “Dê um mergulho rápido”
PROGRAMAÇÃO I UNIDADE 1.
Linguagens de Programação
Prof. Natalia Castro Fernandes Engenharia de Telecomunicações – UFF 2º semestre/2012.
Linguagem de Programação II Parte IV
Linguagem de Programação II Parte VII
Linguagens imperativas: Aula prática
FTIN Formação Técnica em Informática
Seminário 1: Revisão de C
Estruturas de Dados Módulo 3 – Controle de Fluxo
O Portal do Estudante de Computação
Expressões e Instrução de Atribuição
PROGRAMAÇÃO PARA INTERNET Prof.: Jean Carlo Mendes
Linguagem Pascal Prof. Sérgio Rodrigues.
Conceitos Básicos Luis Antonio Tavares
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
Programação Orientada a Objetos - Java Professor: Jean Carlo Mendes.
Introdução à Linguagem C
Tipos de Dados Operadores
Algumas notas sobre a linguagem de programação C
Aula prática 2 Operadores e Expressões Comandos de Decisão Comentários
Programação de PIC em C Exposição das funções básicas para
UTILIZAÇÃO DA LINGUAGEM MS-VISUAL BASIC.NET Objetivo: apresentar os principais recursos da linguagem “Visual Basic” necessários à criação de macros para.
Programação e Aplicações Gráficas
Acabias Marques Luiz. I - Introdução ao Ruby Parte 1 – Introdução a linguagem  O que é Ruby  Instalação  O IRB  Operadores Aritméticos  Tipos de.
Wellington Felix.  Criada por Brian Kernighan e Denis Ritchie, na década de 1970, para uso em um computador DEC PDP-11 em Unix  C++ é uma extensão da.
Introdução ao MATLAB 5.3 para Hidrólogos
JAVA Sintaxe.
Fundamentos de linguagens de programação
CES-10 INTRODUÇÃO À COMPUTAÇÃO
Programação de Computadores - 1
Profa. Maria Augusta Constante Puget
Shell Script Parte 2.
Andréa Iabrudi 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I.
Paradigmas das Linguagens de Programação - História
11 Revisão da Linguagem C Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
Linguagem de Programação 11 Estruturas de Decisão e Repetição. Prof. Luiz José Hoffmann Filho
VARIÁVEIS Desenvolvido pelo Mestrando Rodrigo Moreira Barreto – VHLab (Virtual Humans Simulation Laboratory – PUCRS) 1 Desenvolvido por: Rodrigo Moreira.
Computadores vs. Programas / Algoritmos Computadores vs. Programas -> Algoritmos O tratamento de problemas através do computador geralmente envolve uma.
Variáveis, expressões e comandos Dilvan Moreira. Lembrando …  Instalação normal (para utilizar no PC com Windows) 
IF E ITERAÇÃO WHILE Dilvan Moreira (baseado no livro Big Java e T. Munzner)
Recursividade, Entrada pelo teclado e Funções com retorno Dilvan Moreira.
Transcrição da apresentação:

CPC782 Fundamentos de Programação Introdução ao Fortran Renato N. Elias / Marcos A. D. Martins

Antes de começarmos... Devemos saber responder algumas questões BASTANTE básicas: O que é um programa de computador? Por que eu preciso aprender a programar? O que é um arquivo ou código fonte? O que é um objeto ou arquivo compilado? O que é uma linguagem de programação? O que é lógica de programação? O que é um pré-processador? O que é um compilador? O que é um linker? O que é uma biblioteca?

Como aprender uma linguagem de programação Como aprender uma linguagem de programação? slide de (des)motivação para aprendizado de qualquer linguagem de programação Precise dela!!!!! “Se eu não preciso, por que tenho de aprendê-la?” Tenha prazer em programar como quem está para decifrar um enigma. “Como eu faço esse computador fazer o que eu quero?” Pegue um programa simples, contendo bons comentários passo-a-passo e tente utilizar os fragmentos que se assemelham com o que se deseja fazer como um modelo. “Guarde esse programa-modelo em um cofre a sete chaves até se sentir seguro o suficiente para programar sozinho” Comece a programar com a ajuda de um bom ambiente de programação. “mas nunca se torne escravo dele” Não desanime, seja persistente! “Errar é a melhor parte do processo de aprendizado pois os erros, geralmente, são mais facilmente assimilados do que os acertos” Não tenha medo de tentar! “O (bom) compilador adora nos humilhar mostrando nossos deslizes, além disso, um simples programa não irá fazer o computador explodir -- mas talvez ele precise ser reiniciado...” A good programmer is someone who looks both ways before crossing a one-way street.   -- Doug Linder, systems administrator

Desenvolvendo programas Planejar; Lógica de programação Desenvolver; Linguagem (C/C++, Fortran, Java, etc...) Ambiente de programação (Vi, Notepad, Visual Studio, KDE developer, etc...) Pré-processar, compilar e “linkeditar” Compiladores (Intel, G95, PGF90, Compaq, etc...) Testar (depuração); Ambiente de programação Corrigir (depuração); Commentary: most debugging problems are fixed easily; identifying the location of the problem is hard.   -- unknown

Construindo um programa pré-processado arq1.i arq2.i arq3.i Pré-processamento “linkedição” ou “linkagem” Compilação fonte arq1.f90 arq2.f90 arq3.f90 compilado arq1.obj compilado arq2.obj programa foo.exe compilado arq3.obj

O que eu preciso para programar em Fortran? Um editor de textos, um compilador ou um ambiente de programação que forneça o editor de textos e o compilador juntos Em Windows: Compaq Visual Studio (comercial) Visual Studio + Intel Fortran (comercial) Fortran Force (gratuito: http://www.guilherme.tk/) Em Unix e similares: G77 (gratuito – não recomendado); Sun Studio (gratuito); Intel Fortran (gratuito para uso não comercial) Compilador do Portland Group (comercial)

Referências Google, Google, Google Fortran Wikipedia: 34.300.000 referências para a palavra Fortran Fortran Wikipedia: http://pt.wikipedia.org/wiki/Fortran Fortran Standards Technical Commitee http://www.j3-fortran.org/ Livros: Stephen J. Chapman, “Fortran 90/95 for Scientists and Engineers” James F. Kerrogan, “Migrating to Fortran 90” Apostila: http://www.nacad.ufrj.br/~rnelias/fortran

Fortran – Um pouco de história Criada em 1954-57 por uma equipe da IBM chefiada por John Backus; Nome da linguagem derivado de seu principal propósito FORmula TRANslator Primeira linguagem de programação de alto nível desenvolvida para computadores; Com sua rápida popularização surgiu a necessidade de uma padronização em 1966 (Fortran IV ou Fortran66) Sofreu algumas modificações em 1977 (Fortran77) Outras atualizações: Fortran90 (1993); Fortran95 (1997); Fortran2003; HPC (High Performance Fortran)

Motivos para NÃO APRENDER Fortran Programação de interface gráfica (GUI); Programação de bancos de dados; Programação voltada para internet; Programação que utilize manipulação intensiva de strings; Programação dirigida a objetos (OOP).

Motivos para APRENDER Fortran Fácil de aprender, desenvolver e depurar; Extremamente eficiente na execução de CÁLCULOS; Milhares de bibliotecas científicas testadas, otimizadas e distribuídas gratuitamente para uso com o Fortran;

Deficiências anteriores ao Fortran 90 Exigência de uso de formato fixo para codificação; Impossibilidade de acesso dinâmico de dados; Inabilidade de representação implícita de operações em arrays Falta de portabilidade (padrão definido pelo fabricante) Impossibilidade de definição de tipos pelo programador; Inexistência de recursividade; Acesso aos dados globais através de COMMON blocks

Recursos adicionados ao Fortran90 Formato livre de arquivos; Sintaxe própria para operações com arrays Alocação dinâmica e inclusão de pointers Tipos de dados portáveis (KIND) Tipos de dados derivados e operadores Recursividade Modules em substituição e extensão aos COMMON BLOCKS Estruturas de controle mais aprimoradas I/O aprimorado

FORTRAN O que iremos aprender? Fortran IV Fortran 90 Fortran 77

Elementos da linguagem O Fortran não é sensível à letras maiúsculas e minúsculas: Casa = casa = CASA = cASA = cAsA = CaSa Formatos de arquivos aceitos pelo Fortran Fixo (extensões *.for, *.f77, *.f, *.F) Livre (extensões *.f90, *.F90) Caracteres de comentário Linhas contendo os caracteres “c” ou “C” na coluna 1 Qualquer texto iniciado pelo caractere “!” Rótulos (labels) Números de (1 a 99999) colocados nas 5 primeiras colunas Continuação de linha Formato fixo: linha que possui qualquer caractere na coluna 6 Formato livre: Qualquer linha finalizada com um ampersand (&) Vários comandos em uma mesma linha Separar os comandos com um ponto e vírgula “;”

Formatos de arquivos FIXO LIVRE

Comentários e continuação de linha Formato fixo (arquivo hello.f) Formato livre (arquivo hello.f90)

Outras perguntas básicas... O que é uma variável? a = 1.0 i = 1 str = ‘Fortran’ O que é um tipo? O tipo de uma variável informa ao compilador, e consequentemente ao programa, como o computador deverá interpretar a variável. No exemplo acima a, i e str ocupam quantidades distintas de memória devido aos seus TIPOS serem também diferentes.

Evitando dores de cabeça Faça comentários significativos nos seus programas: Comentário inútil i=0 ! i recebe valor 0 Comentário útil i=0 ! i está sendo zerado pois será utilizado como ! contador do próximo loop Crie nomes de variáveis auto-explicativos Variável pouco explicativa: integer :: n Variável auto-explicativa: integer :: NumberOfNodes Endente seu programa para facilitar a leitura Tente usar somente funções intrínsecas da linguagem Compatibilidade = portabilidade = flexibilidade Se for usar bibliotecas, procure se informar se essa biblioteca estará disponível nos sistemas que pretende usar

Estrutura básica de um programa Fortran program <nome_do_programa> ! declaracao de modules use dados ! declaracao de variaveis integer :: n, k, l ! corpo do programa n = 1 k = 2 l = n+k print *, l ! finalizacao do programa end program

Tipos de dados Inteiro Real de precisão simples Real de precisão dupla integer :: n = 1 Real de precisão simples real*4 :: a = 3.0 ! 7 casas de precisão real(4) :: a = 3.0E1 real :: a = 3. Real de precisão dupla double precision :: a = 2.5d0 ! 15 casas de precisão real*8 :: a = 2.5D0 real(8) :: a = 2.5D0 Lógico logical :: ok = .false.

Tipos de dados (continuação) Complexo de precisão simples complex*8 :: c = (1.,4.) complex :: c = (1.3,4.1E1) Complexo de precisão dupla complex*16 :: c = (1.d0,4.d0) Character character :: str*80 character(80) :: str character*80 :: str character*80 str

Tipos de dados derivados Permite a criação de tipos de acordo com a necessidade do programador Type employee_name SEQUENCE ! (Opcional) preserva a ordem de armazenamento dos campos character(25) last_name character(15) first_name END TYPE employee_name Type employee_data TYPE (employee_name) :: name ! Usando o tipo previamente criado integer telefone integer age logical married END TYPE

Usando um tipo derivado Type(employee_data) :: employee employee%name%last_name = 'Elias' employee%name%first_name = 'Renato' employee%telefone = 25628080 employee%age = 30 employee%married = .true. ! Ver programa exemplo typeder.f90

Declaração implícita Antagonicamente NÃO recomendado, porém, bastante útil Declaração de tipo implicitamente determinada pela primeira letra do nome da variável: i,j,k,l,m,n: variáveis inteiras a-h, o-z: variáveis reais de precisão simples Modificando a declaração implícita implicit real*8 (a-h,o-z) implicit integer (i-k) Obrigando que todas as variáveis sejam explicitamente declaradas implicit none

Na prática... program foo implicit real*8 (a-h,o-z) a = 2.d0 b = 3.d0 c = a+b print *, c end program program foo implicit none real*8 :: a,b,c a = 2.d0; b = 3.d0; c = a+b print *, c end program program foo implicit none a = 2.d0 b = 3.d0 c = a+b print *, c end program ERRADO!!!! produzirá erro de compilação

Operadores

Operadores Lógicos Exemplo: Exemplo: considere a=.true. e b=.false. para avaliar as seguintes operações lógicas c = a .and. b c = a .or. b c = .not. a c = a .eqv. b c = a .neqv. b Exemplo: considere a = .true. e b = .false. para avaliar as seguintes operações lógicas c = a .and. b ! c = .false. c = a .or. b ! c = .true. c = .not. a ! c = .false. c = a .eqv. b ! c = .false. c = a .neqv. b ! c = .true.

Hierarquia entre operações Parênteses mais internos Cálculo de funções Potenciação Menos unário Multiplicação e divisão Adição e subtração Concatenação Exemplo: x+1/x-1 é diferente de (x+1)/(x-1)

Algumas funções intrínsecas Observação: algumas funções intrínsecas possuem versões específicas de acordo com o tipo de dado utilizado, por exemplo: dabs(x) ! x e o resultado da operação são real*8 iabs(n) ! n e o resultado da operação são integer

Programa PI Programa PI: Obter o valor de PI usando a função intrínseca ACOS do Fortran para obter o Arco-cosseno de -1 program PIValue real*4 :: pi_sp real*8 :: pi_dp pi_sp = acos(-1.) print *, ‘Pi in single precision is:’, pi_sp pi_dp = dacos(-1.d0) print *, ‘Pi in double precision is:’, pi_dp end program Inside every well-written large program is a well-written small program.   -- Charles Antony Richard Hoare, computer scientist

Aritmética inteira, real e mista 3/5 = 0 13/4 = 3 Real 3.0/5.0 = 0.6 3./5. = 0.6 13./4.0 = 3.25 Mista 3.0/5 = 0.6 13/4.0 = 3.25 Conversão automática de tipo: program conv integer :: nres nres = 1.25+9/4 print *, nres ! imprimirá 3 ao invés de 3.5 end program ATENÇÃO: Notem que embora o resultado da operação seja real, ele foi armazenado em uma variável do tipo inteiro ocasionando uma conversão automática. (EVITEM FAZER ISSO!!!)

Evitando o uso de potenciação A potenciação é internamente implementada como uma operação com logarítmos, portanto, uma operação lenta e sujeita a erros result = y**2.0 ! internamente seria result = exp(x*ln(2.0)) Podemos evitar isso utilizando expoentes inteiros sempre que possível ou realizando a operação explicitamente: result = y**2 result = y*y

Operações com strings Para o Fortran uma string é um array de characters program string character(3) :: str1, str2 character(6) :: str3 str1 = ‘ABC’ str2 = ‘DEF’ str3 = str1//str2 ! concatenando str1 com str2 print *, str3 print *, ‘ primeiras 2 letras de str1: ’, str1(:2) print *. ‘ ultimas 4 letras de str3: ‘, str3(3:6) end program

Let’s do something... Programa DegToRad para converter graus em radianos se 180º equivale a pi radianos, então, usando a nossa velha conhecida regra de 3: xo = x*pi/180 program DegToRad real*8 :: ang, PI PI = dacos(-1.d0) ang = 45 print *, ang ,‘ graus = ’, ang*PI/180.0, ‘ radianos’ end program

Comandos condicionais Os comandos condicionais causam desvios no fluxo natural do programa de acordo com a avaliação de alguma expressão lógica Em Fortran, os comandos condicionais básicos são: IF (lógico) IF, THEN, ELSEIF, ENDIF CASE

Comandos condicionais IF (lógico): executa, ou não, uma operação de acordo com a avaliação de uma expressão lógica (Booleana) if (a<10.0) a = 0.0 IF, THEN, ELSE, ELSEIF: desvia a execução do programa de acordo com a avaliação de uma, ou várias, expressão(ões) lógica(s) nome: if (teste logico) then ! corpo do if end if nome ! os nomes são opcionais e geralmente utilizados para ! fins de identificacao

IF, THEN, ELSE, ELSEIF (continuação...) ! Exemplo 1 if (b > c) then a = a+1 c = 0 else a = a–1 b = 10 endif ! Exemplo 2 idade: if (age>18) then print *, ‘maior’ print *, ‘menor’ endif idade ! Exemplo 3 if (b > c) then a = a+1 c = 0 elseif (c.eq.a) then a = a-1 b = 10 else a = a+2 b = 0 endif Repare que o elseif nada mais é do que um if aninhado numa cláusula else

Comandos condicionais SELECT CASE: Este comando pode substituir uma série de if’s aninhados, porém, ele só pode ser utilizado com variáveis INTEGER e CHARACTER nome: select case (i) case(:-1) ! todos os valores inteiros menores que 1 print *, ‘numero negativo’ case(0) ! somente se i for igual a 0 print *, ‘ zero ‘ case(1:9) ! numeros inteiros entre 1 e 9 print *, ‘ numero de 1 unico digito: ‘ case(10:99) ! numeros inteiros entre 10 e 99 print *, ‘ numero de 2 digitos ‘ end select nome

Comandos de repetição Os comandos de repetição, laços ou loops são utilizados na execução de um ou mais comandos repetidas vezes. Em Fortran, os comandos de repetição são: DO (simples e infinito) WHILE Loops implícitos (veremos mais tarde quando tratarmos de variáveis indexadas) Existem comandos auxiliares que controlam a saída forçada de dentro de um laço, são eles: exit cycle [label]: goto [label]: return:

Comandos de repetição DO: Forma geral: Observações: Os laços DO em Fortran são a forma mais natural de se realizar uma ou mais operações repetidas vezes. Nesse tipo de laço uma variável de controle é utilizada como contador e, consequentemente, como critério de parada para o laço. Forma geral: nome: DO <variável de controle> = inicio, fim, incr ! corpo do laço ENDDO nome Observações: Se o incremento for unitário o mesmo poderá ser omitido O incremento poderá ser negativo (decremento) A variável de controle não deve ser alterada no interior do laço

DO: O que podemos fazer... ! Exemplo 1: DO i=1,10 print *, i ENDDO DO n=1,10,3 print *, n ! Exemplo 3: DO j=10,1,-1 print *, j END DO ! Exemplo 4: i0=-5; i1=30; inc=4 DO n=i0,i1,inc print *, n ENDDO ! Exemplo 5: h=0.5 DO x=4.0,7.9,h print *, x ! Exemplo 6: externo: DO i=5,10 interno: DO j=10,1,-1 print *, ‘i+j vale:’, i+j ENDDO interno ENDDO externo

DO: O que NÃO podemos fazer... ! Exemplo 1: DO i=1,10 i = i+1 ! i não deve ser usado em ! calculos dentro do loop ENDDO ! Exemplo 2: DO i=10,1 ! 2 loops com a mesma ! variável de controle ! Exemplo 3: DO i=1,10 j = j+1 DO j=10,1 ! variavel de controle ! do segundo loop sendo ! usada no primeiro loop ENDDO ! Exemplo 4 externo: DO i=1,10 interno: DO j=1,10 ! laços cruzados enddo externo enddo interno

Comandos de repetição DO WHILE: Forma geral: Observações: O laço DO WHILE executa uma ou mais operações “ENQUANTO” uma condição esteja sendo satisfeita (avaliada como verdadeira). Forma geral: nome: DO WHILE <teste lógico> ! corpo do laço END DO nome Observações: Ao contrário do que ocorre com o laço DO, no DO WHILE a variável de controle utilizada no teste lógico, pode (e geralmente é) utilizada em alguma operação no corpo do laço

DO WHILE em exemplos: ! Exemplo 1 i=0 DO WHILE (i<=10) print *, i i = i + 1 END DO ! Exemplo 2 logical :: Ok = .false. i=1; j=50 DO WHILE (.not.Ok) i=i+1 j=j-2 Ok = i>j print *, Ok, i, j ENDDO

Comandos de repetição DO infinito: Forma geral: O Fortran 90 introduziu o conceito de DO infinito, ou eterno. Nesse tipo de laço uma ou mais operações são repetidas indefinidamente (o que faz pouco sentido em programação) ou até que algum comando force a saída de dentro do laço Forma geral: DO ! corpo do loop if <satisfeita uma condição> exit ENDDO

DO infinito em 1 exemplo program CelsiusToKelvin real*4 :: celsius character :: opt*1 DO print *, 'Entre com a temperatura em Celsius:' read(*,*) celsius ! falaremos do comando READ mais tarde print *, celsius, ' Celsius = ', celsius+273.15, ' Kelvin' print *, 'Deseja sair (S/N)' read(*,*) opt if (opt.eq.'s'.or.opt.eq.'S') exit ENDDO end program

Complicando o que deveria ser simples... program DOCycle cycle_loop: do i = 1, 5 print *,i if (i.gt.3) cycle cycle_loop end do cycle_loop print *,'done!' end program ! Quando i torna-se maior que 3 o loop só é ! executado até o cycle