Você está na página 1de 25

Técnicas de

Programação
Prof. Protásio

Laboratório de Microengenharia/DEE/CEAR/UFPB
Função
▪ É um módulo de programação ou um
conjunto de instruções que realiza
processamento para obter um resultado
especificado.
▪ Os objetivos principais do uso de funções
são:
▪ Reaproveitamento de código
▪ Isolamento de problemas
▪ Diminuição de tempo para criação de novos
programas
▪ Manutenabilidade

Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB 2


Estrutura de uma função
▪ Sintaxe char, int, float, etc. Identificador da
função dado pelo
programador

tipo_de_retorno nome_da_função (lista de parâmetros)


{
corpo da função Lista de variáveis de entrada
Ex:
return expressão int x, float y, char c

}
conjunto de instruções
A resposta ou resultado do
processamento da função

Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB 3


Estrutura de uma função
▪ Sintaxe Tipo de retorno int

Identificador da função

int quadrado (int n)


Variável de entrada
{
int quadrado = 0;
quadrado = n*n; conjunto de instruções

return quadrado;
}
Resultado ou retorno da função

Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB 4


Exemplos de funções
int quadrado(int n)
{
int quadrado = 0;
quadrado = n*n;
return quadrado;
}

int quadrado(int n)
{
return n*n;
}

Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB 5


Chamada de funções
void main() void main(){
{ cout << “Funcao main iniciou” << endl;
: cout << “Chamada da funcao 1” << endl;
func1(); func1();
: cout << “Chamada da funcao 2” << endl;
func2(); func2();
: cout << “Função main terminada” << endl;
return; return;
}
}

void func1()
void func1(){
{
:
cout << “Funcao 1 foi chamada” << endl;
return; return;
} }

void func2(){
void func2()
{
cout << “Funcao 2 foi chamada” << endl;
: return;
return; }
}

Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB 6


Protótipo de função
▪ Programa sem
#include <iostream>
using namespace std;
protótipo void func1(){
cout << “Funcao 1 foi chamada” << endl;
▪ As funções devem return;
ser declaradas e }

definidas antes de void func2(){


serem chamadas. cout << “Funcao 2 foi chamada” << endl;
return;
▪ A função main é a }

última. void main(){


cout << “Funcao main iniciou” << endl;
▪ Protótipo permite cout << “Chamada da funcao 1” << endl;
func1();
que uma função cout << “Chamada da funcao 2” << endl;
func2();
seja declarada cout << “Função main terminada” << endl;
antes do seu uso. }
return;

Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB 7


Protótipo de função #include <iostream>
using namespace std;

▪ Programa com void func1(void);


void func2(void);
protótipos
void main(){
▪ Protótipo da cout << “Funcao main iniciou” << endl;
cout << “Chamada da funcao 1” << endl;
função func1 func1();
cout << “Chamada da funcao 2” << endl;
▪ Protótipo da func2();
cout << “Função main terminada” << endl;
função func2 return;
}
▪ Sintaxe de protótipos void func1(){
de função cout << “Funcao 1 foi chamada” << endl;
return;
}
tipo_de_retorno nome_da_função (lista de parâmetros);
void func2(){
cout << “Funcao 2 foi chamada” << endl;
return;
Observe o “;” }

Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB 8


Protótipo de função
▪ Exemplo #include <iostream>
using namespace std;

int max(int, int);

void main(){
int m, n;
do {
cin >> m >> n;

▪ Tarefa cout << max(m,n) << endl;


} while (m !=0);
return;
▪ Complemente o }
programa ao lado // Retorna o maior inteiro
para que tenha e use int max(int x, int y)
uma função que {
if (x < y) return y;
retorna o menor valor else return x;
entre dois número }

Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB 9


Protótipo de função
▪ Exemplo 2
#include <iostream>
using namespace std;

int max(int, int);

void main(){
int m, n;
do {
cin >> m >> n;
cout << max(m + 5,n) << endl;
} while (m !=0);
return;
}

// Retorna o maior inteiro


int max(int x, int y)
{
if (x < y) return y;
else return x;
}

Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB 10


Passagem de parâmetros para funções
▪ Funções podem receber parâmetros de
duas formas:

▪Passagem de parâmetro por valor

▪Passagem de parâmetro por referência

Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB 11


Passagem de parâmetro por valor
▪ Também denominada de passagem por
cópia
▪ Ao chamar uma função, esta recebe uma
cópia do parâmetro.
▪ Se o valor do parâmetro passado for
alterado dentro da função, essa mudança
não tem efeito fora da função

Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB 12


Passagem de parâmetro por valor
▪ Exemplo #include <iostream>
using namespace std;
▪ Qual vai ser a saída do
programa? void func(int);

int main(){
int i = 6;
func (i);
cout << i << “\n“;
return 0;
}

void func(int i)
{
cout << i << “\n“;
i++;
}

Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB 13


Passagem de parâmetro por referência
▪ Também conhecida por passagem por
endereço
▪ Ao chamar uma função, esta recebe o
endereço do parâmetro.
▪ Se o valor do parâmetro passado for alterado
dentro da função, essa mudança tem efeito
fora da função
▪ Explicação:
▪ Passado o endereço, qualquer alteração no
parâmetro muda o valor armazenado no endereço.
Assim, ao retornar da função, o parâmetro conterá
o valor modificado.

Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB 14


Passagem de parâmetro por referância
#include <iostream>

▪ Exemplo using namespace std;

void troca1(int x, int y);


▪ Qual vai ser a saída do void troca2(int& x, int& y);

programa? void main(){


int x = 4, y = 7;
cout << x << “ “ << y << “\n”;
troca1(x, y);
cout << x << “ “ << y << “\n”;
troca2(x, y);
cout << x << “ “ << y << “\n”;
return;
}

void troca1(int x, int y){


int temp;
temp = x;
x = y;
y = temp;
}
void troca2(int& x, int& y){
int temp;
temp = x;
x = y;
y = temp;
}
Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB 15
Parâmetro const passado a uma função
▪ Com o objetivo de acrescentar segurança
adicional às funções, evitando modificar o
que não poderia ser modificado, pode-se
acrescentar o especificador const

void func(const int i, const char& c, float x)


{
i = 2; // Erro de compilação
c = ‘a’; // Erro de compilação
x = 4.5; // ok
}

Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB 16


Argumentos por omissão e parâmetros
padrões
▪ Chamada de função com ▪ Chamada de função com
todos os parâmetros omissão e parâmetros
padrões

#include <iostream> #include <iostream>


using namespace std; using namespace std;

void escreve(int x, int y); void escreve(int x, int y = 8);

main(){ main(){ Parâmetro padrão


(default)
int i = 6, j = 7; int i = 6, j = 7;
escreve(i , j); escreve(i); Omissão de
} } parâmetro

void escreve(int x, int y) void escreve(int x, int y);


{ {
cout << x << “ “ << y; cout << x << “ “ << y;
} }

Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB 17


Argumentos por omissão e parâmetros
padrões
▪ Exemplos
▪ Suponha a função:
void func(int arg1 = 6, char c = ‘b’, float var = 9.34);
▪ As chamadas abaixo são corretas:
equivalente
▪ func(9, ‘z’, 1.5); func(9, ‘z’, 1.5);
▪ func(7, ‘t’); equivalente
func(7, ‘t’, 9.34);
▪ func(5); equivalente
func(5, ‘b’, 9.34);
▪ func(); equivalente
func(6, ‘b’, 9.34);
▪ As chamadas abaixo são incorretas:
▪ func( , ‘z’, 1.5); // todos à direita da primeira omissão devem ser omitidos

▪ func( 8, , 1.5); // todos à direita da primeira omissão devem ser omitidos

Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB 18


Funções inline
▪ Execução normal de chamada de funções
PROGRAMA PRINCIPAL
(MAIN)

FUNÇÃO

Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB 19


Funções inline
▪ Chamada de funções inline
▪ O programa torna-se mais PROGRAMA PRINCIPAL
rápido (MAIN)

FUNÇÃO

Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB 20


Funções inline
▪ A função inline tem seu corpo definido
imediatamente após o protótipo
#include <iostream>
using namespace std;

const float Pi = 3.141592;

inline float VolCone(float raio, float altura) {return (Pi*raio*raio*altura)/3.0;}

main(){
float raio, altura, volume;
cout << “Digite o raio: “;
cin >> raio;
cout << “Digite a altura: “;
cin >> altura;
volume = VolCone(raio, altura);
cout << “O volume eh “ << volume ;
}

Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB 21


Variáveis externas
▪ Como acessar uma variável que está em
outro arquivo?

int x;
x = 2;

▪ Solução
▪ Usando o especificador de classe de armazenamento
extern

Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB 22


Variáveis externas
externo1.cpp externo2.cpp
#include <iostream> #include <iostream>
using namespace std; using namespace std;

void lerReal(void); void lerReal(void) {


extern float f;
float f; cout << “Digite o valor de f: “;
cin >> f;
main(){ }
lerReal();
cout << “O valor de f = “ << f;
}

Compilação:
g++ -o externo externo1.cpp externo2.cpp

Arquivos fontes
Arquivo de saída

Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB 23


Variáveis estáticas
▪ São variáveis locais que são usadas para manter
seu valor entre chamadas de uma mesma
função
#include <iostream>
▪ Resultado: using namespace std;

▪ 1234 void total(void);


▪ Se j não for estática:
int main(){
▪ 1111
for ( int i= 1 ; i< 5 ; i++ )
total();
}

void total(void){
static int j = 1;
cout << j++;
}

Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB 24


Exercícios
1. Faça um programa que ordene 2 valores dados pelo usuário e mostre
esses valores antes e após o ordenamento. Deve ser usada uma função
para realizar o ordenamento e passagem por referência.
2. Faça um programa que faça conversão de temperatura entre Celsius,
Farenheit e Kelvin sendo dado ao usuário todas as opções possíveis de
conversão e que o cálculo das conversões sejam realizadas por
diferentes funções (ex: de Celsius para Farenheit, crie um função; de
Farenheit para Celsius, crie outra função; e assim por diante).
3. Faça um programa que compute a somatória y= σ𝑛𝑥=𝑖 𝑥 em que i e n
sejam dados pelo usuário e que o cálculo da somatória seja realizado por
uma função.
4. Faça um programa que receba cinco valores inteiros e que tenha uma
função que imprima o maior e o menor valor entre esses cinco valores.
5. Faça um programa que receba cinco valores inteiros do usuário e que
compute o quadrado, o cubo e o fatorial desses valores utilizando uma
função diferente para cada uma dessas funções as quais devem estar em
outro arquivo.
6. Faça um programa que receba valores inteiros do usuário até ele/ela
digitar o valor 0 e que tenha uma função que compute os quadrados
destes valores. Adicionalmente, usando variável estática, ao fim do
programa mostre quantas vezes essa função foi chamada.

Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB 25

Você também pode gostar