• Nenhum resultado encontrado

Bac004 - Parte 5

N/A
N/A
Protected

Academic year: 2021

Share "Bac004 - Parte 5"

Copied!
44
0
0

Texto

(1)

BAC004-Informática-Teórica-Fabiana C Guedes 1

(2)

Funções

 Uma função é um conjunto de instruções

projetadas para cumprir uma tarefa específica e agrupadas numa unidade com um identificador próprio.

 A principal razão para usar funções é a de dividir a

tarefa original em módulos que simplificam e organizam o programa como um todo.

 Outra razão é reduzir o tamanho do programa.

 Qualquer seqüência de instruções que se repita no

(3)

BAC004-Informática-Teórica-Fabiana C Guedes 3

Funções

 Benefícios:

 Manutenção simples – módulos independentes;  Elaboração e testes em separado;

 Reutilização do módulo em outros programas.

 Objetivos:

 Repetição de código;

 Dividir e estruturar melhor um programa;  Aumentar a legibilidade de um programa.

(4)

Funções

 Em C++, um programa pode conter uma ou

mais funções, das quais uma delas deve ser main().

 Chamar (ou ativar) uma função é o meio

pelo qual é solicitado ao programa que

desvie o fluxo de controle de execução para a função, execute suas instruções e depois volte à instrução seguinte à da chamada a função.

(5)

BAC004-Informática-Teórica-Fabiana C Guedes 5

Funções

 As funções permitem ao programador

modularizar um programa.

 As funções são módulos que podem

receber valores externos, chamados parâmetros ou

argumentos, e também podem

retornar um valor produzido por ela chamado retorno.

(6)

Funções

 Cada função deve se limitar a realizar

uma tarefa simples e bem-definida e o nome da função deve expressar

efetivamente aquela tarefa.

 Isto promove a reutilização do

(7)

01/25/13

Funções

(8)

Passagem de

Parâmetros e Sem

Retorno

• Tipo mais simples de função em C/C++ possui a sintaxe representada na figura:

(9)

01/25/13

Passagem de

Parâmetros e Sem

Retorno

• Esta função é simples pois não recebe

nenhuma informação no momento de sua chamada (parâmetros) e também não retorna nenhum valor para quem a chamou.

• A forma de identificar que a função não

retorna nenhuma informação é

(10)

Passagem de

Parâmetros e Sem

Retorno

• A chamada de uma função é o meio pelo

qual o programa é solicitado que desvie o controle e passe para a definição da função, execute suas instruções e depois volte à

instrução seguinte a da chamada.

• Chama-se uma função pelo seu nome

seguido de abertura de parênteses, nenhum ou mais parâmetros sem os tipos, e o

(11)

Introdução à Computação Aulas Laboratório -Fabiana Costa Guedes

11

Funções Sem Passagem de

Parâmetros e Sem Retorno

 Os () em uma chamada de função são

um operador de C++.

 Eles fazem com que a função seja

chamada.

 Esquecer os () em uma chamada de

função que não aceita argumentos não é um erro de sintaxe, mas a função

(12)

Passagem de

Parâmetros e Sem

Retorno

//PrgC023.cpp - Programa Exemplo Função Soma #include<iostream>

using namespace std; void soma(){

int n1,n2, s;

cout<<"Digite o primeiro numero: "<<endl; cin>>n1;

cout<<"Digite o segundo numero: "<<endl; cin>>n2; s = n1 + n2; cout<<"\n Soma = "<<s; } int main(){ soma(); return 0; Função Soma Sem Retorno

Declaração de Variáveis – Só existem dentro da função soma.

Chamada da Função.

(13)

BAC004-Informática-Teórica-Fabiana C Guedes 13

Funções Sem Passagem de

Parâmetros e Sem Retorno

 Todas as variáveis declaradas em

definições de função são variáveis

locais – elas só são conhecidas na

função na qual são definidas.

 No teste de mesa, faz um teste para

cada função, mostrando o escopo das variáveis, ou seja, o local onde cada variável existe durante a execução.

(14)

Passagem de

Parâmetros e Sem

Retorno

• No ProgC023.cpp o código da função foi

definido antes da função main.

• Em C/C++ também é possível escrever

funções depois da função main, desde que se defina o protótipo da função antes da função main.

• O protótipo da função tem a mesma forma

de definição da função, exceto por terminar com ponto-e-vírgula após o fechamento do parêntese.

(15)

01/25/13

Passagem de

Parâmetros e Sem

Retorno

//ProgC024.cpp - Uso do Protótipo em funções #include<iostream> using namespace std; void soma(); int main(){ soma(); return 0; } void soma(){ int n1,n2, s;

cout<<"Digite o primeiro numero: "<<endl; cin>>n1;

cout<<"Digite o segundo numero: "<<endl; cin>>n2;

s = n1 + n2;

cout<<"\n Soma = "<<s; }

Protótipo da Função Soma

Função Principal

Chamada da Função Soma Função Soma

(16)

Passagem de

Parâmetros e Sem

Retorno

• O segundo tipo de função é

representado por aquelas que recebem valores no momento em que são

chamadas (parâmetros) e não retorna valor para quem as chamou (void).

 As comunicações entre os módulos

deverá ser realizada por meio de

vínculos, utilizando-se objetos globais ou transferência de parâmetros.

(17)

01/25/13

Passagem de

Parâmetros e Sem

Retorno

(18)

Passagem de

Parâmetros e Sem

Retorno

Os parâmetros da função são variáveis

locais, portanto, podem ser usados dentro

da função.

• Eles são usados como um meio para

comunicação entre as funções pois recebem (ou retornam) valores de outras funções.

• A lista de parâmetros é uma lista separada

por vírgulas, contendo as declarações dos parâmetros recebidos pela função quando ela é executada.

(19)

Introdução à Computação Aulas Laboratório -Fabiana Costa Guedes

19

Funções Com Passagem de

Parâmetros e Sem Retorno

 É um erro de sintaxe não declarar o

tipo para cada parâmetro da função, mesmo que sejam do mesmo tipo.

 Por exemplo, declarar int A, B em vez

de int A, int B geraria um erro, porque os tipos são obrigatórios para cada

(20)

Passagem de

Parâmetros e Sem

Retorno

//ProgC25.cpp - Função com passagem de parâmetros #include<iostream>

using namespace std; void soma(int n1, int n2){

int s;

s = n1 + n2;

cout<<"\n Soma = "<<s; }

int main(){

int numero1, numero2;

cout<<"Digite o primeiro numero: "<<endl; cin>>numero1;

cout<<"Digite o segundo numero: "<<endl; cin>>numero2;

soma(numero1,numero2); return 0;

Função Soma – com passagem de parâmetros

Parâmetros da Função Soma

Variável local da função soma. Só é reconhecido dentro de Soma

Variáveis locais à função main. Só reconhecidos dentro da main

(21)

01/25/13

Passagem de

Parâmetros e Sem

Retorno

Observações:

– Caso a função fosse definida após a

função main o protótipo seria void

soma(int n1, int n2);.

– Na chamada da função, pode-se invocar a

função passando valores do tipo dos parâmetros. Exemplo soma(7,8);.

– A ordem e o tipo dos parâmetros devem

(22)

Passagem de

Parâmetros e Com

Retorno

• O terceiro tipo de função não recebe

valores no momento em que são

chamadas mas retornam um valor para quem a chamou (retorno).

(23)

01/25/13

Passagem de

Parâmetros e Com

Retorno

(24)

Passagem de

Parâmetros e Com

Retorno

O tipo de retorno pode ser qualquer tipo de dado

(int, float, char, string , …).

• O retorno da função é feito por meio do

comando return.

• Este comando ao ser processado termina a

execução da função e retorna o controle para a instrução seguinte do código da chamada.

Nas funções onde o tipo de retorno é void pode-se

utilizar o comando return; e nas demais funções o comando return tipodeRetorno;.

(25)

01/25/13

Passagem de

Parâmetros e Com

Retorno

//ProgC026.cpp - Função com retorno e sem passagem de parâmetros #include<iostream>

using namespace std; int soma(){

int n1,n2,s;

cout<<"Digite o primeiro numero: "<<endl; cin>>n1; cout<<"Digite o segundo numero: "<<endl; cin>>n2; s = n1 + n2; return s; } int main(){ int resultado; resultado=soma();

cout<<"\n Soma = "<<resultado; return 0;

}

Função Soma

Variáveis locais da Função Soma

Retorna o valor da soma para quem realizou a chamada da

Função Soma

Chamada da Função Soma. Deve ser atribuída a uma

variável do tipo int

(26)

Passagem de

Parâmetros e Com

Retorno

Observações:

– Podemos utilizar mais de um

comando return na mesma função.

– O informação retornada pelo

comando returndeve ser do mesmo tipo definido na função

(27)

01/25/13

Passagem de

Parâmetros e Com

Retorno

• O quarto tipo de função é representado

por aquelas que recebem valores no momento em que são chamadas

(parâmetros) e retornam um valor para quem a chamou (retorno).

(28)

Passagem de

Parâmetros e Com

Retorno

(29)

01/25/13

Passagem de

Parâmetros e Com

Retorno

//ProgC027.cpp - Função com retorno e passagem de parâmetro #include<iostream>

using namespace std; int soma(int n1, int n2){

int s;

s = n1 + n2; return s; }

int main(){

int numero1, numero2, resultado;

cout<<"Digite o primeiro numero: "<<endl; cin>>numero1; cout<<"Digite o segundo numero: "<<endl; cin>>numero2; resultado=soma(numero1,numero2);

cout<<"\n Soma = "<<resultado; return 0;

}

Função Soma – com retorno e passagem de parâmetros

Parâmetros da Função Soma – int n1 e int n2

Retorno da Função Soma do tipo inteiro

Chamada da Função Soma atribuída a uma variável do tipo do retorno. Tem que passar os parâmetros

(30)

Funções Com Passagem de

Parâmetros e Com Retorno

/*ProgC029 - Programa que mostra um exemplo de uma função*/

#include <iostream> // para entrada e saída #include <cstdlib>

int quadrado( int ); int main(){ for (int x=1; x<=50; x++) std::cout << quadrado( x ) << " "; std::cout << "\n\n"; system ("PAUSE"); return 0; }

int quadrado ( int y ){ return y * y;

}

Protótipo da função quadrado.

Definição da função quadrado. Aqui é colocado o que realmente a função realiza.

Tipo da função quadrado. Toda função em C deve possuir um tipo. Quando não é necessário o tipo, coloca-se void.

Parâmetro da função quadrado. Aqui é passado o valor que será calculado. Chamada da função quadrado.

(31)

Introdução à Computação Aulas Laboratório -Fabiana Costa Guedes

31

Funções Com Passagem de

Parâmetros e Com Retorno

/*ProgC030 - Exemplo de função que converte graus Fahrenheit em graus Celsius*/ #include <iostream> #include <cstdlib> int Celsius(int); int main(){ int C, F;

std::cout << "\nDigite a temperatura em Fahrenheit: "; std::cin >> F;

C = Celsius(F);

std::cout << "\nCelsius: " << C << "\n\n"; system ("PAUSE");

}

int Celsius(int fahr){ int C;

C = (fahr - 32) * 5 / 9; return C;

}

Protótipo da função.

Chamada da função com atribuição a uma variável do mesmo tipo da função.

(32)

Passagem de

Parâmetros e Com

Retorno

//ProgC034.cpp - Valor absoluto #include <iostream> #include <cstdlib> using namespace std; int abs(int n); int main(){ int x=10;

cout << abs(0) << '\t' << abs(-3) << '\t' << abs(x) << endl; system("PAUSE");

return 0; }

int abs( int n){ if (n>=0)

return n; else return -n;

Protótipo da função.

Definição da função.

Dois retornos, mas apenas um será executado

(33)

01/25/13

Parâmetros Por

Valor e Por

Referência

A passagem de parâmetros por

valor significa que a função trabalhará

com cópias dos valores passados no

momento de sua chamada, desta forma,

qualquer alteração dos valores nas variáveis correspondentes dentro da função não

afetam os valores das variáveis utilizadas como parâmetros.

Até este momento todas as

funções apresentadas utilizam a passagem

(34)

Parâmetros de Função – por

valor

/*Prog031 - Exemplo de função com passagem de parâmetro por valor*/ #include <iostream>

#include <cstdlib> void Somar(int X){

X++;

std::cout << "Valor de X dentro da funcao: " << X << "\n"; }

int main(){ int Y=0; Somar(Y);

std::cout << "Valor de Y fora da funcao: " << Y << "\n\n"; system ("PAUSE");

return 0; }

Definição. Como está antes não precisa de protótipo.

Parâmetro por valor.

Não retorna tipo. Chamada de sub-rotina.

Chamada sem necessidade de atribuição a uma variável, por ser void.

(35)

01/25/13

Parâmetros Por

Valor e Por

Referência

A passagem de parâmetros por

referência significa que a função

trabalhará com as próprias

variáveis passadas no momento de

sua chamada.

• Assim, qualquer alteração nos valores

das variáveis correspondentes dentro da função afetam as variáveis

(36)

Passagem de

parâmetro por

referência

• Este mecanismo permite que a função

retorne mais de um valor para a função que chama.

• Para definir que um parâmetro será passado

como referência para uma função, utilizamos o símbolo & antes do nome da variável no

cabeçalho da função, indicando que ela é um alias (apelido, referência, outro nome) para a variável passada como parâmetro.

(37)

Introdução à Computação Aulas Laboratório -Fabiana Costa Guedes

37

Passagem de parâmetro por

referência

 O operador de referência & cria outro

nome para uma variável já existente.

 Uma referência não é uma cópia da

variável a quem se refere. É a mesma variável sob nomes diferentes.

(38)

Parâmetros de Função – por

referência

/*Prog032 - Programa para mostrar passagem de parâmetro por referência*/ #include <iostream> // para entrada e saída

#include <cstdlib> void Somar(int& X){

X++;

std::cout << "Valor de X dentro da funcao: " << X << "\n"; }

int main(){ int Y=0; Somar(Y);

std::cout << "Valor de Y fora da funcao: " << Y << "\n\n"; system ("PAUSE");

return 0; }

Parâmetro por referência.

(39)

Introdução à Computação Aulas Laboratório -Fabiana Costa Guedes

39

Parâmetros de Função – por

referência

/*ProgC033.cpp - passagem por referência de mais de um argumento*/ #include <iostream>

#include <cstdlib>

void Troca(int& X, int& Y){ int temp=X; X = Y; Y = temp; } int main(){ int A, B, C;

std::cout << "\nDigite 3 numeros: "; std::cin >> A >> B >> C; if (A > B) Troca(A, B); if (A > C) Troca(A, C); if (B > C) Troca(B, C); std::cout << A << " " << B << " " << C << " \n"; system("PAUSE"); return 0; }

Parâmetros por referência.

(40)

Passagem de

parâmetro por

referência

//ProgC028.cpp - Exemplo de passagem de //parâmetro por referência

#include<iostream> using namespace std;

void nao_muda(int a, double b) { a+=2; // significa a=a+2;

b+=5; // significa b=b+5; }

void muda(int &a, double &b) { a+=2; b+=5; } int main(){ int n1=5; double n2=6.0; cout<<"n1 = "<<n1<<" n2 = "<<n2<<endl; nao_muda(n1,n2);

cout<<"Valores apos a funcao nao_muda n1 = “ << n1 << " n2 = "<<n2<<endl;

muda(n1,n2);

cout<<"Valores apos a funcao muda n1 = “ <<n1<<" n2 = "<<n2<<endl; return 0; } Parâmetros por valor Parâmetros por Chamada de não-muda Chamada de muda

(41)

01/25/13

Exemplo - Várias

Funções

//ProgC035 - Varias Funções sendo chamadas #include <iostream>

#include <cstdlib> using namespace std;

float somasqr(float m, float n); float sqr(float z);

float soma(float m, float n); int main() {

float a,b; cout << "Digite dois numeros "; cin >> a >> b;

cout << "A soma dos quadrados e " << somasqr(a,b) << endl; system("PAUSE"); return 0;

}

float somasqr(float m, float n) {return soma( sqr(m), sqr(n) );} float sqr(float z){ return z*z; }

float soma(float m, float n) { return m+n; }

Protótipos das Funções Chamada da Função somasqr Chamada da Função sqr Chamada da Função soma

(42)

Função - Observações

 Há 3 maneiras de retornar o controle para o

ponto no qual uma função foi chamada.

 Se a função não fornecer um valor como

resultado, o controle é retornado quando a chave que indica o término da função é

alcançada

 Ao se executar o comando return;

 Se a função fornecer um valor como resultado, o

comando return expressão; retorna o valor da

expressão para a função que realizou a

(43)

01/25/13

Tópicos para Discussão

 Funções

 Modularização  Retorno

 Parâmetros

 Passagem por Valor

(44)

Exercícios

 Faça Programas para:

 Faça uma sub-rotina que forneça 1 se o número

digitado for positivo ou 0 se for número negativo.

 Faça uma sub-rotina que transforme e mostre

segundos em horas, minutos e segundos. Na função principal entre com valores de segundos.

 Escreva uma função que receba como

argumento o ano e retorne true se for um ano bissexto e false se não for. Um ano é bissexto se for divisível por 4, mas não por 100. Um ano também é bissexto se for divisível por 400.

Referências

Documentos relacionados

a) Usando a função sqrt(x) da biblioteca matemática da linguagem Python (import math) , escreva uma função que recebe as coordenadas cartesianas de dois pontos

• Leia um número inteiro n&gt;0 e verifique se este número contém dois dígitos adjacentes iguais. • Leia um número inteiro n, n&gt;0, e uma sequência com

 Os programas de computador são, geralmente, escritos utilizando uma linguagem de programação de alto nível (na qual um código ou programa fonte é criado) e são traduzidos para

Dados um número inteiro n, n&gt;0, e uma sequência com n números inteiros, determinar a soma dos inteiros positivos e a soma dos inteiros negativos da sequência.. Tabela

writelines(data): escreve cada elemento string da lista data na posição atual ou ao final do arquivo, dependendo do modo de abertura. Qualquer arquivo pode ser aberto e lido

“A ÓTICA DA DESPESA OU ÓTICA DO DISPÊNDIO avalia ao produto de uma economia considerando a soma dos valores de todos os bens e serviços produzidos no período que não

O resultado é falso apenas quando todos os operadores forem falsos. v1 V2 v1

a) Bens e serviços de consumo: objetivam satisfazer diretamente necessidades humanas, como alimentação, vestuário, bebidas, medicamentos, educação, turismo, veículos etc.