Aula 07 Introdução à Programação Subprogramas Prof. Gustavo Callou gustavo.callou@ufrpe.br gcallou@gmail.com
Roteiro SubProgramas Procedimentos Funções Exercícios Gustavo Callou DEINFO/UFRPE 2
Sistema complexo Gustavo Callou DEINFO/UFRPE 3
Simples Gustavo Callou DEINFO/UFRPE 4
Dividir para Conquistar Gustavo Callou DEINFO/UFRPE 5
Modularização Situação Problema Parte 1 Parte 2 Parte 3 Parte 4 Gustavo Callou DEINFO/UFRPE 6
Modularização Solução Problema Parte 1 Parte 2 Parte 2 Parte 3 Parte 4 Parte 3 Parte 4 Gustavo Callou DEINFO/UFRPE 7
Modularização::Subprograma Solução Programa Subprograma Parte 1 1 Subprograma 2 Parte 2 Parte 3 Parte 4 Subprograma 3 Subprograma 4 Gustavo Callou DEINFO/UFRPE 8
Modularização::Subprograma A solução do problema original é implementada através da composição dos subprogramas. Subprogramas podem ser vistos como blocos de construção com os quais montamos um programa. Esta técnica de construção de programas é chamada de MODULARIZAÇÃO. Gustavo Callou DEINFO/UFRPE 9
Modularização::Subprograma Um subprograma é um bloco de programa constituído por um conjunto de declarações e por um conjunto de comandos e identificado por um nome. Exemplo: Declarações de variáveis Comandos Gustavo Callou DEINFO/UFRPE 10
Modularização::Subprograma Tipos de Subprogramas Procedimentos Funções Gustavo Callou DEINFO/UFRPE 11
Modularização::Subprograma Tipos de Subprogramas Procedimentos Têm o objetivo de executar uma determinada tarefa para o programa. Funções Têm o objetivo de calcular um valor que deve ser informado pela função. Gustavo Callou DEINFO/UFRPE 12
Modularização::Subprograma Funções e Procedimentos Toda função ou procedimento deve ser, pelo menos, declarada antes da função principal main(). Declara a função/procedimento antes da main() e a implementa depois. Implementa a função/procedimento diretamente antes da main(). Gustavo Callou DEINFO/UFRPE 13
Modularização::Subprograma Funções e Procedimentos Exemplo: Procedimento que não recebe parâmetros e não retorna valor. #include <stdio.h> Assinatura ou void desenha(); protótipo do procedimento main() { printf( Usando procedimento."); desenha( ); } Implementacao do procedimento void desenha() { int i; for (i = 0; i <= 10; i++) printf("--\n"); } Gustavo Callou DEINFO/UFRPE 14
Modularização::Subprograma Chamada (Execução) de um Subprograma Uma referência a um nome de subprograma dentro de um programa provoca a execução do bloco de comandos do subprograma. Ao término da execução do subprograma, a execução do programa continua a partir do ponto onde este foi chamado. Gustavo Callou DEINFO/UFRPE 15
Modularização::Subprograma Fluxo de Controle Unidade de programa chamadora A unidade de programa chamadora ativa o sub-programa A unidade de programa chamadora continua Parte 1 Transferência de Controle para o subprograma O controle é retornado ao ambiente chamador Sub-programa Subprograma 2 O subprograma é executado Gustavo Callou DEINFO/UFRPE 16
Modularização::Subprograma Fluxo de Controle main() func1() func2() func1() Parte 1 Subprograma 2 func2() Subprograma 2 Gustavo Callou DEINFO/UFRPE 17
Procedimento Gustavo Callou DEINFO/UFRPE 18
Procedimento Sintaxe: Opcional void nome_procedimento(tipo parâmetro1,..., tipo parâmetro N) { } Corpo do procedimento; Gustavo Callou DEINFO/UFRPE 19
Procedimento Exemplo: Exibir na tela uma linha com 20 asteriscos. void linha(){ int i; for (i = 1; i <= 20; i++) printf( * ); printf( \n ); } Gustavo Callou DEINFO/UFRPE 20
Procedimento Exemplo de chamada a um procedimento void main(){ int i; linha(); /* escreve uma linha de asteriscos */ puts( Numeros entre 1 e 5 ); linha(); /* escreve outra linha de asteriscos */ } for(i = 1; i <= 5; i++) printf( %d\n, i); linha(); /* escreve outra linha de asteriscos */ Gustavo Callou DEINFO/UFRPE 21
Função Gustavo Callou DEINFO/UFRPE 22
Função Sintaxe: tipo_retorno nome_função (tipo parâmetro1,..., tipo parâmetron) { Corpo da função; return (valor_retorno); } Exemplo: Calcular o valor da soma de dois números reais. float soma(float a, float b) { float aux; aux = a + b; return aux; } Opcional Gustavo Callou DEINFO/UFRPE 23
Função float soma(float a, float b) { float aux; aux = a + b; return aux; } void main () { float x,y,z; printf( Digite X: ); scanf ( %f, &x); printf( Digite Y: ); scanf ( %f, &y); z = soma(x,y); printf( Soma: %f,z); } Chamada a uma função Gustavo Callou DEINFO/UFRPE 24
Exercício 1 Faça um programa para fazer conversão de temperaturas de graus Fahrenheit para graus Celsius e vice-versa. O programa deverá apresentar os seguintes subprogramas: a) Função para converter temperaturas em graus Fahrenheit para graus Celsius. Esta função receberá como parâmetro o valor da temperatura em graus Fahrenheit a ser convertido e deverá calcular e retornar para o programa o valor correspondente em graus Celsius. b) Função para converter temperaturas em graus Celsius para graus Fahrenheit. Esta função receberá como parâmetro o valor da temperatura em graus Celsius a ser convertido e deverá calcular e retornar o valor correspondente em graus Fahrenheit.
Exercício 2 Uma função para calcular X elevado a Y. Esta função deve receber como parâmetro dois números (X real e Y inteiro maior ou igual a zero) e deve calcular e retornar o valor de X Y.