2. Programação
Estruturada???
O
que
vou
ter
de
saber
no
final
deste
módulo
…
espero
eu
…
§ Blocos
de
um
programa,
variáveis
locais
e
globais;
§ Procedimentos
e
funções;
§ Subprogramas,
parâmetros
e
argumentos;
§ Recursividade;
§ Passagem
de
argumentos
por
valor
e
por
referência;
Sóóóóóóó???
3. Agora
que
já
sabem
programar
em
C++
…
sabem???
Hmmmmm…
em
C++???
Mas
o
que
é
isso??
Vamos
começar
a
falar
de
funções
e
pode-‐se
começar
logo
por
aquela
que
é
a
mais
conhecida
das
funções
e
que
vocês
já
tratam
por
tu,
cuidado
com
as
confianças,
que
é
a
função
…
…
int
main()
ou
simplesmente
main()
…
Que
função
é
esta???
Ainda
esta
pergunta
…
É
a
função
principal
de
um
programa
em
C++
e
indispensável
para
o
seu
funcionamento.
Mas
já
utilizou
outras
funções
ainda
que
camufladas
…
Como???
Através
da
directiva
#include
…
#include<string.h>
(manipular
strings)
à
strlen,
strcmp,
strcopy
#include<math.h>
(funções
matemáticas)
à
sqrt,
pow,
sin,
cos,
…
#include<iostream>
(directavas
de
input
/
output)
à
cin,
cout
,…
4. Mas
não
existem
funções
para
todas
as
situações.
Podia
haver
…
mas
não
era
a
mesma
coisa,
daí
que
o
utilizador
tenha
necessidade
de
criar
as
suas
próprias
funções
para
situações
especificas
…
a
vantagem
é
que
essas
funções
podem
ser
facilmente
criadas
/
utilizadas
/
partilhadas
em
outras
situações
(programas)
semelhantes.
O
que
são
então
funções???
§ Unidades
de
código
fundamentais
com
que
se
escrevem
e
estruturam
os
programas
de
forma
a
aproveitar
as
potencialidades
da
programação
estruturada
que
a
linguagem
C++
oferece;
§
São
também
unidades
de
código
/
rotinas,
que
executam
uma
sequência
de
instruções,
que
para
além
disso,
podem
devolver
um
valor
para
o
ponto
onde
são
chamadas;
§
De
uma
forma
mais
simples,
pode-‐se
dizer
que
é
um
bloco
de
instruções
que
é
executado
quando
é
chamada
em
alguma
parte
do
programa.
5. Agora
que
já
sabem
o
que
são
funções,
uma
pergunta
se
impõe
…
já
acabou???
Oooooops,
não
é
essa…
é
mais
esta:
Qual
a
sintaxe
de
uma
função
e
como
funciona???
<tipo_dados>
<nome_função>(tipo_arg
<arg1>,
tipo_arg
<arg2>,
…)
{
<conjunto_de_instruções>
}
§
<tipo_dados>
–
tipo
de
dados
devolvido
pela
função,
que
podem
ser
…
;
§
<nome_função>
–
identificador
pela
qual
a
função
é
conhecida.
Regras
para
definição
de
um
identificador
são
as
mesmas
que
para
as
variáveis;
§
<argumento
1>,
<argumento
2>,...
–
um
argumento
é
como
uma
declaração
de
uma
variável
dentro
da
função.
Os
argumentos
permitem
passar
parâmetros
para
dentro
da
função
quando
esta
é
invocada.
Os
diferentes
parâmetros
tem
que
ser
separados
pelo
operador
vírgula
(“,”);
A
chamada
a
esta
função,
no
main(),
seria
algo
do
género:
<nome_da_função>(argumento1,
argumento2,
…);
6. Uma
função
pode
ter
qualquer
número
de
argumentos,
até
mesmo
…
nenhum
…
Oooooops,
não
é
essa…
é
mais
esta:
Qual
a
sintaxe
de
uma
função
e
como
funciona???
<tipo_dados>
<nome_função>()
{
<conjunto_de_instruções>
}
A
chamada
a
esta
função
sem
argumentos,
no
main(),
seria
algo
do
género:
<nome_da_função>();
IMPORTANTE:
As
funções
devem
ser
sempre
(e
todas)
declaradas
antes
do
main();
7. Actividade
Exemplo:
Escreva
um
programa
que
recorra
a
uma
função,
soma,
para
fazer
a
soma
de
dois
números
inteiros
e
que
retorne
esse
valor
à
função
main(),
onde
é
apresentado
no
ecrã.
#include<iostream>
using
namespace
std;
int
main
(
)
{
int
a
,
b;
cout
<<
“Introduza
1º
valor:
“
<<
endl;
cin
>>
a;
cout
<<
“Introduza
2º
valor:
“
<<
endl;
cin
>>
b;
system(“cls”);
cout
<<
"Resultado
:
"
<<
soma
(a
,
b)
;
system(“PAUSE”);
}
O
que
falta
neste
programa?
…
função
para
fazer
a
soma…
Onde
a
vai
implementar????
…
antes
do
main()
…
Qual
o
nome
da
função???
…
soma
…
Número
de
argumentos…
…
dois
(soma
de
2
valores)…
Tipo
da
função???
…
int
(soma
de
inteiros)…
8.
Devolve
um
valor
inteiro
para
o
sítio
da
chamada
da
função.
Faz
chamada
à
f u n ç ã o
p a r a
obter
o
valor
da
s o m a
d o s
2
números…
A
chamada
tem
o
n o m e
d a
função:
soma
E
os
dois
valores
a
somar:
a
e
b.
Recebe
os
dois
parâmetros
/
argumentos,
em
que:
n1
=
a
/
n2
=
b
Apenas
localmente
(dentro
da
função)…
Vamos
tentar
fazer
a
função
de
soma
dos
dois
valores???
Que
entusiasmo...
9. Vejamos
uma
aplicação
da
mesma
função
num
outro
contexto:
(1)
Chama
a
função
soma,
em
que:
n1
fica
com
o
valo:
5
n2
fica
com
o
valor:3
(3)
Retorna
o
valor
de
r
para
o
local
da
chamada
da
função
no
main:
r
tem
o
valor:
7
Esse
valor
é
guardado
em
z
e
enviado
para
o
ecrã.
(2)
Soma
os
valores:
n1
+
n2
E
guarda-‐o
em
r,
depois
envia-‐o
para
O
local
da
chamada
no
main().
10. Actividade
1:
Calcule
a
área
de
um
circulo,
em
que
o
raio
é
introduzido
pelo
utilizador.
A
fórmula
da
área
é:
PI
*
raio
*
raio
a)
Implemente
o
programa
anterior
sem
funções;
b)
Faça
agora
o
mesmo
exercício
mas
utilizando
funções.
Algumas
Notas:
Utilize
o
define
para
definir
PI
como
3.14…
A
área
de
um
circulo
não
é
um
valor
inteiro…
Utilize
a
função
pow(valor,expoente)
que
pertence
à
biblioteca
math.h…
Actividade
2:
Elabore
um
programa,
que
utilize
uma
função,
que
verifique
se
um
número
introduzido
pelo
utilizador
é,
ou
não,
perfeito.
Exemplo:
Divisores
de
28:
1,
2,
4,
7,
14
Soma
dos
divisores:
1
+
2
+
4
+
7
+
14
=
28
Conclusão:
28
é
perfeito…
perfeito
:o)
11. Actividade
3:
Utilize
funções
para
escrever
uma
implementação
possível
para
as
seguintes
funções
matemáticas:
a) Quadrado
de
um
número;
b) Potência
(x
^
-‐>3
^
2
=
9-‐>2
^
3
=
8);
Actividade
4:
Utilize
a
função
soma
da
aula
anterior
de
forma
a
somar
n
valores
introduzidos
pelo
utilizador.
Deve
também
pedir
ao
utilizador
o
número
de
valores
que
vai
inserir
(n).
12. ¡ Já
que
estão
cheios
de
energia,
que
tal
queimá-‐las
com
mais
(poucas
...)
umas
actividades???
¡ Actividade
5
(Passagem
de
um
vector
como
argumento):
Será
possível
passar
um
vector
como
argumentos
para
uma
função???
Já
devem
perceber
que
em
Informática
não
há
impossíveis,
para
além
de
que
o
título
desta
actividade
possa
ser
sugestivo
e
tendencioso
:o)
analise
então
a
função
abaixo
...
Qual
o
objectivo
da
função
que
se
segue???
Como
chamaria
esta
função,
tendo
em
conta
os
conhecimentos
que
adquiriu
até
ao
momento
sobre
funções???
void
dobro(int
vec[],
int
x)
{
int
i;
for(i=0;
i
<
x;i++)
{
vec[i]
=
vec[i]
*
2;
}
13.
¡ Actividade
6:
Utilize
a
actividade
5
e
modifique-‐a
de
forma
a
que
a
função
calcule
a
soma
de
todos
os
valores
de
um
vector
e
a
imprima
(à
soma)
na
função
principal
(main()).
¡ Actividade
7:
Para
o
auxiliar
nesta
actividade,
cada
um
terá
no
seu
mail
um
ficheiro
com
a
implementação
de
um
possível
algoritmo
de
ordenação
(existem
diversos
algoritmos
de
graus
de
complexidade
/
eficiência
diferentes)
cujo
funcionamento
será
analisado
nas
aulas.
Esta
actividade
consiste
em
gerar
/
ordenar
/
apresentar
uma
chave
do
euromilhões
...
O
objectivo
é
que
nesse
ficheiro
implemente
as
seguintes
funções:
-‐
GeraChave
Aleatoria()-‐>gera
/
guarda
5
números
aleatórios
no
vector;
-‐
ImprimeBoletim()-‐>imprime
boletim
em
que
no
lugar
dos
números
gerados
aparece
“xx”;
Nos
entretantos
deve
chamar
a
função
OrdenaVetor()
para
que
a
chave
seja
ordenada
...