42
Programação Estruturada II Aula 02 – Modularização e Funções Prof. Thomás da Costa [email protected] Anhanguera – 2015.1

Programação Estruturada 2 - Aula 02

Embed Size (px)

Citation preview

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

MODULARIZAÇÃO E FUNÇÕES

Prof. Thomás da Costa Programação Estruturada II

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

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

Modularização e Funções

Obrigado !!!

Prof. Thomás da Costa Programação Estruturada II