• Nenhum resultado encontrado

Linguagem de Programação ADS LP 02 Funcoes

N/A
N/A
Protected

Academic year: 2018

Share "Linguagem de Programação ADS LP 02 Funcoes"

Copied!
34
0
0

Texto

(1)

Funções

(2)

Por quê usar funções?

Evitar a repetição de um conjunto de

instruções que ocorre várias vezes no

programa

Modularizar o programa

(3)

Estruturas das Funções

em C

tipo nome-da-função([lista-de-parâmetros]) {

corpo da função

}

tipo: especiica o tipo do valor que a função

retorna

lista-de-parâmetros: uma lista separada por

vírgulas das variáveis que recebem os valores dos argumentos passados quando a função é

chamada. Se não houver parâmetros, void ou

(4)

Exemplo

#include <stdio.h>

void linha(void); //protótipo da função linha()

int main() { linha();

printf("\n\t\t\t\tUm programa em C\n"); linha();

return 0; }

void linha(void) { int i;

for(i = 1; i <= 80; i++) printf("-");

(5)

Protótipos de funções

O protótipo de uma função informa ao

compilador o tipo e o nome da função,

além do número, ordem e tipos de seus

argumentos

O compilador usa protótipos de funções

(6)

Chamando Funções

Do mesmo modo que chamamos uma

função da biblioteca C (

printf()

,

scanf()

, etc.) chamamos nossas

próprias funções como

linha()

Os parênteses que seguem o nome são

(7)

Chamando funções

Comando

Comando

Chamada de F1 Comando

Comando

Chamada de F2 Comando

Comando

Comando

Chamada de F3 Comando Comando final Comando Comando Comando Comando Comando final Fluxo de

controle Função main Função F1

Função F3

(8)

Escopo de variáveis

 Variáveis que são declaradas dentro de uma função e são conhecidas somente dentro do seu próprio bloco, conhecidas como

variáveis locais

 Um bloco começa quando o compilador encontra uma chave de abertura ({) e

termina quando o compilador encontra uma chave de fechamento (})

(9)

Passando Argumentos para

Funções

 O mecanismo usado p/ transmitir informações a uma função é chamado argumento

 O argumento também é chamado de parâmetro

formal da função

 O argumento é uma nova variável que

armazena a informação passada p/ a função

 Funciona exatamente como uma variável local  É criada quando a função inicia sua execução e

(10)

Passando Argumentos para

Funções

Argumentos - chamada por valor

 Em C, todos os argumentos de funções são

passados “por valor”, exceto vetores

 Isto signiica que à função chamada é dada

uma cópia dos valores dos argumentos, e ela cria outras variáveis temporárias para armazenar estes valores

 A função chamada não pode alterar o valor

(11)

Exemplo

#include <stdio.h>

void dobro(int);

int main() { int n;

printf("Informe um número inteiro: "); scanf("%d", &n);

dobro(n);

printf("Número informado %d\n", n); return 0;

}

void dobro(int x) { x = x * 2;

(12)

Funções que Devolvem um

Valor

O comando

return

 Causa uma saída imediata da função onde

ele está contido, ou seja, termina a função

 Pode ser usado para devolver um valor

 Todas as funções, exceto aquelas do tipo void,

devolvem um valor

 Este valor é explicitamente especiicado pelo

comando return

 O comando return faz com que a chamada à

função que contém o return seja substituída

(13)

Funções que Devolvem um

Valor

 Desde que uma função não seja declarada como void, ela pode ser usada como um

operando em qualquer expressão

 x = pow(y,2);

 if (log10(x) > 5) ...

 for(ch=getchar(); isdigit(ch); ) ...;

 printf("Valor absoluto de %d = %d", x, abs(x));

 Entretanto, uma função não pode receber uma atribuição

(14)

Exemplo

#include <stdio.h>

int maior(int, int); //protótipo da função maior()

int main() { int n1, n2;

printf("Digite dois números inteiros: "); scanf("%d %d", &n1, &n2);

printf("O maior é: %d\n", maior(n1, n2)); return 0;

}

int maior(int a, int b) { if (a > b)

(15)

Vetores como Argumentos

de Funções

 Chamamos a função com o nome do vetor sem nenhum índice

 Passamos o endereço do 1o elemento do vetor para a função

 Exemplo:

int main() { int vet[10]; ...

(16)

Vetores como Argumentos

de Funções

 Se a função recebe um vetor, o parâmetro formal pode ser um ponteiro, um vetor

dimensionado, ou um vetor sem dimensão

void fun(int *a) void fun(int a[10])void fun(int a[])

{ { {

. . . . . . . . .

} } }

 Esses 3 métodos dizem ao compilador que um

ponteiro para um inteiro está sendo recebido

(17)

Matrizes como argumentos

de funções

 Se a função recebe uma matriz bidimensional como argumento, o número de elementos da segunda dimensão (colunas) deve ser incluído no cabeçalho da função

 Exemplo: suponha

a

uma matriz 4 x 5

void fun(int a[4][5]) void fun(int a[][5]) void fun(int (*a)[5])

{ { {

... ... ...

(18)

Matrizes como argumentos

de funções

 A partir do C99 é possível deinir a dimensão de uma matriz que é o parâmetro de uma

função também através de parâmetros

 Exemplo: protótipo de função com uma matriz de dimensão variável como parâmetro

int soma2d(int lin, int col, int v[lin][col]);

 Ou omitindo o nome dos parâmetros

int soma2d(int, int, int [*][*]);

(19)

Passando Argumentos

para

main()

A função

main()

também pode receber

argumentos que são passados na

chamada ao programa

Forma geral:

int main(int argc, char * argv[]) { ...

}

 argc: indica o número de argumentos

(20)

Exemplo: imprimindo os

argumentos da

main()

#include <stdio.h>

int main(int argc, char * argv[]) {

int i;

printf("Argumentos da main():\n"); for(i = 0; i < argc; i++) {

printf("argv[%d] = %s\n", i, argv[i]); }

return 0;

(21)

Variáveis Estáticas

 As variáveis da classe static por um lado se

assemelham às locais, pois são conhecidas somente das funções que as declaram, e por outro lado se assemelham às globais, pois

mantêm seus valores mesmo quando a função termina

 São criadas em tempo de compilação

 São inicializadas com zero por falta de

(22)

Exemplo de variável

estática

#include <stdio.h>

void fun(int);

int main() { fun(10); fun(20); fun(30); return 0; }

void fun(int y) { static int x; x += y;

(23)

O Pré-processador

Programa que examina o código-fonte

em C e executa modiicações nele antes

da compilação com base em instruções

chamadas

diretivas

 Diretivas seriam as instruções que o

pré-processador executa

 Estão contidas no programa-fonte, mas não

do programa que compilamos

O pré-processador faz parte do

(24)

O Pré-processador

Já usamos a diretiva

#include

para

incluir arquivos de cabeçalho em nossos

programas

Conjunto de diretivas mais comum

#define

#undef

#include

#if

#ifdef

#ifndef

#else

#elif#endif

(25)

O Pré-processador

As diretivas podem ser colocadas em

qualquer lugar do programa

 Geralmente são escritas no início do

programa (antes da main) ou antes de uma função em particular

Elas se aplicam somente do ponto onde

(26)

A diretiva #define

Em sua forma mais simples é usada para

deinir constantes simbólicas com nomes

apropriados

Exemplo:

#define PI 3.14

 O nome que segue a palavra #define é

chamado identiicador

 A frase escrita após o identiicador é

chamado texto

identiicador

(27)

A diretiva #define

Quando o pré-processador encontra uma

diretiva, procura abaixo dela seu

identiicador e o substitui pelo seu texto

Por convenção, o identiicador é escrito

em letras maiúsculas

Não há ; após a diretiva

Cada diretiva deve ser escrita em uma

(28)

A diretiva #define

Por meio da diretiva

#define

podemos

deinir textos ou instruções completas

com um nome indicativo

Por exemplo:

#define ERRO printf("\t\tERRO!\n")

...

(29)

Macros

Diretivas

#define

que aceitam

argumentos

Exemplo:

#define PRN(x) printf("%d\n",x)

...

PRN(n1);

Na deinição de uma macro não pode

haver espaço em branco no identiicador

(30)

O uso de parênteses em

macros

A falta de parênteses em macros pode

provocar erros consideráveis

Exemplo:

#define SOMA(x,y) x + y

...

z = 10 * SOMA(3,4); 

Solução:

#define SOMA(x,y) (x + y)

(31)

O uso de parênteses em

macros

Parênteses envolvendo o texto não

solucionam todos os problemas

Exemplo:

#define PROD(x,y) (x * y)

...

z = PROD(2+3,4); 

Solução:

#define PROD(x,y) ((x) * (y))

(32)

Deinindo macros usando

outras macros

Uma macro pode ser deinida usando

outra macro

Por exemplo:

#define PI 3.14

#define SQ(x) ((x) * (x))

(33)

Macros vs. Funções

Macros

 Simples substituições dentro do programa  Execução mais rápida

 Código do programa aumentado

 O tipo de argumentos em macros não é

(34)

Referências

DEITEL, H.M.; DEITEL, P.J.. “Como

Programar em C”. 2. ed., LTC, 1999.

SHILDT, H.. “C Completo e Total”. 3. ed.,

Makron Books, 1996.

PRATA, Stephen. “C Primer Plus”. 5. ed.,

Referências

Documentos relacionados

Foram admitidas as seguintes simplificações, que podem oscilar e assim modificar um determinado valor, para mais ou para menos, e que o interessado em um caso

11:45 - 11:55 Paciente usuário de lentes de contato aparece no consultório com grande hiperemia conjuntival, úlcera de córnea e hipópio. Qual a

· Indicações sobre cuidados médicos urgentes e tratamentos especiais necessários Não existe mais nenhuma informação relevante disponível.. 5 Medidas de combate

Composição específica da ictiofauna na Gamboa do Perequê nos meses amostrados, com as freqüências absolutas observadas em número de exemplares (Obs), porcentagens

78 Figura 3.27 Padrão de difração de pós obtido para o complexo ácido nalidíxico:Zn através (a) de síntese por solução, em comparação com os difractogramas

No presente estudo 75 pacientes eram portadores de prótese dentária, porém 14 apresentaram quadro clínico compatível com queilite angular, totalizando 19%; um (4%) apresentou a

Resultados: Os subtipos mais comuns de TBEB, classificados pelas características na broncoscopia, foram tumoral e granular (em 22,2% para ambas) A baciloscopia de escarro

O luxuoso Contur design da DORMA abriga a avançada tecnologia eletromagnética do operador CS 80 MAGNEO para portas deslizantes, que opera com baixo consumo de energia..