Escolar Documentos
Profissional Documentos
Cultura Documentos
Raul Sidnei
PROGRAMAÇÃO Wazlawick
10. ESTRUTURAS
DE DADOS
DERIVADAS
Pilhas
Filas
Simulação Discreta com Filas
Matrizes
PILHAS
LIFO (Last In First Out)
pilha.append(elemento) -> “empilha”
elemento = pilha.pop() -> “desempilha”
JOGO “BATALHA DE CARTAS”
Dividir para conquistar:
Criar uma representação para o baralho de cartas.
Embaralhar as cartas.
Dividir as cartas entre os jogadores.
Simular as jogadas.
Determinar o vencedor.
CRIAÇÃO DE UM BARALHO
SIMPLIFICADO
FUNÇÃO QUE EMBARALHA
UMA LISTA:
DISTRIBUIÇÃO DAS CARTAS
INICIALIZAÇÃO DAS PILHAS
“GANHAS” DE CADA JOGADOR E
DA PILHA DA “MESA”
CADA JOGADOR FAZ UM
DESCARTE POR JOGADA
VERIFICAÇÃO DO
GANHADOR (SE HOUVE)
SE HOUVE UM GANHADOR, ELE
RECEBE TODAS AS CARTAS DA
MESA
AO FINAL DE TODAS AS JOGADAS,
VERIFICAR SE SOBRARAM CARTAS NA
MESA E DÁ-LAS AO ÚLTIMO GANHADOR
VERIFICAR QUEM GANHOU O
JOGO
PROGRAMA COMPLETO 1/2
PROGRAMA COMPLETO 2/2
FILAS
FIFO (First In First Out)
fila.append(elemento) -> “entra na fila”
elemento = fila.pop(0) -> “sai da fila”
FILA DE ATENDIMENTO
Comandos:
"c" – indica a chegada de um novo paciente. Neste caso o sistema pede o
nome do paciente para inserir no final da fila.
"a" – indica que o primeiro paciente da fila pode ser atendido. Neste caso o
primeiro da fila é retirado dela e seu nome exibido para que o atendente
possa chamá-lo.
EXEMPLO
1. Inicialmente a fila está vazia: [].
2. "c" – "João". A fila consiste em ['João'].
3. "c" – "Maria". A fila consiste em ['João', 'Maria'].
4. "c" – "Pedro". A fila consiste em ['João', 'Maria', 'Pedro'].
5. "a". O sistema imprime "João" e a fila consiste em ['Maria', 'Pedro'].
6. "c" – "Alberto". A fila consiste em ['Maria', 'Pedro', 'Alberto'].
7. "a". O sistema imprime "Maria" e a fila consiste em ['Pedro',
'Alberto'].
8. "a". O sistema imprime "Pedro" e a fila consiste em ['Alberto'].
9. "a". O sistema imprime "Alberto" e a fila fica vazia [].
PRIMEIRA VERSÃO
USUÁRIO MAL
COMPORTADO...
1. Inicialmente a fila está vazia: [].
2. "c" – "João". A fila consiste em ['João'].
3. "c" – "Maria". A fila consiste em ['João', 'Maria'].
4. "a". O sistema imprime "João" e a fila consiste em ['Maria'].
5. "a". O sistema imprime "Maria" e a fila fica vazia [].
6. "a". O sistema faz o que?
VERIFICANDO SE TEM
ALGUÉM NA FILA
Equivale a if len(fila) != 0:
TECLE “P” PARA PARAR
SIMULAÇÃO DISCRETA COM
FILAS
Exemplo: um supermercado deseja otimizar o número de caixas abertos
de forma que o tempo de espera do cliente em média seja o menor
possível, mas que também não haja muito tempo de ociosidade entre os
funcionários dos caixas.
ESTRATÉGIA
Um "while" mais externo vai primeiramente simular o mercado com
apenas 1 caixa aberto e medir os tempos de espera e ociosidade; depois
testará com 2 caixas abertos, com 3 e assim por diante.
O número de itens dele é um aleatório entre 1 e 100 e seu tempo de espera total
é zero.
O CLIENTE ESCOLHE A
MENOR FILA
CADA CAIXA PROCEDE A UM
ATENDIMENTO
ACABOU O ATEDIMENTO?
INCREMENTA TEMPO DE CAIXA
OCIOSO, SE FOR O CASO
NO FINAL, CALCULA
OCIOSIDADE E ESPERA TOTAL
PROGRAMA COMPLETO 1/2
PROGRAMA COMPLETO 2/2
EXEMPLO DE RESULTADO
O PROGRAMA É UM EXEMPLO DE
QUE A COMPLEXIDADE PRECISA
SER ADMINISTRADA
Complexidade ciclomática:
1 pelo fluxo principal
+1 para cada if, elif, for, while e assert no programa
+1 para cada and e or nas condições compostas
1
4
5
6
7
8
10
11
12
14 13
15
16
TESTABILIDADE
Algoritmos com complexidade ciclomática abaixo de 10 são
considerados fáceis de testar.
Com complexidade entre 10 e 20 são considerados de médio risco para
o teste, ou seja, a probabilidade de não conseguirmos fazer testes
adequados aumenta.
Com complexidade entre 20 e 50 eles são considerados de alto risco.
Com complexidade acima de 50 são considerados não testáveis.