Introdução à Programação na linguagem F. Jaime Ramos, Amílcar Sernadas e Paulo Mateus
|
|
- Ana Júlia de Almeida Rios
- 7 Há anos
- Visualizações:
Transcrição
1 Introdução à Programação na linguagem F Jaime Ramos, Amílcar Sernadas e Paulo Mateus DMIST, Setembro de 2005
2 Capítulo 1 Introdução à linguagem F Objectivos Introdução à linguagem F. Edição e compilação de programas. Tipos primitivos e expressões. Declaração de variáveis. Atribuição. Composição sequencial, iterativa e alternativa de comandos. Definição de funções e subrotinas. Efeitos colaterais. Programação recursiva. Conceitos básicos A linguagem F é um fragmento cuidadosamente escolhido da linguagem de programação Fortran 95. Considere-se o seguinte programa F, para somar os números inteiros entre 1 e 50. program exemplo1 integer :: i, r r=0 do i=1,50 r=r+i print *,"Resultado:",r end program exemplo1 Antes de proceder à análise do programa, convém perceber como é que se edita, compila e executa um programa em F. A edição do programa é feita do modo usual: recorrendo a um editor de texto (por exemplo o Notepad), escreve-se o código do programa num ficheiro com extensão f95. Neste caso, deuse ao ficheiro o nome exemplo1.f95 (embora não seja obrigatório, é usual e conveniente dar ao ficheiro o mesmo nome do programa). Em seguida, é necessário compilar o programa. Para tal, é necessário ter instalado no computador em que se está a trabalhar um compilador para a linguagem F (que pode ser obtido em No caso da compilação ser bem sucedida (não ocorrerem erros), o resultado é um ficheiro executável (extensão exe). Analisemos este programa. Após a declaração de início do programa (program exemplo1) surge a declaração das variáveis utilizadas. Nesta declaração, deverão ser incluídas todas as variáveis que sejam utilizadas pelo programa bem como o tipo de objecto que cada uma dessas variáveis irá guardar durante a execução do programa. Neste caso, são declaradas duas variáveis i e r, para guardar números inteiros, através da declaração: integer :: i, r Com esta declaração, as variáveis i e r apenas poderão ser utilizadas para guardar números inteiros. Qualquer tentativa de lhes atribuir um valor que não seja um número inteiro (por exemplo um número real) resultará num erro do programa. Segue-se o corpo do programa constituído por uma composição sequencial de três instruções: a atribuição r=0, a instrução composta do... e a instrução de escrita print *,"Resultado:",r. A composição sequencial de comandos é feita através da mudança de linha, ou seja, em F apenas é permitido uma instrução atómica por linha (por exemplo, uma atribuição ou uma instrução de escrita). A estrutura das instruções compostas será discutida à medida que estas forem sendo apresentadas. A forma genérica da instrução iterativa é a seguinte: do guarda corpo 2
3 em que guarda é uma expressão da forma variável = expressão1, expressão2 e corpo é uma instrução. A variável recebe como valor inicial o valor da expressão1 e o corpo do ciclo é executado. Em seguida o valor da variável é incrementado de uma unidade e, caso o valor da expressão2 não tenha sido excedido, o corpo do ciclo volta a ser executado. Este processo repete-se até que o valor da expressão2 seja excedido. Mais à frente, serão apresentadas outras formas de controlar a execução de um ciclo. No caso do exemplo, a instrução do i=1,50 r=r+i repete a atribuição r=r+i, começando a variável i com o valor 1 (expressão1) até se atingir o valor 50 (expressão2). De cada vez que a atribuição é executada o valor de i é incrementado. A última instrução do programa é uma instrução de escrita. Em F, a instrução print pode ser formatada para apresentar os resultados de diferentes formas. Por agora, apenas nos preocupamos em escrever informação no ecrã de uma forma não formatada, através da opção *. Mais tarde analisaremos algumas formas de formatar os resultados. O programa termina com end program exemplo1. Existem também em F instruções de leitura. O programa seguinte, guardado no ficheiro exemplo2.f95, utiliza a instrução read para ler do terminal dois números inteiros para as variáveis x e y. Em seguida soma os números inteiros entre x e y: program exemplo2 integer :: x, y, i, r print *,"Valor inicial:" read *,x print *,"Valor final:" read *,y r=0 do i=x,y r=r+i print *,"Resultado:",r end program exemplo2 Então, após compilar o programa podemos executá-lo. O resultado é o seguinte: Valor inicial: 1 Valor final 50 Resultado: 1275 Os valores 1 e 50 foram introduzidos pelo utilizador, a partir do terminal, e lidos para as variáveis x e y, respectivamente, através da instrução read. Tipos primitivos e expressões 3
4 Existem 5 tipos de dados primitivos disponíveis em F: integer, real, complex, logical e character. Mais tarde, serão apresentadas construções que permitem definir tipos mais complexos em F. Tipo integer: os objectos deste tipo correspondem aos números inteiros. Por exemplo, 45, 0, -100 são objectos de tipo integer. Há ainda a possibilidade de escolher a representação destes números (long ou short); essa discussão é adiada para um capítulo subsequente. Tipo real: os objectos deste tipo correspondem aos números reais. Por exemplo, , 0.13, 3.0 são objectos de tipo real. Tal como no tipo integer, é possível escolher a representação destes números. Tipo complex: os objectos deste tipo correspondem aos números complexos (da forma a+bi, em que tanto a como b são números reais). Por exemplo, (1.5, 1.3) é um objecto de tipo complex que corresponde ao número complexo i. Tipo logical: os objectos deste tipo correspondem aos valores de verdade. As constantes são.true. e.false. correspondendo a verdadeiro e a falso, respectivamente. Tipo character: os objectos deste tipo correspondem a cadeias de caracteres (delimitadas por aspas). Por exemplo, "Joao" e "ola" são objectos de de tipo character. Estão disponíveis operações aritméticas definidas sobre cada os tipos números, como por exemplo, operações usuais + (adição), - (subtracção), * (multiplicação), / (divisão). Estas operações, quando aplicadas a dois objectos do mesmo tipo, resultam num objecto desse tipo, ou seja, adicionar dois números inteiros resulta num número inteiro, multiplicar dois números reais resulta num número real, etc. Nomeadamente, a divisão de dois números inteiros resulta num número inteiro. Por exemplo, o resultado de avaliar a expressão 15/2 em F é o número inteiro 7. Obviamente, estas operações numéricas podem ser aplicadas a objectos de diferentes tipos. Nesse caso, prevalece o tipo mais geral. Por exemplo, somar um número inteiro com um número real resulta num número real, enquanto multiplicar um número real por um número complexo resulta num número complexo. Para além destas, existem outras operações aritméticas definidas em F, cuja listagem exaustiva se omite. Deixa-se como exercício interpretar expressão n-(n/i)*i em que n e i são variáveis de tipo integer. Para além das operações aritméticas, estão disponíveis também as habituais operações relacionais. As mais frequentes são: == (igualdade), /= (diferente), < (menor), <= (menor ou igual), > (maior), >= (maior ou igual). O resultado de uma operação relacional é um objecto de tipo logical. Por exemplo, a expressão 2>=0 será avaliada em F para o valor.true., enquanto a expressão 0>3 será avaliada para.false.. É preciso cuidado na comparação de números reais e complexos usando as operações == e /=, devido a eventuais erros de aproximação. Relativamente aos objectos de tipo logical, estão disponíveis as seguintes operações:.not.,.and.,.or.,.eqv., and.neqv.. Estas operações podem ser aplicadas a objectos de tipo logical sendo o resultado também um objecto de tipo logical. Por exemplo, a expressão 2>0.and. 3>2 quando avaliada em F resulta no valor.true.. Composição alternativa de instruções Em F, a composição alternativa de instruções tem duas formas principais. A primeira manda executar uma instrução caso a condição seja verdadeira e não faz nada se esta for falsa: if (condição) then instrução1 A segunda forma permite mandar executar uma instrução no caso da condição ser falsa: if (condição) then 4
5 instrução1 instrução2 A condição tem que estar entre parênteses. O exemplo seguinte, guardado no ficheiro exemplo3.f95, ilustra a utilização destas duas formas: program exemplo3 integer :: n, i, d print *,"" d=0 do i=2,n-1 if (n-(n/i)*i == 0) then d=d+1 if (n>1.and. d == 0) then print *,"O numero e primo." print *,"O numero nao e primo." end program exemplo3 Este programa determina se um dado número n, lido do terminal, é primo ou não. Para tal, contam-se os números entre 2 e n-1 que dividem o número dado. O ciclo do programa percorre os números entre 2 e n-1 e caso i seja um divisor de n (o que, como já vimos, corresponde à expressão aritmética n- (n/i)*i ser igual a zero), a variável d, que conta o número de divisores, é incrementada. Caso contrário, não se faz nada. No fim, observa-se o valor da variável d e se for igual a zero então é porque o número é primo. Caso contrário o número tem pelo menos um divisor diferente dele e da unidade logo não é primo. Considerem-se alguns exemplos de execução: 3 O numero e primo. 51 O numero nao e primo O numero e primo. Deixa-se como exercício repetir alguns dos programas MATLAB apresentados anteriormente. Composição iterativa revisitada Até agora, a execução de um ciclo obriga a variável do ciclo a percorrer todos os valores entre o valor da expressão1 e o valor da expressão2. Suponha-se que se pretende apenas analisar os números pares. Por exemplo, pretende-se um programa que imprima no ecrã todos os números pares até 50. Obviamente que com as instruções disponíveis é possível construir tal programa (como?). No entanto, tal solução obriga a percorrer todos os números entre 1 e 50, quando nós apenas estamos interessados nos números pares entre 2 e 50. A linguagem F disponibiliza um mecanismo para controlar o progresso da variável do ciclo. A guarda do ciclo pode ter a forma 5
6 variável = expressão1, expressão2, expressão3 em que expressão3 especifica o incremento da variável. Por exemplo, no programa exemplo4 seguinte, a guarda i=2,50,2 especifica que a variável i toma o valor inicial 2 e é incrementada de 2 em 2 até se atingir 50. program exemplo4 integer :: i do i=2,50,2 print *,i end program exemplo4 Ao executar este programa o resultado obtido é a lista de todos os números pares escritos no ecrã: O incremento também pode ser negativo, mas neste caso há que garantir que o valor inicial é maior do que o valor final. Considere-se o programa seguinte, para calcular o factorial de um número. program exemplo5 integer :: n, r, i print *,"Introduza um número: " r=1 do i=n,1,-1 r=r*i print *,"O factorial e: ",r end program exemplo5 Neste caso, a variável i toma o valor inicial n e é decrementada até se atingir o valor 1. Existem ainda outras formas de controlar a execução de uma instrução iterativa que serão ilustradas mais à frente. Funções e subrotinas auxiliares Ao desenvolver um programa, é muitas vezes necessário definir funções e subrotinas auxiliares. No seguimento, apresentam-se alguns exemplos onde a definição de funções e subrotinas auxiliares se revela útil. Mais à frente, estes conceitos voltarão a ser aplicados ao desenvolvimento de grandes programas, segundo a metodologia da programação modular por camadas baseadas em objectos. Suponha-se que se pretende desenvolver um programa para contar o número de números primos que existem até um determinado número n, dado pelo utilizador. Embora seja possível desenvolver um programa em F sem recorrer a procedimentos auxiliares, tal solução tem diversos inconvenientes, entre os quais se destacam: o desenvolvimento do programa é mais complexo, a detecção de erros é mais difícil e a leitura do programa mais complicada. Uma solução consiste em definir uma função auxiliar que testa se um número é primo e utilizar essa função para construir o programa principal. Uma função em F pode ser utilizada como qualquer função primitiva. Não pode ter efeitos colaterais e devolve sempre um valor. Uma subrotina assemelha-se a uma função, mas não devolve valor, embora alguns dos seus parâmentros possam ser utilizados para devolver valores ao programa que a invocou, e pode também ter efeitos colaterais. 6
7 Suponha-se então que se dispõe de uma função prime para testar se um determinado número é primo. Uma solução para o problema apresentado é o programa seguinte: program exemplo6 integer :: n, i, r print *,"" r=0 do i=1,n if (prime(i)) then r=r+1 print *,"Existem",r,"primos ate",n end program exemplo6 Se tentarmos compilar o programa anterior obtemos um erro de compilação pois a função prime não é conhecida. É necessário definir esta função e torná-la conhecida para o programa. Comecemos pela definição da função. A estrutura de uma função em F é semelhante à de um programa: function prime(n) result(b) logical :: b integer :: i, d if (n<=1) then b=.false. d=0 do i=2,n-1 if (n-(n/i)*i == 0) then d=d+1 if (d==0) then b=.true. b=.false. end function prime As principais diferenças de uma função para um programa são a utilização da instrução function em vez da instrução program, e a necessidade de declarar os parâmetros e o resultado da função. Neste caso, a função prime tem um parâmetro de entrada n de tipo inteiro e um resultado b de tipo logical. A declaração intent(in) serve para indicar que o parâmetro apenas pode ser utilizado para passar valores à função. Veremos a seguir que podem existir outros tipos de argumentos quando se definirem subrotinas. Em tudo o resto a definição da função é semelhante a um programa. Falta apenas disponibilizar esta função ao programa anterior. A solução mais simples consiste em declarar esta função no fim do programa, após o corpo do programa e antes da instrução end program, usando a instrução contains. O ficheiro exemplo6.f95 contem a versão completa do programa: program exemplo6 integer :: n, i, r 7
8 print *,"" r=0 do i=1,n if (prime(i)) then r=r+1 print *,"Existem",r,"primos ate",n contains function prime(n) result(b) logical :: b integer :: i, d if (n<=1) then b=.false. d=0 do i=2,n-1 if (n-(n/i)*i == 0) then d=d+1 if (d==0) then b=.true. b=.false. end function prime end program exemplo6 Após compilarmos o programa anterior podemos testá-lo. Seguem-se alguns exemplos: 4 Existem 2 primos ate 4 10 Existem 4 primos ate 10 Uma subrotina assemelha-se a uma função mas existem algumas diferenças. As principais diferenças residem no facto de uma subrotina não devolver valor e poder provocar efeitos colaterais. No programa anterior, em vez de uma função, podia ter sido definida uma subrotina prime, com dois parâmetros, um parâmetro de entrada n e um parâmetro de saída b, em que se devolve o resultado. subroutine prime(n,b) logical, intent(out) :: b integer :: i, d if (n<=1) then b=.false. d=0 do i=2,n-1 8
9 if (n-(n/i)*i == 0) then d=d+1 if (d==0) then b=.true. b=.false. end subroutine prime A declaração intent(out) define o parâmetro b como sendo de saída. A chamada de uma subrotina também é diferente da chamada de uma função. Neste caso, a chamada da subrotina anterior é feita através da instrução call. O programa exemplo7 ilustra a utilização desta subrotina, para contar os números primos até um determinado número. 9
10 program exemplo7 integer :: n, i, r logical :: b print *,"" r=0 do i=1,n call prime(i,b) if (b) then r=r+1 print *,"Existem",r,"primos ate",n contains subroutine prime(n,r) logical, intent(out) :: r integer :: i, d if (n<=1) then r=.false. d=0 do i=2,n-1 if (n-(n/i)*i == 0) then d=d+1 if (d==0) then r=.true. r=.false. end subroutine prime end program exemplo7 Ao chamar a subrotina prime, o resultado da chamada fica na variável b do programa, e é esta variável b que é usada para verificar se a variável r tem ou não que ser incrementada. Do que foi visto, podemos concluir que uma função pode ser vista como um valor, isto é, pode ser utilizada numa expressão, enquanto uma subrotina pode ser encarada como uma nova instrução, que, ao ser executada, pode provocar uma mudança no estado do sistema. No caso exemplo anterior, cada chamada à subrotina prime provoca (eventualmente) uma alteração da variável b. Apresentam-se em seguida alguns exemplos complementares de definição de funções e subrotinas auxiliares. Recorde-se o problema de calcular o factorial de um número. A primeira solução passa por definir uma função auxiliar fact com um parâmetro que devolve o factorial desse parâmetro program exemplo8 integer :: n print *,"" 10
11 print *,"Factorial:", fact(n) contains function fact(n) result(y) integer :: y, i y=1 do i=2,n y=y*i end function fact end program exemplo8 Eis alguns exemplos de execução: 3 Factorial: 6 5 Factorial: 120 Este problema poderia também ter sido resolvido através da definição de uma subrotina. Neste caso, temos duas hipóteses: utilizar um parâmetro como entrada e outro parâmetro como saída, ou utilizar apenas um parâmetro para entrada e saída dos dados. A primeira solução não apresenta nada de novo e deixa-se como exercício. A segunda tem a novidade de podermos ter parâmetros de entrada e saída simultânea. program exemplo9 integer :: n print *,"" call fact(n) print *,"Factorial:", n contains subroutine fact(n) integer, intent(inout) :: n integer :: y, i y=n do i=2,y-1 n=n*i end subroutine fact end program exemplo9 Observe-se que na definição da subrotina foi utilizada a declaração intent(inout) para o parâmetro n. Isto significa que não só podemos passar valores à subrotina através do parâmetro, como este poderá ser alterado durante a execução da subrotina e essas alterações reflectir-se-ão para fora. Com efeito, a chamada a esta subrotina a partir do programa principal reflecte isso mesmo. Antes da chamada, n guarda o número de que pretendemos calcular o factorial. Após a chamada da subrotina, n guarda o valor do factorial. 11
12 3 Factorial: 6 5 Factorial: 120 Deixa-se como exercício definir a subrotina anterior usando apenas o parâmetro n e a variável i. Efeitos colaterais Pode acontecer que uma subrotina modifique o valor de uma variável global (uma variável do programa que a invocou). Como já foi dito atrás, a este tipo de efeitos dá-se o nome de efeito colateral. Considerese o problema de calcular o valor do factorial de um número. Uma solução, diferente das apresentadas anteriormente, consiste em definir uma subrotina sem parâmetros, mas que manipule directamente o valor da variável. program exemplo10 integer :: n print *,"" call fact() print *,"Factorial:", n contains subroutine fact() integer :: y, i y=n do i=2,y-1 n=n*i end subroutine fact end program exemplo10 Repare-se que a subrotina é em tudo semelhante à do exemplo9. Do ponto de vista do programa principal, a variável n foi alterada sem indicação explícita. No entanto, o programa funciona como esperado: 3 Factorial: 6 5 Factorial: 120 Como já foi dito atrás, os efeitos colaterais apenas podem ser provocados por uma subrotina e nunca por uma função. Programação recursiva Consiste em definir funções à custa de si mesmas. A definição de uma função ou subrotina recursiva em F é semelhante à definição de uma função ou subrotina. O facto de a função ou subrotina ser recursiva tem que ser indicado explicitamente através da instrução recursive. 12
13 Recorde-se a expressão recursiva para definir o factorial de um número natural: 1 n! = n.(n 1)! sen 0 sen 0 A função F seguinte calcula recursivamente o factorial de um número natural: recursive function factr(n) result(r) integer :: r if (n==0) then r = 1 r = n*factr(n-1) endif end function factr O programa seguinte utiliza esta função para calcular o factorial de um número fornecido pelo utilizador: program factorialr integer :: n print *,"" print *,"Factorial:",factR(n) contains recursive function factr(n) result(r) integer :: r if (n==0) then r = 1 r = n*factr(n-1) endif end function factr end program factorialr Considerem-se alguns exemplos de utilização: 4 Factorial: 24 1 Factorial: 1 Deixa-se como exercício proteger a função contra argumentos indesejados. nomeadamente, contra números negativos. Considere-se a sucessão Fn, n 0, dos números de Fibonacci definida por 13
14 F n= F n F n 1 se n 0 se n 1 se n 1 A correspondente definição em F é a seguinte: recursive function fibr(n) result(r) integer :: r if (n==0) then r = 0 if (n==1) then r = 1 r = fibr(n-2)+fibr(n-1) endif end function fibr Podemos testar esta função através do programa: program fib integer :: n print *,"" print *,"Numero de Fibonacci:",fibR(n) contains recursive function fibr(n) result(r) integer :: r if (n==0) then r = 0 if (n==1) then r = 1 r = fibr(n-2)+fibr(n-1) endif end function fibr end program fib Apresentam-se em seguida alguns exemplos de utilização: Introduza um número: 2 Numero de Fibonacci: 1 Introduza um número: 6 Numero de Fibonacci: 8 14
Introdução à Programação na linguagem F. Jaime Ramos, Amílcar Sernadas e Paulo Mateus
Introdução à Programação na linguagem F Jaime Ramos, Amílcar Sernadas e Paulo Mateus DMIST, Setembro de 2005 Capítulo 1 Introdução à linguagem F Objectivos Introdução à linguagem F. Edição e compilação
Leia maisCorreção do 1º Exame de INTRODUÇÃO À PROGRAMAÇÃO Licenciatura em Engenharia Mecânica 30 de Junho de 2006, 2º Semestre
Correção do º Exame de INTRODUÇÃO À PROGRAMAÇÃO Licenciatura em Engenharia Mecânica 3 de Junho de 26, 2º Semestre. (2.) Perguntas de resposta rápida de Fortran (.4 valores cada).. Todos os componentes
Leia maisResolução De Problemas Em Informática. Docente: Ana Paula Afonso Resolução de Problemas. 1. Analisar o problema
ALGORITMIA Resolução De Problemas Em Informática Docente: Ana Paula Afonso 2000-2001 Resolução de Problemas 1. Analisar o problema Conhecer o bem o problema Descrever o problema: subdividir, detalhar 2.
Leia maisProgramação estruturada no Fortran 90-3
Programação estruturada no Fortran 90-3 Departamento de Física UFPel Em Fortran 90 existem dois tipos de subprogramas: Funções e Subrotinas Uma Função, quando chamada, retorna um único valor calculado
Leia maisTÉCNICO DE INFORMÁTICA - SISTEMAS
782 - Programação em C/C++ - estrutura básica e conceitos fundamentais Linguagens de programação Linguagem de programação são conjuntos de palavras formais, utilizadas na escrita de programas, para enunciar
Leia maisCompilador de LP3 para C3E e P3
Compilador de LP3 para C3E e P3 Luís Gil 1 13 de Junho de 2005 1 estudante de Ciências Informáticas no Instituto Superior Técnico 1 Introdução Este relatório descreve a sintaxe e a semântica da Linguagem
Leia maisIntrodução à Programação
Introdução à Programação 1.Ano LCC-MIERSI DCC - FCUP Nelma Moreira Aula 2 Etapas para o desenvolvimento dum programa 1. Perceber o problema 2. Encontrar um procedimento algorítmico para o resolver. Estratégias:
Leia maisPROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95
PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95 Exercícios de revisão Lista 01: a) Monte um mapa conceitual indicando as relações entre os seguintes conceitos, no contexto do assunto visto em aula:
Leia maisApostila de Fortran. É uma pseudo-linguagem a qual oferece recursos para que o programador possa codificar e testar os seus algoritmos.
Apostila de Fortran Fortran Uma das linguagens de programação mais velhas, o FORTRAN foi desenvolvido por uma equipe de programadores conduzida por John Backus na IBM, e foi primeiramente publicada em
Leia mais4. Constantes. Constantes pré-definidas
4. Constantes Constantes pré-definidas O PHP possui algumas constantes pré-definidas, indicando a versão do PHP, o Sistema Operacional do servidor, o arquivo em execução, e diversas outras informações.
Leia maisUm algoritmo deve conter passos não ambíguos, executáveis e que sejam terminados quando seguidos.
Programação Um programa é uma sequência de instruções de uma linguagem de programação (VB no nosso caso). Cada instrução representa uma qualquer acção que nós pretendemos ver executada. Programar consiste
Leia maisESTRUTURAS DE REPETIÇÃO - PARTE 1
AULA 15 ESTRUTURAS DE REPETIÇÃO - PARTE 1 15.1 O comando enquanto-faca- Considere o problema de escrever um algoritmo para ler um número inteiro positivo, n, e escrever todos os números inteiros de 1 a
Leia maisUma introdução ao GAP
Uma introdução ao GAP O nome GAP, advém de Groups, Algorithms and Programming. Trata-se de um sistema computacional inicialmente concebido para trabalhar na área da álgebra. Álgebra (Curso de CC) Ano lectivo
Leia maisProgramação de Computadores III
Programação de Computadores III Introdução ao FORTRAN Professor Leandro Augusto Frata Fernandes laffernandes@ic.uff.br Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2013.1/tcc-00.157
Leia maisMétodos de Programação I Ana Maria de Almeida
Métodos de Programação I 2. 35 2.10 O TIPO ESTRUTURADO TABELA (ARRAY) A estruturação de informação introduz uma nova dimensão no poder e complexidade dos nossos programas que, ao mesmo tempo que amplia
Leia maisProgramação de Computadores III
Programação de Computadores III Introdução ao FORTRAN Professor Hugo de Oliveira Barbalho hbarbalho@ic.uff.br Material produzido pelo professor: Leandro Augusto Frata Fernandes (laffernandes@ic.uff.br)
Leia maisProgramação de Computadores
Programação de Computadores Instituto de Computação UFF Departamento de Ciência da Computação Otton Teixeira da Silveira Filho Conteúdo Alguns Conceitos sobre Linguagens Conceito de Algoritmo Pseudocódigo
Leia maisParadigmas de Linguagem de Programação. Paradigma Imperativo
Paradigmas de Linguagem de Programação Paradigma Imperativo Paradigma Imperativo Imperare Comandar É o mais antigo de todos; Baseado no modo de funcionamento do computador; São também chamadas de procedurais;
Leia maisExercícios de VBA. Paulo Melo Joana Dias Óscar Lourenço 17 de Maio de 2006
Exercícios de VBA Paulo Melo Joana Dias Óscar Lourenço 17 de Maio de 2006 Este texto apresenta alguns exemplos de questões que podem ser respondidas usando Visual Basic for Applications. Não pretende (nem
Leia maisIntrodução ao Fortran 90. Aula 3
Introdução ao Fortran 90 Aula 3 Usando vetores e matrizes Definição Uma matriz ou vetor consiste de um conjunto retangular de elementos, todos do mesmo tipo e espécie do tipo. Uma matriz ou vetor é um
Leia maisESCOLA SUPERIOR DE TECNOLOGIA DE TOMAR DEPARTAMENTO DE ENGENHARIA INFORMÁTICA 2006/2007
ESCOLA SUPERIOR DE TECNOLOGIA DE TOMAR DEPARTAMENTO DE ENGENHARIA INFORMÁTICA INTRODUÇÃO À PROGRAMAÇÃO (ENG. INFORMÁTICA) COMPUTADORES E PROGRAMAÇÃO I (ENG. ELECTROTÉCNICA) 2006/2007 TRABALHO PRÁTICO Nº
Leia maisMétodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados
Métodos Computacionais Operadores, Expressões Aritméticas e Entrada/Saída de Dados Tópicos da Aula Hoje aprenderemos a escrever um programa em C que pode realizar cálculos Conceito de expressão Tipos de
Leia maisUniversidade Federal de Uberlândia Faculdade de Computação. Linguagem C: estruturas de repetição While / Do While / For
Universidade Federal de Uberlândia Faculdade de Computação Linguagem C: estruturas de repetição While / Do While / For Prof. Renato Pimentel 1 Estruturas de repetição O real poder dos computadores está
Leia maisProgramação de Computadores II
Programação de Computadores II 1. Programação Básica 2019.1 Slides adaptados do material de Karina Mochetti Problema, Algoritmo, Programa Um programa de computador é a implementação de um algoritmo para
Leia maisIntrodução à Lógica de Programação
Introdução à Lógica de Programação Não estamos aqui para sobreviver e sim para explorar a oportunidade de vencer adquirindo o saber! (Autor Desconhecido) A lógica é a arte de pensar correctamente e, visto
Leia maisA linguagem algorítmica utiliza o português para a definição dos comandos e tem as seguintes característica:
1 de 16 08/02/2012 14:08 Linguagem Linguagem Algorítmica A linguagem algorítmica utiliza o português para a definição dos comandos e tem as seguintes característica: 1 - A linguagem não á sensível á capitulação
Leia maisAlgoritmos e Modelação Computacional. Paulo Mateus MEBiom LMAC 2018
Algoritmos e Modelação Computacional Paulo Mateus MEBiom LMAC 2018 Objetivos Edição e compilação de programas Tipos e expressões Declaração de variáveis Atribuição, composição sequencial, iterativa e alternativa
Leia maisIntrodução ao FORTRAN 90. Aula 4
Introdução ao FORTRAN 90 Aula 4 Usados quando o programa contém estruturas complexas e com estruturas contendo conjuntos de instruções repetidas. O conjunto de instruções repetidas não se enquadra em uma
Leia maisProcedimento. Função. Selecção Condicional - a instrução if-then-else. expressão if lógica then instrução else instrução
Métodos de Programação I 2. 20 2.2.8 ESTRUTURAS DE CONTROLO Estruturas de controlo são instruções especiais em Pascal que permitem controlar o fluxo de sequência de instruções, alterando a ordem sequencial
Leia maisMétodos de Programação I Ana Maria de Almeida
Métodos de Programação I 2. 13 type naipe = ( ouros, copas, paus, espadas ); var trunfo : naipe; Claro que são apenas identificadores e não existirá a mesma escolha de operadores e funções sobre eles que
Leia mais5. Expressões aritméticas
5. Expressões aritméticas 5.1. Conceito de Expressão O conceito de expressão em termos computacionais está intimamente ligado ao conceito de expressão (ou fórmula) matemática, onde um conjunto de variáveis
Leia maisIntrodução ao Fortran 90-4
Introdução ao Fortran 90-4 Departamento de Física UFPel Controles de Fluxo de Execução Definição Estruturas (ou blocos) de programação que permitem controlar o fluxo de execução de um programa, além da
Leia maisProgramação de Computadores:
Instituto de C Programação de Computadores: Introdução ao FORTRAN Luis Martí Instituto de Computação Universidade Federal Fluminense lmarti@ic.uff.br - http://lmarti.com Introdução ao FORTRAN Cinco aspectos
Leia maisVariáveis primitivas e Controle de fluxo
Variáveis primitivas e Controle de fluxo Material baseado na apostila FJ-11: Java e Orientação a Objetos do curso Caelum, Ensino e Inovação, disponível para download em http://www.caelum.com.br/apostilas/
Leia maisLaboratório 4 Correcção de erros sintácticos e tipos de dados primitivos
Instituto Politécnico de Setúbal Escola Superior de Tecnologia Departamento de Sistemas e Informática Laboratório 4 Correcção de erros sintácticos e tipos de dados primitivos Disciplina de Introdução à
Leia maisIntrodução à Linguagem de Programação C: Variáveis, Constantes, Expressões, Atribuição, Tipos de dados, Entrada e Saída de Dados
Introdução à Linguagem de Programação C: Variáveis, Constantes, Expressões, Atribuição, Tipos de dados, Entrada e Saída de Dados Disciplina de Programação de Computadores I Universidade Federal de Ouro
Leia maisIntrodução ao Fortran 90-3
Introdução ao Fortran 90-3 Departamento de Física UFPel Controles de Fluxo de Execução Definição Estruturas (ou blocos) de programação que permitem controlar o fluxo de execução de um programa, além da
Leia maisIntrodução à Programação. João Manuel R. S. Tavares
Introdução à Programação João Manuel R. S. Tavares Sumário 1. Ciclo de desenvolvimento de um programa; 2. Descrição de algoritmos; 3. Desenvolvimento modular de programas; 4. Estruturas de controlo de
Leia maisAlgoritmos. Algoritmos e Linguagem de Programação - Prof Carlos Vetorazzi
Algoritmos Algoritmos e Linguagem de Programação - Prof Carlos Vetorazzi Conceitos Linhas de Código de um Algoritmo ou Programa escrita do programa linha a linha, ou seja, a sintaxe do programa, podendo-se
Leia maisProgramação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação
Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Programação em C Variáveis e Expressões DCA0800 Algoritmos e Lógica de Programação Heitor Medeiros Florencio
Leia maisComputação e Programação Exame Época de recurso
Nome : Número : Computação e Programação 2013-2014 Mestrado Integrado em Engenharia Civil Licenciatura Bolonha em Engenharia Geológica e de Minas DECivil Exame Época de recurso 29 de Janeiro de 2014 v
Leia mais2.2.5 EXPRESSÕES - Regras para o cálculo de valores
Métodos de Programação I Departamento de Matemática, FCTUC 30 2.2.5 EXPRESSÕES - Regras para o cálculo de valores As expressões fornecidas ao computador, quer tenham variáveis, constantes ou apenas literais,
Leia maisIntrodução ao Fortran 90-1
Introdução ao Fortran 90-1 Departamento de Física UFPel Definição de Programa em Fortran 90 Programa ou Código-fonte Programa ou código-fonte é um conjunto de instruções, também chamadas de comandos, escritas
Leia maisIntrodução à Programação Aula prática Nº O número de bactérias numa cultura pode ser estimado pela expressão:
Funções 1. O número de bactérias numa cultura pode ser estimado pela expressão: N e kt sendo N a população inicial, k a taxa de crescimento e t o tempo de evolução. Escreva uma função para calcular o número
Leia maisAlgoritmos e Estrutura de Dados I Conceitos de Algoritmos. Prof. Elyssandro Piffer
Algoritmos e Estrutura de Dados I Conceitos de Algoritmos Prof. Elyssandro Piffer CONCEITO DE ALGORITMO O computador pode auxiliar em muitas tarefas, contudo ele não possui independência, não é inteligente,
Leia maisConceitos Introdutórios sobre a Linguagem FORTRAN
Conceitos Introdutórios sobre a Linguagem FORTRAN Caracteres válidos Caracteres alfabéticos: A,a Z,z (não é Case sensitive ) Caracteres numéricos: 0-9 Caracteres especiais: branco. ; : + - / etc Constantes
Leia maisWaldemar Celes e Roberto Ierusalimschy. 29 de Fevereiro de 2012
Capítulo 5: Repetições Waldemar Celes e Roberto Ierusalimschy 29 de Fevereiro de 2012 1 Construção de laços Uma das principais características de um computador é sua capacidade para realizar cálculo e
Leia maisCapítulo 7. Expressões e Sentenças de Atribuição
Capítulo 7 Expressões e Sentenças de Atribuição Introdução Expressões são os meios fundamentais de especificar computações em uma linguagem de programação Para entender a avaliação de expressões, é necessário
Leia maisIntrodução à Computação
Introdução à Computação Conteúdo Conceito e aplicação O que são e para que servem as estruturas de repetição. Ciclo Do... Loop Apresentação das diversas variantes deste ciclo. Negação de expressões lógicas.
Leia maisLÓGICA DE PROGRAMAÇÃO. Algoritmos Computacionais. Sérgio Carlos Portari Júnior
LÓGICA DE PROGRAMAÇÃO Algoritmos Computacionais Sérgio Carlos Portari Júnior portari.uemgfrutal@gmail.com Tópicos abordados Algoritmos Computacionais Estrutura de Dados Tipos Primitivos Constantes Variáveis
Leia maisEstruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.
1 Estruturas da linguagem C 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões. Identificadores Os identificadores seguem a duas regras: 1. Devem ser começados por letras
Leia maisBlocos, Escopo de variáveis, procedimentos e funções. 1- Blocos
Blocos, Escopo de variáveis, procedimentos e funções 1- Blocos Todo algoritmo é um bloco. O bloco consiste em um conjunto de declarações e comandos delimitados pelas palavras e Frequentemente é necessário
Leia maisEstruturas de Decisão. APROG (Civil) Aula 6
Estruturas de Decisão APROG () Aula 6 Conteúdo Estrutura If...Then Estrutura If...Then...Else 2 Conceito As Estruturas de Controlo servem para modificar o fluxo das instruções seguidas por um determinado
Leia maisMétodos para a construção de algoritmo
Métodos para a construção de algoritmo Compreender o problema Identificar os dados de entrada e objetos desse cenário-problema Definir o processamento Identificar/definir os dados de saída Construir o
Leia maisIntrodução à Programação
Introdução à Program João Manuel R. S. Tavares Sumário 1. Ciclo de desenvolvimento de um programa; 2. Descrição de algoritmos; 3. Desenvolvimento modular de programas; 4. Estruturas de controlo de um programa.
Leia maisAlgoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2
Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas Aula Tópico 2 1 Problema 3 Exibir o maior número inteiro que pode ser representado no computador. 2 Qual o maior número inteiro? Para o compilador
Leia maisCapítulo 2 Operadores. A função scanf()
Capítulo 2 Operadores A função scanf() A função scanf() é outra das funções de E/S implementadas em todos os compiladores e nos permite ler dados formatados da entrada padrão (teclado). Sintaxe: scanf(
Leia maisIntrodução à Programação em C Input / Output
Introdução à Programação em C Input / Output Resumo Aula Anterior Programa começa com função main() Sintaxe para definição de funções Definição de variáveis e atribuições Estruturas de controlo if-then
Leia maisIntrodução à Programação. Operadores, Expressões Aritméticas e Entrada/Saída de Dados
Introdução à Programação Operadores, Expressões Aritméticas e Entrada/Saída de Dados Programa em C #include int main main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius
Leia mais1. O número de bactérias numa cultura pode ser estimado pela expressão:
Funções 1. O número de bactérias numa cultura pode ser estimado pela expressão: N e kt sendo N a população inicial, k a taxa de crescimento e t o tempo de evolução. Escreva uma função para calcular o número
Leia maisIntrodução à Computação
Universidade Federal do Maranhão Curso de Química Departamento de Informática Introdução à Computação Linguagem Fortran Profa. Msc. Maria Auxiliadora Freire maria@deinf.ufma.br 1 LINGUAGEM FORTRAN FUNÇÕES
Leia maisAlgoritmos e Programação
Algoritmos e Programação Aula 3 Introdução a Linguagem C Profa. Marina Gomes marinagomes@unipampa.edu.br 1 Aula de Hoje - Criar programas simples em C utilizando a estrutura básica; - Declarar variáveis;
Leia maisConceitos Básicos de Programação
BCC 201 - Introdução à Programação Conceitos Básicos de Programação Guillermo Cámara-Chávez UFOP 1/53 Conceitos básicos I Variável 2/53 Conceitos básicos II Posição de memoria, identificada através de
Leia maisJava Variáveis e Controle Fluxo
Java Variáveis e Controle Fluxo 1 Variáveis primitivas p Todo bloco em java é delimitado por chaves ({ } ); p Dentro de um bloco, podemos declarar variáveis e usa las; p Em Java, toda variável tem um tipo
Leia maisIntrodução à Programação em C
Introdução à Programação em C Tipos e Operadores Elementares Estruturas de Controlo Resumo Novidades em C Exemplo: Factorial Tipos de Dados Básicos Saltos Condicionais: if-then-else Valor de retorno de
Leia maisEstruturas de Repetição
Estruturas de Repetição Introdução As estruturas de repetição, permitem executar mais de uma vez um mesmo trecho de código. Trata-se de uma forma de executar blocos de comandos somente sob determinadas
Leia maisAlgoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição
Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição 1 Comando while Deseja-se calcular o valor de: 1 + 2 + 3 +... + N. Observação: não sabemos, a priori, quantos termos
Leia maisPara cada programa, por mais simples que seja, comece sempre por esboçar a solução desenhando um fluxograma.
Instruções de Repetição Objetivo A realização deste trabalho deverá permitir ao aluno a familiarização com a utilização de instruções de repetição em C. Para o efeito será proposto um conjunto de exercícios
Leia maisInstituto Superior Politécnico de VISEU. Escola Superior de Tecnologia
1 Vamos considerar os seguintes elementos e estruturas fundamentais que são habitualmente usados em programação: Tipos de Dados Operadores Atribuições Entrada e Saída de Dados Estruturas de Controlo Procedimentos
Leia mais13 a Aula - Instruções Condicionais. Ciclos. Pré-processador. Variáveis de ambiente. Mestrado em Engenharia Física Tecnológica
13 a Aula - Instruções Condicionais. Ciclos. Pré-processador. Variáveis de ambiente. Programação Mestrado em Engenharia Física Tecnológica Samuel M. Eleutério sme@tecnico.ulisboa.pt Departamento de Física
Leia maisAPROG Civil. Estruturas de Decisão. Angelo Martins Dep. Eng. Informática - ISEP. Aula 2. ISEP DEI, Angelo Martins 2006 ISEP-DEI, António Silva, 2007
Angelo Martins Dep. Eng. Informática - ISEP Aula 2 1 Conteúdo Estruturas de decisão - conceito e aplicação Estrutura If... Then Apresentação das diversas variantes desta estrutura. Expressões lógicas complexas.
Leia maisAula 3 Primeiros programas
Aula 3 Primeiros programas FACOM-UFMS 2012 OBJETIVOS DA AULA Introdução ao CodeBlocks; Criação dos primeiros programas; Esta aula foi baseada nos capítulos 3 e 4 da apostila de Programação de Computadores
Leia maisCFAC: Programação em FORTRAN - I
Programação em FORTRAN - I João Manuel R. S. Tavares Bibliografia FORTRAN ANSI 77 e WATFIV-S Jorge Filho, Caetano Loiola Editora Campus Linguagem de Programação Estruturada FORTRAN 77 Maximilian Emil Hehl
Leia maisProgramação em FORTRAN - I. João Manuel R. S. Tavares
Programação em FORTRAN - I João Manuel R. S. Tavares Bibliografia FORTRAN ANSI 77 e WATFIV-S Jorge Filho, Caetano Loiola Editora Campus Linguagem de Programação Estruturada FORTRAN 77 Maximilian Emil Hehl
Leia maisFundamentos da Programação
Fundamentos da Programação Solução da Repescagem do Primeiro Teste 31 de Janeiro de 2013 09:00 10:30 1. De um modo sucinto, (a) (0.5) Diga o que é um processo computacional. Um processo computacional é
Leia maisProgramação Estruturada Aula VisualG
Programação Estruturada Aula VisualG Prof. Flávio Barros flavioifma@gmail.com www.flaviobarros.com.br 2 CRIANDO ALGORITMO CRIANDO ALGORITMO Passos para construir Algoritmos Ler enunciado do problema, compreendendo-o
Leia mais11 - Estrutura de um programa em C
11 - Estrutura de um programa em C directivas para o compilador { main ( ) declarações instruções } -É possível utilizar comentários, exemplo: /* Comentário */ que não são traduzidos pelo compilador, pois
Leia maisProgramação de Computadores. Primeiro contato
Programação de Computadores Primeiro contato Sumário Programa O que é um programa? Um conjunto de instruções encadeadas de modo lógico, convertido em uma linguagem que computadores podem interpretar O
Leia maisLógica de Programação I. Gilson de Souza Carvalho
Gilson de Souza Carvalho gaucho.gilson@hotmail.com 1. Estruturas básicas Apresentaremos um resumo com os comandos estudados para criação de algoritmos. Para utilizar estes comandos, usaremos uma sintaxe
Leia maistipoveiculo = (bicicleta, motociclo, motorizada, automovel, autocomreb, camioneta, autocarro, camiao, reboque); veiculo : tipoveiculo;
Métodos de Programação I Departamento de Matemática, FCTUC 38 type var tipoveiculo = (bicicleta, motociclo, motorizada, automovel, autocomreb, camioneta, autocarro, camiao, reboque); veiculo : tipoveiculo;
Leia maisProgramação de Computadores III
Programação de Computadores III Pseudocódigo e Estruturas Básicas de Controle Professor Leandro Augusto Frata Fernandes laffernandes@ic.uff.br Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2013.1/tcc-00.157
Leia maisObjectivos. Programação I (2010/2011) 2 o Trabalho de Programação
Programação I (2010/2011) 2 o Trabalho de Programação Introdução As progressões aritméticas e geométricas são exemplos de sucessões numéricas onde o elemento n + 1 depende do elemento n e de uma constante.
Leia maisFluxogramas e variáveis
Fluxogramas e variáveis Patrícia de Siqueira Ramos UNIFAL-MG, campus Varginha 11 de Março de 2019 Patrícia de Siqueira Ramos Fundamentos da programação 1 / 20 Fases de um algoritmo Patrícia de Siqueira
Leia maisSEBENTA INTRODUÇÃO Á ALGORITMIA
SEBENTA INTRODUÇÃO Á ALGORITMIA O desenvolvimento de programas para computador está sempre baseado na tarefa de programar um computador para seja resolvido um problema ou executada uma função e assim dar
Leia maisLinguagem e Técnicas em Programação. Gilson de Souza Carvalho
Gilson de Souza Carvalho gaucho.gilson@hotmail.com 3.1.3 Condições compostas Linguagem e Técnicas em Programação As condições que vimos até agora sempre foram únicas. Entretanto, conforme aumenta a complexidade
Leia maisLinguagem C: Ponteiros. Prof. Tiago Alves de Oliveira
Linguagem C: Ponteiros 1 Sumário Ponteiros; Variáveis ponteiros; Operadores de ponteiros; Expressões com ponteiros; Atribuição de ponteiros; Aritmética de ponteiros; Comparação de ponteiros; Ponteiros
Leia maisCapítulo VII : A Recorrência
Capítulo VII : A Recorrência 1 _ Capítulo VII : A Recorrência Quando algo é definido em termos de si próprio. Ex1: O Tetraedro de Sierpinski Ex2: Fracções Contínuas Ex3: A Carpete de Sierpinski Ex4: A
Leia maisPROGRAMAÇÃO DE MICROPROCESSADORES 2007 / 2008
Departamento de Engenharia Electrotécnica PROGRAMAÇÃO DE MICROPROCESSADORES 2007 / 2008 Mestrado Integrado em Engenharia Electrotécnica e Computadores 1º ano 1º semestre Funções e Vectores http://tele1.dee.fct.unl.pt
Leia maisProgramação de Computadores III
Programação de Computadores III Pseudocódigo e Estruturas Básicas de Controle Professor Hugo de Oliveira Barbalho hbarbalho@ic.uff.br Material produzido pelo professor: Leandro Augusto Frata Fernandes
Leia maisAMBIENTE DE PROGRAMAÇÃO PYTHON II
Computadores e Programação Engª Biomédica Departamento de Física Faculdade de Ciências e Tecnologia da Universidade de Coimbra Ano Lectivo 2003/2004 FICHA 2 AMBIENTE DE PROGRAMAÇÃO PYTHON II 2.1. Objectivos
Leia maisLinguagem C: Ponteiros. Prof. Leonardo Barreto Campos 1
Linguagem C: Ponteiros Prof. Leonardo Barreto Campos 1 Sumário Ponteiros; Variáveis ponteiros; Operadores de ponteiros; Expressões com ponteiros; Atribuição de ponteiros; Aritmética de ponteiros; Comparação
Leia maisProgramação estruturada no Fortran 90-1
Programação estruturada no Fortran 90-1 Departamento de Física UFPel Programação estruturada: unidades de programa A programação estruturada em Fortran 90 implica no uso de unidades de programa, do tipo:
Leia maisComandos e Construtos de Controle de Fluxo
Capítulo 5 Comandos e Construtos de Controle de Fluxo Nos capítulos anteriores foi descrito como comandos de atribuição devem ser escritos e como estes podem ser ordenados um após o outro para formar uma
Leia maisCONCEITOS DE ALGORITMOS
CONCEITOS DE ALGORITMOS Fundamentos da Programação de Computadores - 3ª Ed. 2012 Editora Prentice Hall ISBN 9788564574168 Ana Fernanda Gomes Ascênsio Edilene Aparecida Veneruchi de Campos Algoritmos são
Leia maisa) Defina uma função para obter o máximo entre dois números
IP, Resoluções comentadas, Semana 2 jrg, vs 002, Out-2012 a) Defina uma função para obter o máximo entre dois números A versão mais imediata talvez seja esta: public static int maior ( int a, int b ) {
Leia maisSequencial Estrutura de controlo mais simples. As instruções são executadas sequencialmente.
Sequencial Estrutura de controlo mais simples. As instruções são executadas sequencialmente. Com base numa condição Estruturas de decisão ou selecção Com base num selector ou de escolha múltipla Com contador
Leia maisConhecendo a Linguagem de Programação C
Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Conhecendo a Linguagem de Programação C DCA0800 - Algoritmos e Lógica de Programação Heitor Medeiros 1 Como
Leia maisProgramação de Computadores:
Instituto de C Programação de Computadores: Pseudocódigo e Estruturas Básicas de Controle Luis Martí Instituto de Computação Universidade Federal Fluminense lmarti@ic.uff.br - http://lmarti.com Roteiro
Leia mais