APRESENTAÇÃO: DAVID ANDERSON CARDOSO DANTAS CURSO DE C - 2010 AULA 04: Funções Maceió, Maio de 2010.

Slides:



Advertisements
Apresentações semelhantes
Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de.
Advertisements

Funções em C Prof. Fabiano Utiyama.
Técnicas de Programação II Revisão TP1 Parte2
Um programa em C Bibliotecas Variáveis globais
Marco Antonio Montebello Júnior
V Procedimentos – são estruturas que agrupam um conjunto de comandos, que são executados quando o procedimento é chamado. v Funções – são procedimentos.
Funções em C.
Recursividade Prof. Rosana Palazon.
Listas duplamente encadeadas
Programação II Estruturas de Dados
Algoritmos e Programação Linguagens de Programação Teoria Aula (09/06)
Introdução à Programação
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Alocação Dinâmica de Memória
PROGRAMAÇÃO MODULAR (com uso de subprogramas)
UDESC - Prof. Juliano Maia1 Funções. UDESC - Prof. Juliano Maia2 Índice Seção 1 – Funções em C Seção 2 – Iniciação Ponteiros Seção 3 – Recursão.
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1.
Universidade Federal do Espírito Santo
Universidade Federal do Espírito Santo
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo II Confecção de Tabelas.
Curso de Programação em C++
1 Aula 7 ImplementandoSubprogramas Universidade do Vale do Rio dos Sinos
PROGRAMAÇÃO ou LINGUAGEM C?
Linguagem C Funções.
Vetores, Matrizes e Funções
Vetores, Matrizes e Funções
Slides Prof. Jean SIMÃO Revisão: Prof. João FABRO
Slides: Prof. João Fabro UTFPR - Curitiba
Fundamentos de Programação 1
Funções.
Revisão da Linguagem C.
Linguagem de Programação
Algoritmos e Programação
Iniciação à linguagem C++
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
Introdução a Computação e Cálculo Numérico
1 Funções (versão C/C++) Em C++ existe uma opção intermédia entre a função e uma macro. Uma função pode ser declarada inline. Nesse caso as funções têm.
1 Funções (versão C) Funções são pedaços de código encapsulados para fácil acesso. Em C e C++ o processo de construção de uma função passa por 2 etapas.
PROGRAMAÇÃO ESTRUTURADA II
PROGRAMAÇÃO ESTRUTURADA II
Marco Antonio Montebello Júnior
Alocação Dinâmica de Memória
UNIDADE 6 - complemento Funções recursivas
PROGRAMAÇÃO I UNIDADE 4.
Programação II Estruturas de Dados Aula 02 - continuação
DAVID ANDERSON CARDOSO DANTAS
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Introdução à linguagem C
Técnicas de Desenvolvimento de Programas
F UNÇÕES : PASSAGEM DE PARÂMETROS Aluno:Kaynã Vasconcelos Santos Matéria: Estrutura de dados e algoritmos I Turma: Professor: Danilo Silva dos Santos.
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo
Introdução à Linguagem C
Declarando e Chamando Funções
Regras de escopo Escopo: trecho de codificação no qual o identificador possui significado Escopo de função: identificador válido dentro do trecho de uma.
 São utilizadas para dividir um código maior (mais complexo) em partes menores (mais simples).  Quando uma mesma tarefa é realizada várias vezes em um.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo VII Variáveis Indexadas Numéricas.
Aula prática 3 Aprofundando em Funções Parâmetros de uma função Uso do return Execução Variáveis Global, local e estática Monitoria de Introdução à.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo IX Subprogramação e Recursividade.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
PCI- Funções e Procedimentos Profa. Mercedes Gonzales Márquez.
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Funções.
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
PRE 1002 Éverlin Marques 2015/1.
Fundamentos de Programação 1 Aula N. 02 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Laços de Repetição em C”
Capítulo 7 Métodos. 2Capítulo 7 – Métodos Métodos Criação e chamada de métodos Passagem de parâmetros VarArgs Sobrecarga Método com valor de retorno Métodos.
Funções definidas pelo usuário Escola Olímpio Professor Marcelo Josué Telles Linguagem de Programação I1 de 36.
Transcrição da apresentação:

APRESENTAÇÃO: DAVID ANDERSON CARDOSO DANTAS CURSO DE C AULA 04: Funções Maceió, Maio de 2010.

SUMÁRIO Definição de Funções Pilha de Execução Ponteiro de Variáveis Passando Ponteiros para Funções Recursividade Variáveis Estáticas dentro de Funções Pré-processador e Macros 2

1. DEFINIÇÃO DE FUNÇÕES 3 GRANDES TAREFAS TAREFAS MENORES

1. DEFINIÇÃO DE FUNÇÕES A criação de funções: 4 Evita a repetição de código Esconde detalhes de implementação do corpo principal do programa Procedimento repetido deve ser transformado numa função que será chamada várias vezes. Característica de programas bem estruturados pensado em termos de funções.

1. DEFINIÇÃO DE FUNÇÕES A criação de funções: 5 Evita a repetição de código Esconde detalhes de implementação do corpo principal do programa Procedimento repetido deve ser transformado numa função que será chamada várias vezes. Característica de programas bem estruturados pensado em termos de funções.

1. DEFINIÇÃO DE FUNÇÕES Forma Geral para Definir uma Função tipo_retornado nome_da_função ( lista de parâmetros... ) { corpo da função } /* Função para retorna o valor do fatorial */ int fatorial ( int n ) { int i; int f = 1; for (i = 1; i <= n; i++) { f *= i; //f = f*i } return f; } /* Função para imprimir o valor do fatorial */ function [f] = fatorial ( n ) f = 1; for i = 1:1:n f = f*i; end Matlab C/C++ 6

1. DEFINIÇÃO DE FUNÇÕES /* programa que lê um numero e imprime seu fatorial */ #include void fat (int n); /* Função principal */ int main ( void ) { int n; scanf("%d", &n); fat(n); return 0; } /* Função para imprimir o valor do fatorial */ void fat ( int n ) { int i; int f = 1; for (i = 1; i <= n; i++) f *= i; printf("Fatorial = %d\n", f); } 7 Exemplo 1 Duas funções: - main (principal) - fat Parâmetros são listados, com seus respectivos tipos, entre os parênteses. Quando não há parâmetros usa-se a palavra void. Uma função pode ter um valor de retorno associado. C exige que se coloque o protótipo da função antes de ser chamada. Inclusão do arquivo stdio.h (printf e scanf).

2. PILHA DE EXECUÇÃO 8 /* programa que le um numero e imprime seu fatorial*/ #include int fat (int n); int main (void) { int n = 5; int r; r = fat ( n ); printf("Fatorial de %d = %d \n", n, r); return 0; } int fat (int n) { int f = 1.0; while (n != 0) { f *= n; n--; } return f; } No final da função fat, o parâmetro n tem valor igual a zero. No entanto, a saída do programa será: Fatorial de 5 = 120 Passagem por Valor Cada parâmetro funciona como variável local inicializada com o valor passado na chamada. Na chamada da função, o valor passado é atribuído ao parâmetro da função chamada. Assim, a variável n (parâmetro da função fat) é local e NÃO representa a variável n da função main.

2. PILHA DE EXECUÇÃO Por que isso acontece? 9 A EXECUÇÃO DO PROGRAMA FUNCIONA COMO MODELO DE PILHAMODELO DE PILHA a b c Variáveis LocaisPilha de Execução inicialização chamada da função Pilha de Execução durante a chamada da função saída da função Pilha de Execução na saída da função

2. PILHA DE EXECUÇÃO 10 Análise Passo a Passo da Evolução do Programa

11

3. PONTEIRO DE VARIÁVEIS Da mesma forma que declaramos variáveis para armazenar valores, podemos declarar variáveis (ponteiro) que, em vez de servirem para armazenar valores, servem para armazenar endereços de memória onde há variáveis armazenadas. 12 /* Variável inteiro */ int a; /* Variável Ponteiro p/ inteiro */ int *p; /* a recebe o valor 5 */ a = 5; /* p recebe o endereço de a (diz-se p aponta para a) */ p = &a; /*conteúdo de p recebe o valor 6 */ *p = 6;

3. PONTEIRO DE VARIÁVEIS 13 /* Função que imprime o valor 2 */ int main ( void ) { int a; int *p; p = &a; *p = 2; printf(" %d ", a); return 0; } Exemplo 2 /* Função que imprime o valor b */ int main ( void ) { int a, b, *p; a = 2; *p = 3; b = a + (*p); printf(" %d ", b); return 0; } De maneira análoga, é possível declarar ponteiros de outros tipos: /* Variável Ponteiro p/ float */ float *m; /* Variável Ponteiro p/ char */ char *s;

3.1. PASSANDO PONTEIROS PARA FUNÇÕES 14 /* funcao troca (versao ERRADA) */ #include void troca (int x, int y ) { int temp; temp = x; x = y; y = temp; } int main ( void ) { int a = 5, b = 7; troca(a, b); printf("%d %d \n", a, b); return 0; } /* funcao troca (versao CORRETA) */ #include void troca (int *px, int *py ) { int temp; temp = *px; *px = *py; *py = temp; } int main ( void ) { int a = 5, b = 7; troca(&a, &b); /* passamos os endereços das variáveis */ printf("%d %d \n", a, b); return 0; }

PASSANDO PONTEIROS PARA FUNÇÕES Análise Passo a Passo da Evolução do Programa

4. RECURSIVIDADE As funções podem ser chamadas recursivamente, isto é, dentro do corpo de uma função podemos chamar novamente a própria função. 16 /* Função recursiva para calculo do fatorial */ int fat (int n) { if (n==0) return 1; else return n*fat(n-1); } Diversas implementações ficam muito mais fáceis usando recursividade. Por outro lado, implementações não recursivas tendem a ser mais eficientes. Para cada chamada de uma função, recursiva ou não, os parâmetros e as variáveis locais são empilhados na pilha de execução. Assim, mesmo quando uma função é chamada recursivamente, cria-se um ambiente local para cada chamada.

5. VARIÁVEIS ESTÁTICAS DENTRO DE FUNÇÕES Ao contrário das variáveis locais, que existem apenas enquanto a função à qual elas pertencem estiver sendo executada, as estáticas, assim como as globais, continuam existindo mesmo antes ou depois de a função ser executada. 17 void imprime ( float a ) { static int n = 1; printf(" %f ", a); if ((n % 5) == 0) printf(" \n "); n++; } No entanto, uma variável estática declarada dentro de uma função só é visível dentro dessa função. Uma utilização importante de variáveis estáticas dentro de funções é quando se necessita recuperar o valor de uma variável atribuída na última vez que a função foi executada.

6. PRÉ-PROCESSADOR E MACROS Um código C, antes de ser compilado, passa por um pré-processador. O pré-processador de C reconhece determinadas diretivas e altera o código para, então, enviá-lo ao compilador. 18 #define PI float area (float r) { float a = PI * r * r; return a; } #include #include arquivo.h int main ( void ) { … return 0; }

6. PRÉ-PROCESSADOR E MACROS C permite ainda a utilização da diretiva de definição com parâmetros. É válido escrever, por exemplo: 19 #define MAX(a,b) ((a) > (b) ? (a) : (b)) assim, se após esta definição existir uma linha de código com o trecho: v = 4.5; c = MAX ( v, 3.0 ); o compilador verá: v = 4.5; c = ((v) > (4.5) ? (v) : (4.5));

6. PRÉ-PROCESSADOR E MACROS 20 #include #define DIF(a,b) a – b int main (void) { printf(" %d ", 4 * DIF(5,3)); return 0; } #include #define PROD(a,b) (a * b) int main (void) { printf(" %d ", PROD(3+4, 2)); return 0; } Definição das macros Logo, o correto seria: printf(" %d ", * 2);printf(" %d ", 4 * 5 - 3); #define PROD(a,b) ((a) * (b))#define DIF(a,b) (a – b)

CURSO DE C FIM DA AULA 04: Funções APRESENTAÇÃO: DAVID ANDERSON CARDOSO DANTAS Maceió, Maio de 2010.