Programação Estruturada II
Aula 02 – Modularização e Funções
Prof. Thomás da [email protected]
Anhanguera – 2015.1
Modularização e Funções
O que é Modularização:
É o processo de decompor um programa em partes menores, facilitando amanutenção e o entendimento pelos desenvolvedores. Com isso podemos terrotinas reutilizáveis para outros programas e aplicações. Além disso, conseguimosefetuar atividades paralelas na construção do código-fonte, na qual mais de umdesenvolvedor pode atuar no trabalho.
Modularização e Funções
Prof. Thomás da Costa Programação Estruturada II
Modularização e Funções
Veja o exemplo abaixo:
Um carro é composto por vários componentes (portas, rodas, motor e etc). Essescomponentes tornam o carro modular.
Modularização e Funções
Cada parte tem uma finalidade, todasjuntas formam o carro. Caso uma peça tenha problema,
fazemos o ajuste neste local semafetar o restante do carro.
Prof. Thomás da Costa Programação Estruturada II
Modularização e Funções
Benefícios da Modularização em um programa:
- Componentes menores formam um programa- Programa fica mais legível para compreensão- Facilidade na manutenção da aplicação- Funcionalidade pode ser reutilizada em outros programas- Previne duplicação de código e retrabalho
Modularização e Funções
Prof. Thomás da Costa Programação Estruturada II
Modularização e Funções
Modularização em C/C++:
Em C++ a modularização é feita a partir de blocos de funcionalidades, denominadofunções.
Modularização e Funções
Prof. Thomás da Costa Programação Estruturada II
Modularização e Funções
O que é:
São rotinas que tem como objetivo, executar trechos de códigos de formamodular, melhorando a organização do programa e evitando repetição de código.As funções são reutilizáveis dentro de um programa.
Funções
Prof. Thomás da Costa Programação Estruturada II
CALCULADORA
Modularização e Funções
Funções
Para pensar:
Em uma calculadora quais são as suas 4 principais operações?
SOMA
MULTIPLICAÇÃO DIVISÃO
SUBTRAÇÃO
Conseguimos definir as 4 principaisoperações da calculadora.
No desenvolvimento do código dacalculadora vamos precisar criar as 4funções de acordo com as operaçõesdefinidas.
Modularização e Funções
Funções
Como criar funções:
- Análise quais tarefas o programa vai executar- Identifique ações- Ações são verbos como inserir, alterar, excluir e etc.- A partir das ações temos as funções
Mais um exemplo:
Quais as funções da lista de contatos de um celular?
- Inserir um Contato- Alterar um Contato- Excluir um Contato- Discar para um Contato
Prof. Thomás da Costa Programação Estruturada II
Modularização e Funções
Funções
Estrutura de uma função:
Retorno da função
Nome da função
Parâmetros da função
Corpo da função
Escopo de início e fim da função
double somar(double x, double y){
double resultado = x + y;return resultado;
}
Prof. Thomás da Costa Programação Estruturada II
Modularização e Funções
Funções
Estrutura de uma função:
- Tipos de retorno da função- double, float, int, char, void, vetores e outros tipos
- Parâmetros da função- Cada parâmetro é composto pelo tipo, nome e separados por virgulas
- Retorno da função- Quando uma função deve retornar um valor, devemos usar a palavra
reservada return seguido de um valor, variável ou operação do mesmo tipode retorno
- Corpo da função- Código fonte com a funcionalidade que a função deve executar
- Protótipo- As funções possuem protótipos para definir sua estrutura
Prof. Thomás da Costa Programação Estruturada II
Modularização e Funções
Funções
Como Utilizar em C++:As quatro funções da calculadora
Protótipo das funções
#include <iostream>
using namespace std;
double somar(double x, double y);double subtrair(double x, double y);double multiplicar(double x, double y);double dividir(double x, double y);
int main(){
double x, y;
cout << "Digite os valores para somar:\n";cin >> x >> y;cout << somar(x, y);
cout << "Digite os valores para subtrair:\n";cin >> x >> y;cout << subtrair(x, y);
cout << "Digite os valores para multiplicar:\n";cin >> x >> y;cout << multiplicar(x, y);
cout << "Digite os valores para dividir:\n";cin >> x >> y;cout << dividir(x, y);
}
Chamando uma função
double somar(double x, double y){
double resultado = x + y;return resultado;
}
double subtrair(double x, double y){
double resultado = x - y;return resultado;
}
double multiplicar(double x, double y){
double resultado = x * y;return resultado;
}
double dividir(double x, double y){
double resultado = x / y;return resultado;
}
Prof. Thomás da Costa Programação Estruturada II
Modularização e Funções
Funções
Chamando uma função:
Chamando a função “somar”passando os parâmetros 10 e 15
Retornando o valor para avariável “valor”
Protótipo da função
#include <iostream>
using namespace std;
double somar(double x, double y);
int main(){
double valor;valor = somar(10,15);
}
...
Prof. Thomás da Costa Programação Estruturada II
Modularização e Funções
Funções
Chamando uma função:
- Para executar uma função, devemos colocar o nome da função seguido dosparâmetros
- Nos parâmetros podemos passar um valor especifico ou uma variável- Devemos respeitar o tipo passado nos parâmetros das funções. Ex: se o
parâmetro for int, devemos passar um tipo int. Se for passado o tipo incorretono parâmetro, o programa não compila.
- Caso a função retorne algum valor, podemos atribuir diretamente a umavariável
- Quando uma função não tem parâmetros, abrimos e fechamos parênteses- void faz a função retornar nenhum valor
Prof. Thomás da Costa Programação Estruturada II
Modularização e Funções
Funções
Retorno da função:
Quando o tipo de retorno da função é diferente do tipo void, a função devolvealgum valor para alguma variável. Para efetuar este tipo de operação utilizamos apalavra reservada return seguido de um valor ou uma variável.
Retorno da função
Retorno da função navariável “resultado”
#include <iostream>
using namespace std;
int par_ou_impar(int numero);
int main(){
int numero, resultado;
cout << "Digite um número:\n";cin >> numero;resultado = par_ou_impar(numero);
if (resultado == 0)cout << "Par";
elsecout << "Impar";
}
int par_ou_impar(int numero){
int valor = numero % 2;return valor;
}
Prof. Thomás da Costa Programação Estruturada II
Modularização e Funções
Funções
Tipo void:
A palavra reservada void não efetua nenhum retorno para a função.
Retorno da função dotipo void
Função não retorna um valor
#include <iostream>
using namespace std;
void imprime_idade(int idade);
int main(){
int idade;cout << "Digite a sua idade:\n";cin >> idade;imprime_idade(idade);
}
void imprime_idade(int idade){
cout << "Sua idade é: " << idade;}
Prof. Thomás da Costa Programação Estruturada II
Modularização e Funções
Funções
Usando return em uma função void:
O return em uma função void, interrompe a execução do código.#include <iostream>
using namespace std;
void dividir(int x, int y);
int main(){
int x, y;cout << "Digite os valores para dividir:\n";cin >> x >> y;dividir(x, y);
}
void dividir(int x, int y){
if (y == 0){
cout << "Não dividirás por zero";return;
}cout << "Valor da Divisão:" << x / y;
}
Não existe divisão por zero
Terminando a execuçãoda função com return
Este código não vaiser executado
Prof. Thomás da Costa Programação Estruturada II
Modularização e Funções
Resumo:
- Possuem um nome- Podem possuir um retorno ou não- Tem parâmetros com tipo e nome, separados por virgulas- A função tem um corpo, aonde é definido e escrito oque a função vai executar- Tem um protótipo para definir a função- São reutilizáveis- Ajuda a deixar o código mais simples- Funções quando usadas corretamente deixa muito mais fácil o entendimento
do programa- Organização do código- Retornam valores com a palavra reservada return- void é tipo que não retorna valor na função
Funções
Prof. Thomás da Costa Programação Estruturada II
Modularização e Funções
Exemplo – Imprime na tela:
Funções
#include <iostream>
using namespace std;
void imprimir();
int main(){
imprimir();}
void imprimir(){
char valor[10];cout << "Digite algo:\n";gets(valor);cout << valor;
}
Prof. Thomás da Costa Programação Estruturada II
Modularização e Funções
Exemplo – Quadrado:
Funções
#include <iostream>
using namespace std;
int quadrado(int x);
int main(){
int x;cout << "Digite um numero:\n";cin >> x;cout << "Quadrado de " << x << " é " << quadrado(x);
}
int quadrado(int x){
return x * x;}
Prof. Thomás da Costa Programação Estruturada II
Modularização e Funções
Exemplo – Conversor de Moedas:
Funções
#include <iostream>
using namespace std;
const double VALOR_DOLAR = 2.7;
void converte_real_dolar(double real);
int main(){
double valor_real;cout << "Valor em reais:";cin >> valor_real;converte_real_dolar(valor_real);
}
void converte_real_dolar(double real){
if (real < 0){
cout << "O valor não pode ser menor que zero";return;
}
cout << "Valor convertido: " << real * VALOR_DOLAR;}
Prof. Thomás da Costa Programação Estruturada II
Modularização e Funções
Exemplo – Calculadora:
Funções
#include <iostream>
using namespace std;
double somar(double x, double y);double subtrair(double x, double y);double multiplicar(double x, double y);double dividir(double x, double y);
int main(){
double x, y;
cout << "Digite os valores para somar:\n";cin >> x >> y;cout << somar(x, y);
cout << "Digite os valores para subtrair:\n";cin >> x >> y;cout << subtrair(x, y);
cout << "Digite os valores para multiplicar:\n";cin >> x >> y;cout << multiplicar(x, y);
cout << "Digite os valores para dividir:\n";cin >> x >> y;cout << dividir(x, y);
}
double somar(double x, double y){
double resultado = x + y;return resultado;
}
double subtrair(double x, double y){
double resultado = x - y;return resultado;
}
double multiplicar(double x, double y){
double resultado = x * y;return resultado;
}
double dividir(double x, double y){
double resultado = x / y;return resultado;
}
Prof. Thomás da Costa Programação Estruturada II
Modularização e Funções
O que é:
No caso da linguagem C++, escopo de variáveis é o ciclo de vida de um tipo dedado e como ele pode ser acessado pelo programa principal e suas funções.
Escopo de Variáveis
Prof. Thomás da Costa Programação Estruturada II
Modularização e Funções
Exemplo:
Escopo de Variáveis
Prof. Thomás da Costa Programação Estruturada II
#include <iostream>
using namespace std;
int global = 0;void escopo(int x);
int main(){
int a = 1;{
int b = 1;cout << "Escopo mais interno: " << b << endl;
}escopo(100);cout << "Escopo local: " << a << endl;
}
void escopo(int x){
cout << "Escopo local: " << x << endl;cout << "Escopo global: " << global << endl;
}
Variável global, ou seja, podeser acessada em qualquerlugar do programa
Variável b pode ser acessadasomente neste trecho
Chaves definemum escopo
Modularização e Funções
O que é:
É quando uma variável é passada como parâmetro de uma função, e seu valororiginal não é alterado. Somente o valor da sua cópia pode ser alterado dentroda função.
Parâmetros Por Valor
Prof. Thomás da Costa Programação Estruturada II
#include <iostream>
using namespace std;
void troca(int a, int b);
int main(){
int a = 10;int b = 20;troca(a, b);cout << "Valor de A e B não foi alterado:" << a << b << endl;
}
void troca(int a, int b){
a = b;b = a + 100;cout << "Valor de A e B: " << a << b << endl;
}
Modularização e Funções
Exemplo:
Parâmetros Por Valor
Prof. Thomás da Costa Programação Estruturada II
Variáveis a e b tem valor 10 e 20
Variáveis a e b continuam com o mesmo valor 10 e 20
Trocamos o valor de acom b dentro da função
Modularização e Funções
Parâmetros Por Referência
Prof. Thomás da Costa Programação Estruturada II
O que é:
É quando uma variável é passada como parâmetro de uma função, e seu valororiginal pode ser alterado.
#include <iostream>
using namespace std;
void troca(int &a, int &b);
int main()
{
int a = 10;
int b = 20;
cout << "Valor de A e B original:" << a << "-" << b << endl;
troca(a, b);
cout << "Valor de A e B FOI alterado:" << a << "-" << b << endl;
}
void troca(int &a, int &b)
{
int temp;
temp = b;
b = a;
a = temp;
}
Modularização e Funções
Exemplo:
Parâmetros Por Referência
Prof. Thomás da Costa Programação Estruturada II
Variáveis a e b tem valor 10 e 20
Variáveis a e b mudam de valor
Trocamos o valor de acom b dentro da função
Referencia endereço dememória
Modularização e Funções
Exemplo:
Parâmetros do Tipo String
Prof. Thomás da Costa Programação Estruturada II
#include <iostream>
#include <string.h>
using namespace std;
int validar_senha(char *senha);
int main()
{
char senha[10];
cout << "Digite a senha:" << endl;
gets(senha);
validar_senha(senha);
}
int validar_senha(char *senha)
{
if (strcmp(senha, "entrar123") == 0)
{
cout << "Senha OK";
return 0;
} else {
cout << "Senha inválida";
return 1;
}
}
Passando uma string como parâmetro devemos colocar o sinal ( * )
Modularização e Funções
Exemplo:
Parâmetros do Tipo Vetor
Prof. Thomás da Costa Programação Estruturada II
#include <iostream>
#include <string.h>
using namespace std;
void imprime_vetor(int *valores);
int main()
{
int valores[10] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
imprime_vetor(valores);
}
void imprime_vetor(int *valores)
{
for (int i=0;i<=9;i++)
{
cout << "valores[" << i << "] :" << valores[i] << endl;
}
}
Passando um vetor como parâmetro devemos colocar o sinal ( * )
CUIDADO: alterar o vetor dentro da função, modifica o valor que foi passado como parâmetro
Modularização e Funções
Para pensar:
Podemos ter funções com o mesmo nome ?Sim podemos !!!
Desde que as funções possuam parâmetros diferentes uma da outra. Essa técnicaé chamada de sobrecarga.
Sobrecarga de funções
Prof. Thomás da Costa Programação Estruturada II
Para acontecer a sobrecarga:
- Tipos de parâmetros diferentes- Quantidades de parâmetros
Modularização e Funções
Exemplo:
Sobrecarga de funções
Prof. Thomás da Costa Programação Estruturada II
#include <iostream>
#include <string.h>
using namespace std;
void imprime_vetor(char *valores);
void imprime_vetor(int *valores);
void imprime_vetor(int *valores, int tamanho);
int main()
{
int valores[10] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
char nome[10] = {'a','n','h','a','n','g','u','e','r','a'};
imprime_vetor(nome);
imprime_vetor(valores);
imprime_vetor(valores, 10);
}
Continua ->
Funções com o mesmo nome e parâmetros diferentes
Modularização e Funções
Exemplo - Continuação:
Sobrecarga de funções
Prof. Thomás da Costa Programação Estruturada II
void imprime_vetor(char *valores)
{
cout << "void imprime_vetor(char *valores)" << endl;
for (int i=0;i<=9;i++)
{
cout << "valores[" << i << "] :" << valores[i] << endl;
}
}
void imprime_vetor(int *valores)
{
cout << "void imprime_vetor(int *valores)" << endl;
for (int i=0;i<=9;i++)
{
cout << "valores[" << i << "] :" << valores[i] << endl;
}
}
void imprime_vetor(int *valores, int tamanho)
{
cout << "void imprime_vetor(int *valores, int tamanho)" << endl;
for (int i=0;i<tamanho;i++)
{
cout << "valores[" << i << "] :" << valores[i] << endl;
}
}
Modularização e Funções
Exemplo:
Valores Default
Prof. Thomás da Costa Programação Estruturada II
#include <iostream>
using namespace std;
double media(double b1 = 0, double b2 = 0);
int main()
{
cout << "Media Default:" << media() << endl;
cout << "Media Aluno:" << media(6.5, 6.5) << endl;
}
double media(double b1, double b2)
{
return (b1 + b2) / 2;
}
Valores pré-definidos na função é chamado de valores default
Modularização e Funções
Desenvolvendo uma Biblioteca !!!:
Vamos criar uma biblioteca para ser utilizada em todos os nossos programas. Anossa biblioteca será chamada pela diretiva #include, como todas as outras doC++.
Para criar um biblioteca:
- Criar um projeto no Dev-C++- Criar um arquivo .h com os protótipos das funções- Criar um arquivo .cpp com as definições das funções
Bibliotecas
Prof. Thomás da Costa Programação Estruturada II
Modularização e Funções
Vamos criar uma biblioteca matemática:
Criando um projeto do Dev-C++:- File -> New Project- Console Application- Colocar em Name (nome do projeto) matematica
Bibliotecas
Prof. Thomás da Costa Programação Estruturada II
Modularização e Funções
Vamos criar uma biblioteca matemática:
- Criar arquivo .h- Criar arquivo .cpp
Bibliotecas
Prof. Thomás da Costa Programação Estruturada II
Arquivos da biblioteca .h e .cpp
namespace matematica
{
double somar(double x, double y);
double subtrair(double x, double y);
double multiplicar(double x, double y);
double dividir(double x, double y);
}
Modularização e Funções
Arquivo .h:
Bibliotecas
Prof. Thomás da Costa Programação Estruturada II
Namespace da biblioteca
Os namespace´s servem para identificar uma biblioteca, tornando única dentro da aplicação e não entrar em conflito com outras bibliotecas
#include <iostream>
#include "matematica.h"
using namespace std;
namespace matematica
{
double somar(double x, double y)
{
return x + y;
}
double subtrair(double x, double y)
{
return x - y;
}
double multiplicar(double x, double y)
{
return x * y;
}
double dividir(double x, double y)
{
return x / y;
}
}
Modularização e Funções
Arquivo .cpp:
Bibliotecas
Prof. Thomás da Costa Programação Estruturada II
Implementações das funções
Namespace da biblioteca
#include <iostream>
#include "matematica.h"
using namespace matematica;
using namespace std;
int main() {
cout << "Somar:" << somar(2,2) << endl;
cout << "Subtrair:" << subtrair(2,2) << endl;
cout << "Multiplicar:" << multiplicar(2,2) << endl;
cout << "Dividir:" << dividir(2,2) << endl;
}
Modularização e Funções
Usando a biblioteca:
Bibliotecas
Prof. Thomás da Costa Programação Estruturada II
Chamando as funções
Namespace da biblioteca
Incluindo a biblioteca no programa
Top Related