Programação de Computadores Viviane Torres da Silva [email protected] http://www.ic.uff.br/~viviane.silva/progIII Introdução a Fortran Para a escrita de um primeiro programa em Fortran, quatro aspectos precisam ser considerados: – – – – – Como um programa é organizado. Quais são os tipos de dados disponíveis. Como variáveis podem ser declaradas. Como entrada e saída básica de dados podem ser feitas. Como atribuir valores às variáveis. Organização de programas Utilizar um editor de texto. Ex: Force Regras: – As colunas de 1 a 6 do programa são reservadas para controle. As colunas 7 a 72 são utilizadas para o programa em si. As colunas de 73 em diante devem ser ignoradas (não pode ter código nesta área). Uso de comentários: – Texto em linguagem natural – Iniciar a linha (coluna 1) com C (maiúsculo), * ou !, para indicar que se trata de uma linha de comentário. A linha será ignorada pelo Fortran. Todo programa deve iniciar com o nome do programa – Utilize o comando “program” (embora seja opcional é uma boa prática de programação) Termine todo programa com o comando “end” (é obrigatório) Exemplo 1 1 6 11 16 21 26 31 36 41 46 51 56 61 |----|----|----|----|----|----|----|----|----|----|----|----| C este programa imprime a expressão Hello World na saída padrão PROGRAM exemplo1 PRINT *,'Hello World!' END Exemplo 1 Exemplo 2 1 6 11 16 21 26 31 36 41 46 51 56 61 |----|----|----|----|----|----|----|----|----|----|----|----| C Este programa calcula a área de um triangulo retângulo program Triangulo C Dados de entrada integer altura, base C Dados de saida real area C Le a altura e base print *, 'Informe a altura: ' read *, altura print *, 'Informe a base: ' read *, base C Calcula a area area = 0.5 * altura * base C Escreve a area print *, 'Area: ', area end Tipos de dados Toda variável deve ser de um determinado tipo. O tipo da variável ajuda o Fortran saber quais são os valores possíveis, e reservar um espaço de memória no computador de tamanho adequado. Os tipos de dados podem ser divididos em duas categorias: numéricos e não numéricos. Alguns tipos numéricos são: inteiro, real e real com precisão dupla. Os tipos não numéricos são: caractere e lógico. Tipos de dados: Numéricos Tipo inteiro (integer): variáveis do tipo integer aceitam números inteiros de -232-1 a 232-1 em um computador de 32 bits. Exemplos: -999 ; +10 ; 123456 Tipo real (real): variáveis do tipo real aceitam números reais com precisão para até sete casas decimais, com magnitude de 10-38 a 1038. Esses números podem ser representados com “.” separando parte inteira da parte decimal ou em notação científica. Notação científica: Um único dígito à esquerda do ponto decimal: 1,0 x 10-9, 3,15576 x 109 Exemplos: -21.4 ; 0.0000034 ; 123456.0 ; 0.6023E24 = 6.023x1023 0.4E-3= 0,4x10-3 -0.5E2 = -0,5x102 Tipos de dados: Numéricos Tipo real com precisão dupla (double precision): variáveis do tipo double precision são equivalentes a real mas com precisão de até 15 casas decimais e magnitude de 10-308 a 10308. Cuidado, o seu processamento pode demandar até 10 vezes mais tempo do que variáveis do tipo real. Exemplos: 0.23D-94 0.54336543454323D-7 = 0.54336543454323x10-7 Tipos de dados: Não numéricos Tipo Caractere (character): variáveis do tipo character permitem a representação de texto demarcado por aspas simples (‘) ou duplas (“). (se quiser utilizar ‘, tem que colocar outra ‘ antes) Exemplos: ‘Fortran’ ; ‘123456’ ; ‘caixa d’’agua’ Tipo lógico (logical): variáveis do tipo logical permitem a representação valores lógicos, ou seja, verdadeiro ou falso. (tem que utilizar o ponto antes e depois da palavra) Exemplos: .true. .false. Declaração de variáveis Existe declaração implícita e explícita de variável. A declaração implícita se baseia na primeira letra da variável: – Variáveis que começam com a-h ou o-z são reais – Variáveis que começam com i-n são inteiras. Declaração implícita pode levar a erros, devemos desabilitar essa opção com o comando “implicit none”. Exemplo program someAcom2 print *, 'Informe valor de A: ' read *, a x=2+a print *, 'Area: ', x end (a, x são reais) program someAcom2 implicit none integer a, x print *, 'Informe valor de A: ' read *, a x=2+a print *, 'Area: ', x end Declaração explícita de variáveis Consiste em definir qual é o tipo de cada variável que será utilizada no programa. A declaração das variáveis tem que vir antes de todos os demais comandos de um programa Regras para nomes de variáveis: – – – – Ter somente letras de A a Z e números de 0 a 9 Começar com uma letra Maiúscula e minúscula são equivalentes Espaços em branco são ignorados Exemplos: – X TAXA RAIO IN RAIO EX NUM2 Declaração explícita de variáveis A declaração de uma variável consiste em definir o tipo e o nome da variável. Mais de uma variável pode ser declarada numa mesma linha. Exemplos: – Integer contador – Real X, Y, Z – Character*20 nome (nome é uma variável do tipo caracter com tamanho 20) (se for associada uma palavra com mais de 20, nome truncará a palavra em 20, i.e. só armazenará os primeiros 20 caracteres) – Character nome*20 endereço*30 (nome tem tamanho 20 e endereço 30) – Complex fase (variável complexa) – Logical teste (variável lógica) – Double precision raio Resumo 1 6 11 16 21 26 31 36 41 46 51 56 61 |----|----|----|----|----|----|----|----|----|----|----|----| C Este é um comentário C início do programa program divisão C Declaração das variáveis implicit none integer x, y real resultado character*10 nome, sobrenome character endereço*10 ... C fim do programa end Exercício Faça a declaração das variáveis de um programa que calcula a média das idades de um número N de pessoas. Faça a declaração das variáveis de um programa que receba como entrada o nome de uma pessoa, o endereço, o CEP, o sexo (F ou M) e a informação se é casada ou não. Parte II Entrada e saída de dados Entrada e saída básica de dados: read e print. – Esperam o formato e uma lista de variáveis a serem utilizados. – Usaremos , por enquanto, formato livre (automático) para leitura e escrita identificado por * Para pedir ao usuário o valor da altura de um triângulo: – read *, altura Para escrever o resultado do calculo da área do triângulo: – print *, área Podemos também ler de uma só vez a altura e a base: – read *, altura, base Podemos escrever o resultado com informação mais detalhada – print *, ‘A área do triângulo com altura ‘, altura, ‘ e base ‘, base, ‘ é ‘, area Atribuição de valores O símbolo de igual (=) representa a atribuição de valores a variáveis. Fortran executa os cálculos necessários do lado direito do “=” e armazena o resultado do cálculo no lado esquerdo do “=”. Importante: não imagine que o “=” representa uma equação algébrica a ser resolvida! Exemplos: x=3 x=4–x (qual é o valor de x após o cálculo desta expressão?) nome = ‘Fortran’ verdade = .true. Exemplo: Faça o método chinês program atribuicoes real x, y, z x = 1.0 y = 2.0 z = 3.0 x = -x print *, 'valor de x: ', x y = y - 1 print *, 'valor de y: ', y z = z + x z = z + x - y print *, 'valor de z: ', z end Método Chinês x y z 1 2 3 -1 1 2 0 Exercício Construa um programa em Fortran para determinar as raízes de uma equação de 2º grau: ax2 + bx + c = 0 Recordar que : d = b2 – 4ac x = ( –b sqrt(d) ) /2a Assuma que só é possível fazer uma operação por linha Exemplo: x = b**2 Exemplo errado: aux= 4*a*c Utilize o método Chinês para verificar se o algoritmo está correto. Operações aritméticas Algumas operações aritméticas básicas são fornecidas pela linguagem Fortran. São elas: Na álgebra (...) parênteses Ab X ÷ + - No Fortran (...) a**b * / + - Prioridade 1 2 3 3 4 4 Em situações onde operações têm prioridade igual, a avaliação é feita da esquerda para a direita. Contudo, no caso de potência, a avaliação é feita da direita para a esquerda. Exemplo 9.2 – (2.0**3**2 – 14.0 / 7.0) + 14.0 * 0.1 9.2 – (512.0 – 14.0 / 7.0) + 14.0 * 0.1 9.2 – (512.0 – 2.0) + 14.0 * 0.1 9.2 – 510.0 + 14.0 * 0.1 9.2 – 510.0 + 1.4 – 500.8 + 1.4 – 499.4 Aritmética Aritmética de inteiros: Caso a operação de divisão seja aplicada com numerador e denominador inteiros, o resultado será somente a parte inteira da divisão. – Ex: 3/2 =1 Aritmética em modo misto: Caso a operação de divisão envolva inteiros e reais, os inteiros serão automaticamente convertidos para reais. A análise é feita para cada operador da equação. – Ex: 3.0/2 = 1.5 Exemplo: integer x x = 3.3 / ( 5./2) – 5 => 3.3 / ( 2.5) – 5 => 1.65 – 5 => – 3.35 x=–3 Funções matemáticas Fortran fornece um conjunto de funções matemáticas que podem ser utilizadas em expressões. Função ABS(x) MOD(X, Y) NINT(X) SQRT(X) SIN(X) COS(X) EXP(X) LOG(X) LOG10(X) MIN(...) MAX(...) INT(X) REAL(X) Exemplo ABS(-5) 5 MOD(5, 2) 1 NINT(5.7) 6 SQRT(2.0) 1.41421354 SIN(0.0) 0.0 COS(0.0) 1.0 EXP(1.0) 2.71828175 LOG(2.71828175) 1.0 LOG10(100.0) 2.0 MIN(1, 5, 10) 1 MAX(1, 5, 10) 10 INT(5.7) 5 REAL(5) 5. Descrição Valor absoluto Resto da divisão Arredondamento Raiz quadrada Seno Cosseno Exponencial (ex) Logaritmo natural Logaritmo na base 10 Menor número de uma lista Maior número de uma lista Converte para inteiro Converte para real