Vous êtes sur la page 1sur 45

BCC 201 - Introduo ` Programao I ca a ca

Procedimentos e Funes co
Guillermo Cmara-Chvez a a UFOP

1/1

Funoes e Procedimentos I c

Procedimentos so funes estruturas que agrupam um a co conjunto de comandos, que so executados quando o a procedimento chamado. e

2/1

Funoes e Procedimentos II c

Funes so procedimentos que retornam um unico valor ao co a nal de sua execuo. ca


x = sqrt (4);

3/1

Porque utilizar funoes? I c

Evitar que os blocos do programa quem grandes demais (mais dif ceis de entender); Facilitar a leitura do programa-fonte; Separar o programa em partes(blocos) que possam ser logicamente compreendidos de forma isolada.

4/1

Porque utilizar funoes? II c

Permitir o reaproveitamento de cdigo j constru (por o a do voc ou por outros programadores); e Evitar que um trecho de cdigo seja repetido vrias vezes o a dentro de um mesmo programa; Permitir a alterao de um trecho de cdigo de uma forma ca o mais rpida. a

5/1

Declarando uma funo? I ca

Uma funo possui o seguinte formato: ca


t i p o n o m e d a f u n c o ( t i p o <p a r a m e t r o 1 >, a t i p o <p a r a m e t r o 2 > , . . . , t i p o <p a r a m e t r o n >) { comandos ; r e t u r n ( v a l o r de r e t o r n o ) ; }

6/1

Declarando uma funo? II ca

7/1

Declarando uma funo? III ca

Toda funo deve ter um tipo. ca Esse tipo determina qual ser o tipo de seu valor de retorno. a Os parmetros de uma funo determinam qual ser o seu a ca a comportamento (como se fosse uma funo matemtica, onde ca a o parmetro determina o valor da funo). a ca

8/1

Declarando uma funo? IV ca

Uma funo pode no ter parmetros, basta no ca a a a inform-los. a A expresso contida dentro do comando return chamado de a e valor de retorno, e corresponde a resposta de uma determinada funo. ca
Esse comando sempre o ultimo a ser executado por uma e funo, e nada aps ele ser executado. ca o a

As funes devem ser declaradas fora do programa co principal (main()).

9/1

Declarando uma funo? V ca

Encontrar o maior de dois nmeros u

10/1

Declarando uma funo? VI ca

11/1

Declarando uma funo? VII ca

12/1

Declarando uma funo? VIII ca

13/1

Declarando uma funo? IX ca

14/1

Declarando uma funo? X ca

15/1

Declarando uma funo? XI ca

16/1

Declarando uma funo? XII ca

17/1

Declarando uma funo? XIII ca

18/1

Exemplo de funo I ca
A funo abaixo soma dois valores passados como parmetro ca a
i n t soma ( i n t a , i n t b ) { int c = 0; c = a + b; return (c ); }

i n t soma ( i n t a , i n t b ) { return (a + b ); }

19/1

Invocando uma funo I ca

Uma forma clssica de realizarmos a invocao (ou chamada) de a ca uma funo atribuindo o seu valor a uma varivel. ca e a
v a r i a v e l = funcao ( parametros ) ;

Podemos invocar uma funo em qualquer lugar onde far ca amos a leitura de uma varivel, mas nunca a escrita. Ex: a
p r i n t f ( " Soma de a e b : %d" , soma ( a , b ) ) ;

O que podemos entender por escrita?

20/1

Invocando uma funo II ca


Na seguinte instruo realizado a leitura do valor de y e logo ca e atribu ` varivel x, neste ponto executado a escrita do valor do a a e de y em x.
x = y;

Vejamos o seguinte programa. A terceira instruo est errada. ca a


int a = 5, b = 3, z ; z = soma ( a , b ) ; soma ( a , b ) = 8 ; // ERRADO!

21/1

Invocando uma funo III ca

As variveis passadas como parmetros indicam quais so os a a a valores com os quais a funo ir trabalhar. ca a Esses valores so copiados para os parmetros da funo, a a ca que pode manipul-los. a Os parmetros passados pela funo no a ca a necessariamente possuem os mesmos nomes que os parmetros que a funo espera. a ca

22/1

Invocando uma funo IV ca

i n t soma ( i n t a , i n t b ) { r e t u r n ( a+b ) ; } i n t main ( ) { i n t x = 10 , y = 30 , z ; z = soma ( x , y ) ; p r i n t f ( " Soma de %d e %d = %d" , x , y , z ) ; // E s t c o r r e t o ?? a p r i n t f ( " Soma de %d e %d = %d" , a , b , z ) ; }

O segundo printf est errado. As variveis a e b so variveis a a a a privadas que somente pertencem a funo e no tem como ter ca a acesso a elas.

23/1

O tipo void

Tipo especial, utilizado principalmente em funes co Representa o nada


uma varivel desse tipo armazena contedo indeterminado e a u uma funo desse tipo retorna um contedo indeterminado. ca u

24/1

Procedimento em C I

Os procedimentos em linguagem C so funes do tipo void. a co O procedimento abaixo imprime um nmero que passado u e como parmetro a
v o i d i m p r i m e ( i n t numero ) { p r i n t f ( " Numero %d \n" , numero ) ; }

Podemos ignorar o valor de retorno de uma funo e, para ca esta chamada, ela ser equivalente a um procedimento. a

25/1

A funo main ca

O programa principal na verdade uma funo, ele uma e ca e funo especial. ca Ele invocada automaticamente pelo programa quando esse e inicia sua execuo e possui um tipo xo (int). ca O comando return informa ao sistema operacional se o programa funcionou corretamente ou no. a O padro que um programa retorne zero caso tenha a e funcionado corretamente ou qualquer outro valor caso contrrio. a

26/1

Declarando uma funo I ca

Declarar uma funo sem a sua implementao como ca ca e declar-la com a implementao a ca Para declar-la sem a implementao basta substituir as a ca chaves e seu contedo por ponto e v u rgula.
t i p o n o m e d a f u n c a o ( t i p o <p a r a m e t r o 1 >, t i p o <p a r a m e t r o 2 >, . . . , t i p o <p a r a m e t r o n >);

27/1

Declarando uma funo II ca

#i n c l u d e < s t d i o . h> i n t soma ( i n t a , i n t b ) ; i n t main ( ) { int c , x , y ; p r i n t f ( " Inserir dois n meros \n" ) ; u s c a n f ( " %d %d" , &x , &y ) ; p r i n t f ( "A soma eh %d" , soma ( x , y ) ) ; } i n t soma ( i n t a , i n t b ) { r e t u r n ( a+b ) ; }

28/1

Exemplos I

Crie uma funo para determinar se um nmero ou no par. ca u e a

29/1

Exemplos II
i n t EhPar ( i n t num ) ; i n t main ( ) { int x ; p r i n t f ( " Inserir um n mero \n" ) ; u s c a n f ( " %d" , x ) ; i f ( EhPar ( x ) = = 1 ) p r i n t f ( " Numero par ! \n" ) ; else p r i n t f ( " Numero nao eh par ! \n" ) ; } i n t EhPar ( i n t num ) { i f ( num % 2 == 0 ) r e t u r n 1 ; // V e r d a d e i r o else r e t u r n 0 ; // F a l s o }
30/1

Exemplos III

Leia dois catetos e (enquanto no for digitado zero na leitura a do primeiro cateto) mostre a hipotenusa. Crie, alm da funo e ca para calcular a hipotenusa, o procedimento para mostrar o valor da hipotenusa.

31/1

Exemplos IV
double P i t a g o r a s ( double cat1 , double cat2 ) ; void Mostrar ( double hip ) ; i n t main ( ) { double cat1 , cat2 , hip ; while (1) { p r i n t f ( " Inserir primeiro cateto (0 para finalizar )\ n" ) ; s c a n f ( " %lf " , &c a t 1 ) ; i f ( cat1 = = 0) break ; p r i n t f ( " Inserir segundo cateto \n" ) ; s c a n f ( " %lf " , &c a t 2 ) ; hip = P i t a g o r a s ( cat1 , cat2 ) ; Mostrar ( hip ) ; } return 0; }
32/1

Exemplos V

double P i t a g o r a s ( double cat1 , double cat2 ) { r e t u r n s q r t ( pow ( c a t 1 , 2 ) + pow ( c a t 2 , 2 ) ) ; } void Mostrar ( double hip ) { p r i n t f ( " Hipotenusa : %lf \n" , h i p ) ; }

33/1

Exemplos VI

Determine se um nmero inteiro ou no primo, criando uma u e a funo para isso. Sair com zero. ca

34/1

Exemplos VII
#i n c l u d e < s t d i o . h> i n t EhPrimo ( i n t numero ) ; i n t main ( ) { i n t num , p r i m o ; while (1) { p r i n t f ( " Inserir numero (0 para finalizar )\ n)" ; s c a n f ( " %d" , &num ) ; i f ( num = = 0 ) b r e a k ; i f ( EhPrimo ( num ) = = 1 ) p r i n t f ( " Numero eh primo ! \n" ) ; else p r i n t f ( " Numero nao eh primo ! \n" ) ; } return 0; }
35/1

Exemplos VIII

i n t EhPrimo ( i n t numero ) { i n t cont = 0; i ; f o r ( i = 1 ; i <= numero ; i ++) { i f ( numero % i = = 0 ) c o n t ++; } i f ( cont = = 2) r e t u r n 1 ; // V e r d a d e i r o else r e t u r n 0 ; // F a l s o }

36/1

Variveis locais e variveis globais I a a

Varivel local a
declarada dentro de uma funo, e ca ela existe somente dentro de uma funo, ca aps o trmino da execuo da funo, ela deixa de existir. o e ca ca

37/1

Variveis locais e variveis globais II a a

Varivel global a
ela declarada fora da funo (ou seja, no mesmo lugar onde e ca registros (struct), tipos enumerados (enum) e procedimentos so declarado) a Existe dentro de todas as funes e qualquer co procedimento/funo pode alter-las. ca a

38/1

Variveis locais e variveis globais III a a

39/1

Variveis locais e variveis globais IV a a


Ex. varivel global: a
#i n c l u d e < s t d i o . h> int var global ; void IncrementaGlobal ( int a ) ; i n t main ( ) { int i ; s c a n f ( " %d" , & i ) ; p r i n t f ( " variavel global eh %d \n" , v a r g l o b a l ) ; IncrementaGlobal ( i ); p r i n t f ( " variavel global eh %d \n" , v a r g l o b a l ) ; } v o i d I n c r e m e n t a G l o b a l ( i n t a ){ v a r g l o b a l += a ; // v a r g l o b a l = v a r g l o b a l + a }
40/1

Variveis locais e variveis globais V a a

Notas:
evite utilizar variveis globais a variveis globais so sinais de um mau design a a existe o problema que duas funes modiquem o valor da co varivel no mesmo instnte a a

41/1

Variveis locais e variveis globais VI a a


Outro exemplo:
#i n c l u d e < s t d i o . h> i n t v a r g l o b a l = 10; void MostraGlobal e Local ( int , int ) ; i n t main ( ) { int i , j ; p r i n t f ( " Inserir dois numero :" ) ; s c a n f ( " %d %d" , &i , &j ) ; MostraGlobal e Local ( i , j ); p r i n t f ( " Main -> variavel global eh : %d \n" , var global ); p r i n t f ( " Main -> variavel local eh : %d \n" , i ) ; return 0; }
42/1

Variveis locais e variveis globais VII a a

v o i d M o s t r a G l o b a l e L o c a l ( i n t v a r g l o b a l , i n t num ) { p r i n t f ( " Funcao -> Privada : %d \n" , v a r g l o b a l ) ; p r i n t f ( " Funcao -> Outra Privada : %d \n" , num ) ; p r i n t f ( " Funcao -> GlobalPrivada : %d \n" , : : v a r g l o b a l ) ; v a r g l o b a l += 5 ; num += 5 ; : : v a r g l o b a l += 5 ; }

43/1

Variveis locais e variveis globais VIII a a

Seria mostrado na tela:


I n s e r i r d o i s numero : 5 0 60 Funcao>P r i v a d a : 50 Funcao>Outra P r i v a d a : 60 Funcao>G l o b a l P r i v a d a : 10 Main>v a r i a v e l g l o b a l eh : 15 Main>v a r i a v e l l o c a l eh : 50

44/1

FIM

45/1