-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathQ5.py
50 lines (39 loc) · 1.3 KB
/
Q5.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import struct
arquivo = input("Informe o nome do arquivo binário de números: ")
def buscar(arq, num):
arq.seek(0)
primeiro = struct.unpack("i",arq.read(4))[0]
achado = False
arq.seek(0, 2)
ultimo = arq.tell()//4 #dividido por 4 bytes por número
if num >= ultimo:
return -1
while primeiro <= ultimo and not achado:
meiuca = (primeiro + ultimo)//2
arq.seek(meiuca * 4) #multiplicado por 4 bytes por número
numero = struct.unpack("i", arq.read(4))[0]
if num == numero:
achado = True
else:
if num < numero:
ultimo = meiuca-1
else:
primeiro = meiuca+1
if achado:
return arq.tell()//4 #Multiplicado por 4 bytes por numero
else:
return -1
try:
with open(arquivo, "rb") as arquivo:
while True:
numero = int(input("Favor informar o valor a ser encontrado (-1 para sair): "))
if numero == -1:
exit(0)
posicao = buscar(arquivo, numero)
if posicao != -1:
print('O número está na posição %d\n' % posicao)
else:
print("O número não foi encontrado.\n")
arquivo.close()
except IOError:
print("Erro ao abrir ou manipular o arquivo.")