Programação Estruturada Linguagem C Modularização (Funções) Prof. Luis Nícolas de Amorim Trigo nicolas.trigo@ifsertao-pe.edu.br Sumário Introdução Por que usar funções? Escopo de Variáveis Declarando uma função Comando return() Como usar return()? Função tipo void Funções prontas Função chamando outra Tipos de Funções Funções sem passagem de parâmetros. Funções com passagem de parâmetros. Exercício 2 1
Introdução Modularização / Função Divisão de um problema em partes. Um problema em problemas menores. Em C, todas as ações de um programa ocorrem dentro de funções. 3 Introdução O main() é a função principal de um programa feito na linguagem C e sempre será a primeira função a ser executada. O main() é o ponto de partida. 4 2
Introdução Uma função é um conjunto de comandos agrupados em um bloco que recebe um nome e pode ser chamado várias vezes em sua execução. Basicamente, uma função recebe informações, processa-as e retorna outra informação. 5 Por que usar funções? Evitar que um trecho de código seja repetido várias vezes em um mesmo programa. Poder reaproveitar o código já construído. Tornar mais rápida a alteração de um trecho de código (com função, alteração só na função). Deixar blocos de programa pequenos. Facilitar a leitura do código. 6 3
Escopo de Variáveis Uma variável pode ser declarada em três locais de um programa: Dentro de uma função, inclusive main(). Fora de qualquer função. Como parâmetros formais. 7 Escopo de Variáveis Dentro de uma função Variáveis Locais Estão disponíveis somente na função em que foram criadas. Não são acessadas em outras funções. Quando a execução sai da função, estas variáveis são eliminadas. Se uma variável local for criada com o mesmo nome de uma variável global, a variável local será usada e não a global. 8 4
Escopo de Variáveis Fora da função Variáveis Globais Sempre que uma variável for declarada FORA de uma função, inclusive a função main(), é dita como variável global. Este tipo de variável é alocada na memória e apenas quando o programa é encerrado que esta variável é liberada da memória. Evite usar variáveis globais, pois tem os seguintes problemas: Ocupam memória o tempo todo (as locais ocupam só quando usadas) Mais difícil de ser entendido e mais complicado de ser modificado, pois pode ocasionar mudança de valores de outras variáveis 9 Escopo de Variáveis Variáveis ou Parâmetros Formais Declaradas na lista de parâmetros de uma função. Recebem valores passados para as funções no momento em que as funções são chamadas. 10 5
Declarando uma função Uma função é manipulada com a função main(): Declara variáveis Usa estruturas condicionais, de repetição, etc. Com uma função pode fazer o mesmo com o que tem na função main(), inclusive chamar outra função. 11 Declarando uma função Sintaxe tipo nome_func(tipo param1,..., tipo paramn){ //corpo da função return(valor_retorno); tipo Tipo de dado do valor que a função irá retornar (int, float, char, etc). nome_func Nome da função. param... Variável ou lista de variáveis que recebem os valores quando a função é chamada. return (valor_retorno) Comando que realiza o retorno de um valor para a função chamadora. 12 6
Comando return() Usado para realizar o retorno da função. Interrompe a execução da função e indica o valor de retorno da mesma, devolvendo o controle para a chamadora. O valor retornado pelo return() deve ser do mesmo tipo da função, que é definido no momento de sua declaração. 13 Como usar return()? return; Não retorna nada para a função chamadora. return(3); Sempre retorna o valor três. return(x); Retorna o valor contido na variável x. return(a+b); Retorna o resultado da expressão. Exemplo: int total(int n1, int n2){ return(n1+n2); int total(int n1, int n2){ int soma; soma = n1+n2; return(soma); 14 7
Função tipo void Uma função pode possuir o tipo void. Função do tipo void não retorna valor nenhum, apenas será executada a partir de sua chamada por meio de outra função. Exemplo: void imprimir(float num){ printf( %.2f,num); 15 Funções prontas Não precisa conhecer o código interno de uma função...... apenas o nome (com a sua funcionalidade)...... com quais tipos de parâmetros de entrada ela trabalha...... e qual tipo de resultado a função irá retornar/gerar! 16 8
Função chamando outra Apesar de que o main() ser uma função e ela pode chamar outra... Uma função X pode chamar uma função Y. Semelhante a variáveis, as funções, para serem usadas, primeiro devem ser declaradas. 17 Função chamando outra Exemplo #include <stdio.h> #include <stdlib.h> void imprimir(float num){ printf("%.2f\n",num); void media(float n1, float n2){ float m; m = (n1+n2)/2; imprimir(m); int main(){ float num1,num2; printf("digite a n1: "); scanf("%f",&num1); printf("digite a n2: "); scanf("%f",&num2); media(num1,num2); system("pause"); 18 9
Tipos de Funções Serão trabalhados dois tipos de função: Funções sem passagem de parâmetros. Funções com passagem de parâmetros. 19 Funções sem passagem de parâmetros Neste caso, a função será chamada, mas não irá passar nenhum valor, por isso, não será declarado nenhum parâmetro na declaração da função. Exemplo: tipo nome_func(){... 20 10
Funções sem passagem de parâmetros #include <stdio.h> #include <stdlib.h> void msg_erro(){ printf( Sexo inválido! ); int main(){ char sexo; printf( Sexo (M/F): ); scanf( %c,&sexo); // Continua switch(sexo){ case M : printf( Masculino ); break; case F : printf( Feminino ); break; default: msg_erro(); break; system( pause ); 21 Funções com passagem de parâmetros Neste caso, serão trabalhados dois conceitos: Argumentos Valores ou variáveis definidos na chamada da função. Através destes que se passam os valores. Parâmetros Variáveis declaradas na função chamada que irão receber os valores passados pelos argumentos. O tipo de dado de um argumento deve ser compatível com o tipo de dado de um parâmetro que irá receber o conteúdo desse argumento. 22 11
Funções com passagem de parâmetros... int funcao(int x, int y){ // x e y são parâmetros...... int main(){... funcao(a, b); // a e b são argumentos.... 23 Exercício cio 1. Escrever uma algoritmo com uma função min(a,b) que retorna o menor valor entre dois números inteiros. 2. Criar um programa, utilizando uma função, que receba um número que corresponde a um mês do ano e escreva o mês correspondente. Caso o usuário digite o número fora do intervalo, deverá aparecer inválido. 3. Escrever um algoritmo com uma função que receba um número inteiro que representa um intervalo de tempo medido em minutos e devolva o correspondente número de horas e minutos (por exemplo, converter 131 minutos em 2 horas e 11 minutos). Usar uma struct como a seguinte: struct hm{ int horas; int minutos; 24 12
Exercício cio 4. Criar uma estrutura que contenha as informações sobre um CD de música, sendo as informações: Nome da banda, ano do lançamento do CD, valor do CD. Essas informações deverão ser registradas através de uma função. Em seguida mostre a seguinte saída: nome (ano) R$ valor 25 13