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

Programação Estruturada 2 - Aula 02

Jul 20, 2015

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Programação Estruturada 2 - Aula 02

Programação Estruturada II

Aula 02 – Modularização e Funções

Prof. Thomás da [email protected]

Anhanguera – 2015.1

Page 2: Programação Estruturada 2 - Aula 02

Modularização e Funções

MODULARIZAÇÃO E FUNÇÕES

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

Page 3: Programação Estruturada 2 - Aula 02

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

Page 4: Programação Estruturada 2 - Aula 02

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

Page 5: Programação Estruturada 2 - Aula 02

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

Page 6: Programação Estruturada 2 - Aula 02

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

Page 7: Programação Estruturada 2 - Aula 02

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

Page 8: Programação Estruturada 2 - Aula 02

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.

Page 9: Programação Estruturada 2 - Aula 02

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

Page 10: Programação Estruturada 2 - Aula 02

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

Page 11: Programação Estruturada 2 - Aula 02

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

Page 12: Programação Estruturada 2 - Aula 02

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

Page 13: Programação Estruturada 2 - Aula 02

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

Page 14: Programação Estruturada 2 - Aula 02

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

Page 15: Programação Estruturada 2 - Aula 02

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

Page 16: Programação Estruturada 2 - Aula 02

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

Page 17: Programação Estruturada 2 - Aula 02

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

Page 18: Programação Estruturada 2 - Aula 02

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

Page 19: Programação Estruturada 2 - Aula 02

Modularização e Funções

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

Page 20: Programação Estruturada 2 - Aula 02

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

Page 21: Programação Estruturada 2 - Aula 02

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

Page 22: Programação Estruturada 2 - Aula 02

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

Page 23: Programação Estruturada 2 - Aula 02

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

Page 24: Programação Estruturada 2 - Aula 02

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

Page 25: Programação Estruturada 2 - Aula 02

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

Page 26: Programação Estruturada 2 - Aula 02

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

Page 27: Programação Estruturada 2 - Aula 02

#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

Page 28: Programação Estruturada 2 - Aula 02

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.

Page 29: Programação Estruturada 2 - Aula 02

#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

Page 30: Programação Estruturada 2 - Aula 02

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 ( * )

Page 31: Programação Estruturada 2 - Aula 02

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

Page 32: Programação Estruturada 2 - Aula 02

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

Page 33: Programação Estruturada 2 - Aula 02

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

Page 34: Programação Estruturada 2 - Aula 02

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;

}

}

Page 35: Programação Estruturada 2 - Aula 02

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

Page 36: Programação Estruturada 2 - Aula 02

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

Page 37: Programação Estruturada 2 - Aula 02

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

Page 38: Programação Estruturada 2 - Aula 02

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

Page 39: Programação Estruturada 2 - Aula 02

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

Page 40: Programação Estruturada 2 - Aula 02

#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

Page 41: Programação Estruturada 2 - Aula 02

#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

Page 42: Programação Estruturada 2 - Aula 02

Modularização e Funções

Obrigado !!!

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