Você está na página 1de 71

Algoritmos e programação

com python

Disciplinas:
Programação estruturada

Profa. Dra. Salete Souza de Oliveira


▪ Pilhas
▪ Filas
▪ Simulação Discreta com Filas
▪ Matrizes
▪ LIFO (Last In First Out)
▪ pilha.append(elemento) -> “empilha”
▪ elemento = pilha.pop() -> “desempilha”
▪ 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.
▪ FIFO (First In First Out)
▪ fila.append(elemento) -> “entra na fila”
▪ elemento = fila.pop(0) -> “sai da fila”
▪ 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.
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 [].
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?
Equivale a if len(fila) != 0:
▪ 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.
▪ 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.

▪ Deixaremos a cargo do usuário decidir quando parar. Para isso,


o "while" ficará condicionado a uma entrada do usuário que
digitará "s" para simular com um caixa a mais do que na última
vez e qualquer outra entrada para parar a simulação.
▪ Haverá uma fila para cada caixa.

▪ Cada cliente é representado por uma lista com:


▪ o número de itens que ele tem para passar no caixa
▪ o número de instantes que ele esperou na fila

▪ Exemplo de fila de um caixa:


▪ [[45, 107], [3, 59], [18, 12]]
O número de itens dele é um aleatório entre 1 e 100 e seu tempo de
espera total é zero.
▪ 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
▪ 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.

▪ Assim, nosso algoritmo já alcançou médio risco nesta escala.


▪ Decomposição funcional (tem limitações)
▪ Programação orientada a objetos (é a abordagem
correntemente mais usada)
▪ Em Python, matrizes podem ser representadas como listas de
listas.

[[2, 3], [4, 5]] =


▪ minha_matriz[linha][coluna]
Esta versão considera que algumas posições do
dicionário podem conter “False”
Esta versão considera que todas as posições definidas
no dicionário são “True”
▪ Se a matriz for muito grande e com relativamente poucos
elementos definidos, é recomendada a implementação com
dicionário.
WAZLAWICK, R. S. Introdução a
Algoritmos e Programação com Python.
Elsevier. 2018

Você também pode gostar