Your SlideShare is downloading. ×
P13 08
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

P13 08

21
views

Published on


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
21
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Programação MEAer e MEEC Bertinho Andrade da Costa 2013/2014 1º Semestre Instituto Superior Técnico Análise de Funções – I Instruções de ciclo while, e for Programação DEEC-IST Análise de Funções - I 1
  • 2. Sumário   Programação estruturada Funções    Sintaxe Definição, declaração e utilização de uma função Argumentos de uma função:     Parâmetros formais Parâmetros actuais Passagem por valor Valor de retorno Programação DEEC-IST Análise de Funções - I 2
  • 3. Programação estruturada     Até agora os programas e problemas que foram apresentados têm sido simples. Mas como é que se deve abordar e desenvolver programas de complexidade elevada? O método consiste em dividir um problema complexo em problemas mais simples. Para começar é necessário compreender o problema como um todo, o objectivo e as restrições. Depois é necessário dividir o problema em partes (subproblemas) que sejam de resolução mais simples. Cada parte é designada de módulo. O processo de subdivisão do problema em subproblemas mais simples é designado de abordagem topdown. A representação do processo é feita utilizando um quadro estruturado (“structure chart”). Módulo Principal Módulo 1a Programação DEEC-IST Módulo 1b ... Módulo 2 Módulo 1 Mód. 2a Mód. 2b Análise de Funções - I Mód. 2b Módulo n Mód. na Mód. nb 3
  • 4. Programação estruturada   A implementação da solução pode ser realizada recorrendo a três conceitos (construtores) básicos: Sequenciação; Selecção; e Repetição de acções. A programação que é baseada nos três conceitos acima descritos é designada de programação estruturada, e foi divulgada por Edsger Dijkstra. (http://www.cs.utexas.edu/users/UTCS/notices/dijkstra/ewdobit.html)   Em C, a implementação de uma solução que involva o conceito de abordagem top-down é realizado recorrendo a funções. Uma função em C (incluindo a função main) constitui um módulo independente que pode ser chamada para execução (invocada) para realizar um trabalho ou tarefa específica. Programação DEEC-IST Análise de Funções - I 4
  • 5. Funções  Uma função pode invocar outras funções.     Lembre-se da função main! A função que é chamada (“called function”) recebe o controlo da função que chama (“calling function”). Quando a função termina a sua tarefa, retorna o controlo, passa para a função que a chamou, ou para o sistema operativo caso seja a função main a terminar. Note-se que um programa é constituido por várias funções, mas a execução começa sempre pela função main (função principal). Num programa só pode existir uma função principal main. Existem duas técnicas de passagem de dados para dentro de funções, sendo utilizada uma lista de argumentos que define o número e o tipo de dados que recebe.  Passagem por valor   É realizada uma cópia dos dados, e a cópia dos dados é passada para a função. Passagem por apontador (também designada de passagem por endereço, referência)  Programação DEEC-IST É feita uma cópia dos endereços das variáveis que tem os dados, a cópia do endereço é enviada para a função. Neste caso a função pode modificar os dados através dos endereços das variáveis que contém os dados. Análise de Funções - I 5
  • 6. Funções  Noção de função:  Uma função matemática consiste numa relação entre os elementos de um conjunto, o domínio da função (por exemplo R), e os elementos de outro conjunto, o contradomínio da função (por exemplo R), tal que os elementos do domínio da função têm uma imagem única no contradomínio.  Seja x um elemento do conjunto domínio (R) A definição de uma função pode ser da forma seguinte: f(x) = x2+2x+1 Resultado da operação de f sobre x é representado por: y = f(x) Programação DEEC-IST Análise de Funções - I 6
  • 7. Funções  As funções na linguagem C partilham algumas propriedades das funções matemáticas:  Nome: As funções em C são identificadas por um nome, desta forma um conjunto de instruções passa a ser chamado para execução através do nome da função. O nome é utilizado na definição, declaração e invocação da função.  Lista de argumentos: Usada para passar informação para dentro da função. Se não for necessário deve-se utilizar o tipo void que indica que a função não tem argumentos.  Corpo da função: Consiste numa instrução composta { }, que define as acções a serem realizadas.  Valor de retorno: As funções podem retornar um valor de um tipo, que resultam em regra das acções que são executadas sobre os dados que são passados atráves da lista de argumentos. Se a função não devolve qualquer tipo de valor então devese utilizar o tipo void que serve para indicar esse facto. Atenção: As funções do tipo void não podem ser utilizadas em expressões. Programação DEEC-IST Análise de Funções - I 7
  • 8. Funções  Vantagens:      As funções permitem que os programas sejam mais compactos e de leitura mais fácil. Permitem implementar a abordagem de decomposição em subproblemas mais simples, abordagem top-down. Permitem que se reutilize código que já tenha sido desenvolvido e testado. Como exemplo considere as funções matemáticas com protótipos no math.h Permite proteger a manipulação de dados. Efeitos laterais:   Uma função pode alterar o estado do programa, contéudo de variáveis, sequência de acções a serem executadas. Uma função pode ler dados do teclado ou de ficheiros, pode escrever dados no ecrã ou em ficheiros, ou pode alterar o conteúdo de variáveis da função que a invocou (caller function). Programação DEEC-IST Análise de Funções - I 8
  • 9. Funções  Com a utilização adequada de funções, o desenvolvimento dos programas é mais rápido. A escrita, a depuração, a manutenção e a alteração dos programas é em princípio mais fácil.  As funções podem ser agrupadas em bibliotecas.    Neste caso, as funções foram desenvolvidas pelo fabricante do compilador, do computador ou do sistema operativo. O programador tem que saber como é que pode utilizar essas funções e como é que deve informar o compilador para que este tenha acesso à biblioteca adequada. As funções podem ser desenvolvidas pelo programador.   Neste caso o programador tem que saber qual é a sintaxe de definição de uma função e como é que é invocada para execução. Tem que saber como é que deve indicar ao compilador a existência de novas funções.  Note-se que quando se desenvolve um programa é necessário definir a função main. O computador começa a executar um programa sempre a partir da função main. Programação DEEC-IST Análise de Funções - I 9
  • 10. Funções  Sintaxe: Tipo da função Nome da função ( Lista de argumentos ) Declarações Exemplo: Instruções { float produto (float x, float y) { float z; /* declaração */ } Programação DEEC-IST z = x * y; return (z); /* Instrução */ /* retorno do valor */ } Análise de Funções - I 10
  • 11. Funções  Análise do exemplo: Nome da função Tipo da função Lista de argumentos, definição do tipo de argumentos e número de argumentos que são utilizados para passar informação do exterior da função para dentro da função float produto (float x, float y) { float z; declaração de uma variável local à função z = x * y; Acesso e manipulação da informação que é passada para a função return (z); } Programação DEEC-IST retorno do valor para o exterior da função Análise de Funções - I 11
  • 12. Definição e utilização de funções Regras:  Em C, não se pode definir (construir) uma função dentro de outra função.  O compilador tem de conhecer a função antes de a utilizar (executar a função).  Estas duas regras aplicadas ao código que se apresenta fazem com que a função produto tenha que ser declarada antes da função main.  Há uma alterantiva que consiste em apresentar o protótipo da função (cabeçalho da função seguido de um ponto e vírgula) antes da função main, e definir a função depois da função main. Resultado do programa: Produto de Programação DEEC-IST 3 * 4 = #include <stdio.h> /* -- Definicao da funcao produto --*/ float produto (float x, float y) { float z; z = x * y; return (z); } /* --- Função main --- */ int main( void ) { int i = 4; printf("Produto de %2d * %2d = %6.2f n", i-1, i, produto(i-1,i)); return (0); } 12.00 Análise de Funções - I 12
  • 13. Parâmetros formais e actuais  Parâmetros formais: Na definição de uma função é necessário definir a lista de argumentos da função, isto é, o tipo e o número de variáveis assim como o respectivo nome que servem de suporte para a passagem de informação de fora para dentro da função. Essas variáveis são designadas de parâmetros formais da função, são necessários para definir a “forma” da função.  No exemplo da função produto as variáveis x e y são os parâmetros formais. /* Parametros formais */ float produto (float x, float y) { float z; z = x * y; return (z); } Programação DEEC-IST Análise de Funções - I 13
  • 14. Parâmetros formais e actuais   Parâmetros actuais: Quando uma função é chamada para execução, é incluido na lista de argumentos um conjunto de variáveis e valores constantes em número e de tipo compatível com a lista de argumentos existente na definição da função. Essas variáveis e constantes designam-se por parâmetros actuais. Note-se que antes de a função ser executada é feita uma cópia dos valores dos parâmetros actuais para os parâmetros formais. Atribuições que sejam realizadas dentro da função às variáveis da lista de argumentos da função (parâmetros formais) não alteram o conteúdo dos parâmetros reais. Esta forma de passagem de informação para a função é chamada de passagem por valor. int main( void ) { int i=4; /* Parametros actuais */ printf("Produto de %2d * %2d = %6.2f n", i-1, i, produto(i-1,i)); return (0); } Programação DEEC-IST Análise de Funções - I 14
  • 15. Funções  Problema: Desenvolva um programa para representar um gráfico no ecrã. O programa lê do teclado 5 números inteiros positivos. Cada número é apresentado numa linha do ecrã através de uma sequência de asteriscos, em que há a correspondência de um asterisco por cada unidade.  Resolução: Acções do programa  Leitura dos números    printf(“Introduza 5 números >= 0:”); scanf(“%d %d %d %d %d”, &a, &b, &c, &d, &e); Para cada número, escrever numa linha do ecrã a sequência de asteriscos adequada.  1ª Solução: Repetir as mesmas instruções 5 vezes  2ª Solução: Construir uma função que é invocada 5 vezes. Programação DEEC-IST Análise de Funções - I 15
  • 16. Funções  Problema: 1ª Solução (introdução da instrução de ciclo while) #include <stdio.h> /*codigo para imprimir o * c vezes */ int main( void ) { i=1; while(i<=c) { int i; printf("*"); int a, b, c, d, e; ++i; printf("Introduza 5 numeros >= 0:n"); } scanf("%d %d %d %d %d", &a, &b, &c, &d, &e); printf("n"); /*codigo para imprimir o * a vezes */ i=1; /*codigo para imprimir o * d vezes */ while(i<=a) { i=1; while(i<=d) { printf("*"); ++i; printf("*"); /* i = i + 1*/ ++i; } } printf("n"); printf("n"); /*codigo para imprimir o * b vezes */ /*codigo para imprimir o * e vezes */ i=1; i=1; while(i<=b) { while(i<=e) { printf("*"); printf("*"); ++i; ++i; } } printf("n"); printf("n"); return (0); } Programação DEEC-IST Análise de Funções - I 16
  • 17. Funções  Problema: 2ª Solução: #include <stdio.h> void Imprime(int x) { int i; /* variavel local a funcao */ /*codigo para imprimir o * x vezes */ i=1; while(i<=x) { printf("*"); ++i; /* i = i + 1*/ int main( void ) { int a, b, c, d, e; printf("Introduza 5 numeros >= 0:n"); scanf("%d %d %d %d %d", &a, &b, &c, &d, &e); } printf("n"); Imprime(a); Imprime(b); Imprime(c); Imprime(d); Imprime(e); return; /* Atencao ao void */ } Resultado do programa: Introduza 5 numeros >= 0: 4 6 8 10 6 **** ****** ******** ********** ****** Programação DEEC-IST return (0); } Análise de Funções - I 17
  • 18. Funções  Problema: 3ª Solução (introdução da instrução de ciclo for) #include <stdio.h> void Imprime(int x) { int i; /* variavel local a funcao */ /*codigo para imprimir o * x vezes */ for (i=1; i<=x; ++i) printf("*"); printf("n"); int main( void ) { int a, b, c, d, e; printf("Introduza 5 numeros >= 0:n"); scanf("%d %d %d %d %d", &a, &b, &c, &d, &e); Imprime(a); Imprime(b); Imprime(c); Imprime(d); Imprime(e); return; /* Atencao ao void */ } Resultado do programa: Introduza 5 numeros >= 0: 4 6 8 10 6 **** ****** ******** ********** ****** Programação DEEC-IST return (0); } Análise de Funções - I 18
  • 19. Programação DEEC-IST Análise de Funções - I 19