• Nenhum resultado encontrado

Programação de Computadores I - 2019/2

N/A
N/A
Protected

Academic year: 2022

Share "Programação de Computadores I - 2019/2"

Copied!
24
0
0

Texto

(1)

Programação de Computadores I - 2019/2

CEFET-MG Funções

Slides adaptados da Profª. Cristina Duarte Murta

(2)

Introdução às funções

Exemplo de programa:

Escrever um programa que imprima o seguinte:

*************************      

Números entre 1 e 5

*************************

1 2 3 4 5

*************************

20 asteriscos

(3)

Introdução às funções

//demonstra a necessidade de definição de funções

#include<stdio.h>

int main() {

int i;

for (i=1; i<=20; i++) putchar('*');

putchar('\n');

puts("Números entre 1 e 5");

for (i=1; i<=20; i++) putchar('*');

putchar('\n');

for (i=1; i<=5; i++) printf("%d\n",i);

for (i=1; i<=20; i++) putchar('*');

putchar('\n');

}

(4)

Introdução às funções

//demonstra a necessidade de definição de funções

#include<stdio.h>

int main() {

int i;

for (i=1; i<=20; i++) putchar('*');

putchar('\n');

puts("Números entre 1 e 5");

for (i=1; i<=20; i++) putchar('*');

putchar('\n');

for (i=1; i<=5; i++) printf("%d\n",i);

for (i=1; i<=20; i++) putchar('*');

putchar('\n');

}

código repetido

O ideal seria não precisar repetir o código

e ainda assim obter o mesmo

efeito!

(5)

Solução: funções

Funções

pequeno trecho de código que faz uma única tarefa

recebe um nome específico (identificador)

maneira conveniente de encapsular uma computação

funções bem projetadas podem ser usadas sem preocuparmos com sua implementação

precisamos saber O QUE a função faz, não COMO ela faz

muitas linguagens oferecem o conceito de função

outros nomes para funções: procedimentos, subrotinas

(6)

Tipos de funções

funções pré-definidas pela linguagem

funções da biblioteca

definidas nos arquivos da biblioteca da linguagem

funções definidas pelo programador

escritas pelo programador nos programas...

Todo programa em C deve possuir uma função chamada main.

(7)

Funções

Objetivos da definição de funções

reduzir a complexidade de um programa

elaborar a solução em partes pequenas e bem definidas

uma tarefa complexa é dividida em funções

evitar a repetição de código ao longo do programa

diminui o tamanho do código

menos erros, menor custo, menor tempo de programação

reutilizar código

código já testado, sem erros => custo menor de programação e maior confiabilidade

essencial!

(8)

Características de uma função - parte I

uma função deve realizar uma única tarefa bem definida

toda função tem um nome único

serve para que a função seja invocada (chamada)

uma função pode ser chamada a partir de outras funções

por exemplo, a partir de main ( )

uma função deve ser programada de forma a fazer exatamente

o que se espera dela, sem efeitos colaterais

(9)

Características de uma função – parte II

o código da função deve ser independente do programa e deve ser tão genérico quanto possível

para que possa ser utilizado em outros programas

uma função pode receber parâmetros de execução para se adaptar a situações distintas e ser genérica

uma função pode retornar um valor como resultado de seu trabalho

comando return

(10)

Sintaxe das funções em C

Especificador_de_tipo nome_da_função ( lista de parâmetros ) { corpo da função

}

Especificador_de_tipo - especifica o tipo de valor que o comando return da função devolve, podendo ser qualquer tipo válido

nome_da_função - é um identificador escolhido pelo programador que não se deve repetir; segue as mesmas regras para definição de identificadores

lista de parâmetros - é uma lista de nomes e tipos de variáveis separadas por vírgulas, que recebem os valores dos argumentos quando a função é chamada

(11)

Corpo da função

Corpo da função: segue o cabeçalho da função e é escrito entre chaves { }

é constituído por instruções em C de acordo com a sintaxe da linguagem

 em C não se pode definir funções dentro de funções

 portanto, todas as funções estão no mesmo nível

Como é a execução de uma função:

sempre que uma função é invocada pelo programa, os comandos do corpo da função são executados, um a um, sequencialmente, até terminar o corpo da função ou até ser encontrada uma instrução return

Comando return: finaliza imediatamente a função

(12)

Funções: voltando ao exemplo inicial

Resolução do programa anterior recorrendo às funções

#include<stdio.h>

void linha() {

int i;

for (i=1; i<=20; i++)   putchar('*');

putchar('\n');

}

int main(){

  int i;

  linha();

  puts("Números entre 1 e 5");

  linha();

  for (i=1; i<=5; i++)   printf("%d\n",i);

  linha();

}

definição da função linha()

chamadas da

função

linha ()

(13)

Execução de uma função: como funciona

o código de uma função só é executado quando a função é chamada no programa

quando a função é chamada, a execução do programa "salta" para o início da função

as instruções da função são executadas uma a uma, sequencialmente

quando a execução da função termina, a execução do programa continua no comando seguinte à chamada da função

ao chamar a função, o programa pode enviar argumentos

a função receberá estes valores em seus parâmetros

(14)

Funções – tipo de retorno e parâmetros

tipo de retorno:

boa prática de programação: especificar SEMPRE o tipo de retorno

uma função pode não ter parâmetros

neste caso a lista de parâmetros é vazia

todos os parâmetros da função devem incluir o tipo e o nome da

variável

(15)

Passagem de parâmetros à função

//programa que define função abs

#include <stdio.h>

int abs (int x) {  //x é o número a ser analisado    return ( (x < 0 ) ? ­x : x );

}

int main ( )  {    int  num;

 printf ("Digite um valor:\n");

 scanf ("%d",  &num );

 printf ("Valor absoluto de %d é %d\n",num,abs(num));

}

Programa para imprimir o valor absoluto de um número

Chamada da função abs()

(16)

Parâmetros e argumentos

comunicação de uma função com o programa ou com outra função:

feita através de argumentos e parâmetros

a função define os parâmetros que pode receber

número e tipo

quem chama a função passa os argumentos

um argumento para cada parâmetro definido

e do mesmo tipo!

passagem de parâmetros é por valor:

o valor do argumento é copiado para o parâmetro

o parâmetro comporta-se como uma variável local

(17)

Parâmetros e argumentos

Exemplo

float exemplo (int i, char ch, float valor, double pi);

int main( ) {   int a; 

  char continua; 

  float valor; 

  double pi;

  float result;

  ...

  result = exemplo (a, continua, valor, pi);

  ...

}

variáveis locais à função main ()

parâmetros:

variáveis locais à função exemplo ()

argumentos passados de main() para exemplo()

(18)

Comando return

permite a atribuição de uma expressão a uma função

força o retorno imediato ao ponto de chamada da função

Ex:

float potencia (float base, int expoente) {    int  i;    

   float  resultado = 1;

   if (expoente == 0)      return 1;

   for (i = 1; i <= expoente; i++)       resultado *= base

   return  resultado; 

(19)

Funções que não retornam valores

o tipo de retorno é void

também conhecidas como procedimentos

#include <stdio.h>

void desenha();

int main() {    desenha();

   printf ("1a. funcao\n");

   desenha();

}

void desenha() {    int i;

   for (i = 0;  i <= 10;  i++) printf ("*");

   printf("\n");

***********

1a. funcao

***********

saída

(20)

Variáveis globais e locais

variáveis locais

são definidas dentro de uma função

são conhecidas apenas dentro do bloco da função

portanto, só podem ser usadas dentro do próprio bloco

são criadas quando são declaradas

são destruídas no final da execução da função: variáveis automáticas

variáveis globais

são variáveis criadas (definidas) fora de qualquer função

são conhecidas em todo o arquivo, a partir do ponto de definição

evite ao máximo o uso de variáveis globais!!

são complexas de administrar pois podem ser acessadas por qualquer função!

(21)

Escopo de variáveis

ESCOPO: região do programa onde a variável é válida void desenha ( ){

   int  i, j; // variáveis locais a desenha      .  .  .

}

void calcula ( ) {

    int i, j;  //variáveis locais a calcula     .  .  . 

int main ( )  {

int a;  //variável local a main   desenha();

a = i;     // erro de compilação .  .  .

i,j  em desenha() são variáveis diferentes de 

i,j em calcula()

(22)

Exercício: calcular a série

S(x, n) = x/1! + x

2

/2! + x

3

/3! + ... + x

n

/ n!

#include <stdio.h>

float serie (float x, int n);

float potencia (float base, int expoente); 

int fat (int n);

int main(){

  float x; 

  int  termos;

  printf("Numero de termos: "); 

  scanf("%d", &termos);

  printf("valor de X: "); 

  scanf("%f", &x);

  printf("O valor da série = %f\n ", serie(x, termos));

}

(23)

Continuação ...

float serie (float x, int n){

   int i;      

   float  resultado = 0;

   for (i = 1;  i <= n; i++)

     resultado  +=  (potencia(x,i)/fat(i));

   return resultado;

}  

float potencia (float base, int expoente){

  int i;   

  float  resultado = 1;

  if (expoente == 0)     return 1;

  for (i = 1;  i <= expoente;  i++)     resultado *= base;

  return resultado;

}

int fat (int n){

   int i, resultado = 1;

   for ( i = 1;  i <= n;  i ++)      resultado *= i;

   return resultado;

}

Importante:

observem que a impressão dos resultados está apenas

em main () !

Não há NENHUM printf() nem

scanf() nas funções, apenas

cálculos...

(24)

Protótipos de função e organização do programa

protótipo de uma função

corresponde a seu cabeçalho seguido de ;

declara a função ao compilador, seus parâmetros e tipo de retorno

organização do programa

boa prática de programação

declarar todas as funções após os #include e #define

e antes do main ( )

as definições das funções vêm após o main ( )

Referências

Documentos relacionados

Curvas de rarefação (Coleman) estimadas para amostragens de espécies de morcegos em três ambientes separadamente (A) e agrupados (B), no Parque Estadual da Ilha do Cardoso,

Conforme Saldanha (1978), avaliação é um tema de fundamental importância no contexto do ensino. Destaca-se não só como um recurso de controle das mudanças de

5.3 Fator de condição das espécies Astyanax fasciatus e Astyanax bimaculatus Para a análise do fator de condição foram aferidos os valores das mesmas estatísticas realizadas para

Inevitavelmente, cabe reiterar, todas as transformações pelas quais tanto a Mongólia quanto a Rússia passaram ao longo dos séculos acabaram determinando o modo

Quando perguntamos ao professor sobre a preferência dele em trabalhar com aulas mistas ou turmas especificas para meninos e meninas, e o que seria mais adequado para

10 O texto diz que a velha levantou a saia e mostrou ao jovem ―la scena voscareccia.‖.. O último desses objetos suscita na princesa impostora um desejo incontrolável de

Pela primeira vez foi organizado e produzido um livro com a participação de inúmeros filiados denominado &#34;Cerimonial por Cerimonialistas&#34;, lançado por ocasião da realização

O presente trabalho relata um caso de periodontite apical assintomática, abscesso periapical crônico, cuja história clínica é de uma paciente que se apre- sentou para