You are on page 1of 24

Pontifcia

Universidade Catlica do Rio Grande do Sul


Faculdade de Informtica - FACIN

LAPRO I
Prof. Dr. Rafael Garibotti

v Baseado no material cedido pelos Profs. Dr. Marco Mangan e Dr. Matheus Trevisan

AULA SOBRE:

FUNES

FORMA GERAL DE UMA FUNO


Sintaxe:
<tipo_retorno> <nomef> ([<lista_parmetros>]) {
<declaraes>
// variveis locais
<comandos>
return [<expresso>];
}
tipo_retorno: Tipo de retorno da funo, pode ser int, float, double, char e
outros. Mas o tipo especial void no retorna nenhum valor;
nomef: Nome da funo.
1

FORMA GERAL DE UMA FUNO


lista_parmetros:
Tambm chamada de lista de argumentos. opcional.
O nome do argumento sempre vem precedido de seu tipo.
Os diversos argumentos so separados por vrgula.
tipo1 arg1, tipo2 arg2, ..., tipon argn
return:
Indica o trmino da funo. Retorna o controle para o local onde a funo foi
ativada (chamada).
O tipo de dado da <expresso> deve ser do mesmo tipo que o definido no
<tipo_retorno> da funo.
Se o <tipo_retorno> da funo for void (no retorna nada) ento o valor da
<expresso> deve ser omitido.
O comando return tem capacidade de retornar apenas UM valor.

FORMA GERAL DE UMA FUNO


Exemplos de retornos de funes:
Corretos:

Incorretos:

void func1( ) {
<comandos>
}

void func1( ) {
<comandos>
return 0;
}

int func2( ) {
<comandos>
return 1;
}
void func3( ) {
<comandos>
return;
}

int func2( ) {
<comandos>
return;
}
float func3( ) {
<comandos>
}

FORMA GERAL DE UMA FUNO


Exemplo:
#include <stdio.h>
void func_teste(){
printf("Eu sou a funcao teste!!\n\n");
}
int main(){
printf("Sou a funcao principal e vou chamar a
func_teste\n");
func_teste();
printf("Agora sou eu, a funcao principal de novo!\n\n");
return 0;
}

ESCOPO DE VARIVEIS

ESCOPO DE VARIVEIS
Representa a rea do programa em que a varivel pode ser utilizada. As
variveis podem ser classificadas em:
Locais:
So as variveis declaradas dentro do corpo da funo. So visveis
somente nesta funo. O programa principal (main) e as demais funes
no podem utilizar esta varivel.
Tempo de vida: durao da funo.
Globais:
So as variveis declaradas fora das funes. Estas variveis so visveis por
todas as funes do programa.
Tempo de vida: enquanto o programa estiver sendo executado.

ESCOPO DE VARIVEIS
Exemplo:
#include <stdio.h>
int y=20; //variavel global
void funcao_teste(){
int x=80, z=30;
//variaveis locais funcao_teste
printf("Somos as variaveis x e z da funcao_teste: %d, %d\n", x, z);
y = 55;
printf("Sou a variavel y, global, na funcao_teste! %d\n",y);
}
int main(){
int x=10, z=15; //variaveis locais funcao principal
printf("Somos as variaveis x e z da funcao principal: %d, %d\n", x, z);
printf("Sou a variavel y, global, na funcao principal antes de chamar a funcao teste!
%d\n",y);
funcao_teste();
printf("Somos, de novo, as variaveis x e z da funcao principal: %d, %d\n", x, z);
printf("Sou a variavel y, global, na funcao principal depois de chamar a funcao teste!
%d\n",y);
return 0;
}

PARMETROS
As funes podem se comunicar de duas formas:
atravs das variveis globais: no recomendvel, evitar;
atravs dos parmetros existentes nas funes.
Os parmetros so categorizados em:
Parmetros formais:
So os parmetros utilizados na definio da funo. Devem ser
variveis e so tratadas como variveis locais.
Parmetros reais:
So os parmetros utilizados na chamada da funo. Podem ser tanto
variveis quanto valores. Os parmetros reais so utilizados para
inicializar os parmetros formais.

PARMETROS
Os parmetros formais e reais devem se corresponder em:
Nmero

Tipo de dado

Ordem

Exemplo:
#include <stdio.h>
float media(float x, float y, float z){ // Parmetros Formais
return (x+y+z)/3;
}
int main(){
float n1,n2,med;
printf ("Entre com duas notas:");
scanf ("%f %f", &n1, &n2);
med = media(n1, n2, 8.5); // Parmetros Reais
printf ("Media = %.2f\n", med);
return 0;
}

CHAMADAS DE UMA FUNO


As funes podem ser classificadas de dois tipos:
1. Procedimento: no retornam nada (void).
Exemplo:
#include <stdio.h>
void funcao_teste(int a, int b){
printf("A soma dos parametros eh %d\n",a+b);
}
int main(){
int x=10, z=15;
printf("Somos as variaveis x e z da funcao principal: %d, %d\n", x, z);
funcao_teste(x, z); //Sempre um comando isolado no local da chamada.
printf("Sou a funcao principal de novo!\n\n");
return 0;
}
9

CHAMADAS DE UMA FUNO


2. Funo: retorna um valor atravs do comando return.
Exemplo:
#include <stdio.h>
int funcao_soma (int a, int b){
int soma;
soma = a + b;
return soma;
}

Atribui o resultado a uma varivel


res = funcao_soma(x, y);
Atribui o resultado a uma condio
if ( funcao_soma(x,y) > 10 )
Atribui o resultado a uma sada de dados
printf(soma = %d, funcao_soma(x,y));

int main( ){
int x=10, y=15, resultado;
printf("Somos as variaveis x e y da funcao principal: %d, %d\n", x, y);
resultado = funcao_soma(x, y);
printf("Sou a funcao principal de novo e o resultado da soma eh %d!\n\n",
resultado);
return 0;
10
}

PASSAGEM DE PARMETROS
Existem dois mecanismos de passagem de parmetros:
1.

Passagem por valor (by value): passa uma cpia dos valores da chamada para os argumentos.
As alteraes nos argumentos no tem reflexo fora da funo. Os argumentos so de entrada:
s recebem valores.

Exemplo:
#include <stdio.h>
int produto(int x, int y) {
return x*y;
}
int main( ) {
int v1, v2;
printf ("Entre com dois valores:");
scanf ("%d %d", &v1, &v2);
printf ("Produto = %d\n", produto(v1,v2)); // Passa os valores para a funo produto.
return 0;
}

11

PASSAGEM DE PARMETROS
2.

Passagem por referncia (by reference): passa o endereo de memria da varivel da chamada
para o argumento. As alteraes realizadas nos argumentos afetaro as variveis na chamada.
Os argumentos so de entrada e sada: recebem e devolvem valores.

Exemplo:
#include <stdio.h>
void somaprod(int x, int y, int *s, int *p){
// * na funo
*s = x+y;
*p = x*y;
}
int main( ) {
int v1, v2, s, p;
printf ("Entre com dois valores:");
scanf ("%d %d", &v1, &v2);
// & na chamada
somaprod(v1, v2, &s, &p);
printf ("Soma = %d\nProduto = %d\n", s, p);
return 0;
}

12

PASSAGEM DE PARMETROS
QUAL A DIFERENA???
Na passagem por VALOR, as variveis que foram como parmetro de
quem EST CHAMANDO a funo PERMANECEM COM OS MESMOS
VALORES!
Na passagem por REFERNCIA, as variveis que foram como parmetro de
quem EST CHAMANDO a funo PODEM SER MUDADAS PELA FUNO
CHAMADA!
13

PASSAGEM DE PARMETROS
Exemplo (diferena entre passagem por valor e por referncia):
#include <stdio.h>
void pass_valor(int a, int b){
a = 10; b = 15;
printf ("Imprimindo na funcao pass_valor a=%d e b=%d\n",a,b);
}
void pass_ref(int *a, int *b){
*a = 10; *b = 15;
printf ("Imprimindo na funcao pass_ref a=%d e b=%d\n",*a,*b);
}
int main( ){
int x=100, z=200;
printf("Somos x = %d e z = %d da funcao principal ANTES de chamar pass_valor.\n", x, z);
pass_valor(x, z);
printf("Somos x = %d e z = %d da funcao principal DEPOIS de chamar pass_valor.\n\n", x, z);
printf("Somos x = %d e z = %d da funcao principal ANTES de chamar pass_ref.\n", x, z);
pass_ref(&x, &z);
printf("Somos x = %d e z = %d da funcao principal DEPOIS de chamar pass_ref.\n\n", x, z);
return 0;
}

14

ESCOPO E LOCALIZAO DE FUNES

LOCALIZAO DAS FUNES


Regra:
Toda a funo deve ser declarada antes de ser usada.
Quando a funo definida, automaticamente est declarada.
Exemplo:
#include <stdio.h>
int soma(int a, int b){ // Definio da funo
return a + b;
}
int main( ){
int x, y, resultado;
printf ("Informe dois numeros inteiros: ");
scanf ("%d %d", &x, &y);
resultado = soma(x, y); // Chamada da funo
printf ("%d + %d = %d\n", x, y, resultado);
return 0;
}

15

LOCALIZAO DAS FUNES


Prottipo da funo:
Permite que a funo seja utilizada antes de sua definio.
Exemplo:
#include <stdio.h>
int soma(int a, int b); // Prottipo da funo
int main( ){
int x, y, resultado;
printf ("Informe dois numeros inteiros: ");
scanf ("%d %d", &x, &y);
resultado = soma(x, y); // Chamada da funo
printf ("%d + %d = %d\n", x, y, resultado);
return 0;
}
int soma(int a, int b){ // Definio da funo
return a + b;
}

16

RECURSIVIDADE

RECURSIVIDADE
Uma funo pode chamar a si prpria, o que pode facilitar a resoluo de alguns problemas
usando programao.
Vrias funes matemticas podem ser facilmente implementadas usando recursividade.

Exemplo (escreve na tela os valores a partir de 10 at 20):


#include <stdio.h>
void escreva(int inicio, int fim){
printf("%d ", inicio);
if (inicio < fim)
escreva(inicio + 1, fim);
}
int main(){
escreva(10, 20);
printf("\n");
return 0;
}

17

ATIVIDADE

LABORATRIO
As atividades do laboratrio da aula de hoje esto no Moodle.

18

You might also like