Upload
diogoa21
View
63
Download
0
Embed Size (px)
Citation preview
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óóóóóóó???
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 ,…
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.
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, …);
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();
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...
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().
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)
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).
¡ Ja que estão cheios de energia, que tal queima-‐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???
Ja 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;
}
¡ 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 tera 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 ...