Buscar

ED_Aula_003 - CCT0637

Prévia do material em texto

2019.22020.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
ESTRUTURAS DE DADOS
CCT0637
Aula 3
PROFESSOR: EDIBERTO MARIANO
1
2019.22020.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
MODULARIZAÇÃO
(Funções e Procedimentos)
2
ESTRUTURAS DE DADOS
2019.22020.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
CONTEÚDOS: 
Definição (Funções e Procedimentos) 
Passagem de parâmetros 
- Passagem de parâmetros por valor 
- Passagem de parâmetros por referência 
Escopo de variáveis e Retorno de valores 
3
ESTRUTURAS DE DADOS
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
2020.2
Estruturas de Dados
Definição: 
✓ Conjunto de comandos agrupados em um bloco que recebe um 
nome e através deste pode ser ativado.
Funções - procedimentos:
✓ São blocos de instruções que realizam tarefas específicas.
✓ Permitem o reaproveitamento de código já construído (por você 
ou por outros programadores);
✓ Evitam que um trecho de código que seja repetido várias vezes 
dentro de um mesmo programa;
✓ Permitem a alteração de um trecho de código de uma forma 
mais rápida. Com o uso de uma função é preciso alterar apenas 
dentro da função que se deseja;
3. Modularização (Funções e Procedimentos)
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
2020.2
Estruturas de Dados
✓ Evitar que os blocos do programa não fiquem grandes demais e, por 
consequência, mais difíceis de entender.
✓ Facilitar a leitura do programa-fonte de uma forma mais fácil.
✓ Separar o programa em partes(blocos) que possam ser logicamente 
compreendidos de forma isolada.
✓ Carregados uma vez, podem ser executado quantas vezes for 
necessário.
✓ Podem ser usados para economizar espaço e tempo de programação já 
que podem ser usadas várias vezes num mesmo programa.
Modularização (Funções e Procedimentos)
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
2020.2
Estruturas de Dados
✓ Cada módulo, além de ter acesso às variáveis do programa que o 
chamou (são as variáveis globais), pode ter suas próprias variáveis (são 
as variáveis locais), que existem apenas durante sua chamada.
✓ Ao se chamar um módulo, também é possível passar-lhe determinadas 
informações que recebem o nome de parâmetros
Modularização (Funções e Procedimentos)
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
2020.2
Estruturas de Dados
Funções
PARTES OBRIGATÓRIAS DE UMA FUNÇÃO:
- Tipo 
- Nome
- Corpo
- Podem-se inserir módulos em um algoritmo. Para isso, pode-se utilizar 
"Procedimentos" ou "Funções". As ações das "Funções" e dos 
"Procedimentos" são hierarquicamente subordinadas a um módulo 
principal.
- Cada "Função" ou "Procedimento" pode utilizar constantes ou variáveis 
do módulo principal ou definir suas próprias constantes ou variáveis.
- Função pode retornar ou não valor.
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
2020.2
Estruturas de Dados
Funções
Em C não existe uma distinção entre funções e subrotinas. Ou seja, todas as
subrotinas, do ponto de vista de algoritmos, podem ser tratadas como funções
que não retornam nenhum valor.
Formato de declaração de funções:
Tipo de retorno nome_da_função (tipo1 param1, tipo2 param2,..., tipoN paramN)
{
//corpo da função
return valor de retorno;
} //fim da função
Tipo de retorno especifica o tipo do valor que será retornado para quem chamou
a função. Quando o tipo de retorno for void isto significa que se trata de uma
função que se comporta como uma subrotina; ou seja, a função não necessita
retornar nenhum valor, apenas ser chamada.
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
2020.2
Estruturas de Dados
Funções sem retorno e sem parâmetros
tipo_funcao nome_funcao()
{ //variáveis locais
//corpo da função
}
#include<iostream> 
using namespace std;
void mostra() //void é opcional
{ int a = 10;
cout<<"Valor de a = "<<a;
}
int main(){
mostra(); 
return 0; //OPCIONAL
}
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
2020.2
Estruturas de Dados
tipo_funcao nome_funcao(parametros)
{ //variáveis locais
//corpo da função
//variável do mesmo tipo_funcao
return = nome_de variavel
}
#include<iostream> 
using namespace std;
void mostra(int x)
{ 
cout<<"Valor de x = "<<x;
}
int main(){
int a = 10;
mostra(a); 
return 0; //OPCIONAL
}
Funções sem retorno e com parâmetros
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
2020.2
Estruturas de Dados
Tipo especial de procedimento onde
depois de executada a chamada, o valor
calculado é retornado no nome da função
que passa a ser uma variável da
expressão.
tipo_funcao nome_funcao(parametros)
{ //variáveis locais
//corpo da função
//variável do mesmo tipo_funcao
return = nome_de variavel
}
#include<iostream> 
using namespace std;
int mostra(int n)
{ 
return n;
}
int main()
{ 
cout<<mostra(23); 
return 0; //OPCIONAL
}
Funções com retorno e com parâmetros
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
2020.2
Estruturas de Dados
Função Recursiva – são 
aquelas que chamam a si 
próprias.
função fatorial(n) { 
se (n <= 1) 
retorne 1; 
senão
retorne n * fatorial(n-1); 
} 
Funções com retorno e com parâmetros
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
2020.2
Estruturas de Dados
Funções - Exemplo
Declaração da função no programa
int soma(int a, int b);
int produto(int a, int b);
Implementação:
int soma(int a, int b){
return a+b;
}
int produto(int a, int b){
return a*b;
}
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
2020.2
Estruturas de Dados
Procedimentos
São estruturas que agrupam um conjunto de comandos, que são
executados quando o procedimento é chamado.
operador nome_procedimento(parametros)
{ // variáveis locais
//corpo do procedimento
//
//não retorna valores
}
Os procedimentos (procedures) diferem das funções apenas por não
retornarem resultado, imagine um procedimento que envia e-mail,
precisa retornar resultado?
Sintaxe:
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
2020.2
Estruturas de Dados
Procedimentos - exemplo
Declaração do procedimento no programa
void soma(int a, int b);
void produto(int a, int b);
Implementação:
void soma(int a, int b){
…
}
void produto(int a, int b){
…
}
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
2020.2
Funções e procedimentos podem ou não receber parâmetros.
Ao se chamar um módulo, também é possível passar-lhe determinadas
informações que recebem o nome de parâmetros.
Parâmetros - são valores que, na linha de chamada, ficam entre os parênteses
e que estão separados por vírgulas.
Variável global é vista pelo programa principal e por todos os módulos pertencentes 
a ele.
Variável local é visível ao módulo em que ela foi declarada e aos módulos
hierarquicamente inferiores.
Estruturas de Dados
Parâmetros
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
2020.2
- Modularização em C++
Os parâmetros param1 a paramN identificam os parâmetros que se deseja
passar para a função. Cada um destes parâmetros passa a ser uma variável
local da função de tipo tipo1 a tipoN e é inicializado com o valor que foi
passado para si no momento da chamada da função. Funções que não
recebem nenhum valor como parâmetro devem ser declaradas com a
Palavra void entre os parênteses.
Tipo de retorno nome_da_função (tipo1 param1, tipo2 param2,..., tipoN paramN)
{
//corpo da função
return valor de retorno;
} //fim da função
Estruturas de Dados
Parâmetros
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula03
2020.2
Estruturas de Dados
Passagens de Parâmetros por valor
Parâmetros
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
2020.2
Estruturas de Dados
Parâmetros
Atenção!!!
• Os parâmetros atuais (aqueles chamados pela função) devem ser dos mesmos tipos dos 
parâmetros formais. 
• Entretanto, ter cuidado se as três condições a seguir se verificarem:
✓ Usar um compilador que não exige a declaração da função antes de usar.
✓ Usar uma função antes de tê-la declarado.
✓ Os parâmetros formais e reais não forem exatamente do mesmo tipo.
• Se as três condições se verificarem o resultado da execução da função é imprevisível!
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
2020.2
Estruturas de Dados
Escopo de Variáveis
• Escopo de uma variável é a parte de um programa em que ela é 
referenciada ou o bloco de código onde a variável é válida.
• O escopo de uma variável declarada na lista de parâmetros de um
método é o corpo do método.
• Uma variável local é visível no bloco de instruções em que é 
declarada desde o ponto da declaração até o final do bloco.
• Uma variável declarada no cabeçalho de um for tem seu escopo
apenas no corpo do for.
• O escopo de um campo de classe (atributo) é toda a classe
(variável global).
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
2020.2
Estruturas de Dados
Escopo de Variáveis
Protótipo da função
Variável global
Variável local
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
2020.2
Estruturas de Dados
Exemplo de declaração e uso de variáveis globais:
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
2020.2
Estruturas de Dados
Passagens de Parâmetros por Referência com ponteiros
• Em C++, os programadores podem utilizar ponteiros e o
operador de indireção (*) para realizar a passagem por
referência. Ao chamar uma função com um argumento que
deve ser modificado, o endereço do argumento é passado.
Isso normalmente é realizado aplicando o operador de
endereço (&) ao nome da variável cujo valor será modificado.
• Quando o endereço de uma variável é passado para uma
função, o operador de indireção (*) pode ser utilizado na
função para formar um sinônimo para o nome da variável –
isso por sua vez pode ser utilizado para modificar o valor da
variável naquela localização na memória do chamador.
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
2020.2
Estruturas de Dados
Passagens de Parâmetros por Referência com ponteiros
Com uso de Passagem 
por Referência com um 
argumento de ponteiro.
O programa ao lado 
possue uma função que 
eleva um inteiro ao 
cubo.
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
2020.2
Estruturas de Dados
Aula 3 - Exercícios
EXERCÍCIO 01 – Codifique um programa em C++ que invoque (chame) uma função passando um 
valor como parâmetro, retorne o mesmo e o exiba na tela o valor passado/retornado.
EXERCÍCIO 02 – Codifique um programa em C++ que invoque (chame) uma função passando um 
valor como parâmetro, retorne o valor passado adicionando dele mais ele mesmo, a seguir exiba a 
soma na tela.
EXERCÍCIO 03 – Codifique a função main() em C++, que invoque (chame) uma função passando 
um valor como parâmetro da função descrita abaixo, a seguir exiba o resultado na tela.
int mostra(int n)
{ int a = 20
return n + a;
}
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
2020.2
Estruturas de Dados
Aula 3 - Exercícios
EXERCÍCIO 04 – Analise o código abaixo e informa o que será exibido na tela após a execução do mesmo.
#include<iostream.h> // PARA USAR O COUT
#include<conio.h>
int m(int n)
{ int i;
for(i=0; i<3; i++)
n+=1;
return n;
}
int main()
{ cout<<m(8); //SO COM A DECLARAÇÃO DA BIBLIOTECA IOSTREAM.H // C++
getch();
return 0; //OPCIONAL
} 
EXERCÍCIO 05 – Codifique a função main() em C++, que invoque (chame) a função descrita abaixo, 
passando valores para a mesma via teclado(console).
#include<iostream>
using namespace std; 
void func1(int numero, char carac[30], float valor)
{ 
cout <<"Valores Informados = "<< numero <<" "<<carac<<" "<<valor;
}
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
2020.2
Estruturas de Dados
Aula 3 - Exercícios
EXERCÍCIO 06 – Codifique um programa em C++ que:
a - possua uma função que eleva um inteiro ao cubo.
b - observe que a função chamadora tem a oportunidade de examinar o resultado da chamada
de função antes de modificar o valor da variável numero. 
2019.2
Professor: Ediberto Mariano - Estrutura de Dados - Aula 03
2020.2
Estruturas de Dados
Aula 3 - Exercícios
EXERCÍCIO 07 – Analise o código em C a seguir:
//#include<iostream.h> 
#include <stdio.h>
#include<conio.h>
int f(int n)
{ if(n>10) return 3+f(n-2);
if(n<10) return 1;
return 0;
}
int m(int n)
{ int i;
for(i=0; i<3; i++)
n+=f(15);
return n;
}
int main()
{ //cout<<m(1500); //´SO COM A DECLARAÇÃO DA 
BIBLIOTECA IOSTREAM.H // C++
printf("%d",m(1500));
getch();
return 0; //OPCIONAL
}
Que resultado é 
impresso por esse 
código?
A[ ] 0
B[ ] 1530
C[ ] 1521
D[ ] 1528
E[ ] 1540

Continue navegando