Programação II. Introdução a Funções. Bruno Feijó Dept. de Informática, PUC-Rio

Documentos relacionados
Introdução a Funções

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

MCTA028 Programação Estruturada Aula 01: - Introdução à linguagem C - Teste de avaliação

3. Linguagem de Programação C

MCTA028 Programação Estruturada Aula 01: - Introdução à linguagem C - Teste de avaliação

INF1005: PROGRAMAÇÃO I. Capítulo 12. Ivan Mathias Filho Funções Matemáticas

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

Programação II RECURSÃO

3. Linguagem de Programação C

INTRODUÇÃO À LINGUAGEM C

ao paradigma imperativo

INF1007: Programação 2. 0 Revisão. 06/08/2015 (c) Dept. de Informática - PUC-Rio 1

Linguagem C: Elementos fundamentais

INTRODUÇÃO À LINGUAGEM C

Programação Estruturada

Programação II. Tipos Estruturados

INTRODUÇÃO À LINGUAGEM C

Algoritmos e Estruturas de Dados

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

Revisão C++ - Parte 1

Algoritmos e Estruturas de Dados

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Recursividade

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

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Revisão: Tipo Abstrato de Dados Recursividade

Linguagem C. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná

Programação de Computadores II. Cap. 4 Funções

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

Recursividade. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

Programação II. Listas Encadeadas (Linked Lists) Bruno Feijó Dept. de Informática, PUC-Rio

Algoritmos e Estruturas de Dados I (DCC/003) Funções

Principais paradigmas de programação. Programação imperativa Programação funcional Programação lógica Programação OO

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

Material sobre Funções AEDS 1

Linguagens de Programação I

DAS5102 Fundamentos da Estrutura da Informação

Programação II. Vetor de Tipo Estruturado e Vetor de Ponteiros. Bruno Feijó Dept. de Informática, PUC-Rio

A linguagem C (visão histórica)

Linguagens de Programação

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

Entender o problema Encontrar um algoritmo para resolvê-lo. Implementar o algoritmo numa linguagem de programação

Linguagem de Programação C. Prof. Fabrício Olivetti de França

Alocação Dinâmica em C

1 Exercícios com ponteiros

4. Estruturas Fundamentais de Programação em C

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

Slides trabalhados durante a quinta aula

Programação II. Ordenação (sort) Bruno Feijó Dept. de Informática, PUC-Rio

Linguagem C Princípios Básicos (parte 1)

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.

Introdução à Linguagem C Variáveis e Expressões

Fundamentos de Programação 1

Fundamentos de Programação. Linguagem C++ Introdução, identificadores, tipos de dados. Prof. Bruno E. G. Gomes IFRN

LINGUAGEM C: VARIÁVEIS E EXPRESSÕES

Linguagem C. Introdução à Programação C. Variáveis. Identificadores. Identificadores VARIÁVEIS E TIPOS DE DADOS

Recursão David Déharbe

Modularidade - Funções e Procedimentos

Expressões e sentença de atribuição

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação

LISTA DE EXERCÍCIOS MÊS 04

Introdução à Ciência da Computação scc-120

3. Linguagem de Programação C

Modularização: Funções em C

Conhecendo a Linguagem de Programação C

C Operadores e Expressões

INF1007: Programação 2. 2 Alocação Dinâmica. 17/02/2014 (c) Dept. Informática - PUC-Rio 1

SCC Capítulo 2 Recursão

Programação. Prof Marcelo Zorzan Prof a Melissa Zanatta

Programação 5374 : Engenharia Informática 6638 : Tecnologias e Sistemas de Informação. Cap. 7 Arrays. Arrays

A Linguagem C. A forma de um programa em C

Linguagens de Programação. Marco A L Barbosa

Recursão. Aula 1. Liana Duenha. Faculdade de Computação Universidade Federal de Mato Grosso do Sul

Linguagem C. Brian W. Kernighan, Dennis Ritchie (K&R) Slides adaptados, inspirados, muitos copiados dos slides do professor Pedro Pereira

ALGORITMOS AULA 01. Baseado nas aulas do Prof. Jorgiano Vidal

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

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

puras um ou mais apenas mesmos

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

Programação II. Vetores Bidimensionais e Vetores de Ponteiros. Bruno Feijó Dept. de Informática, PUC-Rio

Capítulo 1: Introdução à Linguagem C. Pontifícia Universidade Católica Departamento de Informática

Capítulo 7. Expressões e Sentenças de Atribuição

Algoritmos e Modelação Computacional. Paulo Mateus MEBiom LMAC 2018

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

Ponteiros em C. Adriano Joaquim de Oliveira Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

Variáveis, Comandos de Atribuição e Comando de Entrada e Saída

Programação de Computadores I Funções na Linguagem C PROFESSORA CINTIA CAETANO

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

Programação de Computadores IV. Estruturas de repetição Slides cedidos por Bruno Augusto Dorta Marques

Métodos Computacionais

Declarações. Identificadores e Tipos de Dados Básicos

Aula 4 ESTRUTURAS DE REPETIÇÃO (FOR)

Introdução à Programação em C. Prof. Ricardo Teixeira Tecnologia em Mecatrônica Industrial SENAI

Exercícios. 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

ALGORITMOS AVANÇADOS UNIDADE II Recursividade. Luiz Leão

Transcrição:

Programação II Introdução a Funções Bruno Feijó Dept. de Informática, PUC-Rio

Funções Matemáticas função é uma relação de um ou vários valores de argumentos de entrada em um ÚNICO resultado de saída. y z Fig I f(x) = x 2 x = 2 f(x) = 4 x z = f(x,y) = x 2 +y 2 x = 2 y = 2 z = 8 O conjunto de todos os valores de entrada de uma função é chamado de DOMÍNIO da função. O conjunto de todos os resultados é chamado de IMAGEM da função. Normalmente a IMAGEM é um subconjunto de um conjunto de resultados possíveis chamado de CONTRADOMÍNIO. A notação é: f: Domínio Contradomínio. Para Fig I temos f: R R e para Fig II temos f: R R R, onde R é o conjunto dos números reais. Domínio Fig II f y Contradomínio x

Funções e Procedimentos Uma função matemática lembra uma máquina que recebe valores para os seus argumentos de entrada, processa-os e retorna um valor como saída (Figs A e B). Em computação nós estendemos este conceito permitindo que estas máquinas produzam efeitos colaterais (como escrever uma mensagem no papel) (Fig. C). Eventualmente, até admitimos que a máquina não retorna valor (Fig. D) Fig A Fig B Fig C Fig D Neste caso, podemos dizer que as máquinas deixam de ser equivalentes a funções matemáticas (i.e. deixam de ser FUNCIONAIS) e passam a ser PROCEDIMENTAIS, no sentido de que seguem um procedimento, claro, sequencial e com possíveis efeitos colaterais que afetam o ambiente.

Funções e Procedimentos Em C, um procedimento (retornando ou não valores) continua sendo chamado de função (function). Funções que não retornam valor não podem ser usadas em expressões ou como argumentos de outra função. Por exemplo, é possível termos g(f(1,2), 2) e g(h(1,2), 2) mas, não é possível, pois h não retorna valor!!! Em C, o comando return define o que retorna float g(float x, float y) float z = x*x + y*y; printf( %f^2 + %f^2 igual a %f\n,x,y,z); return z; void h(float x, float y) float z = x*x + y*y; printf( %f^2 + %f^2 igual a %f\n,x,y,z); 10+f(1,2) A sintaxe é: tipo_de_retorno nomefuncao(lista_de_argumentos) corpo da função

Usando Funções Funções em C recebem VALORES (e não nomes de variáveis) e retornam VALORES. float f(float x, float y) float z = x*x + y*y; printf("%f^2 + %f^2 igual a %f\n",x,y,z); return z; int main(void) float z = 1.0; float w = 2.0; printf("%f\n",10+f(z,w)); /* imprime 15 */ return 0; 4 3 Numa área local e isolada de memória, x recebe o valor de 1.0 e y recebe o valor de 2.0 e g retorna o valor calculado de 5.0. Ao terminar, esta memória local é totalmente apagada! 2 f é chamada com o primeiro argumento igual a 1.0 e o segundo argumento igual a 2.0 1

Usando Funções Como são valores que são passados para a função, ela desconhece as variáveis que continham estes valores. Os nomes podem coincidir, mas são variáveis distintas. float dobra(float x) x = 2 * x; return x; são variáveis distintas int main(void) float x = 5.0; printf("%f\n", dobra(x)); /* imprime 10.0 */ printf("%f\n", x); /* imprime 5.0 */ return 0; o valor de x permanece inalterado!! Há uma maneira de fazer com que uma função em C altere o valor de uma variável que pertence ao código que a chamou. Este efeito colateral a torna um PROCEDIMENTO. Isto será visto mais adiante. A possibilidade de alterar valores de variáveis que pertencem a outras funções, torna as funções em C muito poderosas, mas também requerem atenção redobrada (pois alteram o ambiente).

Considerações Importantes Algumas linguagens de programação, chamadas LINGUAGENS FUNCIONAIS, como Lisp e Haskell, consideram o ato de computar como sendo o ato de avaliar funções matemáticas, sem que o estado do mundo (e.g. variáveis) seja alterado. Lisp, por exemplo, é uma linguagem que pode ser entendida como sendo simplesmente expressões dentro de expressões que sempre retornam valor. Em oposição, temos linguagens de programação denominadas de Linguagens Procedimentais (tais como C, C++ e Java), que definem PROCEDIMENTOS, isto é: comandos imperativos em uma ordem específica que podem alterar o estado do mundo (e.g. mudanças de valores de variáveis ou efeitos colaterais de uma maneira geral). Porém, todas as linguagens permitem uma fuga para o estilo que lhe é oposto por natureza. Por exemplo, podemos escrever procedimentos em Lisp e funções matemáticas em C. Procedimentos são instrumentos poderosos, mas devem ser usados com cautela, porque as mudanças do estado do mundo podem ser sutis, silenciosas, e erros catastróficos podem passar desapercebidos.... Programar é uma arte poderosa e iniciantes são aprendizes de feiticeiro que devem treinar bastante todas as técnicas!

Tipos, Iterações e Recursão n++ usa e depois incrementa ++n incrementa e depois usa x += a significa x = x+a [1] Faça a solução iterativa mais enxuta que você conseguir para a função fatorial, primeiro com int, depois com unsigned int e finalmente com unsigned long long. Quais são os maiores números possíveis? Compare com uma tabela de fatoriais. [2] Compare tempo: recursiva vs iterativa. Solução Recursiva int fat(int n) if (n==0) return 1; else return n*fat(n-1); Solução Iterativa int fat(int n) int f=1; while (n>1) f *= n--; return f; short int int e long long long bits signed unsigned 16-32,768 a +32,767 0 a 65,535 32-2,147,483,648 a +2,147,483,647 64-9,223,372,036,854,775,808 a +9,223,372,036,854,775,807 0 a 4,294,967,295 0 a +18,446,744,073,709,551,615 Em termos de bytes, divida por 8 (e.g. int usa 32/8 = 4 bytes). O tamanho depende do hardware e do compilador. Use sizeof para saber, e.g.: sizeof(int). Solução Iterativa inteiro maior unsigned long long fat(int n) unsigned long long f=1ul; while (n>1) f *= n--; return f; f = 1LL (é signed long long) no printf: %lld (signed e unsigned)