Joyce FrançaProfessora de Ciência da Computação - IFNMG
Estrutura de dados
Roteiro
• Funções• Procedimentos• Variáveis locais e globais• Recursividade• Exercícios
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
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
Variáveis locais
int soma (int a, int b) {
int r;r=a+b;return (r);
}
5
Variáveis globais
#include <stdio.h>int variavel_global;
void incrementa(){
variavel_global++;}
int main () {
variavel_global = 0;incrementa();printf ("%d", variavel_global);
}
6
Escopo das variáveis
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", ¬a1);printf("Digite a segunda nota: ");scanf("%f", ¬a2);
}
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’);
}
RecursividadeFunções Recursivas
28/08/2018
10
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.
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
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)!
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.
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
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
28/08/2018
17
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);}
Exemplo 2
• Fibonacci▫ Seqüência de Fibonacci
28/08/2018
19
28/08/2018
20
28/08/2018
21
Exemplo 3
• Somatório▫ Soma N primeiros números inteiros
28/08/2018
22
28/08/2018
23
28/08/2018
24
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
28/08/2018
26
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
Top Related