Paradigmas de programação

Propaganda
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, pqr, 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
Download