Programação de Computadores I

24 

Full text

(1)

Programação de Computadores I

Engenharia de Computação

2018/2

CEFET-MG

(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

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

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

código

repetido

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

e ainda assim obter o mesmo

(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

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

(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

(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

(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

(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

(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

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

(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

(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

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

}

Programa para imprimir o valor absoluto de um número

Chamada da função

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

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

...

exemplo

(a, continua, valor, pi);

...

}

variáveis locais

à função main ()

parâmetros:

variáveis locais

à função

exemplo ()

argumentos passados de

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

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

return 0; }

void desenha() { int i;

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

printf("\n"); }

***********

1a. funcao

***********

(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

(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

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

(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

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

Figure

Updating...

References

Updating...

Download now (24 página)