Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introdução à Ciência da Computação Disciplina: 113913 Professores: André Barros de Sales Georges Amvame-Nze Universidade de Brasília – UnB Campus Gama 8. FUNÇÕES E PROCEDIMENTOS Funções e Procedimentos � Às vezes, como programadores temos de desenvolver programas para resolver problemas muito complicados, o que provavelmente envolve programas grandes e complexos. Isso costuma implicar em códigos mais difíceis de ler e em repetição de trechos de código ao longo do programa. Funções e Procedimentos Imagine uma fábrica de automóveis. Ela projeta e monta os carros, mas não fabrica os pneus e os vidros, por exemplo. Ela os produz em outros lugares, pois seria complicado manter uma linha de montagem de veículos, uma fábrica de pneus e uma de vidros juntas e gerir isso tudo. Em programação podemos fazer um processo análogo, “terceirizando” a solução de um pedaço de nosso problema, repassando o trabalho para uma funções do programa, com o qual nos preocupamos em outro momento. Funções e Procedimentos � Na matemática também fazemos algo análogo para simplificarmos a representação de um problema. Um exemplo disso é quando escrevemos 2²³ ao invés de 2x2x...(outras 19 vezes)...x2x2. Podemos ver a função 2²³ como um artifício que torna a exposição do problema mais clara do que escrever multiplicativamente. � Como fazer isso em programação? Funções e Procedimentos � Em programação podemos dividir os programas em programas menores e de mais fácil compreensão, dividindo também um problema difícil em vários problemas mais fáceis, juntando tudo em um programa principal e formando uma solução completa. � A maioria das linguagens de programação oferece esse suporte e especifica formalmente a sintaxe e semântica necessários para realizar tal divisão. Uma função ou procedimento consiste em um subprograma que pode atuar sobre dados e retornar um valor. Todo programa em C tem pelo menos uma função (a main) que pode chamar outras funções ou procedimentos, algumas das quais, podem ainda chamar outras e assim por diante. Funções e Procedimentos Toda função tem seu próprio nome, e quando este nome é encontrado a execução do programa é desviado para o corpo da função. Quando ela retorna, a execução recomeça na linha seguinte a chamada da função. int main(void ) { instrução; função1( ); instrução; função2( ); } função1 { instrução; return..; } função2 { instrução; função3( ); return ..; } função3 { instrução; return..; } Programa Funções e Procedimentos Uma função ou procedimento bem elaborada efetua uma tarefa específica, conclui corretamente a execução e depois retorna ao programa. Funções e Procedimentos Exemplo Exemplo - Cada função tem que ter um nome único, o qual serve para a sua invocação em algum lugar no programa a que pertence. - Uma função pode ser invocada a partir de outras funções. - Uma função deve realizar UMA ÚNICA TAREFA bem definida. - Uma função deve comportar-se como uma caixa preta. - O código de uma função deve ser o mais independente possível do resto do programa. - Uma função pode retornar, para a entidade que a invocou, um valor como resultado do seu trabalho. Características de uma Função ou Procedimento TIPOS DE OBJETOS DECLARAÇÃO DE VARIÁVEIS • Variáveis locais são internas as funções ou blocos • Parâmetros formais são parâmetros de funções • Variáveis globais estão fora de todas as funções VARIÁVEIS LOCAIS • Só podem ser referenciadas dentro da função ou no bloco onde foram declaradas • Só existem dentro do bloco de instrução onde foram declaradas, quando este estiver sendo executado • Elas podem ser declaradas no início de qualquer bloco de instrução e não somente no início das funções PARÂMETROS FORMAIS • São variáveis que recebem os valores dos argumentos das funções e devem ser do mesmo tipo • Comportam-se como qualquer outra variável local dentro de uma função VARIÁVEIS GLOBAIS • São reconhecidas dentro de todo o contexto onde foram declaradas • Estão declaradas fora das funções • São armazenadas em área específica da memória (devendo ser evitadas) � no curso elas não devem ser usadas TIPOS DE OBJETOS Pode-se passar variáveis para a função, assim como também pode-se declarar variáveis locais dentro do corpo da função. Estas variáveis recebem esta denominação porque só existem dentro da função, pois quando a função retorna (ou termina) elas deixam de estar disponíveis. Os parâmetros passados para a função também são considerados variáveis locais. Por exemplo: Desenvolvimento de FUNÇÕES #include<stdio.h> float converter(float tempfar2); // protótipo int main(void) { float tempfar,tempcel; printf(“Temp.em Fahrenheit: ”); scanf(“%f”,&tempfar); tempcel = converter(tempfar); printf(“Em Celsius %f”, tempcel); return 0; } // Definição do corpo da função float converter(float tempfar2) { float tempcel; tempcel = ((tempfar2–32)*5)/9; return tempcel; } A declaração, denominada protótipo da função, informa ao compilador qual o seu tipo de retorno, seu nome e os seus parâmetros, enquanto que a sua definição diz o que ela executa (faz). O protótipo da função deve ser usado quando a função é definida após a sua chamada em outra função, com isso o compilador sabe que essa função existe. O protótipo da função é uma instrução, o que significa que ele é encerrado com um ‘;’. <tipo retorno> <identificador> (<lista parâmetros>); A <lista parâmetros> é uma lista de todos os parâmetros e seus respectivos tipos separados por ‘,’. Os parâmetros, o nome e o tipo de retorno devem ter compatibilidade entre a definição e a declaração da função. Funções Tarefas complicadas devem ser divididas em múltiplas funções para que possam ser chamadas uma a uma. Isso torna o código mais fácil de entender e manter. parâmetros – argumentos formais argumentos – argumentos reais VARIÁVEIS GLOBAIS As variáveis definidas fora das funções tem um escopo global e portanto podem ser acessadas a partir de qualquer função do programa (inclusive a main). Este tipo de variável é evitada (não usada) pelo fato de que tornam o código confuso e de difícil manutenção. As variáveis globais, quando forem extremamente necessárias, devem ser declaradas em apenas um arquivo ( .c ou .cpp) e usadas como externas (extern) nos outros. Desenvolvimento de FUNÇÕES }programadores usam estes termos indistintamente COMANDO return As funções retornam um valor ou void (nenhum valor). Para que elas retornem um valor, insira a palavra reservada return seguida pelo valor que se deseja retornar, sendo ele do mesmo tipo definido na função. Exemplo: return 5; return (x > 5); return (Outra( ) ); Com return a execução do programa retorna imediatamente para a função responsável pela chamada, e qualquer instrução que esteja após o return não é executada. É permitido mais que um return em uma função, mas uma vez que um deles seja executado a função é encerrada. Deve-se sempre retornar um valor compatível para uma função que não seja do tipo void. As funções void caracterizam os procedimento (função sem retorno) Desenvolvimento de FUNÇÕES Função como parâmetro de outra Função Embora seja possível, isto pode dificultar a leitura e a depuração do código. Por exemplo: resposta = (dobro(quadrado(raiz(valor)))); Mudanças feitas nos argumentos não afetam os valores da função de chamada, pois é feita uma cópia local para cada argumento. Essa cópia é tratada como uma outra variável qualquer. Esta forma de passagem de parâmetro recebe o nome de “argumento por valor” (ou passagem por valor). Desenvolvimento de FUNÇÕES O argumento por referência acontece quando é passado o endereço do argumento para o parâmetro (passando um ponteiro para o argumento). Com isso, as alterações efetuadas sobre o parâmetro afetarão também o valor da variável usada na chamada da função. Será visto mais a frente que os ponteiros sãopassados para as funções como qualquer outra variável. Desenvolvimento de FUNÇÕES PARÂMETROS PADRÃO Quando uma função possui algum parâmetro (na sua definição ou no protótipo) a função de chamada deve passar um valor quando a chamar, a menos que ela tenha um valor padrão. Um valor padrão é um valor a ser usado caso nenhum valor seja fornecido (informado). Exemplo: long int testar(int x = 10); // protótipo O cabeçalho da função não é alterado pela definição padrão. Exemplo: long int testar(int x) { ... } Desenvolvimento de FUNÇÕES Quando uma função possui um valor padrão todos os parâmetros posteriores desta função deverão ter parâmetros padrões definidos. Exemplo: long int testar(int par1, int par2=9, int par3=7); long int testar(int par1, int par2, int par3=5); long int testar(int par1=3, int par2=5, int par3=7); Só poderá ser atribuído um parâmetro padrão a par2 se atribuir a par3 e a atribuição poderá ser feita a par1 se for atribuído a par2 e par3. Desenvolvimento de FUNÇÕES Um procedimento consiste em uma função, porém sem retorno algum. O desenvolvimento de um procedimento na linguagem C é realizado seguindo todas as regras de criação e uso de funções, porém o seu tipo é sempre definido como void (tipo de dado não definido ou vazio), além de não existir nenhum tipo de retorno no corpo da função. Pode ser usado o comando return, mas não se deve retornar nada, ficando somente a instruções return seguida do ponto e vírgula. Exemplo: Observe um simples procedimento que calcula e já apresenta a média aritmética de dois valores apenas. void media (int valor1, int valor2); // protótipo Desenvolvimento de PROCEDIMENTOS Repetição com teste no Final 1) Leia a Sessão didática 9 – Funções. 2) Execute a Parte A do item D - Procedimentos. 3) Resolva a lista de exercícios sobre Funções. 4) Postem os programas no moodle até o dia 26/10/2009 às 17h30. 27 Damas, Luis M. Dias, Linguagem C Mizrahi, Victorine Viviane, Treinamento em Linguagem C++, módulo 1 2.ed, São Paulo, Pearson Prentice Hall, 2006 Deitel, C++: Como Programar Barbosa, Jair Alves, DESENVOLVIMENTO DE FUNÇÕES, Notas de aula. Referência de Criação e Apoio ao Estudo
Compartilhar