Sunteți pe pagina 1din 29

Curso de Vero 2013

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).

Introduo Lgica de Programao

3/29

Funes e Procedimentos Declarao


Sintaxe:
<tiporetorno><nome>(<parmetros>){
<declaraes>
<instrues>
}
<tiporetorno>: tipos simples.
void para procedimentos.
<parmetros>: semelhante a declaraes.
<tipo><nome>
Exemplo:
floatSoma(floatp1,floatp2){
floatsoma;
soma=p1+p2;
return(soma);
}

Introduo Lgica de Programao

4/29

Funes e Procedimentos Exerccios


1. Escreva uma funo que valide uma entrada
pelo teclado para garantir que um nmero inteiro
digitado seja maior que 0.
2. Escreva uma funo que calcule o fatorial de
um nmero inteiro no negativo.
3. Escreva uma funo que calcule o MDC de
dois nmeros inteiros.
4. Escreva uma funo que retorne o maior entre
dois nmeros inteiros.
Introduo Lgica de Programao

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;

Introduo Lgica de Programao

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);
}

Introduo Lgica de Programao

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);
}

Introduo Lgica de Programao

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.

Introduo Lgica de Programao

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;

Introduo Lgica de Programao

11/29

Escopo de Declaraes Sobrecarga


#include<iostream>

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?

Introduo Lgica de Programao

12/29

Escopo de Declaraes - Exerccios


1. Escreva um programa que leia do teclado uma
frequncia e um comprimento de onda e imprima a
velocidade da onda. O programa deve utilizar uma
funo global que retorne um nmero do tipo float para
calcular a velocidade. Utilize todas as variveis locais.
2. Escreva um programa que leia o nmero de prtons
e de nutrons de um tomo e imprima a sua massa
atmica. Utilize uma funo local funo main para
calcular a massa atmica e utilize apenas variveis
globais.
Introduo Lgica de Programao

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?

Introduo Lgica de Programao

14/29

Passagem de Parmetros Referncia


No! Correo:
#include<iostream>
usingnamespacestd;
voidCalcularCubo(float&cubo){
cubo=cubo*cubo*cubo;
}
intmain(){
floatentrada;
floatcubo;
cin>>entrada;
cubo=entrada;
CalcularCubo(cubo);
cout<<Ocubode<<entrada<<<<cubo<<endl;
return(0);
}

Introduo Lgica de Programao

15/29

Passagem de Parmetros Exerccios


1. Escreva uma funo que troque os valores de duas
variveis inteiras passadas por parmetro.
2. Escreva uma funo que calcule o valor mnimo e
mximo existentes em um vetor e retorne em dois
parmetros os resultados.
3. Escreva um programa que leia um valor em reais e o
converta para dlares ou euros. A converso deve ser
realizada por uma funo. A funo deve retornar o valor
convertido e deve ter dois parmetros, sendo o valor em
reais e a espcie da moeda a ser convertida. Pegue a
cotao das moedas na internet.

Introduo Lgica de Programao

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);

Introduo Lgica de Programao

17/29

Recurso Pilha de Execuo


No programa anterior, o computador grava o endereo
de retorno ao fazer a chamada de uma funo.
Chama F1 empilha main(01)
Volta de F1

Chama F2 empilha main(02)


Chama F1 empilha F2(01)
Volta de F1

Volta de F2

Chama F3 empilha main(04)


...

Introduo Lgica de Programao

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.

Introduo Lgica de Programao

19/29

Recurso - Exemplo
1.#include<iostream>

13. intmain(){

2.usingnamespacestd;

14. floata;

3. floatPotencia(floatx, 15. intb;


inty){
16. floatr;
4. floatresult;
17. cin>>a;
5. if(y==0){

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. }

Pilha de execuo para a=2.0 e b=4?

Introduo Lgica de Programao

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.

Alocao dinmica de memria.


Acessar elementos de listas ou de outras estruturas de dados
no sequenciais.

Introduo Lgica de Programao

22/29

Apontadores - Declarao
Sintaxe:
<tipo>*<nome>;
Exemplos:
int*acesso;
float*mem;
structpessoa{ ... } *gerente;

Introduo Lgica de Programao

23/29

Apontadores - Acesso
...
int*acesso;
structpessoa{
charnome[200];
intidade;
floatsalario;
}*gerente;
...
*acesso=3;
*gerente.idade=25;
gerente>idade=25;

Introduo Lgica de Programao

24/29

Alocao Dinmica - Definio


Atravs de um apontador, reservar um espao
de memria que pode ser acessado em qualquer
contexto.
Vantagens:
A memria pode ser reservada e liberada de maneira
tima.
D mais flexibilidade.

Desvantagens:
Pode ficar lento se no utilizar corretamente.
Mais difcil de programar.
Introduo Lgica de Programao

25/29

Alocao Dinmica - Definio


Sintaxe:
<apontador>=new(<tipo>);
delete(<apontador>);
Exemplo:
#include<cstdlib>
#include<iostream>
usingnamespacestd;
intmain(){
int*acesso;
acesso=new(int);
*acesso=10;
cout<<*acesso<<endl;
delete(acesso);
return(0);
}

Introduo Lgica de Programao

26/29

Alocao Dinmica - Vetores


#include<cstdlib>
#include<iostream>
usingnamespacestd;
intmain(){
float*nota,i;
nota=new(int[10]);
for(i=0;i<10;i++)
cin>>nota[i];
cout<<Notasmaioresque5.0:<<endl;
for(i=0;i<10;i++){
if(nota[i]>=5.0)
cout<<nota[i]<<endl;
}
delete(nota);
return(0);
}

Introduo Lgica de Programao

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

Para a prxima aula


Implemente o exerccio da aula anterior por meio de uma biblioteca de
nome terminal.
O arquivo principal deve apenas conter o controle do fluxo do
programa e chamar as funes da biblioteca terminal.
As funes de cadastro, apagar usurio, saque, depsito e extrato devem ser
implementadas agora em funes da biblioteca.
Os dados cadastrais dos clientes estar em um registro definido na biblioteca.
Desta vez, aloque os vetores de cadastros dinamicamente.
Utilize um limite mximo de 100 usurios. A memria pode ser sempre alocada com o
tamanho mximo.

No esquea de liberar a memria ao sair do programa.

Introduo Lgica de Programao

29/29

S-ar putea să vă placă și