Programação II RECURSÃO
|
|
- Eric Tomé Camilo
- 5 Há anos
- Visualizações:
Transcrição
1 Programação II RECURSÃO Bruno Feijó Dept. de Inormática, PUCRio
2 Motivação Escher: Metamorphosis (197) Drawing Hands (1948) Relativity (195) Alguém diz: Esta sentença é alsa! Paradoxo do Cretense Mentiroso um homem natural de Creta, em praça pública, anuncia: Todo cretense é mentiroso! Estas sentenças são Verdadeiras ou Falsas? O que há de comum neste slide? RECURSÃO! 2
3 Deinições Recursivas Em uma deinição recursiva um item é deinido em termos de si mesmo, ou seja, o item que está sendo deinido aparece como parte da deinição;
4 Conceito de Recursão Em uma deinição recursiva um item é deinido em termos de si mesmo, ou seja,o item que está sendo deinido aparece como parte da deinição; Mas, atenção: a deinição (x) (x) não revela nada sobre a unção. A deinição recursiva da unção atorial at(n) = n (n 1) 1 é a seguinte: 1, se n 0 at( n) n at( n 1), se n 0 Caso Base Recorrência (ou Passo Indutivo) Chamada Recursiva (ou Hipótese Indutiva) Uma deinição recursiva é deinida por um ou mais casos base e por um ou mais passos indutivos envolvendo a chamada da própria unção (denominada chamada recursiva ). O caso base é uma situação trivial da unção, onde calcular o valor da unção é imediato, direto e trivial. O passo indutivo é a aplicação recursiva da unção em uma versão de menor porte do problema. Imagine o passo indutivo como sendo um degrau, situado logo abaixo do nível do problema proposto originalmente, em direção a um caso base. A maior diiculdade neste método de resolver problemas é termos coniança na solidez desse degrau! Isto é: coniança na validade de adotarmos a Hipótese Indutiva. que corresponde a supor a versão de menor porte do problema como estando completamente resolvida. Isto é um método indutivo para resolver problemas. O termo indutivo é usado para salientar que a solução em um passo é induzida pela solução do passo anterior. A relação entre recursão e indução é apresentada mais a rente. 4
5 O processo da Recursão A deinição recursiva é uma maneira de especiicar a solução de uma instância de um problema de tamanho n em termos de soluções para instâncias menores. at() = at(2) Problema tamanho n at(2) = at(1) at(1) = 2 at(0) at(0) = 1 Caso base Neste processo, criase uma pilha de operações pendentes (uma expansão) que são resolvidas quando se encontra o caso base (uma contração). Por exemplo: expansão contração at() * at(2) * (2 * at(1)) * (2 * (1 * at(0))) * (2 * (1 * 1)) Caso Base * (2 * 1) * 2 6 5
6 Implementação de uma Deinição Recursiva Seja a deinição recursiva de atorial: at(0) = 1 at(n) = n at(n 1) Uma vez que encontramos a deinição recursiva de uma unção, a implementação é direta, simples, um trabalho automático: int at (int n) i (n==0) return 1; return n*at(n1); Você pode veriicar se a sua deinição e a sua implementação estão corretas acompanhando a execução de um exemplo: Este acompanhamento chamase TRAÇO. Não dependa de azer o traço para encontrar a deinição recursiva de uma unção. Use o traço para veriicar e não para criar a solução. Ademais, somente unções matemáticas admitem o TRAÇO. Traço não az sentido para procedimentos (e.g. unções em C que disparam ações e/ou não retornam valor). Nestes casos, acompanhamse as variáveis do procedimento. As variáveis deinem o estado do mundo. e nem sempre é ácil acompanhar o estado do mundo! 6
7 Outro Exemplo de Deinição Recursiva A deinição recursiva da soma da série de números naturais, g(n) =1 2 n, é: g(1) = 1 g(n) = g(n 1) + n Este exemplo é mais interessante que o do atorial, porque há uma bela orma echada que representa esta soma: 1 2 n = n(n 1)/2 Nem toda a deinição recursiva tem uma bela orma echada ( raras têm!). Aliás, quando tem, não az sentido implementar a unção recursivamente no computador. A implementação recursiva de g(n) também é imediata: int g(int n) i (n == 1) return 1; return n + g(n 1); Note que não existem construtores de loop (e.g. or ou while) na implementação de deinições recursivas! Há amílias de linguagens que não têm estes construtores (or e while), porque usam recursão (e.g. linguagens uncionais, como Lisp, e linguagens de programação em lógica, como Prolog). 7
8 Recursão e Indução (Material Avançado) Existe uma estreita ligação entre indução e deinições recursivas. Indução é talvez a orma mais natural de raciocinar sobre processos recursivos. Indução é um método para provar que uma airmação S(n) é válida para todo n: Primeiro mostre que S(1) (ou S(0)) é valida Depois assuma que S(k) é válida (esta é a hipótese indutiva) Mostre que S(k+1) é válida Então, S(n) é válida para todo n. Um exemplo clássico: provar que 1 2 n = n(n 1)/2 para todo n S(1) = 1(1 1)/2 = 1, i.e. S(1) é válida! Hipótese: 1 2 k = k(k 1)/2 é uma airmação válida Demonstração que S(k+1) é válida, i.e. 1 2 k (k 1)= (k 1)(k 2)/2 Pela hipótese, o lado esquerdo é k(k 1)/2 (k 1) Colocando (k 1) em evidência, temse: (k 1)(k/2 +1), i.e. (k 1)(k 2)/2 Indução cai naturalmente no mesmo paradigma da deinição recursiva. São duas variantes do mesmo tema. A orma recursiva para o exemplo acima já vimos que é: Este assunto não cai em provas. São inormações que ajudam a entender recursão. g(1) = 1 g(n) = g(n 1) + n Nem toda a deinição recursiva tem uma bela orma echada (como a n(n 1)/2) 8
9 Um Roteiro para Encontrar Soluções Recursivas Devemos observar que, no método indutivo, o problema vai sucessivamente caindo em problemas de menor porte, até que o caso base é alcançado. O passo indutivo corresponde a descobrirmos como modiicar o valor vindo da chamada recursiva para ter o resultado inal procurado. E o que devemos azer é sempre muito simples, como uma espécie de retoque inal (pois o maior trabalho já oi eito pela hipótese indutiva, ou seja: pela chamada recursiva) Não começe tentando simular a execução (deixe isto como teste após encontrar solução. Como um roteiro aça sempre o seguinte (até icar automático no seu cérebro): 1. Deina o domínio e a imagem da unção (lembre que são conjuntos: conjunto dos naturais, conjunto de todos os strings,...). E entenda o que a unção az (escreva exemplos). Saber o que a unção az, ajuda muito a encontrar a chamada recursiva!!! 2. Veriique se há precondições (e.g. algum valor não permitido, ou se é simplesmente a condição de pertencer ao domínio, ou...).. Identiique os elementos mais neutros, simples, do domínio. Os casos base geralmente (mas não necessariamente) dizem respeito a eles. 4. Formule os casos base 5. Encontre as chamadas recursivas (um degrau a menos na direção do caso base). A chamada recursiva resolve a maior parte do problema e retorna um valor concreto. 6. Encontre os passos indutivos como sendo um retoque que você az com o valor recebido da chamada recursiva. Se você começar a complicar, é sinal de que está errado!! Com a prática, junte 5 e 6. Depois de ormular a solução conceitual, pense em como uncionará na máquina, esboçando o código! 9
10 Solução Conceitual Usando o roteiro do slide anterior, primeiro escreva um esboço de solução da maneira mais independente possível da linguagem de computador em questão. Vamos chamar esta solução de Solução Conceitual. Por exemplo: Problema de Ordemn: at(n) : Precondição: não há situações especiais n Caso(s) Base: n=0 at(n) = 1 Hipótese Indutiva (Chamada Recursiva): at(n1) Passo(s) Indutivo(s): at(n) = n * at(n1) R S naturais (inteiros nãonegativos) inteiros (neg. e nãonegativos). reais conjunto das strings Depois escreva o Código! E, por im, tente seguir a execução do Código.
11 EXEMPLOS 11
12 Tamanho e Cópia de Strings int main(void)... print("\ntamanho= %d\n",stringlen(a)); stringcopy(n,"ana"); print("n=%s\n",n); stringcopy(n,"oi"); print("n=%s\n",n); print("n[2]=%d n[]=%d\n\n",n[2],n[]); tamanho= n=ana n=oi n[2]=0 n[]=0 valor numérico de \0 é 0 (zero). Imprimir \0 como %c dá branco Escreva as unções stringlen e stringcopy recursivamente. Não veja as respostas nos slides seguintes. Tente resolver!
13 Exemplo: tamanho de um string Solução conceitual: tamanho(s): S N se s é vazia então tamanho é 0 caso contrário tamanho(s) = 1 + tamanho do resto da string int tamanho(char * s) i (*s == '\0') return 1 + tamanho(s+1); int tamanho(char * s) // versao com sintaxe [] de indices i (s[0] == '\0') return 1 + tamanho(&s[1]); 1
14 #include <stdio.h> void imprimestr(char *); int main(void) char s[] = "Bom Dia"; imprimestr(s); print("\n"); Exemplo imprimir string void imprimestr(char * s) // versao ponteiro i (*s) // ou: i (*s!= '\0') print("%c",*s); Imprimir string invertido: imprimestr(s+1); /* versao vetor void imprimestr(char * s) */ i (s[0]) // ou: i (s[0]!= '\0') print("%c",s[0]); imprimestr(&s[1]); Solução conceitual imprime(s) se s é vazia então nada imprime caso contrário imprime 1 caractere de s e depois imprime resto da string void imprimeinv(char * s) i (*s) imprimeinv(s+1); print("%c",*s); 14
15 #include <stdio.h> void stringcopy(char *, char *); Exemplo stringcopy int main(void) char s[] = "Bom Dia"; char * a = (char *)malloc(51); stringcopy(a,s); ou de maneira mais concisa void stringcopy(char * s, char * t) i (*s = *t) stringcopy(s+1,t+1); Solução conceitual stringcopy(s,t) copia t para s se t é vazia, então s é vazia caso contrário copia 1 caractere de t para s e copia restante da string t para a próxima posição de s void stringcopy(char * s, char * t) i (*t == '\0') *s == '\0 ; *s = *t; stringcopy(s+1,t+1); Ou ainda: void stringcopy(char * s, char * t) *s = *t; i (*t) stringcopy(s+1,t+1); Ou usando sintaxe [ ] de índice: void stringcopy(char * s, char * t) s[0] = t[0]; i (t[0]) // ou i (t[0]!= '\0 ) stringcopy(&s[1],&t[1]); 15
16 Exemplo: Potenciação Exemplo: unção recursiva para cálculo de potenciação /* Função recursiva para cálculo de potenciacao */ int pot (int x, int n) i (n==0) return 1; return x*pot(x,n1); Caso BASE Passo Recursivo 16
17 Exemplo com 2 Casos Base e 2 Chamadas Recursivas Série de Fibonacci (um termo é a soma dos dois anteriores): 0, 1, 1, 2,, 5, 8, Deinição recursiva da Série de Fibonacci: Implementação: ib(0) = 0 ib(1) = 1 ib(n) = ib(n 1) + ib(n 2) se n 1 int ib (int n) i (n==0) i (n==1) return 1; return (ib(n1) + ib(n2)); 17
18 ILUSTRAÇÃO DA RECURSÃO EM C 18
19 Funções Recursivas Tipos de recursão: direta: uma unção A chama a ela própria indireta: uma unção A chama uma unção B que, por sua vez, chama A Comportamento: quando uma unção é chamada recursivamente, criase um ambiente local para cada chamada as variáveis locais de chamadas recursivas são independentes entre si, como se estivéssemos chamando unções dierentes 19
20 Funções Recursivas #include <stdio.h> int at (int n); int main (void) int n = ; int r; r = at ( n ); print("fatorial de %d = %d \n", n, r); /* Função recursiva para cálculo do atorial */ int at (int n) int ; i (n==0) =1; = n*at(n1); return ; 08/0/10 (c) Casanova, Gattass, Viterbo at() n r main n
21 Funções Recursivas #include <stdio.h> int at (int n); int main (void) int n = ; int r; r = at ( n ); print("fatorial de %d = %d \n", n, r); /* Função recursiva para cálculo do atorial */ int at (int n) int ; i (n==0) =1; = n*at(n1); return ; 08/0/10 (c) Casanova, Gattass, Viterbo at(2) n at() n r main n 2
22 Funções Recursivas #include <stdio.h> int at (int n); int main (void) int n = ; int r; r = at ( n ); print("fatorial de %d = %d \n", n, r); /* Função recursiva para cálculo do atorial */ int at (int n) int ; i (n==0) =1; = n*at(n1); return ; 08/0/10 (c) Casanova, Gattass, Viterbo at(1) n at(2) n at() n r main n 1 2
23 Funções Recursivas #include <stdio.h> int at (int n); int main (void) int n = ; int r; r = at ( n ); print("fatorial de %d = %d \n", n, r); /* Função recursiva para cálculo do atorial */ int at (int n) int ; i (n==0) =1; = n*at(n1); return ; 08/0/10 (c) Casanova, Gattass, Viterbo at(0) n at(1) n at(2) n at() n r main n 0 1 2
24 Funções Recursivas #include <stdio.h> int at (int n); int main (void) int n = ; int r; r = at ( n ); print("fatorial de %d = %d \n", n, r); /* Função recursiva para cálculo do atorial */ int at (int n) int ; i (n==0) =1; = n*at(n1); return ; 08/0/10 (c) Casanova, Gattass, Viterbo at(0) n at(1) n at(2) n at() n r main n
25 Funções Recursivas #include <stdio.h> int at (int n); int main (void) int n = ; int r; r = at ( n ); print("fatorial de %d = %d \n", n, r); /* Função recursiva para cálculo do atorial */ int at (int n) int ; i (n==0) =1; = n*at(n1); return ; 08/0/10 (c) Casanova, Gattass, Viterbo at(1) n at(2) n at() n r main n 1 1 2
26 Funções Recursivas #include <stdio.h> int at (int n); int main (void) int n = ; int r; r = at ( n ); print("fatorial de %d = %d \n", n, r); /* Função recursiva para cálculo do atorial */ int at (int n) int ; i (n==0) =1; = n*at(n1); return ; 08/0/10 (c) Casanova, Gattass, Viterbo at(2) n at() n r main n 2 2
27 Funções Recursivas #include <stdio.h> int at (int n); int main (void) int n = ; int r; r = at ( n ); print("fatorial de %d = %d \n", n, r); /* Função recursiva para cálculo do atorial */ int at (int n) int ; i (n==0) =1; = n*at(n1); return ; 08/0/10 (c) Casanova, Gattass, Viterbo at() n r main n 6
28 Funções Recursivas #include <stdio.h> int at (int n); int main (void) int n = ; int r; r = at ( n ); print("fatorial de %d = %d \n", n, r); /* Função recursiva para cálculo do atorial */ int at (int n) int ; i (n==0) =1; = n*at(n1); return ; 08/0/10 (c) Casanova, Gattass, Viterbo main r n 6
29 Reerências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus (2004) Capítulo 4 Funções (pag. 54) Capítulo 7 Cadeias de caracteres (pag. 91) 29
Programação II RECURSÃO
Programação II RECURSÃO Bruno Feijó Dept. de Informática, PUC-Rio Motivação Escher: Metamorphosis (1937) - Drawing Hands (1948) Relativity (1953) http://www.worldofescher.com/gallery/ Alguém diz: Esta
Leia maisINF1007: Programação Funções Recursivas. 12/03/2014 (c) Dept. Informática - PUC-Rio 1
INF1007: Programação 2 4 Funções Recursivas 12/0/2014 (c) Dept. Inormática PUCRio 1 Tópicos Principais Recursão Deinições recursivas Funções Recursivas Implementação Comportamento 12/0/2014 (c) Dept. Inormática
Leia maisINF 1007 Programação II
INF 1007 Programação II Aula 05 Recursividade Edirlei Soares de Lima Introdução As seguintes sentenças são Verdadeiras ou Falsas? 1. Alguém diz: Estou mentido agora! ; 2. Alguém
Leia maisProgramação de Computadores II. Cap. 5 Vetores
Programação de Computadores II Cap. 5 Vetores Livro: Waldemar Celes, Renato Cerqueira, José Lucas Rangel. Introdução a Estruturas de Dados, Editora Campus (2004) Slides adaptados dos originais dos profs.:
Leia maisProgramação de Computadores II. Cap. 4 Funções
Programação de Computadores II Cap. 4 Funções Livro: Waldemar Celes, Renato Cerqueira, José Lucas Rangel. Introdução a Estruturas de Dados, Editora Campus (2004) Slides adaptados dos originais dos profs.:
Leia maisProgramação Estruturada
Programação Estruturada Recursão Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Recursão Recursão 1 Recursão 2
Leia maisMC102 Aula 26. Instituto de Computação Unicamp. 17 de Novembro de 2016
MC102 Aula 26 Recursão Instituto de Computação Unicamp 17 de Novembro de 2016 Roteiro 1 Recursão Indução 2 Recursão 3 Fatorial 4 O que acontece na memória 5 Recursão Iteração 6 Soma em um Vetor 7 Números
Leia maisEstruturas de Dados. Módulo 4 Funções. 9/8/2005 (c) Dept. Informática - PUC-Rio 1
Estruturas de Dados Módulo 4 Funções 9/8/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus (2004)
Leia maisProgramação de Computadores II. Cap. 7 Cadeias de Caracteres 1/2
Programação de Computadores II Cap. 7 Cadeias de Caracteres 1/2 Livro: Waldemar Celes, Renato Cerqueira, José Lucas Rangel. Introdução a Estruturas de Dados, Editora Campus (2004) Slides adaptados dos
Leia maisUSANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS. Bruno Maffeo Departamento de Informática PUC-Rio
USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS Bruno Maffeo Departamento de Informática PUC-Rio MÉTODO INDUTIVO O método indutivo para resolver problemas aqui empregado inspira-se na formulação mais
Leia maisTécnicas de projeto de algoritmos: Indução
Técnicas de projeto de algoritmos: Indução ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo dbeder@usp.br 08/2008
Leia maisRecursão David Déharbe
Recursão David Déharbe 1 1 Objetivos da aula O conceito de recursão. Exemplos. Programação em C. 2 2 Roteiro da aula Revisão de funções; Motivação; Definição; Dois exemplos básicos; Recursão mútua; Dois
Leia maisProgramação de Computadores II. Cap. 7 Cadeias de Caracteres
Programação de Computadores II Cap. 7 Cadeias de Caracteres Livro: Waldemar Celes, Renato Cerqueira, José Lucas Rangel. Introdução a Estruturas de Dados, Editora Campus (2004) Slides adaptados dos originais
Leia maisAlgoritmos e Estruturas de Dados I Linguagem C
Algoritmos e Estruturas de Dados I (DCC/003) Algoritmos e Estruturas de Dados I Linguagem C Aula Tópico 11 Recursividade 1 Recursão Na linguagem C, uma função pode chamar outra função. A função main()
Leia maisProgramação de Computadores II. Recursividade
Programação de Computadores II Recursividade Livro: Waldemar Celes, Reato Cerqueira, José Lucas Ragel. Itrodução a Estruturas de Dados, Editora Campus (2004) Slides adaptados dos origiais dos pros.: Marco
Leia maisProgramação Estruturada Prof. Rodrigo Hausen Organização e Gerenciamento de Memória
Programação Estruturada Prof. Rodrigo Hausen http://progest.compscinet.org Organização e Gerenciamento de Memória 1 AULA PASSADA - vetores ou arrays Declaração de um vetor (array) em C: tipo nome[tamanho];
Leia maisProgramação II. Ordenação (sort) Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Ordenação (sort) Bruno Feijó Dept. de Informática, PUC-Rio Bubble Sort Bubble Sort Ordem Crescente Apenas de interesse didático e de referência A idéia é ir comparando dois vizinhos e trocando
Leia maisComputadores Digitais 2. Prof. Rodrigo de Souza Couto
Computadores Digitais 2 Linguagens de Programação DEL-Poli/UFRJ Prof. Miguel Campista Aula de Hoje Tipos Estruturados Tipo estrutura Definição de novos tipos Aninhamento de Estruturas Vetores de estruturas
Leia maisINTRODUÇÃO À LINGUAGEM C
INTRODUÇÃO À LINGUAGEM C Prof. Bruno Feijó, Dept. de Informática, PUC-Rio (2018) C foi criado no início da década de 70, quando os programas mais eficientes eram escritos em linguagem Assembly, bem próxima
Leia maisINTRODUÇÃO À LINGUAGEM C
INTRODUÇÃO À LINGUAGEM C Prof. Bruno Feijó, Dept. de Informática, PUC-Rio (2018) C foi criado no início da década de 70, quando os programas mais eficientes eram escritos em linguagem Assembly, bem próxima
Leia maisINE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA
INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA PARA A COMPUTAÇÃO PROF. DANIEL S. FREITAS UFSC - CTC - INE Prof. Daniel S. Freitas - UFSC/CTC/INE/2007 p.1/27 4 - INTROD. À ANÁLISE COMBINATÓRIA 4.1) Arranjos
Leia maisCap. 3 Entrada e Saída e Controle de Fluxo
Programação de Computadores II Cap. 3 Entrada e Saída e Controle de Fluxo Livro: Waldemar Celes, Renato Cerqueira, José Lucas Rangel. Introdução a Estruturas de Dados, Editora Campus (2004) Slides adaptados
Leia maisUniversidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Recursão em C
Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação Recursão em C Material preparado pela profa Silvana Maria Affonso de Lara 2º semestre de 2010 ROTEIRO DA AULA Definição
Leia maisRecursividade. Prof. Jesus José de Oliveira Neto
Recursividade Prof. Jesus José de Oliveira Neto Algoritmos podem ser definidos de duas formas: Forma iterativa ou não recursiva: utiliza laços de repetição (while, for, do/while) Forma recursiva: métodos
Leia maisEstruturas de Dados. Revisão de Funções e Recursão. Agradecimentos
Estruturas de Dados Revisão de Funções e Recursão Prof. Ricardo J. G. B. Campello Agradecimentos Parte dos slides a seguir são adaptações dos originais em Pascal gentilmente cedidos pelo Prof. Rudinei
Leia maisRecursão. Aula 1. Liana Duenha. Faculdade de Computação Universidade Federal de Mato Grosso do Sul
Recursão Aula 1 Liana Duenha Faculdade de Computação Universidade Federal de Mato Grosso do Sul Algoritmos e Programação II, Análise de Sistemas, 2010 Martinez & Rubert (FACOM) Recursão APIIAS 1 / 25 Conteúdo
Leia maisEstruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches
CT-234 Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural Carlos Alberto Alonso Sanches CT-234 2) Algoritmos recursivos Indução matemática, recursão, recorrências Indução matemática Uma
Leia maisINTRODUÇÃO À LINGUAGEM C
INTRODUÇÃO À LINGUAGEM C Prof. Bruno Feijó, Dept. de Informática, PUC-Rio (2017) C foi criado no início da década de 70, quando os programas mais eficientes eram escritos em linguagem Assembly, bem próxima
Leia maisINF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1
INF1007: Programação 2 6 Ordenação de Vetores 01/10/2015 (c) Dept. Informática - PUC-Rio 1 Tópicos Introdução Ordenação bolha (bubble sort) Ordenação por seleção (selection sort) 01/10/2015 (c) Dept. Informática
Leia maisMódulo 3 Controle de Fluxo
Estruturas de Dados Módulo 3 Controle de Fluxo 16/8/2005 (c) Marco A. Casanova - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus
Leia maisComputadores Digitais 2. Prof. Rodrigo de Souza Couto
Computadores Digitais 2 Linguagens de Programação DEL-Poli/UFRJ Prof. Miguel Campista Aula de Hoje Vetores e alocação dinâmica Vetores Alocação dinâmica Vetores locais e funções ATENÇÃO Esta apresentação
Leia maisIntrodução à Programação
Introdução à Programação Aula 08 Ponteiros Edirlei Soares de Lima Endereço de uma Variável Toda variável definida em um programa ocupa uma área de memória; A cada área de memória
Leia maisProgramação: Vetores
Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia
Leia maisProgramação II. Vetor de Tipo Estruturado e Vetor de Ponteiros. Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Vetor de Tipo Estruturado e Vetor de Ponteiros Bruno Feijó Dept. de Informática, PUC-Rio Vetores e Tipos Estruturados Dado um tipo estruturado T (com 3 campos, por exemplo), podemos ter
Leia maisMC102 Algoritmos e Programação de Computadores
MC102 Algoritmos e Programação de Computadores Instituto de Computação UNICAMP Primeiro Semestre de 2014 Roteiro 1 Maior número 2 Soma de n números 3 Fatorial 4 Máximo Divisor Comum (MDC) 5 Números primos
Leia maisEstruturas de Dados. Módulo 11 Pilhas. 9/8/2005 (c) Dept. Informática - PUC-Rio 1
Estruturas de Dados Módulo 11 Pilhas 9/8/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus (2004)
Leia maisINF 1620 P1-13/09/02 Questão 1 Nome:
INF 1620 P1-13/09/02 Questão 1 Considere que o cálculo da multa para o pagamento de um determinado imposto varia de acordo com a tabela a seguir: Valor do Imposto Original Multa por mês de atraso até R$
Leia maisMódulo 5 Vetores e Alocação Dinâmica
Estruturas de Dados Módulo 5 Vetores e Alocação Dinâmica 1/9/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora
Leia maisINE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA
INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA PARA A COMPUTAÇÃO PROF. DANIEL S. FREITAS UFSC - CTC - INE Prof. Daniel S. Freitas - UFSC/CTC/INE/2007 p.1/26 3 - INDUÇÃO E RECURSÃO 3.1) Indução Matemática 3.2)
Leia maisAnálise e Complexidade de Algoritmos
Análise e Complexidade de Algoritmos Principais paradigmas do projeto de algoritmos - Recursividade - Tentativa e erro - Divisão e Conquista - Programação dinâmica - Algoritmos Gulosos e de Aproximação
Leia maisInstituto de C. Linguagem C: Listas. Luis Martí Instituto de Computação Universidade Federal Fluminense -
Instituto de C Linguagem C: Listas Luis Martí Instituto de Computação Universidade Federal Fluminense lmarti@ic.uff.br - http://lmarti.com Listas Encadeadas Definição Funções básicas Tópicos Principais
Leia maisProcessamento da Informação
Processamento da Informação Fabrício Olivetti de França 02 de Fevereiro de 2019 Topics 1. Recursão 1 Recursão Indução Matemática Em bases matemáticas vocês aprenderam sobre indução matemática: Provamos
Leia maisREVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos
REVISÃO DE C Vanessa Braganholo Estruturas de Dados e Seus Algoritmos REVISÃO DE C Ponteiros Alocação dinâmica de memória Recursão INSTITUTO DE COMPUTAÇÃO - UFF 2 PONTEIROS PONTEIROS C permite o armazenamento
Leia maisINF1007: Programação 2. 0 Revisão. 06/08/2015 (c) Dept. de Informática - PUC-Rio 1
INF1007: Programação 2 0 Revisão 06/08/2015 (c) Dept. de Informática - PUC-Rio 1 Tópicos Principais Variáveis e Constantes Operadores e Expressões Entrada e Saída Tomada de Decisão Construção com laços
Leia maisFUNÇÕES EM C Material adaptado da profa Silvana Maria Affonso de Lara
Universidade do Estado de Minas Gerais - UEMG Curso de Engenharia da Computação FUNÇÕES EM C 1 Material adaptado da profa Silvana Maria Affonso de Lara ROTEIRO DA AULA Definição de Função Argumentos, retornos
Leia maisINF 1007 Programação II
INF 1007 Programação II Aula 03 - Ponteiros Edirlei Soares de Lima Endereço de uma Variável Toda variável definida em um programa ocupa uma área de memória; A cada área de memória
Leia maisAlgoritmos e Programação
Algoritmos e Programação Aula 3 Introdução a Linguagem C Profa. Marina Gomes marinagomes@unipampa.edu.br 1 Aula de Hoje - Criar programas simples em C utilizando a estrutura básica; - Declarar variáveis;
Leia maisProgramação de Computadores II. Cap. 17 Busca
Programação de Computadores II Cap. 17 Busca Livro: Waldemar Celes, Renato Cerqueira, José Lucas Rangel. Introdução a Estruturas de Dados, Editora Campus (2004) Slides adaptados dos originais dos profs.:
Leia maisVariáveis, Tipos de Dados e Operadores
! Variáveis, Tipos de Dados e Operadores Engenharias Informática Aplicada 2.o sem/2013 Profa Suely (e-mail: smaoki@yahoo.com) VARIÁVEL VARIÁVEL É um local lógico, ligado a um endereço físico da memória
Leia maisCadeias de Caracteres (Strings)
INF1005: Programação 1 Cadeias de Caracteres (Strings) 02/05/10 (c) Paula Rodrigues 1 Tópicos Caracteres Cadeias de caracteres Leitura de caracteres e cadeias de caracteres Funções que manipulam cadeias
Leia maisProgramação de Computadores II. Cap. 5 Alocação Dinâmica
Programação de Computadores II Cap. 5 Alocação Dinâmica Livro: Waldemar Celes, Renato Cerqueira, José Lucas Rangel. Introdução a Estruturas de Dados, Editora Campus (2004) Slides adaptados dos originais
Leia maisSub-rotinas David Déharbe
Sub-rotinas David Déharbe 1 1 Objetivos da aula Os conceitos de sub-rotina, funções e procedimentos; Como usar sub-rotinas em C: parâmetros de sub-rotinas: parâmetros formais e parâmetros efetivos. passagem
Leia maisMódulo 7 Cadeias de Caracteres
Estruturas de Dados Módulo 7 Cadeias de Caracteres 9/8/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora
Leia maisIntrodução a Computação
Introdução a Computação Aula 03 Introdução a Linguagem C Edirlei Soares de Lima Programação Programa é um algoritmo escrito em uma linguagem de programação. Existem diversas linguagens
Leia maisExercícios Capítulos 5 e 6
Estruturas de Dados Exercícios Capítulos e 6 6//6 (c) Dept. Informática - PUC-Rio Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus () Capítulo
Leia maisRevisão: Tipo Abstrato de Dados Recursividade
Algoritmos e Estrutura de Dados II Revisão: Tipo Abstrato de Dados Recursividade Prof a Karina Oliveira kkco@dei.unicap.br Introdução Estudo das estruturas de dados envolve dois objetivos complementares:
Leia maisLinguagem C: Elementos fundamentais
Instituto de C Linguagem C: Elementos fundamentais Luis Martí Instituto de Computação Universidade Federal Fluminense lmarti@ic.uff.br - http://lmarti.com Tópicos Principais Variáveis e Constantes Operadores
Leia maisLinguagem de programação métodos/funções
Instituto Federal de Minas Gerais Campus Ponte Nova Linguagem de programação métodos/funções Professor: Saulo Henrique Cabral Silva MÉTODOS / MODULARIZANDO Modularizando... 2 Métodos Funções Sub-rotinas
Leia mais04 Recursão SCC201/501 - Introdução à Ciência de Computação II
04 Recursão SCC201/501 - Introdução à Ciência de Computação II Prof. Moacir Ponti Jr. www.icmc.usp.br/~moacir Instituto de Ciências Matemáticas e de Computação USP 2010/2 Moacir Ponti Jr. (ICMCUSP) 04Recursão
Leia maisIntrodução à Programação C
Introdução à Programação C Fabio Mascarenhas - 2014.2 http://www.dcc.ufrj.br/~fabiom/introc Um Sistema de Arquivos Suponha que queremos representar um sistema de arquivos em que temos arquivos e diretórios
Leia maisProgramação II. Vetores Bidimensionais e Vetores de Ponteiros. Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Vetores Bidimensionais e Vetores de Ponteiros Bruno Feijó Dept. de Informática, PUC-Rio Array (Vetor) Bidimensional 0 0 1 2 3 4 5 6 7 8 14 1 2 Array (Vetor) Bidimensional vs Ponteiros Quando
Leia maisMC-102 Aula 04 Expressões Relacionais, Lógicas e Comandos Condicionais
MC-102 Aula 04 Expressões Relacionais, Lógicas e Comandos Condicionais Instituto de Computação Unicamp 26 de Agosto de 2016 Roteiro 1 Expressões relacionais 2 Expressões lógicas 3 4 Exercícios (Instituto
Leia maisLaboratório de Programação - Exercícios 9, 10 e 11
Laboratório de Programação - Exercícios 9, 10 e 11 Arrays e strings, Loops João Araujo Ribeiro jaraujo@uerj.br Universidade do Estado do Rio de Janeiro Departamento de Engenharia de Sistemas e Computação
Leia maisLISTA DE EXERCÍCIOS MÊS 04
São José dos Campos, 05 de Junho de 2008 Disciplina: CES 10 Introdução à Computação. Semestre 2008-2º Período Professor: Carlos Henrique Quartucci Forster Estagiária: Michelle de Oliveira Parreira Instituto
Leia maisFunções em C. Lucas Ferrari de Oliveira Professor Adjunto. Linguagem de Programação Estruturada I. Universidade Federal do Paraná
em C Linguagem de Programação Estruturada I Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná Sumário Funções: Conceitos; Forma Geral das funções; Regras de Escopo; Argumentos
Leia maisSumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?
Introdução à Ciência da Computação Ponteiros em C Prof. Ricardo J. G. B. Campello Sumário Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C Operações Ponteiros
Leia maisProgramação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Vetores e Alocação Dinâmica Bruno Feijó Dept. de Informática, PUC-Rio Vetores (arrays) Vetor: estrutura de dados definindo um conjunto enumerável Exemplo: v = vetor de inteiros com 10 elementos
Leia maisALGORITMOS E ESTRUTURAS DE DADOS CES-11
ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro pauloac@ita.br Sala 110 Prédio da Computação www.comp.ita.br/~pauloac IECE - ITA Revisão CES-11 Tipos escalares primitivos Tipos constituídos
Leia maisMC102 Aula 27 Recursão II
MC102 Aula 27 Recursão II Instituto de Computação Unicamp 17 de Novembro de 2016 Roteiro 1 Recursão Relembrando 2 Cálculo de Potências 3 Torres de Hanoi 4 Recursão e Backtracking 5 Exercício (Instituto
Leia maisProgramação de Computadores II. Cap. 16 Ordenação
Programação de Computadores II Cap. 16 Ordenação Livro: Waldemar Celes, Renato Cerqueira, José Lucas Rangel. Introdução a Estruturas de Dados, Editora Campus (2004) Slides adaptados dos originais dos profs.:
Leia maisINF1007: Programação 2. 4 Tipos Estruturados. 10/23/09 (c) Dept. Informática - PUC-Rio 1
INF1007: Programação 2 4 Tipos Estruturados 10/23/09 (c) Dept. Informática - PUC-Rio 1 Tópicos Principais Tipo estrutura Definição de novos tipos Aninhamento de estruturas Vetores de estruturas Vetores
Leia maisWaldemar Celes e Roberto Ierusalimschy. 29 de Fevereiro de 2012
Capítulo 5: Repetições Waldemar Celes e Roberto Ierusalimschy 29 de Fevereiro de 2012 1 Construção de laços Uma das principais características de um computador é sua capacidade para realizar cálculo e
Leia maisEncapsulamento de Código: Funções e Procedimentos
Luciano Moraes Da Luz Brum Universidade Federal do Pampa Unipampa Campus Bagé email: lucianobrum18@gmail.com Encapsulamento de Código: Funções e Procedimentos Sumário Introdução à Funções e Procedimentos
Leia maisAula prática 5. Funções Recursivas
Programação Funcional UFOP DECOM 2014.1 Aula prática 5 Funções Recursivas Resumo Definições recursivas são comuns na programação funcional. Nesta aula vamos aprender a definir funções recursivas. Sumário
Leia maisSCC Capítulo 2 Recursão
SCC-501 - Capítulo 2 João Luís Garcia Rosa 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos http://www.icmc.usp.br/~joaoluis
Leia maisAula 18: Funções em C
Aula 18: Funções em C Fernanda Passos Universidade Federal Fluminense Programação de Computadores IV Fernanda Passos (UFF) Funções em C Programação de Computadores IV 1 / 38 Agenda 1 Revisão e Contexto
Leia maisProgramação Estruturada Prof. Rodrigo Hausen VAMOS USAR O LINUX. SE TIVER ENTRADO NO WINDOWS, REINICIE O COMPUTADOR.
Programação Estruturada Prof. Rodrigo Hausen http://progest.compscinet.org Expressões e Funções VAMOS USAR O LINUX. SE TIVER ENTRADO NO WINDOWS, REINICIE O COMPUTADOR. 1 TIPOS PRIMITIVOS EM C Numéricos:
Leia maisAula 12: Funções. CI208 - Programação de Computadores. Prof. MSc. Diego Roberto Antunes
CI208 - Programação de Computadores Aula 12: Funções Prof. MSc. Diego Roberto Antunes diegor@inf.ufpr.br www.inf.ufpr.br/diegor Universidade Federal do Paraná Setor de Ciências Exatas Departamento de Informática
Leia maisLista 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.
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. Funções e estruturas básicas 1. Faça uma função que recebe a idade de uma
Leia maisMatemática Discreta Bacharelado em Sistemas de Informação Resolução - 4ª Lista de Exercícios. Indução e Recursão
1) Prove utilizando o princípio da indução matemática, que são verdadeiras as seguintes igualdades: a) 1+4+7+...+(3n 2) Para n 1 temos que: 3.1 2. 1 1 da indução é Supondoo que a igualdade nk seja verdadeira,
Leia maisMódulo 8 Tipos Estruturados
Estruturas de Dados Módulo 8 Tipos Estruturados 9/8/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus
Leia maisComputadores Digitais 2. Prof. Rodrigo de Souza Couto
Computadores Digitais 2 Linguagens de Programação DEL-Poli/UFRJ Prof. Miguel Campista Aula de Hoje Arquivos Funções para abrir e fechar arquivos Arquivos em modo texto Arquivos em modo binário ATENÇÃO
Leia maisEstruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1
Estruturas de Dados Módulo 17 - Busca 2/6/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus (2004)
Leia maisAlgoritmos e Programação
Algoritmos e Programação Aula 9 Subalgoritmos, funções e passagem de parâmetros Profa. Marina Gomes marinagomes@unipampa.edu.br 22/06/2017 Engenharia de Computação - Unipampa 1 Modularização Facilita a
Leia mais3 Função - conceitos gerais 45
UFF/GMA - Matemática Básica - Parte III - Função Notas de aula - Marlene - 010-44 Sumário III Função: conceitos erais 45 3 Função - conceitos erais 45 3.1 Conceito e representação simbólica de unção...............................
Leia maisCapítulo 1: Introdução à Linguagem C. Pontifícia Universidade Católica Departamento de Informática
Capítulo 1: Introdução à Linguagem C Pontifícia Universidade Católica Departamento de Informática Programa Programa é um algoritmo escrito em uma linguagem de programação. No nosso caso, a linguagem C.
Leia maisRecursividade. Objetivos do módulo. O que é recursividade
Recursividade Objetivos do módulo Discutir o conceito de recursividade Mostrar exemplos de situações onde recursividade é importante Discutir a diferença entre recursividade e iteração O que é recursividade
Leia maisAlgoritmia. "Conta-me e eu esqueço-me Mostra-me e eu lembro-me Deixa-me fazer e eu aprendo" Confúcio
Algoritmia "Conta-me e eu esqueço-me Mostra-me e eu lembro-me Deixa-me azer e eu aprendo" Conúcio ISPGaya 2005/2006 Inormática de Gestão 2.º ano Programação 1 Algoritmo Um algoritmo é uma sequência inita
Leia maisComputadores Digitais 2. Prof. Rodrigo de Souza Couto
Computadores Digitais 2 Linguagens de Programação DEL-Poli/UFRJ Prof. Miguel Campista Tópicos Listas Encadeadas Introdução às listas encadeadas Manipulação de elementos Implementações recursivas Listas
Leia maisSCC0601 Projeto de Algoritmos. Recursão
SCC0601 Projeto de Algoritmos Recursão Definição Uma função é dita recursiva quando é definida em seus próprios termos, direta ou indiretamente Dicionário Michaelis: ato ou efeito de recorrer Recorrer:
Leia maisListas Encadeadas. Fabrício J. Barth. BandTec - Faculdade de Tecnologia Bandeirantes
Listas Encadeadas Fabrício J. Barth BandTec - Faculdade de Tecnologia Bandeirantes Fevereiro de 2011 Tópicos Principais Motivação Listas encadeadas Implementações recursivas Listas de tipos estruturados
Leia maisMAC2166 Introdução à Computação para Engenharia Escola Politécnica Segunda Prova 19 de maio de 2008
MAC2166 Introdução à Computação para Engenharia Escola Politécnica Segunda Prova 19 de maio de 2008 Nome: Assinatura: N ō USP: Turma: Instruções: Professor: 1. Não destaque as folhas deste caderno. 2.
Leia maisINF1005: Programação 1. Repetições. 08/03/10 (c) Paula Rodrigues 1
INF1005: Programação 1 Repetições 08/03/10 (c) Paula Rodrigues 1 Tópicos Principais Construção de Laços com while Algoritmos com Repetição Construção de Laços com for Repetição com Teste no Final 08/03/10
Leia maisProgramação II. Tipos Estruturados
Programação II Tipos Estruturados Parte 1: struct Parte 2: Ponteiros para Estrutura Estruturas e Memória Bruno Feijó Dept. de Informática, PUC-Rio struct Dados Compostos Até agora tipos simples: char,
Leia mais3. Linguagem de Programação C
Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3.7. Funções 3.7.1. Introdução 3.7.2. Uso de
Leia maisAlgoritmos e Estruturas de dados
Algoritmos e Estruturas de dados Listas Encadeadas Prof. Dr. Fábio Rodrigues de la Rocha (Listas Encadeadas) 1 / 21 Definição: Anteriormente estudamos listas encadeadas que foram implementadas como vetores
Leia mais1ª Lista de Exercícios
Universidade Federal do Rio de Janeiro Data: 26/04/05 Disciplina: Computação I 1ª Lista de Exercícios 1) Faça um programa, em pseudo-código, que peça ao usuário que informe n números reais e então calcule
Leia maisProgramação II. Listas Encadeadas (Linked Lists) Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Listas Encadeadas (Linked Lists) Bruno Feijó Dept. de Informática, PUC-Rio Vetores vs Estruturas Dinâmicas Vetores (arrays): Ocupa um espaço contíguo de memória Permite acesso randômico
Leia mais