MODULARIDADE E FUNÇÕES
(SUB-ROTINAS)
O que são funções numa visão computacional?
Uma caixa preta que recebe uma entrada e retorna uma saída
Introdução
sqrt
Entrada Ex.: 64
Saída Ex.: 8 Função
// exemplo do uso de funções
#include <stdio.h>
#include <stdlib.h> #include <math.h>
int main() {
double area;
printf ("Digite a área da sua casa em metros quadrados: ); scanf %lf ,&area);
double lado;
lado = sqrt(area); // chamada da função sqrt
printf("Isso é o equivalente a um quadrado com %f metros de
lado , lado ;
system("pause"); // chamada da função system
return 0; }
O que são funções numa visão matemática?
f : D Y
Uma função é uma lei que associa elementos do conjunto D a elementos do conjunto Y
D é chamado de domínio da função
Y é chamado de imagem da função
Exemplos:
f(x)=2x+1 f: R R f(x)=7 f: R R
Introdução
Domínio e imagem da função
1
2
5
f(x)=2x+1 f:RR
f(x)=7 f:RR
3
5
11
1
2
5
7
Introdução
O domínio e imagem da função definem a
interface da função
f(x) = 2x+1 f:RR
sqrt
Entrada Ex.: 64
Saída Ex.: 8 Entrada
Ex.: 1
Saída Ex.: 3
Introdução
A linguagem C exige a definição da interface
das funções
A função sqrt possui a seguinte interface:
A interface da função sqrt esta definida no arquivo de inclusão math.h
#include <math.h>
double sqrt(double);
Entrada Ex.: 64 Saída
Introdução
Para utilizar a função sqrt é preciso:
Incluir o arquivo de cabeçalho math.h
Chamar a função dentro do programa:
x = sqrt(6.25);
Argumento
Passado para a função
Nome da função Valor de retorno
Introdução
Uma chamada de função provoca um desvio na execução do programa
// retorna o valor 2.5 e o atribui para x x = sqrt(6.25);
int main() {
... ... ...
x = sqrt(6.25); ...
... ... }
double sqrt(double)
{ ... ... ... ... ... ...
return valor; } 1 2 3 4 5
Introdução
Além de uma interface toda função precisa
ter um corpo
Para funções de biblioteca:
A interface da função é definida num arquivo de inclusão
O corpo da função está num arquivo objeto/DLL previamente compilado e armazenado no sistema
Introdução
Ao contrário das funções matemáticas, em C
as funções podem não retornar valor
system("pause");
Argumento
Passado para a função Nome da função
system
Introdução
Uma função que não retorna valor executa uma tarefa sem retornar resultado
int main() {
... ... ...
system("pause"); ...
... ... }
void system(char *)
{ ... ... ... ... ... ... ... } 1 2 3 4 5
Introdução
Uma função que não retorna valor possui tipo de retorno void na sua interface
Uma função com tipo de retorno void não pode ser atribuída a uma variável
x = system("pause"); // INVÁLIDO
void system(char *); // interface da função system
system
Modularidade
Para que servem as funções?
Dividir o código em blocos
A modularização de programas é a principal
característica da programação estruturada
Facilita a manutenção de programas grandes
Encapsula a solução
Cria uma interface
double sqrt(double);
Os programas em C são construídos a partir desses blocos chamados de funções
system
Modularidade
sqrt main
Programa
Bibliotecas de Funções
Para usar uma função é preciso: Fornecer uma interface para a função
Fornecer um corpo para a função
Chamar a função
#include <stdio.h> int main()
{
... ...
system("pause"); ...
... }
void system(char *)
{ ... ... ... ... ... ... } 1 2 3 4 5
Bibliotecas de Funções
Ao usar uma função de biblioteca:
A interface é obtida incluindo-se um arquivo de cabeçalho no programa
O corpo da função já foi definido e pré-compilado num arquivo objeto/DLL
Resta apenas chamar a função
#include < stdio.h > #include <math.h>
Bibliotecas de Funções
A biblioteca padrão da linguagem C/C++
possui mais de 140 funções predefinidas
Não reinvente o que já existe
Mesmo assim, muitas vezes é preciso
escrever suas próprias funções
Uma função definida pelo programador funciona da mesma forma que uma função de biblioteca
Criando Funções
Ao se criar funções, todos os aspectos devem
ser tratados:
Interface: define que informações a função recebe e que informações a função retorna
Criando Funções
Ao se criar funções, todos os aspectos devem
ser tratados:
Definição: contém um conjunto de instruções que
realiza a tarefa para a qual a função foi criada
// definição da função simples
void simples() {
Criando Funções
Ao se criar funções, todos os aspectos devem
ser tratados:
Chamada: invoca a execução da função a partir do programa principal, ou a partir de uma outra
função
Criando Funções
#include <stdio.h>
#include <stdlib.h>
void simples(); // protótipo da função
int main() {
printf("main() vai chamar a função simples():\n ); simples(); // chamada da função
system("pause"); return 0;
}
// definição da função
void simples() {
Definindo Funções
A forma geral de uma função:
tipo nome(parâmetros) {
instrução 1; instrução 2; ...
instrução n;
return valor;
}
Corpo da função Definição da função
Cabeçalho da função Nome da função
Lista de parâmetros da função Tipo de retorno da função
Definindo Funções
Funções que não retornam valores são funções
de tipo void:
A lista de parâmetros especifica as informações
(tipo e quantidade) passadas para a função
void nome (parâmetros) {
instruções
return; // opcional }
Definindo Funções
Funções sem valor de retorno são usadas
para executar alguma ação:
A chamada da função deve passar um valor inteiro
void tchau (int n) {
printf("Finalizando Sessão Número.\n ;
}
int main() {
printf("Encerrar sessão: \n); int sessao;
scanf %d , &sessao);
Definindo Funções
Funções que retornam valores têm a seguinte
forma geral:
O valor de retorno é obrigatório e pode ser uma constante, uma variável ou uma expressão
tipo nome (parâmetros) {
instruções
return valor; }
Definindo Funções
Funções com valor de retorno são muito
usadas para encapsular cálculos:
A chamada da função é substituída pelo retorno
int soma (int a, int b) {
int c = a + b; return c;
}
int main() {
int quant;
Definindo Funções
Uma função pode ter vários return's mas
apenas um valor de retorno
Chamada da função:
int maior (int a, int b) {
if (a > b) return a; else
return b; }
int main() {
printf("Digite dois números: ; int num1, num2;
scanf %d%d , &num , &num ;
Múltiplas Chamadas
// flexao.cpp - definindo uma função
#include <stdio.h> #include <stdlib.h>
void flexao(int); // protótipo da função flexao
int main() {
flexao(3); // chama a função flexao
printf ("Escolha um número inteiro: \n ; int cont;
scanf %d , cont&);
flexao(cont); // chama flexao novamente system("pause");
return 0; }
void flexao(int n) {
Múltiplas Chamadas
Saída do programa:
Uma função pode ser chamada várias vezes
O exemplo chama flexao() duas vezes:
Uma com o argumento sendo o valor 3
Outra com o argumento sendo uma variável
Faça 3 flexões.
Escolha um número inteiro: 512
Múltiplas Chamadas
Na definição do corpo da função é preciso
dar nomes as informações recebidas
Elas serão novas variáveis na função
void flexao(int n) // definição da função flexao {
printf( Faça %d flexões: \n\n , n); }
Ainda Sobre Funções
Ao contrário de linguagens como PASCAL, a
linguagem C não permite a criação de uma
função dentro de outra
int main() {
void flexao(int n) {
printf( Faça %d flexões: \n\n , n); }
flexao(3); // chama a função flexao
printf("Escolha um número inteiro: "); ...
Ainda Sobre Funções
A definição de várias funções é feita de forma
seqüencial num arquivo
#include <iostream>
void flexao(int);
void abdominal(int);
int main() {
...
return 0; }
void flexao(int n) {
... }
void abdominal(int n) {
... }
Função Principal Protótipos das funções
Função 1
Ainda Sobre Funções
Funções podem estar em arquivos diferentes
void flexao(int);
void abdominal(int);
#include <iostream>
#include "ginastica.h"
int main() {
cout << "Fazendo Ginastica\n";
flexao(10); abdominal(20);
return 0; }
#include "ginastica.h"
void flexao(int n) {
... }
void abdominal(int n) {
... }
// Arquivo principal: // malhando.cpp
// Arquivo de inclusão: // ginastica.h
Ainda Sobre Funções
// converte metros em centímetros
#include <stdio.h>
float converte(float); // protótipo da função
int main() {
float val;
printf("Entre com a distância em metros: \n"); scanf %f , &val);
float centimetros = converte(val);
printf( %f metros = %f centimetros. \n\n , val, centimentros); system("pause");
return 0; }
float converte(float n) // definição da função
Ainda Sobre Funções
Saída do programa:
Entre com a distância em metros: 30
Ainda Sobre Funções
Funções que tem retorno diferente de void
devem usar a instrução return para prover o valor de retorno e finalizar a função
int main() // definição da função main
{
...
return 0; }
int converte(int n) // definição da função converte
{
Uma instrução de retorno pode conter uma expressão não trivial
Pode-se usar uma função que retorna valor
em uma expressão int converte(int n) {
return 100 * n; }
int converte(int n) {
int num = 100 * n; return num;
}
Ainda Sobre Funções
int a = converte(10);
int b = 20 + converte(15);
Ainda Sobre Funções
Programadores C tem muita flexibilidade na
escolha de nomes para funções:
MinhaFuncao() minha_funcao()
minhafuncao() minha_func()
minhaFuncao() mf()
Cada programador tem preferência por um
estilo particular, todos estão corretos
O importante é manter os nomes das funções
Ainda Sobre Funções
Palavras-chaves ou palavras reservadas são o
vocabulário de uma linguagem de programação
Elas não podem ser usadas para dar nome a
uma função ou variável
Até o momento foram utilizadas as seguintes
palavras-chaves:
int void
double using
Conclusão
Um programa C consiste de um ou mais módulos chamados funções
Programas começam a sua execução a partir
da função main()
Uma função consiste em:
Uma interface: define os tipos de valores recebidos e retornado pela função
Conclusão
Em C o programador pode:
Usar funções pré-definidas de bibliotecas (como sqrt e system)
Criar suas próprias funções
O uso de funções
Facilita a manutenção de programas grandes
Encapsula a solução