Programação de Computadores

Slides:



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

Funções em C Prof. Fabiano Utiyama.
Programação em Java Prof. Maurício Braga
Programação em Java Prof. Maurício Braga
Linguagem PASCAL Subprogramas
Programação de Computadores
Programação de Computadores
Programação de Computadores
Programação de Computadores
Programação de Computadores
Marco Antonio Montebello Júnior
Algoritmos e Estrutura de Dados I
PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof
PROGRAMAÇÃO MODULAR (com uso de subprogramas)
OBS: Este ppt não é o definitivo (Versão Beta)
1 Aula 7 ImplementandoSubprogramas Universidade do Vale do Rio dos Sinos
Lógica de Programação Módulo II
Vetores, Matrizes e Funções
Vetores, Matrizes e Funções
Algoritmos e Programação
O Portal do Estudante de Computação
Aula 07 Comandos de Repetição while e for
Paradigmas de programação
Subprogramas - Funções e Sub-rotinas
Variáveis, Tipos de Dados e Constantes
Estrutura de um Programa:
Aula prática 8 Ponteiros Monitoria de Introdução à Programação
Aula prática 8 Ponteiros Monitoria de Introdução à Programação.
Sub-programas. Mecanismo de composição de programas Sub-programa está para peça de LEGO assim como um programa está para a construção.
Aula prática 6 Vetores e Matrizes
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Conceitos básicos de orientação a objetos
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
PROGRAMAÇÃO ESTRUTURADA II
BCC /01 Funções. Material Didático Unificado. 1 BCC701 – Programação de Computadores I Universidade Federal de Ouro Preto Departamento de Ciência.
Universidade Federal de Alagoas – UFAL Centro de Tecnologia – CTEC
Algoritmos e Programação I
Aula prática 6 Vetores e Matrizes
PROGRAMAÇÃO ESTRUTURADA (MODULARIZAÇÃO/SUBPROGRAMAÇÃO)
Prof. Ricardo Santos PONTEIROS
Vetores Imagine que você tem que receber o nome e a nota de 50 alunos de uma escola, e depois listar o nome de cada um e a média final de cada aluno e.
Programação de Computadores Viviane Torres da Silva
Linguagem de Programação JAVA
Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
BCC /01 Aula Teórica 09 Funções Material Didático Proposto. 1 BCC701 – Programação de Computadores I Universidade Federal de Ouro Preto Departamento.
Introdução a Algoritmos
Algoritmos e Estruturas de Dados RECURSIVIDADE. O que é recursividade? Recursividade significa algo ser definido em termos de sí próprio. Em termos de.
Introdução à Linguagem C
Aula prática 2 Operadores e Expressões Comandos de Decisão Comentários
Igor Steinmacher, MSc. O maravilhoso mundo da Lógica de Programação.
Programação de PIC em C Exposição das funções básicas para
Programação e Aplicações Gráficas
Aula prática 3 Aprofundando em Funções Parâmetros de uma função Uso do return Execução Variáveis Global, local e estática Monitoria de Introdução à.
Algoritmos e Programação
Aula Prática 3 Funções Monitoria Introdução à Programação.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Programação de Computadores - 1
Introdução a Programação
Introdução à Programação
Trechos de código que permitem reutilização de uma mesma tarefa. Qualquer código PHP pode estar contido no interior de uma função. Não se pode definir.
Linguagem de Programação I Parte IV
Shell Script Parte 2.
Andréa Iabrudi 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I.
Computadores vs. Programas / Algoritmos Computadores vs. Programas -> Algoritmos O tratamento de problemas através do computador geralmente envolve uma.
Programação para Web I AULA 2 BANCO DE DADOS.
Algoritmos Grupos de Slides No 2. Prof. SIMÃO Estrutura de decisão simples “Se” if end Feito por Prof. Jean Marcelo SIMÃO e revisado por Prof. Luis Alberto.
Ambientação com a Sintaxe de Java: parte 2 Prof. Gustavo Wagner Slides Originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB  Centro de.
Grupos de Slides No 5. Prof. SIMÃO
Algoritmos Grupos de Slides No 7. Prof. SIMÃO Estrutura de Repetição “para - passo”” for Feito por Prof. Jean Marcelo SIMÃO e revisado por Prof. Luis Alberto.
Transcrição da apresentação:

Programação de Computadores Viviane Torres da Silva viviane.silva@ic.uff.br http://www.ic.uff.br/~viviane.silva/progIII

Subprogramação program ex1 implicit none real a, b, c read *, a, b c = a * b / 2 print *, 'a vale: ', a print *, 'b vale: ', b print *, 'a * b / 2 vale: ', c a = a / 2 b = b / 2 end É muito comum que vários trechos de código se repitam ao longo de um programa. Como fazer para “economizar código” evitando a repetição?

Vantagens da Subprogramação Defeitos podem ser facilmente corrigidos: se houver um defeito em um trecho de código que se repete várias vezes, teremos que corrigir o defeito em vários locais diferentes do código. Defeitos podem ser evitados: a replicação de trechos de código idênticos pode levar a modificações incompletas. O código fica mais legível: com a subprogramação podemos dar nomes mais intuitivos a trechos de código Ajuda a resolver os problemas: estratégia de “dividir para conquistar” nos permite lidar melhor com a complexidade de programas grandes.

Exemplo program ex1 implicit none real a, b read *, a, b call mostra(a, b) a = a / 2 b = b / 2 end subroutine mostra(a, b) real a, b, c c = a * b / 2 print *, 'a vale: ', a print *, 'b vale: ', b print *, 'a * b / 2 vale: ', c

Antes x Depois Depois: vários programas menores Antes: um programa gigante Programa Principal Subprograma A Subprograma C Subprograma B Programa Principal

Fluxo de Controle Programa Principal Subprograma B Subprograma A call A call C call B Subprograma C

Usando uma das funções predefinidas no Fortran Programa Principal Sin(A) X = sin(A)

Fluxograma O subprograma passa a ter um fluxograma próprio, com o símbolo de início contendo o nome do subprograma e o símbolo de término contendo “Retorno” Além disso, um novo símbolo é utilizado no programa principal para indicar a chamada a um subprograma Chama subprograma

Tipos de Subprogramas Um subprograma pode usar variáveis locais e os parâmetros que foram declarados no subprograma Função: Tem que retornar um valor A chamada é feita pelo nome da função + parâmetros (se houver) (ex. sin(x)) O valor retornado pela função tem que ser do mesmo tipo especificado na declaração da função Sub-rotina: Não tem retorno de valor A chamada é feita por “call” seguido do nome da sub-rotina + parâmetros (se houver)

program ex2 implicit none integer a, b, v(4), i real media read program ex2 implicit none integer a, b, v(4), i real media read *, a, b call troca(a, b) print *, a, b print *, media(a, b) read *, (v(i), i = 1, 4) call troca(v(1), v(4)) call troca(v(2), v(3)) print *, (v(i), i = 1, 4) end Os nomes dos parâmetros não são necessariamente iguais aos nomes das variáveis usadas na chamada do subprograma. O Fortran faz o casamento dos nomes subroutine troca(x, y) implicit none integer x, y, aux aux = x x = y y = aux end real function media(x, y) implicit none integer x, y   media = (x + y)/2.0 end

Importante A variável aux é uma variável LOCAL, que desaparece depois da execução do subprograma. As variáveis locais do programa principal não podem ser acessadas dentro do subprograma, o oposto também é verdadeiro. As modificações nos parâmetros são permanentes e visíveis de fora do subprograma (exemplo: x = y) A função tem que ser declarada no programa principal de forma semelhante a uma variável. Sub-rotina não se declara O valor da função é retornado usando o próprio NOME da função. É como se existisse uma variável com o mesmo nome da função para guardar o valor de retorno.

program ex2 implicit none integer a, b, v(4), i real media read program ex2 implicit none integer a, b, v(4), i real media read *, a, b call troca(a, b) print *, a, b print *, media(a, b) read *, (v(i), i = 1, 4) call troca(v(1), v(4)) call troca(v(2), v(3)) print *, (v(i), i = 1, 4) end 2 4 subroutine troca(x, y) implicit none integer x, y, aux aux = x x = y y = aux end real function media(x, y) implicit none integer x, y   media = (x + y)/2.0 end 1 3 5

Uma sub-rotina não precisa necessariamente modificar o valor de alguma variável program ex3 implicit none print *, ‘Pula 3 linhas’ call pula(3) print *, ‘Pula 5 linhas’ call pula(5) print *, ‘Fim’ end subroutine pula(n) integer n, I do i = 1, n print *, '' end do

Parte II - Sub-rotinas

Sub-rotina Declaração ocorre logo após o end do programa principal  subroutine <nome>(<nome dos parâmetros>) implicit none <Declarações dos tipos dos parâmetros> <Declarações de variáveis locais> <Comandos Fortran> end   Exemplos: subroutine s1(a,b) real a integer b ...

Sub-rotina Declaração de variáveis: As variáveis declaradas dentro de uma sub-rotina pertencem somente a ela (“variáveis locais”) As variáveis locais a um subprograma têm seus escaninhos próprios, não afetando outros subprogramas ou o programa principal, mesmo que existam variáveis com o mesmo nome em outro lugar. Passagem de parâmetros por referência: o mesmo “escaninho” dos parâmetros é usado – alterações são refletidas no programa principal Chamada: call <nome>(<valores dos parâmetros>)

Exemplo program ex4 implicit none real n1, n2, nf nf=0 read *, n1, n2 call media(n1, n2, nf) print *, nf C programa principal “vê” a modificação de nf pela sub-rotina end subroutine media(x, y, m) real x, y, m m = (x + y) / 2 O valor de “nf” é modificado pela sub-rotina. Isso acontece mesmo no caso do parâmetro ter outro nome (no caso, “m”).

Exemplo program ex5 implicit none integer a, b, c a = 1 b = 2 c = 3 call teste(c) print *, a, b, c end subroutine teste(c) a = 10 b = 20 c = 30 a e b são variáveis locais do programa principal e não são alteradas na sub-rotina c é um parâmetro alterado na sub-rotina a e b são variáveis locais da sub-rotina

Exercício 1 Faça um programa que contenha uma sub-rotina para obter do usuário a temperatura em Celsius e outra sub-rotina para mostrar ao usuário a temperatura em Fahrenheit. Dica: °F = °C × 1,8 + 32

program converte temperatura implicit none real tempC, tempF call temperaturaCelcius(tempC) call converteCelciusFahrenheit (tempC, tempF) print *, 'a temperatura ', tempC, ' em Celcius equivale a' print *, 'a temperatura ', tempF, ' em Fahrenheit.' end subroutine temperaturaCelcius(tempC) real tempC print *, 'entre com a temperatura em Celcius:' read *, tempC subroutine converteCelciusFahrenheit(tempC, tempF) tempF = tempC * 1.8 + 32

Exercício 2 Faça um programa em Fortran que recebe como parâmetro uma matrizes 4 x 4. Este programa deve imprimir uma matriz de saída calcula pela sub-rotina rotacionar. A sub-rotina deve compor a segunda matriz de forma que ela represente uma rotação anti-horária de 90 graus da primeira matriz.

Versão Simplista program converte temperatura implicit none integer i,j integer entrada (4,4), saida (4,4) read *, ((entrada(i,j),j=1,4), i=1,4) call roda(entrada,saida) print *, ((saida(i,j),j=1,4), i=1,4) read* end subroutine roda(entrada,saida) parameter (j=4) integer entrada(j,j), saida(j,j) do i=1, j, 1 saida(4,i)=entrada(i,1) saida(3,i)=entrada(i,2) saida(2,i)=entrada(i,3) saida(1,i)=entrada(i,4) end do Versão Simplista

Versão Correta program rotaciona implicit none integer i, j, x parameter(x=4) integer entrada(x,x), saida(x,x) read *, ((entrada(i,j),j=1,4), i=1,4) call roda(entrada,saida) print *, ((saida(i,j),j=1,4), i=1,4) read* end subroutine roda(entrada,saida) integer x, k, i, j do i=1, x do j=1, x k = (x+1) - j saida(k,i) = entrada(i,j) end do Versão Correta

Parte III - Função

Função Declaração Exemplos: integer function f1(a) <tipo de retorno> function <nome>(<nome dos parâmetros>) implicit none <Declarações dos tipos dos parâmetros> <Declarações de variáveis locais> <Comandos Fortran> End  Exemplos:  integer function f1(a) integer a ... f1 = ... end

Função Retorno da função: O Fortran cria automaticamente uma variável com o nome da função, que deve ser utilizada para definir o valor a ser retornado pela função.  Chamada: <nome>(<valores dos parâmetros>)   Importante: A função tem que ser declarada como uma variável no programa que a chama. Uma função só retorna um valor ao programa. 

Exemplo Função que recebe o raio de uma esfera e calcula o volume desta esfera. real function volume(raio) implicit none real raio volume = 4 * 3.1415 * raio ** 3 / 3 end  

Programa Completo program vol implicit none real raio, volume print *, 'Informe o raio:' read *, raio print *, 'Volume da esfera: ', volume(raio) end real function volume(raio) real raio volume = 4 * 3.1415 * raio ** 3 / 3

Exercício 1 O professor deseja dividir uma turma com N alunos em dois grupos: um com M alunos e outro com (N-M) alunos. Faça o fluxograma e o programa que lê o valor de N e M e informa o número de combinações possíveis. Dica: Número de combinações é igual a N!/(M! * (N-M)!). Crie uma função para calcular fatorial.

program calculaDivisoes implicit none integer M, N, fatorial real divisoes print *, 'informe N e M:' read *, N, M divisoes = fatorial(N) / ( fatorial(M) * fatorial(N-M)) print *, 'numero de divisoes possiveis sao: ', divisoes end C funcao fatorial integer function fatorial(numero) integer numero, aux aux = 1 do i = 1, numero, 1 aux = aux * i end do fatorial = aux

Exercício 2 Faça uma função que calcula a média de um aluno de acordo com o critério abaixo. Além disso, faça uma segunda função que informe o status do aluno de acordo com a tabela a seguir: Media = (P1+P2)/2 Nota acima de 6  “Aprovado” Nota entre 4 e 6  Conceito “Verificação Suplementar” Nota abaixo de 4  Conceito “Reprovado”

program calculo da media implicit none integer P1, P2 real media character*10 status print *, 'informe a nota da P1 e P2:‘ read *, P1, P2 print *, status( media(P1, P2) ) end real function media(P1, P2) media = (P1 + P2)/2 character*10 function status(media) if (media .GE. 6) then status = 'aprovado‘ else if (media .LT. 4) then status = 'reprovado‘ else status = 'VS' end if

Exercício 3 Faça uma calculadora que forneça as opções abaixo para o usuário. Cada opção deve ser implementada utilizando uma função. Opções:   Somar Subtrair Multiplicar Dividir 0. Sair do programa Qual opção você deseja?

program calculo da media implicit none real n1, n2, somar, subtrair, multiplicar, dividir integer opcao 11 print *, 'informe a opcao desejado:' print *, '1: somar' print *, '2: subtrair' print *, '3: multiplicar' print *, '4: dividir' print *, '0: sair' read *, opcao if (opcao .EQ. 0) then GO TO 10 else ... GO TO 11 end if   10 end

if (opcao .EQ. 0) then GO TO 10 else print *, 'inclua dois numeros:' read *, n1, n2 if (opcao .EQ. 1) then print *, 'a soma de ', n1, ' com ', n2 print *, 'eh ', somar (n1,n2) print *, ' ' else if (opcao .EQ. 2) then print *, 'a subtracao de ', n1, ' por ', n2 print *, 'eh ', subtrair (n1,n2) else if (opcao .EQ. 3) then print *, 'a multiplicacao de ', n1, ' por ', n2 print *, 'eh ', multiplicar (n1,n2) else if (opcao .EQ. 4) then print *, 'a divisao de ', n1, ' por ', n2 print *, 'eh ', dividir (n1,n2) end if GO TO 11

C funcao soma real function somar(n1, n2) implicit none real n1, n2 somar = n1 + n2 end C funcao subtrair real function subtrair(n1, n2) subtrair = n1 - n2

C funcao multiplicar real function multiplicar(n1, n2) implicit none real n1, n2 multiplicar = n1 * n2 end C funcao dividir real function dividir(n1, n2) if (n2 .EQ. 0) then dividir = 0 else dividir = n1 / n2 end if

Exercício 4 Faça uma programa que ajude uma mecânica a relacionar os carros e os problemas encontrados. A mecânica só tem capacidade para atender 20 carros (identificados pela placa). Os problemas que ela está capacidade a investigar são: problema na vela, no carburador, na bomba de gasolina e no distribuidor O programa deve ser capaz de: Cadastrar os problemas de cada carro (utilizar sub-rotina) Informar quais são os problemas de um determinado carro (utilizar sub-rotina após receber a placa do carro) Informar número de carros com um determinado problema (utilizar função após receber o nome do problema) Dica: utilize vetor para armazenar as planas dos carros, vetor para armazenar os nomes dos possíveis problemas, e matriz para armazenar a informação de qual carro tem qual(is) problema(s)