13
Funções Escola Secundária Filipa de Vilhena

mod3-programação-estruturada

Embed Size (px)

Citation preview

Funções  

Escola  Secundária  Filipa  de  Vilhena  

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