Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e...

27
Joyce França Professora de Ciência da Computação - IFNMG Estrutura de dados

Transcript of Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e...

Page 1: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

Joyce FrançaProfessora de Ciência da Computação - IFNMG

Estrutura de dados

Page 2: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

Roteiro

• Funções• Procedimentos• Variáveis locais e globais• Recursividade• Exercícios

Page 3: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

Exercícios

1. Crie um programa que leia três números. Para cada número, imprima o dobro. Use uma função que recebe como parâmetro um número inteiro e devolve o seu dobro. O valor calculado deve ser impresso na função principal.

2. Faça um programa receba dois números e execute asseguintes funções:▫ Verificar se o número digitado é positivo ou negativo.

Sendo que o valor de retorno será 1 se positivo, -1 senegativo ou 0 se for igual a 0.▫ Declare a função como: int verfica(int num);

3

Page 4: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

Variáveis locais e variáveis globais

• Uma variável é chamada local se ela foi declarada dentro de uma função. Nesse caso, ela existe somente dentro daquela função e após o término da execução da mesma, a variável deixa de existir.

• Uma variável é chamada global se ela for declarada fora de qualquer função. Essa variável existe dentro de todas as funções e qualquer procedimento ou função pode alterá-la.

4

Page 5: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

Variáveis locais

int soma (int a, int b) {

int r;r=a+b;return (r);

}

5

Page 6: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

Variáveis globais

#include <stdio.h>int variavel_global;

void incrementa(){

variavel_global++;}

int main () {

variavel_global = 0;incrementa();printf ("%d", variavel_global);

}

6

Page 7: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

Escopo das variáveis

Page 8: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

Exemplo#include<stdio.h>

//declaração de variáveis globaisfloat media, nota1, nota2;

//função entrada de dados//usa as variáveis globais nota1 e nota2void entrada(){

printf("\nDigite a primeira nota: ");scanf("%f", &nota1);printf("Digite a segunda nota: ");scanf("%f", &nota2);

}

8

// —————- funçao main()——————-int main(void){//variável localchar resposta;do{

//chamada da função p/ entrada das notasentrada();//usando variáveis globais: media,nota1,nota2media = (nota1 + nota2) / 2;printf("\nMedia do aluno: %.2f\n", media);printf("\nDeseja calcular outra media? (s/n)");fflush(stdin);scanf("%c",&resposta);

}while(resposta == ‘s’);

}

Page 9: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia
Page 10: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

RecursividadeFunções Recursivas

28/08/2018

10

Page 11: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

Conceito de Recursividade

• Função recursiva é aquela que chama a si própria. • Uma função poderá também ser considerada recursiva

se chamar outras funções que, em algum momento, chamem a primeira função, tornando esse conjunto de funções um processo recursivo.

Page 12: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

Recursividade

• Definição: dentro do corpo de uma função, chamar novamente a própria função▫ recursão direta: a função A chama a própria função A ▫ recursão indireta: a função A chama uma função B

que, por sua vez, chama A

Page 13: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

Recursividade

• A recursividade é uma estratégia que pode ser utilizada sempre que o cálculo de uma função para o valor n, pode ser descrita a partir do cálculo desta mesma função para o termo anterior (n-1).

Exemplo – Função fatorial:

n! = n * (n-1) * (n-2) * (n-3) *....* 1(n-1)! = (n-1) * (n-2) * (n-3) *....* 1

logo:

n! = n * (n-1)!

Page 14: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

Condição de parada

• Funções recursivas contem duas partes fundamentais:▫ Regra Geral: � é o método que reduz a resolução do problema através da

invocação recursiva de casos menores, que por sua vez são resolvidos pela resolução de casos ainda menores pela própria função, assim sucessivamente até atingir o “ponto de parada” que finaliza o método.

▫ Condição de parada� Permite que o procedimento pare de se executar� ponto onde a função será encerrada, e é geralmente um

limite superior ou inferior da regra geral.

Page 15: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

Execução

• Internamente, quando qualquer chamada de função é feita dentro de um programa, é criado um Registro de Ativação na Pilha de Execução do programa

• O registro de ativação armazena os parâmetros e variáveis locais da função bem como o “ponto de retorno” no programa ou subprograma que chamou essa função.

• Ao final da execução dessa função, o registro é desempilhado e a execução volta ao subprograma que chamou a função

Page 16: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

Exemplo 1

• Como primeiro exemplo de função recursiva, vamos ver o cálculo de fatorial.

▫ Fazer fatorial usando estruturas de repetição▫ Fazer fatorial usando recursividade

28/08/2018

16

Page 17: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

28/08/2018

17

Page 18: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

Algoritmos e Estrutura de Dados I

Exemplo 1

fat (int n) {if (n<=0)

return 1;else

return n * fat(n-1);}

main() {int f;f = fat(5);

printf(“%d”,f);}

Page 19: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

Exemplo 2

• Fibonacci▫ Seqüência de Fibonacci

28/08/2018

19

Page 20: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

28/08/2018

20

Page 21: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

28/08/2018

21

Page 22: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

Exemplo 3

• Somatório▫ Soma N primeiros números inteiros

28/08/2018

22

Page 23: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

28/08/2018

23

Page 24: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

28/08/2018

24

Page 25: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

Exercício

1. O programa abaixo implementa duas funções para multiplicar dois números, sendo uma iterativa e outra recursiva. Analise as duas chamadas no programa principal e informe passo a passo o resultado obtido em cada uma.

28/08/2018

25

Page 26: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

28/08/2018

26

Page 27: Estrutura de dados...Estrutura de dados Roteiro •Funções •Procedimentos •Variáveis locais e globais •Recursividade •Exercícios Exercícios 1. Crie um programa que leia

Exercício

• Faça uma função recursiva que receba um número inteiro positivo N e imprima todos os números naturais de 0 até N em ordem decrescente

28/08/2018

27