Escolar Documentos
Profissional Documentos
Cultura Documentos
Notas de aula
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
Manipulação de arquivos
Recursividade, ordenação e busca
Ferramentas de programação aplicadas à
engenharia
2
Algoritmos
Programação: consiste no mapeamento de
um problema no mundo real a ser resolvido
num modelo computacional.
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
3
Algoritmos
Mas para que esse mapeamento seja executado,
costuma-se usar a representação prévia do
problema por meio de um algoritmo.
Algoritmo: sequência enumerada e bem
especificada de operações (instruções) para se
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
4
Algoritmos
Exemplos de algoritmo (usando linguagem
natural como representação):
Receita de bolo Tomando um banho
1. Misture os ingredientes 1. Entrar no banheiro e tirar
2. Unte a forma com manteiga a roupa
3. Despeje a mistura na forma 2. Abrir a torneira do
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
5
Algoritmos
Exemplos de algoritmo (usando linguagem
natural como representação):
6
Algoritmos
Exemplos de algoritmo (solução de jogos)
◦ Cubo mágico
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
◦ Missionários e canibais
https://www.jogos360.com.br/missionarios_e_canibais.html
7
Algoritmos
Importância do algoritmo em programação:
necessidade de se especificar uma sequência de
passos lógicos, para que o computador possa
executar uma tarefa qualquer.
=> Com um algoritmo, podemos conceber uma
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
8
Algoritmos
Todo algoritmo deve apresentar algumas
características básicas:
◦ Não dar margem à dupla interpretação (não ser
ambíguo).
◦ Ter capacidade de receber dados de entrada e poder
gerar informações de saída de acordo com
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
especificações da aplicação.
◦ Ser efetivo, ou seja, todas as etapas especificadas no
algoritmo devem ser alcançáveis em um tempo finito
e com desempenho que satisfaça às necessidades da
aplicação.
◦ Ter fim.
9
Algoritmos
No caso do uso da da linguagem natural para
descrição de algoritmos, ela não é usual pois
muitas vezes dá oportunidade a más
interpretações, ambiguidades e imprecisões.
Na prática, outras representações da descrição
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
10
Algoritmos
Fluxograma
convencional:
representação
gráfica que utiliza
formas geométricas
padronizadas ligadas
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
11
Algoritmos
Fluxograma convencional
Algumas formas geométricas e significado
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
12
Algoritmos
Pseudo-código: linguagem intermediária entre a
linguagem natural e a linguagem de programação.
# Algoritmo Média
# Início
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
13
Algoritmos
Diagrama de Chapin: representação das
ações do algoritmo em retângulos, com início e
fim e estrutras básicas de controle.
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
14
Algoritmos
Um algortimo quando implementado em
um computador é constituído pelo menos
por três partes, sendo elas:
1. Entrada de dados
2. Processamento de dados
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
3. Saída de dados
15
Algoritmos
Na Entrada: fornecimento dos dados ou
informações necessárias à execução do
algoritmo.
Pelo Processamento: são avaliadas
todas as expressões algébricas, relacionais
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
16
Algoritmos
Na Saída: todos os resultados do
processamento (ou parte deles) são
disponibilizados (enviados) para um ou
mais dispositivos de saída, seja o monitor,
impressora, ou a própria memória do
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
computador.
17
Elementos de programação
estruturada
Tipos de dados
Para que seja possível armazenar e manipular
(processar) dados no computador é necessário
representá-los internamente de alguma forma.
Os dados em um computador devem ser
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
armazenados de acordo:
◦ com o tipo de informação que se deseja representar;
◦ com o tipo de operação que será realizada com eles.
18
Elementos de programação
estruturada
Tipos de dados mais comuns:
◦ Inteiro: são os números pertencentes ao
conjunto dos números inteiros, isto é, sem
parte fracionária. Exemplos:
1, -340, 6, 0 e -10
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
20
Elementos de programação
estruturada
Tipos de dados mais comuns:
◦ Lógico ou booleano: utilizado para
representar informações que só podem
assumir dois valores, ou o valor verdadeiro
(True), ou o valor falso (False). Exemplos:
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
24
Elementos de programação
estruturada
Para que as variáveis sejam identificadas e
manipuladas no computador, é necessário que
elas estejam associados a um nome ou
identificador.
O conteúdo deste identificador será o dado em
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
25
Elementos de programação
estruturada
Existem algumas regras básicas para definir o
nome dos identificadores:
◦ O primeiro caractere deve ser uma letra.
◦ Os caracteres seguintes podem ser apenas letras,
dígitos ou o caractere de sublinhado ou underline
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
(“_”).
◦ Palavras reservadas (ou palavras-chave) – contém um
significado especial para a linguagem de programação
e, dessa forma, não podem ser usadas como nomes
de identificadores. Em Python, tem-se como exemplo
de palavras reservadas: int, if, else, for, while, etc.
26
Elementos de programação
estruturada
Em algumas linguagens de programação, as
variáveis utilizadas são definidas (declaradas) no
início do algoritmo.
No caso da linguagem Python, que é utilizada
nesse curso, não existe a necessidade dessa
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
27
Elementos de programação
estruturada
No caso da atribuição, basta atribuirmos a
informação (do tipo inteiro, string, etc.) à
variável pelo caractere “=”.
Nesse caso, a variável assume automaticamente
o tipo da informação a ela atribuído.
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
Exemplos:
◦ x=12, onde x será uma variável do tipo inteiro (int)
◦ y=8.0, onde y será uma variável do tipo real (float)
◦ z=‘A bicicleta’, onde z será uma variável do tipo
cadeia de caracteres (string)
28
Elementos de programação
estruturada
No caso do comando input, a variável sempre
assume o tipo string ou cadeia de caracteres.
Exemplos:
◦ A entrada verde pelo comando cor=input() gera a
variável cor do tipo cadeia de caracteres: cor=‘verde’
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
31
Elementos de programação
estruturada
Váriaves compostas homogêneas
Correspondem a variáves que armazenam um
conjunto de elementos do mesmo tipo.
Unidimensionais: necessitam apenas de um
índice para invidualizar um elemento do
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
76.5 46.9 84.1 75.0 98.2 58.8 110.0 33.1 tipo real
[0] [1] [2] [3] [4] [5] [6] [7]
>>>peso [0]=76.5
nome
‘R’ ‘O’ ‘S’ ‘A’ tipo string
[0] [1] [2] [3]
>>>nome [3]=‘A’
33
Elementos de programação
estruturada
Exemplo de matriz
DISTÂNCIA ENTRE CIDADES
(km) – dist
CIDADE A D E
A 0.0 344.6 100.0 [0]
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
>>>dist [0][1]=344.6
>>>dist [1][1]=74.7
>>>dist [2][0]=23.0
34
Elementos de programação
estruturada
Vetores e matrizes são análogos a vetores
e matrizes usados em matemática:
Exemplo em Python (tipo inteiro):
x=[1, 2, 3, 4]
x = ( x0 , x1 ,...xn )
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
35
Elementos de programação
estruturada
Registros
Registros: estruturas de dados que permitem
armazenar em uma única variável diversas
dados de diferentes tipos. Em Python, podem
ser implementados usando-se, também, as listas
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
e tuplas.
Correspondem a conjuntos de posições de
memória conhecidos por um mesmo nome e
individualizados por identificadores associados a
cada conjunto de posições.
36
Elementos de programação
estruturada
Registros: exemplo
ficha
Identificador do componente Tipo de dado
Nome String
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
Idade Inteiro
Salário Real
Estado civil String
ficha
‘Rosa’ 12 1230.00 ‘Solteira’ tipos misturados
[0] [1] [2] [3] (string, inteiro e real)
>>>ficha [0]=‘Rosa’
37
Elementos de programação
estruturada
Ponteiros
Ponteiro (ou apontador): tipo de dado
(variável especial) capaz de armazenar um
endereço de memória associado a uma
determinada variável.
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
38
Elementos de programação
estruturada
Estruturas de controle
Em um processo geral de execução de um
algoritmo implementado em uma linguagem de
programação, sua execução começa na primeira
linha e vai avançando sequencialmente, linha
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
40
Estruturas de controle
Sequência, seleção (decisão) e repetição
(iteração)
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
41
Estruturas de controle
Sequência: consiste na estrutura de controle em
que os comandos são executados sequencialmente,
ou seja, na ordem em que aparecem escritos no
texto do programa.
Por exemplo, as linhas:
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
x=10
y=x*2
print(y)
são executadas na ordem em que
aparecem no trecho de código
acima.
42
Estruturas de controle
Seleção: estrutura de controle em que um certo
comando ou grupo de comandos é executado
apenas se uma certa condição for verdadeira.
Por exemplo, pelo código:
x=int(input())
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
if x<=10:
print(“Olá!”)
a mensagem “Olá” só será
impressa (uma única vez)
se o valor de x for menor ou
igual a 10.
43
Estruturas de controle
Seleção: em Python, é executada utilizando-se os
comandos if, elif e else. O comando if pode
aparecer sozinho, mas os comandos elif e else
sempre devem vir acompanhados
do comando if.
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
while x<=10:
print(“Olá!”)
x=x+1
a impressão da mensagem
“Olá” será repetida enquanto o
valor de x for menor ou igual a 10.
45
Estruturas de controle
Repetição: em Python, é executada utilizando-se
os comandos while e for.
No caso do comando for, o número de repetições
ocorre um determinado número
de vezes.
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
46
Modularização, funções e
procedimentos
Modularização
Modularização: divisão de um algoritmo em
algoritmos menores ou subalgoritmos, facilitando a
implemetação e manutenção do mesmo.
Dessa forma: um problema maior pode ser
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
47
Modularização, funções e
procedimentos
O algoritmo principal é aquele por onde a
execução do algoritmo sempre se inicia.
No algoritmo principal é onde são chamados os
demais subalgoritmos.
No pseudo-código de um algoritmo, o corpo do
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
48
Modularização, funções e
procedimentos
Exemplo:
# Algoritmo Modular
<comandos do subalgoritmos>
# Inicio do programa principal
<corpo do algoritmo principal>
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
49
Modularização, funções e
procedimentos
Ordem de execução no algoritmo principal
1. Quando se encontra um comando de chamada de um
subalgoritmo durante a execução do algoritmo principal,
a execução deste é interrompida.
2. A seguir, passa-se à execução dos comandos do corpo
do subalgoritmo.
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
51
Modularização, funções e
procedimentos
Funções
Retornam um, e somente um, valor ao
algoritmo chamador.
O conceito de função é originário da ideia de
função matemática (por exemplo, raiz quadrada,
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
52
Modularização, funções e
procedimentos
Procedimentos
Retornam nenhum ou mais valores ao
algoritmo chamador.
Estes valores são sempre retornados por meio
dos parâmetros ou de variáveis globais, mas
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
55
Modularização, funções e
procedimentos
Exemplo de # Algoritmo ler e escrever vetor
função para
Função LER_VETOR():
ler e escrever #Inicio
vetor: Para i de 1 até 50:
Leia vet[i]
#Fim
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
Função ESC_VETOR():
#Inicio
Para i de 1 até 50:
Escreva vet[i]
#Fim
#Inicio do programa principal
LER_VETOR()
ESC_VETOR()
#Fim do programa principal
56
Refinamentos sucessivos
Algoritmo completo: todos os seus comandos
são do entendimento do seu executor.
Quando um comando não for do entendimento
do executor, ele terá que ser desdobrado em
novos comandos, que constituirão um
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
57
Refinamentos sucessivos
Como pequeno exemplo de refinamento, e
retomando o algoritmo para calcular a média de
um aluno:
1. Obter suas 2 notas de provas Refinando...
2. Calcular a média aritmética
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
58
Refinamentos sucessivos
O uso do método de refinamentos sucessivos é
vantajoso:
=> Estimula à modularização de sistemas,
proporcionando a criação de programas
simples e fáceis de entender, portanto, de
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
59
Manipulação de arquivos
Arquivos: estruturas de dados que podem ser
manipuladas fora do ambiente do programa.
Ambiente do programa: memória principal,
onde nem sempre é possível ou conveniente
manter certas estruturas de dados.
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
vamosdigitar.write('\n')
for i in range(1,11):
vamosdigitar.write('\t%i dólares valem %f reais\n' %(i,i*3.77))
#Cotação do dolar a 3.77 reais
vamosdigitar.close()
61
Manipulação de arquivos
O comando open permite abrir um arquivo. Os
modos de abertura de um arquivo são:
◦ ‘r’ – abrir o arquivo somente para ler (‘r’ do inglês
read, ler);
◦ ‘a’ – abrir o arquivo somente para escrever após o
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
62
Manipulação de arquivos
Alguns exemplos úteis de manipulação de
arquivos em Python:
## Programa para ler arquivo e escrever seu conteúdo 1
vamosler=open('D:\Documents\Python Scripts\Outros\exemplo.txt','r')
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
63
Manipulação de arquivos
Alguns exemplos úteis de manipulação de
arquivos em Python:
## Programa para ler arquivo e escrever seu conteúdo 2
vamoslerdenovo=open('F:\Python Scripts\Outros\exemplo.txt','r')
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
w=vamoslerdenovo.readlines()
print ('Variável w:', w)
tamvet=len(w)
for i in range(tamvet):
print(w[i])
vamoslerdenovo.close()
64
Manipulação de arquivos
Métodos para ler o conteúdo do arquivo
recém-aberto:
◦ ‘readline’ – lê o conteúdo do arquivo linha por linha.
◦ ‘readlines’ – lê o todo conteúdo do arquivo, e
armazena cada linha em diferentes posições de uma
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
65
Manipulação de arquivos
Métodos para ler o conteúdo do arquivo
recém-aberto:
◦ ‘read’ – lê o todo conteúdo do arquivo, e armazena
cada linha em um único string (cadeia de caracteres).
Dentro do string, cada linha é separada pelos
caracteres especiais (por exemplo, ‘\n’ e ‘\t’)
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
0! = 1
1! = 1 = 0!*1
2! = 1*2 = 2 = 1!*2
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
3! = 1*2*3 = 6 = 2!*3
...
N! = 1*2*... *(N-1)*N = (N-1)!*N
68
Recursividade, ordenação e
busca
Exemplo de pseudo-códigos para calcular o
fatorial de n (n!) pelos métodos convencional
(FAT_CONV( )) e recursivo (FAT_REC( )) :
fat ← 1 se n = 0 :
cont ← 1 retorne 1
enquanto cont ≤ n: senão:
fat ← fat ∗ cont retorne n ∗ FAT_REC(n-1)
cont ← cont + 1
retorne fat
69
Recursividade, ordenação e
busca
Desvantagens da recursividade:
◦ Funções recursivas são geralmente mais lentas.
◦ Ocupam mais memória do que as funções iterativas
equivalentes, uma vez que são feitas muitas chamadas
consecutivas a funções.
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
70
Recursividade, ordenação e
busca
Ordenação
Operação que permite colocar os elementos de
um vetor em ordem crescente.
Ordena-se o vetor permutando, ou seja,
trocando posições de seus elementos.
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
71
Recursividade, ordenação e
busca
Alguns exemplos de algoritmos de ordenação:
◦ Ordenação por seleção
◦ Ordenação por bolhas
◦ Ordenação por inserção
◦ Ordenação rápida
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
72
Recursividade, ordenação e
busca
Ordenação por seleção
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
73
Recursividade, ordenação e
busca
Ordenação por bolhas
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
74
Recursividade, ordenação e
busca
Busca
Verifica se um elemento com determinado valor
se encontra dentro de um vetor.
O fato de o vetor estar ordenado ajuda
bastante, e reduz o tempo de busca.
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
75
Recursividade, ordenação e
busca
O algoritmo de busca percorre o vetor até que
uma das condições abaixo aconteça:
◦ Encontrar o fim do vetor (ou seja, a posição n) sem
ter encontrado x.
◦ Encontrar x em uma posição qualquer do vetor
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
76
Recursividade, ordenação e
busca
Pode ser:
◦ Sequencial
◦ Binária
Exemplo de busca sequencial (pseudo-código):
BUSCA(x, V[0..n-1]) :
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
i ← 0;
enquanto i ≤ n-1 e V[i] ≠ x:
i←i+1
se i > n-1:
escreva NÃO ACHOU
senão:
escreva ACHOU
77
Ferramentas de programação
aplicadas à engenharia
Alguns exemplos:
Matlab
Octave
Scilab
C++
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
Mathematica
Etc.
78
Apêndice A – operadores em
Python
Operadores aritméticos básicos em Python
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
79
Apêndice A – operadores em
Python
Precedência de operadores aritméticos em
Python
Operador Descrição
() Parênteses
** Exponenciação
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
80
Apêndice A – operadores em
Python
Operadores relacionais em Python
Operador Descrição
== Igual a
> Maior que
< Menor que
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
81
Apêndice A – operadores em
Python
Operadores lógicos em Python: são usados para
representar situações lógicas que não podem ser
representadas por operadores aritméticos:
◦ OR (disjunção) – resulta em valor verdadeiro (TRUE)
quando alguma das condições (operandos) da expressão
lógica for verdadeira;
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
82
Apêndice B – algumas funções em
Python de bibliotecas importadas
import os – importa biblioteca com funções do sistema operacional em
uso. Exemplo de uso: os.system(‘cls’) e os.system(‘clear’) para limpar
a tela do terminal no windows e linux, respectivamente.
import math – importa biblioteca com funções matemáticas tais como
sqrt (raiz quadrada) e o número pi (π). Exemplo de uso: math.pi retorna
o número π;; math.sqrt (4) retorna a raiz quadrada de 4.
import random – importa biblioteca com funções de geração de
números, tais como randint para números aleatórios. Exemplo de uso:
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
86
Apêndice C – algumas funções
embutidas úteis em Python
insert – insere um elemento em uma determinada posição (índice),
deslocando elementos com índices maiores para a direita. Por exemplo:
para a lista vet=[1,2,4,5], vet.insert(2,3) retorna vet=[1,2,3,4,5].
remove – procura pela primeira ocorrência de um dado elemento, que é
então removido da lista. Caso o elemento não esteja presente na lista,
uma mensagem de erro é mostrada indicando que o elemento não existe
na lista.
join – junta os elementos de uma lista em uma cadeia de caracteres. Por
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
87
Apêndice C – algumas funções
embutidas úteis em Python
range(valor_inicial, limite) – cria uma lista de números inteiros cujo
primeiro valor é aquele definido pela variável valor_inicial e o último valor é
igual a uma unidade anterior ao valor definido pela variável limite (limite-1).
Por exemplo, range(1, 10) cria uma lista cujo primeiro valor é o número 1
e o último valor é o número 9.
range(valor_inicial, limite, intervalo) – cria uma lista de números inteiros
cujo primeiro valor é aquele definido pela variável valor_inicial e o valor
máximo será inferior àquele definido pela variável limite, sendo que cada
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
88
Apêndice C – algumas funções
embutidas úteis em Python
isdigit – verifica se os caracteres de uma cadeia de caracteres são dígitos
(números inteiros). Se todos os caracteres corresponderem a números
inteiros, essa função retorna True. Caso contrário, retorna False.
abs – retorna o valor absoluto de um número. Por exemplo: abs(-40.25)
retorna 40.25; abs(3-10) retorna 7; e abs(5) retorna 5.
sum – soma os elementos de uma lista ou tupla.
pow – realiza a operação de exponenciação. Por exemplo: pow(2,4)
JOSÉ LEONARDO FERREIRA / BCT / UFVJM
89
Referências
90