Programação de Computadores I

Livre

0
0
24
1 year ago
Preview
Full text

  Programação de Computadores I

Engenharia de Computação

2018/2

  

CEFET-MG

Slides adaptados da Profª. Cristina Duarte Murta Introdução às funções

Exemplo de programa:

  Escrever um programa que imprima o seguinte:

  • Números entre 1 e 5
  • 20 asteriscos

  1

  2

  3

  4

  5

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'); return 0;

  } 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++) código putchar('*'); putchar('\n'); repetido puts("Números entre 1 e 5"); for (i=1; i<=20; i++) putchar('*'); putchar('\n');

  O ideal seria

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

  não precisar

  printf("%d\n",i);

  repetir o código

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

  e ainda assim

  putchar('*');

  obter o mesmo

  putchar('\n');

  efeito!

  return 0; 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 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. 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! 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

  ● 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 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
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 Funções: voltando ao exemplo inicial Resolução do programa anterior recorrendo às funções

  #include<stdio.h>

  void linha() { definição da int i; for (i=1; i<=20; i++) função putchar('*'); linha() putchar('\n'); }

  int main(){ int i;

  linha();

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

  chamadas da linha(); função

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

  linha ()

  printf("%d\n",i);

  linha(); return 0; 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 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 Passagem de parâmetros à função

Programa para imprimir o valor absoluto de um número

  //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)); return 0; }

  Chamada da função abs() 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 Parâmetros e argumentos Exemplo

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

int main( ) { int a; char continua; variáveis locais float valor;

  à função main () double pi; ... exemplo (a, continua, valor, pi); parâmetros: ...

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

  argumentos passados de main() para exemplo() 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;

  }

  Funções que não retornam valores o tipo de retorno é void também conhecidas como procedimentos

  #include <stdio.h> void desenha(); int main() {

  saída

  desenha();

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

  1a. funcao

  return 0;

  • } void desenha() { int i; for (i = 0; i <= 10; i++) printf ("*"); printf("\n");
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! 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

  i,j em desenha()

  . . .

  são variáveis

  }

  diferentes de i,j em

  int main ( ) {

  calcula()

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

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

  } Exercício: calcular a série

  2

3 n

S(x, n) = x/1! + x /2! + x /3! + ... + x / 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)); return 0; } Continuação ... float serie (float x, int n){ int i; float resultado = 0; for (i = 1; i <= n; i++)

  Importante: resultado += (potencia(x,i)/fat(i)); observem que a impressão return resultado; dos resultados está apenas

  } em main ()! float potencia (float base, int expoente){ int i; float resultado = 1; if (expoente == 0) return 1; for (i = 1; i <= expoente; i++) resultado *= base;

  Não há return resultado;

  NENHUM } printf() nem int fat (int n){ int i, resultado = 1; scanf() nas for ( i = 1; i <= n; i ++) funções, apenas resultado *= i; cálculos... return resultado; }

  

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 ( )

Novo documento