Paradigmas de programação 1 Paradigma? Um paradigma é algo que serve de exemplo ou modelo. Sinônimos: Padrão Prototipo 2 Paradigma de programação? É uma proposta tecnológica. Fornece uma visão do programador sobre a programação. Exemplos PE: Programação procedural (estruturada). POO: Programação orientada a objetos. PL: Programação lógica. PS: Programaçao simbólica. PF: Programação funcional. Alguns paradigmas são considerados mais rígidos do que outros. As linguagens de programação podem suportar diferentes paradigmas de programaçao. 3 Scheme: Linguagem de programação funcional Criado em 1970 (MIT AI Lab). Baseado no cálculo lambda → Procure no google: “Lambda papers” Usa uma sintaxe completamente aninhada. Não existem regras de precedência de operadores. Usa-se notação com parênteses. No Scheme usa-se muita recursão! 4 Exemplos “alo mundo!” 3 21 5 Exemplos https://scheme.cs61a.org/ (9+1) / ( 2+3) 6 Exemplos https://scheme.cs61a.org/ (9+1) / ( 2+3) 7 Exemplos https://scheme.cs61a.org/ 8 Exemplos https://scheme.cs61a.org/ 9 Exemplos https://scheme.cs61a.org/ 10 Processamento da Informação Exercícios de programação Prof. Jesús P. Mena-Chalco CMCC/UFABC Q1/2017 11 Exercício 1: Número de bits Crie um método que, para um número n inteiro positivo, devolva o número de bits necessários para armazenar n. Assinatura: static int numeroBits( int n ) Exemplos: n = 1 Resposta = 1 (1 = 0001) n = 8 Resposta = 4 (8 = 1000) n = 10 Resposta = 4 (10 = 1010) n = 138 Resposta = 8 (138 = 10001010) 12 Exercício 1: Número de bits 13 Exercício 1: Número de bits Versão recursiva: 14 Exercício 1: Número de bits 15 Exercício 2: Encaixe Escreva um método que, recebendo dois números inteiros a e b como parâmetros, verifica se b corresponde aos últimos dígitos de a. Assinatura: static boolean encaixa( int a, int b ) Exemplos: a = 12345 , b=45 → Resposta = true a = 12345 , b=5 → Resposta = true a = 12345 , b=12 → Resposta = false a = 12 , b=12 → Resposta = true a = 12 , b=1212 → Resposta = false 16 Exercício 2: Encaixe 17 Exercício 2: Encaixe 18 Exercício 3: Segmentos consecutivos Escreva um método que, recebendo uma string (sem espaços em branco), permita determinar o número de segmentos consecutivos que a compoem. Assinatura: static int segmentos( String frase ) Exemplos: frase = “AAAAAbbbbbcccccccCCCDDDDDddd” → Resposta = 6 frase = “AAAAA” → Resposta = 1 frase = “” → Resposta = 0 19 Exercício 3: Segmentos consecutivos 20 Problema Ordenar sem comparar? 21 Ordenando elementos Ordenar corresponde ao processo de re-arranjar (permutar) um conjunto de elementos em ordem crescente ou decrescente. 22 O problema de ordenar na forma crescente Um vetor v[0..n-1] é crescente se v[0] ≤ v[1] ≤ … ≤ [n-1] Vetores crescentes: {1, 1, 1, 1, 1, 1, 1, 1} {0, 1, 1, 1, 2, 3, 4, 4, 4, 4, 4, 4, 100} 23 Ordenar uma sequência de números Comparações k=n-1 n-1 k=n-2 n-2 k=n-3 n-3 … k=1 1 Total = (n–1)(n)/2 Total = n²/2 – n/2 24 Ordenar uma sequência de números Se os números estiverem em um intervalo finito? Podemos ordenar os números sem comparar? Exemplo: Um vetor de 1 milhão de elementos. Cada elemento no intervalo: [0, 5] 5 56 1 5 56 3 5 56 0 1 56 0 1 56 4 4 0 3 5 25 Ordenar uma sequência de números 5 56 1 5 56 3 5 56 0 1 56 0 1 56 4 4 0 3 5 Vetor de entrada 26 Ordenação por contagem 5 56 1 5 56 3 5 56 0 1 56 0 1 56 4 4 0 3 5 Vetor de entrada 0 1 2 3 4 5 0 56 0 0 56 0 0 0 Vetor auxiliar 27 Ordenação por contagem 5 56 1 5 56 3 5 56 0 1 56 0 1 56 4 4 0 3 5 Vetor de entrada 0 1 2 3 4 5 3 56 3 0 56 2 2 4 28 Ordenação por contagem 5 56 1 5 56 3 5 56 0 1 56 0 1 56 4 4 0 3 5 Vetor de entrada 0 1 2 3 4 5 3 56 3 0 56 2 2 4 0 56 0 0 56 56 56 56 Vetor de saída 29 Ordenação por contagem 5 56 1 5 56 3 5 56 0 1 56 0 1 56 4 4 0 3 5 3 56 3 4 56 4 5 5 5 5 Vetor de entrada 0 1 2 3 4 5 3 56 3 0 56 2 2 4 0 56 0 0 56 1 1 56 1 Vetor de saída 30 Ordenação por contagem Este algoritmo ordena uma sequência de elementos. A ordenação é não-estável. Ver algoritmo: counting Sort (ordenação estável). 31 Problema 3n+1 Conjectura de Collatz: problema matemático em aberto 32 Problema 3n+1 Conjectura: Qualquer número natural, quando aplicado a esta conjectura, no fim dará sempre 1. A conjectura aplica-se a qualquer número natural, e diz-nos: Se for par: Dividir por 2. Se for impar: Multiplicar por 3 e adicionar 1 Para 5: 5 → 16 → 8 → 4 → 2 → 1 33 Problema 3n+1 Para 13: 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2, 1. Para 11: 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1. 34 Problema 3n+1 Para 27: 27, 82, 41, 124, 62, 31, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242, 121, 364, 182, 91, 274, 137, 412, 206, 103, 310, 155, 466, 233, 700, 350, 175, 526, 263, 790, 395, 1186, 593, 1780, 890, 445, 1336, 668, 334, 167, 502, 251, 754, 377, 1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479, 1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, 1822, 911, 2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732, 866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1. (sequência de 112 números) 35 Problema 3n+1 36 Problema 3n+1 37 Problema 3n+1 Tamanho da sequência para n = [1,.., 13000] Maior valor na sequência para n = [1,.., 13000] Ullam Spiral Ullam Spiral Ullam Spiral http://www.betweenartandscience.com/ulamspiral_words.html Atividade em aula 44 Questão 1 Escreva um método que, recebendo uma Matriz bidimensional de números inteiros, verifica se existem ao menos duas linhas idênticas. Assinatura: static boolean linhasIdenticas ( int M[][] ) Exemplos: 1 1 1 2 2 2 3 3 3 1 2 3 1 2 3 1 2 3 false true 45 Questão 1 46 Questão 2 47 Questão 2 (a) Resposta: x = 4 (b) A = {33, 11, 22, 33, 44, 55, 88, 66, 77, 99} (c) O método particiona o vetor A considerando como elemento pivô o elemento 44. ● Os elementos <= 44 estão no lado esquerdo. ● Os elementos >= 44 estão no lado direito. 48 Sobre um algoritmo sofisticado para ordenar um vetor: Quicksort 49 Partição: Separar elementos em um vetor Problema: Rearranjar um dado vetor A[p..r] e devolver um índice q, pqr, tais que A[p..q­1] A[q] A[q+1..r] 50 51 QuickSort 52 QuickSort 53 QuickSort 54 QuickSort 55 QuickSort 56 QuickSort 57 QuickSort https://www.youtube.com/watch?v=vxENKlcs2Tw 58