Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Material preparado pela profa Silvana Maria Affonso de Lara

Documentos relacionados
FUNÇÕES EM C Material adaptado da profa Silvana Maria Affonso de Lara

Ponteiros. um ponteiro é uma variável que contém o endereço um dado declaração: * indica que a variável é um ponteiro. Ex: tipo_dado *nome_ponteiro;

3. Linguagem de Programação C

Linguagem de Programação C

Curso C: Funções e Macros

1. Revisão de Vetores, Ponteiros, Funções e Estruturas em C

Mais sobre Ponteiros em C

ponteiros INF Programação I Prof. Roberto Azevedo

Fundamentos de Programação

Introdução a Programação. Tipos Estruturados de Dados

Programação Estruturada

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Linguagem e Técnicas de Programação

Ponteiros e Tabelas. K&R: Capítulo 5

Aula 07 Introdução à Programação Subprogramas

Computação 2. Aula 7. Profª. Fabiany Ponteiros

Linguagens de Programação I

1 Exercícios com ponteiros

Programação: Vetores

MESMO QUE ESTAS VARIÁVEIS TENHAM NOME IDÊNTICOS

Métodos Computacionais. Funções, Escopo de Variáveis e Ponteiros

Alocação Dinâmica em C

Permite modularidade (dividir programa em partes): Facilita a depuração (debug) e portabilidade.

1 Exercícios com ponteiros

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

10. - ESTRUTURAS Características Básicas

Estruturas de Dados. Módulo 4 Funções. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?

Ponteiros & tabelas (cont.) K&R: Capítulo 5

Aula 20 - Ponteiros. Prof. Laura Silva de Assis. Engenharia de Computação. CEFET/RJ - Centro Federal de Educação Tecnológica Celso Suckow da Fonseca

Aula 18: Funções em C

Algoritmos e Programação

Funções. Introdução à Computação para a Engenharia Ambiental

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Estruturas em C

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

Linguagem C. André Tavares da Silva.

REVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

INF 1620 P1-13/09/02 Questão 1 Nome:

O que é um apontador em C (type pointer in C)?

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

Introdução a Programação. Ponteiros e Vetores, Alocação Dinâmica

Linguagem C Funções. André Tavares da Silva.

Rotinas, Modos e Tipos de Passagem de Parâmetros

Introdução a Ponteiros e Vetores em C

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Estrutura de Dados I Bacharelado em Sistemas de Informação FACOM UFU Lista de Exercícios

Programação I Funções. Prof. Carlos Alberto

Linguagens de Programação. Rotinas, Modos e Tipos de Passagem de Parâmetros. Carlos Bazilio

Estruturas. K&R: Capitulo 6. Estruturas IAED, 2014/2015. Introdução às Estruturas Estruturas e Funções Vectores de Estruturas Typedef Exemplo

Básico: estrutura de programa, sintaxe Interface com linha de comando

Programação Estruturada Prof. Rodrigo Hausen Agregados de Dados Heterogêneos (structs)

Estruturas de Dados Aula 6: Cadeias de 28/03/2010

Estruturas de Dados Aula 6: Cadeias de Caracteres

prim = A ; prim = &A[0];

Algoritmos e Programação. Linguagem C Procedimentos e. Eliane Pozzebon

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

INF 1007 Programação II

LINGUAGEM C: FUNÇÕES FUNÇÃO 04/07/2017. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Subprogramas. Prof. Carlos Lopes

Sub-rotinas em C. Disciplina de Programação de Computadores I Universidade Federal de Ouro Preto

Lista de Exercícios de Algoritmos - 04 Para cada um dos exercícios abaixo, faça um programa (em laboratório) que teste a função.

Módulo 5 Vetores e Alocação Dinâmica

Tipos Abstratos de Dados. Estrutura de Dados

Funções em C. Lucas Ferrari de Oliveira Professor Adjunto. Linguagem de Programação Estruturada I. Universidade Federal do Paraná

LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Linguagem C. Ponteiros. Alex Vidigal Bastos.

A linguagem C (visão histórica)

3. Linguagem de Programação C

EXERCÍCIO DE SONDAGEM TURMA 02 SEMESTRE DATA: 01/11/2016. Matrícula Nome Nota

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Atividade de laboratório listas encadeadas simples

Algoritmos e Estruturas de Dados I IEC012. Procedimentos e Funções. Prof. César Melo Todos os créditos para o professor Leandro Galvão

Programação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio

Métodos Computacionais. Tipos Estruturados

Introdução à Programação em C

Linguagem C: Introdução

Introdução à linguagem C

3. Linguagem de Programação C

Operaçõe õ s c om o Strings Intr oduç ão a o Ponte iros o e Funçõe õ s

Funções em Linguagem C Parte II

SCC 202 Algoritmos e Estruturas de Dados I. Pilhas (Stacks) (implementação dinâmica)

Aula 25: Alocação Dinâmica

Exercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

MC-102 Aula 21 Registros

Ponteiros - Parte I. Ponteiros, Ponteiros e Vetores, Algoritmo Bubble Sort, Alocação Dinâmica de Memória

Ponteiros. Ponteiros. Ponteiros. Ponteiros. Ponteiros. Introdução a Programação. Profa. Roseli Romero

ESTRUTURA DE DADOS (TCC )

Algoritmos e Programação

RESUMO DE CONCEITOS BÁSICOS DE C

INF 1620 P2-01/11/03 Questão 1 Nome:

Aula 03 -Introdução àlinguagc Programação: Estrutura-Repetição. OPL e IC1 Prof: Anilton Joaquim da Silva

Programação. MEAer e LEE. Bertinho Andrade da Costa. Instituto Superior Técnico. Argumentos da linha de comando Funções recursivas

Transcrição:

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação FUNÇÕES EM C 1 Material preparado pela profa Silvana Maria Affonso de Lara 2º semestre de 2010

ROTEIRO DA AULA Definição de Função Argumentos, retornos e protótipos Funcionamento de uma chamada Passagem de Informações Passagem de parâmetros por valor e por referência Pilha de inteiros em C Número de parâmetros variáveis Acesso aos parâmetros Parâmetros para main() 2

FUNÇÃO - DEFINIÇÃO Agrupa um conjunto de comandos e associa a ele um nome O uso deste nome é uma chamada da função Após sua execução, programa volta ao ponto do programa situado imediatamente após a chamada A volta ao programa que chamou a função é chamada de retorno 3

FUNÇÃO A chamada de uma função pode passar informações (argumentos) para o processamento da função Argumentos = lista de expressões Lista pode ser vazia Lista aparece entre parênteses após o nome da função Ex. int Soma (int x, int y) { } 4

O RETORNO DA FUNÇÃO No seu retorno, uma função pode retornar resultados ao programa que a chamou return (resultados); O valor da variável local resultados é passado de volta como o valor da função Valores de qualquer tipo podem ser retornados Funções predicado: funções que retornam valores Procedimentos: funções que não retornam valores Exemplo: void function (int x) 5

FUNÇÕES Definições de funções Funções são definidas de acordo com a seguinte sintaxe: tipo_de resultado nome (lista de parâmetros) { corpo de função } 6

FUNÇÕES - EXEMPLO int MDC (int a, int b) { int aux; if (a < b) { aux = a; a = b; b = aux; } while (b!= 0) { aux = b; b = a % b; a = aux; } return (a); } uma função C para calcular o máximo divisor comum entre dois números 7

FUNÇÕES Definições de funções Tipo de resultado Quando a função é um procedimento, usa-se a palavra chave void Procedimento não retorna valor Lista de parâmetros Funcionam como variáveis locais com valores iniciais Quando função não recebe parâmetros, a lista de parâmetros é substituída pela palavra void 8

FUNÇÕES Funcionamento de uma chamada: Cada expressão na lista de argumentos é avaliada O valor da expressão é convertido, se necessário, para o tipo de parâmetro formal Este tipo é atribuído ao parâmetro formal correspondente no início do corpo da função O corpo da função é executado 9

FUNÇÕES Funcionamento de uma chamada: Se um comando return é executado, o controle é passado de volta para o trecho que chamou a função Se um comando return inclui uma expressão, o valor da expressão é convertido, se necessário, pelo tipo do valor que a função retorna O valor então é retornado para o trecho que chamou a função Se um comando return não inclui uma expressão nenhum valor é retornado ao trecho que chamou a função Se não existir um comando return, o controle é passado de volta para o trecho que chamou a função após o corpo da função ser executado 10

PASSAGEM DE INFORMAÇÕES Exemplo: double mesada (double notas, int idade) { double total; } if (idade > 10) return (idade * 20.0); else{ total = notas*idade*20; return total; } 11

PASSAGEM DE INFORMAÇÕES Argumentos são passados por valor Quando chamada, a função recebe o valor da variável passada Quando argumento é do tipo atômico, a passagem por valor significa que a função não pode mudar seu valor Os argumentos deixam de existir após a execução do método 12

FUNÇÕES Protótipos ou Declaração de funções Antes de usar uma função em C, é aconselhável declará-la especificando seu protótipo Tem a mesma forma que a função, só que substitui o corpo por um (;) Nomes das variáveis de um parâmetro são opcionais Fornecê-los ajuda a leitura do programa A declaração apenas indica a assinatura ou protótipo da função: valor_retornado nome_função(declaração_parâmetros); 13

FUNÇÕES Mecanismo do processo de chamada de função 1. Valor dos argumentos é calculado pelo programa que está chamando a função 2. Sistema cria novo espaço para todas as variáveis locais da função (estrutura de pilha) 3. Valor de cada argumento é copiado na variável parâmetro correspondente na ordem em que aparecem 3.1 Realiza conversões de tipo necessárias 14

FUNÇÕES Mecanismo do processo de chamada de função 4. Comandos do corpo da função são executados até: 4.1 Encontrar comando return 4.2 Não existirem mais comandos para serem executados 5. O valor da expressão return, se ele existe, é avaliado e retornado como valor da função 6. Pilha criada é liberada 7. Programa que chamou continua sua execução 15

FUNÇÕES uma função pode retornar qualquer valor válido em C, sejam de tipos pré-definidos ( int, char, float) ou de tipos definidos pelo usuário ( struct, typedef ) uma função que não retorna nada é definida colocando-se o tipo void como valor retornado (= procedure) Pode-se colocar void entre parênteses se a função não recebe nenhum parâmetro 16

FUNÇÕES Projeto top-down Procedimentos e funções permitem dividir um programa em pedaços menores Facilita sua leitura É chamado de processo de decomposição Estratégia de programação fundamental Encontrar a decomposição certa não é fácil Requer experiência 17

FUNÇÕES Projeto top-down Melhor estratégia para escrever programas é começar com o programa principal Pensar no programa como um todo Identificar as principais partes da tarefa completa: Maiores pedaços são candidatos a funções Mesmo essas funções podem ser decompostas em funções menores Continuar até cada pedaço ser simples o suficiente para ser resolvido por si só 18

EXERCÍCIO int MDC (int a, b) { int aux; if (a < b) { aux = a; a = b; b = aux; } while (b!= 0){ aux = b b = a % b; a = aux } return (a); } Escrever um programa completo em C para calcular o máximo divisor comum entre dois números desmembrando o programa em pelo menos três funções 19

FUNÇÕES Menor função possível: void faz_nada( void ) { } 20

PASSAGEM DE PARÂMETROS Em C os argumentos para uma função são sempre passados por valor (by value), ou seja, uma cópia do argumento é feita e passada para a função void loop_count( int i ) { printf( "Em loop_count, i = " ); while( i < 10 ) printf ( "%d ", i++); ==> i = 2 3 4 5 6 7 8 9 } void main( ) { int i = 2; loop_count( i ); printf( "\nem main, i = %d.\n", i ); ==> i = 2. } 21

PASSAGEM DE PARÂMETROS Como, então, mudar o valor de uma variável? passagem de parâmetro por referência enviar o endereço do argumento para a função 22

PASSAGEM DE PARÂMETROS Passagem por valor Passagem por referência arg func_call (arg) Cópia de arg enviado para a função arg func_call (& arg) Endereço de arg enviado para a função def_função (arg) arg def_função (* arg) (* arg) 23

PASSAGEM DE PARÂMETROS Passagem por referência: void loop_count( int *i ) { printf( "Em loop_count, i = " ); while( *i < 10 ) printf ( "%d ", (*i)++); ==> i = 2 3 4 5 6 7 8 9 } void main( ) { int i = 2; loop_count( &i ); printf( "\nem main, i = %d.\n", i ); ==> i = 10. } 24

PRÁTICA: FUNÇÃO TROCA Fazer uma função troca(px, py) que recebe como parâmetros 2 ponteiros para inteiros e troca o conteúdo deles ex: int x = 10, y = 20; troca(&x, &y); printf( x=%d y=%d, x, y) => x=20 y=10 25

PRÁTICA: FUNÇÃO TROCA void troca (int *px, int *py) { int temp; px: py: } temp=*px; *px=*py; *py=temp; x: y: 26

RETORNANDO VALORES uma função retorna um valor através do comando return Ex: int power (int base, int n) { int i,p; } p = 1; for (i = 1; i <= n; ++i) p *= base; return p; 27

FUNÇÕES o valor retornado por uma função é sempre copiado para o contexto de chamada (retorno by value) x = power(2, 5); /* atribuição */ if (power(7, 2) > 12543) /* comparação */ printf( Numero grande! ); x = 10*power(2,3); /* expressão */ array[get_index()]; /* índice */ funcao( get_arg() ); /* argumento */ 28

VETORES COMO ARGUMENTOS DE FUNÇÕES Quando vamos passar um vetor como argumento de uma função, podemos declarar a função de três maneiras equivalentes. Seja o vetor: int matrx [50]; e que queiramos passá-la como argumento de uma função func(). Podemos declarar func() de três maneiras: void func (int matrx[50]); void func (int matrx[]); void func (int *matrx); 29

EX: CONCATENA STRINGS char *concatena( char cabeca[ ], char cauda[ ] ) { int i, j; } for (i = 0; cabeca[i]!= '\0'; i++); for (j = 0; (cabeca[i] = cauda[j])!= '\0'; i++, j++); cabeca[i] = '\0'; return cabeca; 30

EXEMPLO (CONT.) int main( ) { char nome[80] = "Santos"; char sobrenome[ ] = " Dumont"; printf( "O nome é %s.\n", concatena(nome, sobrenome) ); return 0; } ==> Santos Dumont 31

PRÁTICA: LOCALIZA CHAR EM STRING Fazer uma função que procura um caracter em um string e retorna o seu endereço caso o encontre, senão retorna NULL (ponteiro nulo) Ex: char *achachar (char *str, char c) {...} char str[] = abcd5678 ; achachar(str, c ); ==> retorna endereço do terceiro caracter do string: &str[2] 32

ACHACHAR char *achachar (char *str, char c) { char *pc = str; } while (*pc!= c && *pc!= '\0') pc++; return *pc? pc : NULL; 33

EXEMPLO: PILHA Um pilha é definida como uma estrutura onde os dados são inseridos em uma ordem e retirados em ordem inversa. Operações básicas: push(a) pop() A topo() B T vazia() T cheia() A B C D B C D B C D A B C D 34

PILHA COM ARRAY Uma pilha pode ser implementada como um array onde o topo é indicado com um índice index tipo pilha[maxpil]; C D pilha[3] pilha[2] pilha[1] pilha[0] Topo(): index aponta para a posição vazia: retorna pilha[index-1]; Vazia: retorna index == 0 Push(d): pilha[index] = d; incrementa index; Pop(): decrementa index; retorna pilha[index]; Cheia(): retorna index == MAXPIL+1 35

PILHA DE INTEIROS EM C #define MAXPIL 10 int pilha[maxpil]; int index = 0; void push(int dado) { pilha[index++] = dado; } int pop() { return pilha[--index]; } int topo() { return pilha[index-1]; } int vazia() { return (index == 0); } int cheia() { return (index == MAXPIL+1; } 36

NÚMERO DE PARÂMETROS VARIÁVEL C permite declarar funções com número variável de argumentos através da inserção de reticências... função ( arg1, arg2,... ); Como determinar o número de parâmetros passados: string de formato, como no comando printf: Ex: printf ( %s %d %f\n, s, i, f); pela especificação do número de parâmetros Ex: soma (3, 10, -1, 5); pela inclusão de um valor de terminação Ex: media ( 1, 4, 6, 0, 3, -1 ); 37

ACESSO AOS PARÂMETROS C oferece uma série de macros para acessar uma lista de argumentos: va_list é um tipo pré-definido utilizado para declarar um ponteiro para os argumentos da lista va_start(va_list ap, arg_def ) inicia o ponteiro ap fazendo-o apontar para o primeiro argumento da lista, ou seja, o primeiro argumento depois de arg_def. arg_def é o nome do último argumento especificado na declaração da função 38

ACESSO AOS PARÂMETROS type va_arg( va_list ap, type ) retorna o valor do argumento apontado por ap e faz ap apontar para o próximo argumento da lista. type indica o tipo de argumento lido (int, float, etc.) void va_end ( va_list ap ) encerra o acesso à lista de parâmetros. Deve sempre ser chamada no final da função 39

EXEMPLO PARÂMETROS VARIÁVEIS #include <stdio.h> #include <stdlib.h> #include <stdarg.h> int sum( int nro_args,... ) { va_list ap; int result = 0, i; va_start( ap, nro_args ); for( i = 1; i <= nro_args; i++ ) { result += va_arg( ap, int ); } va_end(ap); return result; } sum( 5, 3, 5, 18, 57, 66 ) ==> 149 sum( 2, 3, 5 ) ==> 8 40

PARÂMETROS PARA MAIN( ) ao executar programas a partir de linha de comando, é possível passar parâmetros diretamente para a função main( ) os argumentos são fornecidos na forma de um array de strings. main( ) é definida com dois parâmetros: main ( int argc, char *argv[] ) argc é o número de argumentos argv é o array de argumentos 41

PARÂMETROS PARA MAIN() por convenção, o primeiro argumento argv[0] é o nome do programa e o último é 0 (zero) ex: echo Alô, mamãe argc = 3 argv echo\0 Alô, \0 mamãe\0 0 42

PARÂMETROS PARA MAIN() Uma possível implementação para echo: #include <stdio.h> void main( int argc, char *argv[] ) { int i; for ( i = 1; i < argc; i++ ) printf( %s%s, argv[i], (i < argc-1)? : ); printf( \n ); } 43

EXERCÍCIO Fazer um programa em C que lê um array de caracteres e cria um outro array em que os caracteres estão totalmente invertidos, por exemplo, ler MARCONI e retornar INOCRAM Usar ponteiros Usar uma função que recebe um array e retorna o outro invertido 44