Documente Academic
Documente Profesional
Documente Cultură
Aula 02
Funes e Apontadores
Professor Dr. Fbio Cappabianco
Professora Dra. Regina Coelho
Professor Dr. Tiago Oliveira
Roteiro
Funes e procedimentos.
Bibliotecas.
Escopo de declaraes.
Passagem de parmetros.
Recurso.
Apontadores.
Alocao dinmica.
Introduo Lgica de Programao
2/29
Funes e Procedimentos
Agrupamento de cdigo por semntica ou sub tarefa.
Organizao de programa.
Reutilizao de cdigo.
Portabilidade de cdigo.
So mais que um bloco:
Declaraes.
Instrues.
Lista de parmetros.
Retorno (Funes).
3/29
4/29
5/29
Bibliotecas
Coleo de estruturas de dados e funes.
Uso:
Modularizao.
Programa mais limpo.
Robustez.
Estrutura:
Arquivo hpp para cabealhos.
Arquivo cpp para implementao de funes.
Introduo Lgica de Programao
6/29
Bibliotecas Definio de
Estruturas de Dados
Uso:
Apelidos curtos.
Reutilizao.
Sintaxe:
typedef<tipo><nome_tipo>;
Exemplos:
typedefenum{masculino,feminino}tipo_sexo;
typedefstruct{
charnome[200];
intidade;
tipo_sexosexo;
}pessoa;
7/29
Bibliotecas - Exemplo
Arquivo matematica.hpp
#ifndefMATEMATICA_LIB
#defineMATEMATICA_LIB
typedefunsignedlonglongintinteiro;
inteiroFatorial(unsignedintentrada);
#endif
Arquivo matematica.cpp
#includematematica.hpp
inteiroFatorial(unsignedintentrada){
unsignedintcont;
inteiroresultado;
resultado=1;//clculodofatorial.
for(cont=2;cont<=entrada;cont++){
resultado*=cont;
}
return(resultado);
}
8/29
Bibliotecas - Uso
Arquivo combinacao.cpp
#include<iostream>
#includematematica.hpp
usingnamespacestd;
inteirofat1;
inteirofat2;
inteirofat3;
unsignedintn;
unsignedintm;
inteirocombinacao;
intmain(){
cin>>n;
cin>>m;
if(n<m){
cout<<Erro!;
return(0);
}
fat1=Fatorial(n);
fat2=Fatorial(m);
fat3=Fatorial(nm);
combinacao=fat1/(fat2*fat3);
cout>>Acombinaode<<n<<,<<m<<<<combinacao<<endl;
return(0);
}
9/29
Bibliotecas - Exerccio
1. Escreva uma biblioteca que contenha uma
estrutura de dados para armazenar os dados de
clientes de uma empresa contendo nome,
endereo, CPF e ltimas trs compras e funes
para criar um cliente, ou alterar os campos de
compras e de endereo.
10/29
Escopo de Declaraes
Onde as variveis e funes so vistas?
#include<iostream>
default://diretor
usingnamespacestd;
salario=10*SAL_MINIMO;
constfloatSAL_MINIMO=545.00;
break;
typedefenum{faxineiro,balconista,
gerente,diretor}cargo;
floattotal;
floatCalculaSalario(cargopessoa){
floatsalario;
return(salario);
}
intmain(){
switch(pessoa){
floatpagamento;
casefaxineiro:
floatdescontos;
salario=SAL_MINIMO;
cargofuncionario;
break;
cin>>funcionario;
casebalconista:
pagamento=CalculaSalario(funcionario);
salario=2*SAL_MINIMO;
cin>>descontos;
break;
total=pagamentodescontos;
casegerente:
cout<<Osalariode<<total<<endl;
salario=6*SAL_MINIMO;
return(0);
break;
11/29
intmain(){
usingnamespacestd;
floatnumero;
intnumero;
voidImprime(){
Imprime();
voidQuadrado(intnum){
numero=15;
cout<<num*num;
cout<<numero;
numero=
Quadrado(numero);
numero=10;
cout<<numero;
Quadrado(numero);
cout<<numero;
return(0);
intQuadrado(intnum){
return(num*num);
}
Oqueserimpressona
sadapadro?
12/29
13/29
Passagem de Parmetros
Necessidade de alterar o valor de um parmetro:
#include<iostream>
usingnamespacestd;
voidCalcularCubo(floatcubo){
cubo=cubo*cubo*cubo;
}
intmain(){
floatentrada;
floatcubo;
cin>>entrada;
cubo=entrada;
CalcularCubo(cubo);
cout<<Ocubode<<entrada<<<<cubo<<endl;
return(0);
}
Est correto?
14/29
15/29
16/29
Recurso
Como seria a sequncia de instrues e impresso do programa abaixo:
#include<iostream>
voidF4(){
usingnamespacestd;
F2();
voidF1(){
cout<<A4<<endl;
cout<<A1<<endl;
F3();
voidF2(){
intmain(){
F1();
F1();
cout<<A2<<endl;
F2();
cout<<main<<endl;
voidF3(){
F3();
cout<<A3<<endl;
F4();
F2();
return(0);
17/29
Volta de F2
18/29
Recurso - Definio
Uma funo que chama a si mesma.
Uma srie de chamadas da mesma funo
empilhada.
Componentes:
Chamadada recursiva.
Critrio de parada.
Funes e variveis declaradas esto em escopos
diferentes.
19/29
Recurso - Exemplo
1.#include<iostream>
13. intmain(){
2.usingnamespacestd;
14. floata;
18. cin>>b;
6. result=1;
19. r=Potencia(a,b);
7. }
20. cout<<Apotnciade
8. else{
<<a<<elevadoa<<b
9. result=x* <<<<r<<endl;
Potencia(x,y1); 21. return(0);
10. }
22. }
11. return(result);
12. }
20/29
Recurso - Exerccios
1. Escreva um programa que calcule recursivamente
um determinado elemento de uma progresso
aritmtica, dados o primeiro elemento, a razo e o
elemento procurado.
2. Escreva um programa que calcule recursivamente
um determinado elemento de uma progresso
geomtrica, dados o primeiro elemento, a razo e o
elemento procurado.
3. Escreva um programa recursivo para o clculo do
fatorial de um nmero inteiro.
Introduo Lgica de Programao
21/29
Apontadores
Definio: Uma varivel que guarda um endereo de
memria.
Chama-se apontador porque ele aponta para um endereo de
memria onde o dado utilizado realmente est.
Utilidade:
Outra maneira de acessar dados de outros contextos dentro de
funes.
Este recurso bastante utilizado em C, mas no em C++, pois C++
possui a passagem de parmetros por referncia.
22/29
Apontadores - Declarao
Sintaxe:
<tipo>*<nome>;
Exemplos:
int*acesso;
float*mem;
structpessoa{ ... } *gerente;
23/29
Apontadores - Acesso
...
int*acesso;
structpessoa{
charnome[200];
intidade;
floatsalario;
}*gerente;
...
*acesso=3;
*gerente.idade=25;
gerente>idade=25;
24/29
Desvantagens:
Pode ficar lento se no utilizar corretamente.
Mais difcil de programar.
Introduo Lgica de Programao
25/29
26/29
27/29
Apontadores - Exerccios
1. Utilize vetores dinmicos para calcular a mdia
das notas de 50 alunos em uma disciplinas. Os
valores lidos devem ser duas notas de prova de
mesmo peso. O programa deve tambm ler e
imprimir os nomes dos alunos.
2. Escreva um programa que leia em um vetor
ndice pluviomtrico em milmetros de chuva que
caiu em uma determinada cidade em um perodo
de meses. Calcule a mdia e o desvio padro do
perodo. O nmero de meses deve ser informado
pelo usurio. Utilize vetores dinmicos.
Introduo Lgica de Programao
28/29
29/29