Professional Documents
Culture Documents
LAPRO I
Prof. Dr. Rafael Garibotti
v Baseado no material cedido pelos Profs. Dr. Marco Mangan e Dr. Matheus Trevisan
AULA SOBRE:
FUNES
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>
}
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;
}
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
15
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.
17
ATIVIDADE
LABORATRIO
As atividades do laboratrio da aula de hoje esto no Moodle.
18