Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introdução à Linguagem de Programação Prof. George Candeia Ciência da Computação Funções Uma função, em C, é uma sub-rotina que executa suas instruções dentro de um bloco de código. Por quê utilizar funções em C? • É uma linguagem orientada a funções; • Ajuda na organização, legibilidade e estruturação do código; • Serve para dividir grandes tarefas em pequenas tarefas; • Reduz o código, já que esse mesmo bloco de código pode ser utilizado várias vezes; • Um programa bem organizado e estruturado, em C, utiliza a função main() como um gerenciador de várias outras funções. 3 Funções Introdução Exemplo de uso de funções: 4 Funções Introdução main() instruções; função1(); instruções; função2(); return; função1() instruções; função3(); instruções; return; função2() instruções; função3(); return; função3() instruções; instruções; return; tipo_retorno nome_função(lista de parâmetros) { corpo da função } tipo_retorno: especifica o tipo de dado que será retornado pelo comando return. Caso não seja especificado nenhum tipo, o compilador retorna um inteiro! lista de parâmetros: lista com tipos e nomes de variáveis separados por vírgula. Pode ser vazia mas, ainda assim, os parênteses são necessários. 5 Funções sintaxe /* Uma função para somar três números inteiros */ 6 Funções exemplo /* A mesma função otimizada */ 7 Funções exemplo /* Exemplo de uso */ 8 Funções exemplo /* Uma função para saber se um número é ímpar */ 9 Funções exemplo /* Exemplo de uso */ 10 Funções exemplo As variáveis possuem um escopo, ou seja, elas deixam de existir quando estão fora do seu escopo. Variáveis Locais São variáveis que são declaradas dentro de uma função ou bloco de código. Uma variável local é criada a partir do momento em que é declarada e é destruída quando a execução do seu bloco de código termina. Lembrando que um bloco de código começa com { e termina com }. 11 Escopo de variáveis Introdução Exemplo: 12 Escopo de variáveis Variáveis Locais Exemplo: 13 Escopo de variáveis Variáveis Locais Exemplo: 14 Escopo de variáveis Variáveis Locais São variáveis que são declaradas no início do código, fora de qualquer função ou bloco de código e são reconhecidas pelo programa inteiro, podendo ser usadas por qualquer parte do código. 15 Escopo de variáveis Variáveis Globais São variáveis que são declaradas na definição dos parâmetros das funções. Após a declaração, elas pertencem ao escopo da função, ou seja, são variáveis locais da função. 16 Escopo de variáveis Parâmetros Formais A linguagem C possui dois modificadores de tipo de acesso que alteram a forma como as variáveis são acessadas ou modificadas. Esses modificadores são const e volatile e devem preceder os tipos que eles modificam. 17 Escopo de variáveis Modificadores de tipo de acesso As variáveis const não podem ser alteradas por seu programa, mas podem ser inicializadas. O modificador const pode ainda ser utilizado para proteger um objeto apontado por um argumento de uma função. Utilizando o const, mesmo que a variável seja passada por referência, a função não poderá alterar o valor contido naquele endereço de memória. 18 Escopo de variáveis const 19 Escopo de variáveis const Exemplo: 20 Escopo de variáveis const Dessa forma não compila!!! Não é possível alterar a string! 21 Escopo de variáveis const O modificador volatile é utilizado quando desejamos informar ao compilador que uma variável pode ter o seu valor alterado de forma não explícita. Durante a compilação, o compilador pode otimizar o código e achar que uma variável não é mais modificada em um determinado trecho de código, deixando de examina-la, porém, ela pode estar sendo alterada sem nenhum comando de atribuição que esteja explícito no programa, gerando assim um erro de programação. Um comando volatile faz com que o compilador sempre examine o valor dessa variável toda vez que ela for referenciada no código. 22 Escopo de variáveis volatile Antes da otimização: Depois da otimização: 23 Escopo de variáveis volatile A passagem de variáveis como parâmetros de uma função pode ser feita de duas formas: • Passagem por valor; • Passagem por referência; 24 Funções Passagem de parâmetros Quando realizamos uma passagem de variável por valor, somente o valor da variável é passada como parâmetro da função. Dessa forma, o valor da variável original é mantido. Mesmo que a função faça modificações na variável recebida como parâmetro, o valor da variável original é mantido. Isto ocorre porque as modificações feitas dentro da função afetam apenas as variáveis que pertencem ao escopo da função. 25 Funções Passagem por valor Exemplo: 26 Funções Passagem por valor Saída: 27 Funções Passagem por valor Quando realizamos uma passagem de variável por referência, o endereço da variável é passada como parâmetro da função. Dessa forma, o valor da variável original pode ser alterado. Para isso, o parâmetro da função deve ser um ponteiro para o tipo de dado que será passado. Com o endereço da variável original, a função pode fazer modificações no valor que está armazenado nesse endereço de memória. 28 Funções Passagem por referência Exemplo: 29 Funções Passagem por referência Saída: 30 Funções Passagem por referência Um protótipo ou assinatura de uma função, é uma declaração que omite todo o corpo da função. Essa declaração deve vir no início do código e cada assinatura deve terminar com um ponto e vírgula. Os protótipos passam para o compilador informações sobre a função, o tipo de retorno e os argumentos. 31 Funções Protótipos Exemplo: 32 Funções Protótipos Para passar uma matriz, só é possível utilizando a passagem por referência. Isto se explica porque o próprio nome da variável matriz aponta para a sua primeira posição, ou seja, um endereço de memória. 33 Funções Passando matrizes como parâmetros A passagem de matrizes estáticas como parâmetro de uma função pode ser feita de três formas para matrizes unidimensionais: • Especificando sua dimensão; • Sem especificar sua dimensão; • Passando como um ponteiro. Para matrizes com mais de uma dimensão, somente as duas primeiras formas são válidas! 34 Funções Passando matrizes como parâmetros Declarando sua dimensão: 35 Funções Para matrizes unidimensionais Cuidado! Se o tamanho passado for maior que o declarado na função, irá invadir memória!!! Sem declarar sua dimensão: 36 Funções Para matrizes unidimensionais Passando como ponteiro: 37 Funções Para matrizes unidimensionais Declarando sua dimensão: 38 Funções Para mais de uma dimensão Sem declarar sua dimensão: 39 Funções Para mais de uma dimensão Uma recursividade é quando, em uma rotina, existe uma chamada à essa mesma rotina, ou seja, uma rotina chamando a si mesma. Devemos ter bastante cuidado com recursividade, pois esse tipo de procedimentopode gerar uma laço de repetição infinito! 40 Funções Recursividade Exemplo de laço infinito com recursividade: 41 Funções Recursividade Para evitar laços infinitos, devemos estabelecer uma condição de parada para a recursividade ou fazer com que a recursividade acabe automaticamente após algumas repetições. 42 Funções Recursividade Exemplo: Para calcular o fatorial de um número: 6! = 6*5*4*3*2*1 6! = 6*5! X! = X*(X-1)! Como seria uma função para calcular o fatorial de um número, utilizando recursividade? 43 Funções Recursividade 44 Funções Recursividade Cuidado com o uso: 45 Funções Recursividade Exemplo: Para calcular uma base x elevada a um expoente y: 46 Funções Recursividade
Compartilhar