CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo IX Subprogramação e Recursividade.

Slides:



Advertisements
Apresentações semelhantes
Funções em C Prof. Fabiano Utiyama.
Advertisements

Técnicas de Programação II Revisão TP1 Parte2
INTRODUÇÃO A COMPUTAÇÃO ENG. CIVIL
Um programa em C Bibliotecas Variáveis globais
Capítulo VIII – Subprogramação
Funções em C.
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula /08/2011 Professor Leomir J. Borba-
Recursividade Prof. Rosana Palazon.
Programação II Estruturas de Dados
LPG-I: Tipos Complexos - Estruturas
Universidade Federal do Espírito Santo
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo II Confecção de Tabelas.
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
Armazenamento de Dados em Arquivos
Estruturas de Dados Homogêneas Multidimensionais – Matrizes
Matrizes e Funções - Continuação
Slides: Prof. SIMÃO Revisão: Prof. João Fabro
Slides: Prof. João Fabro UTFPR - Curitiba
Fundamentos de Programação 1
Modularização: funções e procedimentos (continuação)
Vetor de Ponteiros Exemplo de Alocação. Escrever Vetor de Vetores de floats int main() { int i, k, n; float **vetor; // vetor de vetores int *tamanho;
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
APRESENTAÇÃO: DAVID ANDERSON CARDOSO DANTAS CURSO DE C AULA 04: Funções Maceió, Maio de 2010.
PROGRAMAÇÃO ESTRUTURADA II
PROGRAMAÇÃO ESTRUTURADA II
CADEIA DE CARACTERES (Strings)
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
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014
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.
Linguagem de Programação
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014
APRENDER A APRENDER deve ser nossa meta. Comandos de Controle de Programa Comandos de Seleção Prof. Me. Jeime Nunes.
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
Introdução à Linguagem C
Declarando e Chamando Funções
 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.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013
Revisão Luis Antonio Tavares
Comando de Seleção switch
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo III Comandos de Controle.
Programação de Computadores I – Arquivos
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros.
PCI- Funções e Procedimentos Profa. Mercedes Gonzales Márquez.
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VIII Subprogramação.
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.
Computação – Informática Aula N. 05 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Matrizes em C”
Fundamentos de Programação 1 Slides 19 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Arquivos Binários”.
Fundamentos de Programação 1 Aula N. 02 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Laços de Repetição em C”
Fundamentos de Programação 1 Aula N. 02 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Laços de Repetição em C” 1.
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
Computação – Informática Aula N. 05 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Matrizes em C” 1.
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas – 2017
Fundamentos de Programação1
Fundamentos de Programação 1
Transcrição da apresentação:

CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo IX Subprogramação e Recursividade

Programa 9.1: Subprograma bem simples para somar #include #include int soma (int x, int y) {return x + y;} int main ( ) { int a, b, c; printf ("Digite a e b: "); scanf ("%d%d", &a, &b); c = soma (a, b); printf ("\nc = a + b = %d + %d = %d", a, b, c); printf ("\n\n"); system ("pause"); return 0; printf ("\n\n"); system ("pause"); return 0;} Copiar, salvar e executar

Programa 9.2: Mesmo efeito, porém sem retornar valor #include #include void soma (int *z, int x, int y) {*z = x + y;} int main ( ) { int a, b, c; printf ("Digite a e b: "); scanf ("%d%d", &a, &b); soma (&c, a, b); printf ("\nc = a + b = %d + %d = %d", a, b, c); printf ("\n\n"); system ("pause"); return 0; printf ("\n\n"); system ("pause"); return 0;} Copiar, salvar e executar

#include #include void soma (int *z, int x, int y) {*z = x + y;} int main ( ) { int a, b, c; printf ("Digite a e b: "); scanf ("%d%d", &a, &b); soma (&c, a, b); printf ("\nc = a + b = %d + %d = %d", a, b, c); printf ("\n\n"); system ("pause"); return 0; printf ("\n\n"); system ("pause"); return 0;} Função main abc

#include #include void soma (int *z, int x, int y) {*z = x + y;} int main ( ) { int a, b, c; printf ("Digite a e b: "); scanf ("%d%d", &a, &b); soma (&c, a, b); printf ("\nc = a + b = %d + %d = %d", a, b, c); printf ("\n\n"); system ("pause"); return 0; printf ("\n\n"); system ("pause"); return 0;} Função main abc Leitura de a e b:

#include #include void soma (int *z, int x, int y) {*z = x + y;} int main ( ) { int a, b, c; printf ("Digite a e b: "); scanf ("%d%d", &a, &b); soma (&c, a, b); printf ("\nc = a + b = %d + %d = %d", a, b, c); printf ("\n\n"); system ("pause"); return 0; printf ("\n\n"); system ("pause"); return 0;} Função main 151 a 346 bc Leitura de a e b:

#include #include void soma (int *z, int x, int y) {*z = x + y;} int main ( ) { int a, b, c; printf ("Digite a e b: "); scanf ("%d%d", &a, &b); soma (&c, a, b); printf ("\nc = a + b = %d + %d = %d", a, b, c); printf ("\n\n"); system ("pause"); return 0; printf ("\n\n"); system ("pause"); return 0;} Função main 151 a 346 bc Alocação das variáveis de soma Função soma xyz

#include #include void soma (int *z, int x, int y) {*z = x + y;} int main ( ) { int a, b, c; printf ("Digite a e b: "); scanf ("%d%d", &a, &b); soma (&c, a, b); printf ("\nc = a + b = %d + %d = %d", a, b, c); printf ("\n\n"); system ("pause"); return 0; printf ("\n\n"); system ("pause"); return 0;} Função main 151 a 346 bc Passagem dos argumentos aos parâmetros Função soma xyz

#include #include void soma (int *z, int x, int y) {*z = x + y;} int main ( ) { int a, b, c; printf ("Digite a e b: "); scanf ("%d%d", &a, &b); soma (&c, a, b); printf ("\nc = a + b = %d + %d = %d", a, b, c); printf ("\n\n"); system ("pause"); return 0; printf ("\n\n"); system ("pause"); return 0;} Função main 151 a 346 bc Passagem dos argumentos aos parâmetros Função soma 151 x 346 yz

#include #include void soma (int *z, int x, int y) {*z = x + y;} int main ( ) { int a, b, c; printf ("Digite a e b: "); scanf ("%d%d", &a, &b); soma (&c, a, b); printf ("\nc = a + b = %d + %d = %d", a, b, c); printf ("\n\n"); system ("pause"); return 0; printf ("\n\n"); system ("pause"); return 0;} Função main 151 a 346 bc z recebeu o endereço de c z é um ponteiro (apontando para c) Função soma 151 x 346 yz

#include #include void soma (int *z, int x, int y) {*z = x + y;} int main ( ) { int a, b, c; printf ("Digite a e b: "); scanf ("%d%d", &a, &b); soma (&c, a, b); printf ("\nc = a + b = %d + %d = %d", a, b, c); printf ("\n\n"); system ("pause"); return 0; printf ("\n\n"); system ("pause"); return 0;} Função main 151 a 346 bc O local cujo endereço está em z (*z) recebe o valor de x+y Função soma 151 x 346 yz 497 c

#include #include void soma (int *z, int x, int y) {*z = x + y;} int main ( ) { int a, b, c; printf ("Digite a e b: "); scanf ("%d%d", &a, &b); soma (&c, a, b); printf ("\nc = a + b = %d + %d = %d", a, b, c); printf ("\n\n"); system ("pause"); return 0; printf ("\n\n"); system ("pause"); return 0;} Função main 151 a 346 b Função soma 151 x 346 yz 497 c Desalocação das variáveis de soma

#include #include void soma (int *z, int x, int y) {*z = x + y;} int main ( ) { int a, b, c; printf ("Digite a e b: "); scanf ("%d%d", &a, &b); soma (&c, a, b); printf ("\nc = a + b = %d + %d = %d", a, b, c); printf ("\n\n"); system ("pause"); return 0; printf ("\n\n"); system ("pause"); return 0;} Função main 151 a 346 b 497 c Desalocação das variáveis de soma

#include #include void soma (int *z, int x, int y) {*z = x + y;} int main ( ) { int a, b, c; printf ("Digite a e b: "); scanf ("%d%d", &a, &b); soma (&c, a, b); printf ("\nc = a + b = %d + %d = %d", a, b, c); printf ("\n\n"); system ("pause"); return 0; printf ("\n\n"); system ("pause"); return 0;} Função main 151 a 346 b 497 c Será escrito: c = a + b = = 497

#include #include int fat (int n) { int f; if (n < 0) f = -1; else if (n <= 1) f = 1; else f = n * fat(n - 1); return f; } int main() { int n; printf ("Calculo de fatorial de n"); printf ("Calculo de fatorial de n"); printf ("\n\n\tDigite n: "); printf ("\n\n\tDigite n: "); scanf ("%d", &n); printf ("\n\tFat(%d) = %d", n, fat(n)); printf ("\n\tFat(%d) = %d", n, fat(n)); printf ("\n\n"); system ("pause"); return 0; printf ("\n\n"); system ("pause"); return 0;} Copiar, salvar e executar Formula recursiva -1, para n < 0 n! =1, para 0 ≤ n ≤ 1 n * (n-1)!, para n > 1 Programa 9.3: Cálculo recursivo de fatorial

int v = 0; //Numero da versao de fat: global int fat (int n) { int f; int i; v++; printf ("\n"); printf ("\n"); for (i = 1; i <= v; i++) printf (" "); printf ("Entrada em fat versao %d; n = %d; ", v, n); printf ("Digite algo: "); getche (); printf ("\n"); if (n < 0) f = -1; else if (n <= 1) f = 1; else f = n * fat(n - 1); printf ("\n"); printf ("\n"); for (i = 1; i <= v; i++) printf (" "); printf ("Saida de fat versao %d; n = %d; fat = %d; ", v, n, f); printf ("Digite algo: "); getche (); printf ("\n"); v--; if (v == 0) printf ("\n"); if (v == 0) printf ("\n"); return f; } Copiar, salvar e executar Programa 9.4: Cálculo recursivo instrumentado de fatorial Alterar a função fat do programa anterior

Exercício 9.1: Potência de expoentes inteiros e não negativos A n (n inteiro e não negativo) Escrever um programa para implementar a seguinte fórmula recursiva: Escrever um programa para implementar a seguinte fórmula recursiva: A função main pode ser parecida com a do programa do fatorial A função main pode ser parecida com a do programa do fatorial 1, para n = 0 A n =A * A n-1, para n > 0

Exercício 9.2: Raiz quadrada Escrever um programa para implementar a seguinte fórmula recursiva: Escrever um programa para implementar a seguinte fórmula recursiva: a é uma aproximação para a raiz quadrada; e é a precisão desejada a é uma aproximação para a raiz quadrada; e é a precisão desejada A primeira aproximação e a precisão devem ser lidas na função main A primeira aproximação e a precisão devem ser lidas na função main a, p/ (|a 2 - n| < e) RaizQuad (n, a, e) = RaizQuad (n, (a 2 +n)/(2*a), e), caso contrário

Exercício 9.3: Números de Fibonacci (procriação de coelhos) Gerar a sequência de números de Fibonacci para um dado valor de n, usando a seguinte fórmula recursiva: Gerar a sequência de números de Fibonacci para um dado valor de n, usando a seguinte fórmula recursiva: O programa deve montar uma tabela com os números de Fibonacci e com o número de chamadas recursivas para gerar cada um deles O programa deve montar uma tabela com os números de Fibonacci e com o número de chamadas recursivas para gerar cada um deles Para tanto, o programa deve ser devidamente instrumentado (ver como exemplo a tabela a seguir) Para tanto, o programa deve ser devidamente instrumentado (ver como exemplo a tabela a seguir) -1, p/ n < 0 0, p/ n = 0 Fib (n) = 1, p/ n = 1 Fib (n-2) + Fib (n-1), p/ n > 1

Exemplo: tabela para n = 20 n | Fib(n) | Chamadas recursivas n | Fib(n) | Chamadas recursivas | 0 | 1 0 | 0 | 1 1 | 1 | 1 1 | 1 | 1 2 | 1 | 3 2 | 1 | 3 3 | 2 | 5 3 | 2 | 5 4 | 3 | 9 4 | 3 | 9 5 | 5 | 15 5 | 5 | 15 6 | 8 | 25 6 | 8 | 25 7 | 13 | 41 7 | 13 | 41 8 | 21 | 67 8 | 21 | 67 9 | 34 | | 34 | | 55 | | 55 | | 89 | | 89 | | 144 | | 144 | | 233 | | 233 | | 377 | | 377 | | 610 | | 610 | | 987 | | 987 | | 1597 | | 1597 | | 2584 | | 2584 | | 4181 | | 4181 | | 6765 | | 6765 | 21891

Tarefa 1 do Lab 9: Função binomial Em Análise Combinatória, o coeficiente binomial tem a seguinte formulação recursiva: Em Análise Combinatória, o coeficiente binomial tem a seguinte formulação recursiva: Usando esta formulação, escrever um programa para ler um inteiro positivo m e montar duas matrizes quadradas: Usando esta formulação, escrever um programa para ler um inteiro positivo m e montar duas matrizes quadradas:  A primeira de nome A(m x m), onde A[i][j] = Binom (i, j), para 0  i  m-1 e 0  j  m-1  A segunda de nome B(m x m), onde B[i][j] deverá conter o número de chamadas recursivas para calcular A[i][j], para 0  i  m-1 e 0  j  m-1 -1, p/ n n Binom (n, k) = 1, p/ k = 0 ou k = n Binom (n-1, k-1) + Binom (n-1, k), p/ outros casos

Exemplo: matrizes para m = 8 Matrizes quadradas com valores e chamadas recursivas da funcao binomial Digite a dimensao das matrizes: 8 Matriz A com os valores da funcao binomial: Matriz B com os numeros de chamadas recursivas da funcao binomial: i i j j

Tarefa 2 do Lab 9: Função com aninhamento de recursividade Uma função h(n) tem a seguinte formulação recursiva aninhada: Uma função h(n) tem a seguinte formulação recursiva aninhada: Usando esta formulação, escrever um programa para ler um inteiro positivo m e montar uma tabela de h(n) e do número de chamadas recursivas para o cálculo de h(n), para 0  n  m Usando esta formulação, escrever um programa para ler um inteiro positivo m e montar uma tabela de h(n) e do número de chamadas recursivas para o cálculo de h(n), para 0  n  m -1, p/ n < 0 0, p/ n = 0 h (n) = n, p/ n > 4 h (2 + h (2*n)), p/ 1 ≤ n ≤ 4

Exemplo: tabela para m = 8 n | h(n) | Chamadas recursivas n | h(n) | Chamadas recursivas | 0 | 1 0 | 0 | 1 1 | 14 | 7 1 | 14 | 7 2 | 12 | 5 2 | 12 | 5 3 | 8 | 3 3 | 8 | 3 4 | 10 | 3 4 | 10 | 3 5 | 5 | 1 5 | 5 | 1 6 | 6 | 1 6 | 6 | 1 7 | 7 | 1 7 | 7 | 1 8 | 8 | 1 8 | 8 | 1

Tarefa 3 do Lab 9: Função Ackermann Uma importante função teórica conhecida como função de Ackermann tem a seguinte formulação recursiva: Uma importante função teórica conhecida como função de Ackermann tem a seguinte formulação recursiva: Usando esta formulação, escrever um programa para ler dois inteiros positivos p e q e montar duas matrizes: Usando esta formulação, escrever um programa para ler dois inteiros positivos p e q e montar duas matrizes:  A primeira de nome A(p x q), onde A[i][j] = Acker (i, j), para 0  i  p-1 e 0  j  q-1 A[i][j] = Acker (i, j), para 0  i  p-1 e 0  j  q-1  A segunda de nome B(p x q), onde B[i][j] deverá conter o número de chamadas recursivas para calcular A[i][j], para 0  i  p-1 e 0  j  q-1 -1, p/ m < 0 ou n < 0 Acker (m, n) = n+1, p/ m = 0 e n ≥ 0 Acker (m-1, 1) p/ n = 0 e m > 0 Acker (m-1, Acker (m, n-1), p/ outros casos

Exemplo: matrizes para p = 4 e q = 8 Matrizes com valores e chamadas recursivas da funcao ackermann Digite as dimensoes das matrizes: 4 8 Matriz A com os valores da funcao acker: Matriz B com os numeros de chamadas recursivas da funcao acker: i i j j