Mám daný program - binárne vyhľadávanie v načítanom zozname čísel. Mojou úlohou je doplniť ho tak, aby mi program vypísal, na ktorej pozícii sa nachádza hľadané číslo (ktoré si určím) v mojom zozname, ale iba v prípade, že je zoznam čísel usporiadaný buď vzostupne alebo zostupne. Ak sú čísla všelijak poprehadzované, program vypíše, že zoznam nie je usporiadaný. Program mi celkom funguje, no vždy, keď je hľadané číslo na 0. pozícii a zoznam je usporiadaný, vypíše mi, že zoznam usporiadaný nie je. :( Prosím, poraďte mi, čo s tým.
Ďalej mám doplniť program, ktorý vypíše 2. najväčšie číslo, tak ak máte nápady, píšte.
Ďakujem
Program:
import random
def menu():
print('1) Nacitaj zoznam')
print('2) Generuj zoznam')
print('4) Binarne vyhladavanie')
print('8) Druhe najvacsie cislo')
print('9) Koniec')
vypis_zoznam(zoznam)
volba = int(input('Tvoj vyber: '))
return volba
def vypis_zoznam(zoznam):
print(zoznam)
def nacitaj_zoznam(zoznam):
pocet = int(input('Zadaj pocet prvkov: '))
zoznam = []
for i in range(pocet):
z = int(input('Zadaj hodnotu: '))
zoznam.append(z)
return zoznam
def generuj_zoznam(zoznam):
pocet = int(input('Zadaj pocet prvkov: '))
zoznam = []
for i in range(pocet):
z = random.randrange(1, 21)
zoznam.append(z)
return zoznam
def binarne(zoznam):
usporiadane = True
def usporiadanie():
if zoznam[0] > zoznam[0 + 1]:
for i in range(len(zoznam) - 1):
if zoznam[i] < zoznam[i + 1]:
usporiadane = False
return usporiadane
elif zoznam[0] < zoznam[0 + 1]:
for i in range(len(zoznam) - 1):
if zoznam[i] > zoznam[i + 1]:
usporiadane = False
return usporiadane
else:
usporiadane = True
return usporiadane
hladane = int(input('Zadaj hladanu hodnotu: '))
l = 0 #lava hranica
p = len(zoznam) - 1 #prava hranica -1 lebo indexy od 0
vysl = (usporiadanie())
stred = 0
if vysl == False:
usporiadane = False
return usporiadane
else:
while l <= p:
stred = (l + p) // 2 #celociselne delenie!
if zoznam[stred] > hladane:
if zoznam[0] > zoznam[1]:
l = stred + 1
elif zoznam[0] < zoznam[1]:
p = stred - 1
elif zoznam[stred] < hladane:
if zoznam[0] > zoznam[1]:
p = stred - 1
elif zoznam[0] < zoznam[1]:
l = stred + 1
elif zoznam[stred] == hladane:
return stred
else:
return -1
volba = 0
zoznam = []
while volba != 9:
volba = menu()
if volba == 1:
zoznam = nacitaj_zoznam(zoznam)
elif volba == 2:
zoznam = generuj_zoznam(zoznam)
elif volba == 3:
linearne(zoznam)
elif volba == 4:
result = binarne(zoznam)
if result == -1:
print('Hodnota sa v zozname nenachadza')
elif result == False:
print('Zoznam nie je usporiadany')
else:
print('Hodnota sa v zozname nachadza na', result+1,'. pozicii')
elif volba == 5:
zoznam = tried_vyberom(zoznam)
print(zoznam)
elif volba == 6:
zoznam = tried_vkladanim(zoznam)
print(zoznam)
elif volba == 7:
zoznam = tried_vymenou(zoznam)
elif volba == 8:
zoznam = druha_najvacsia_hodnota(zoznam)
print('Dovidenia')
Are you looking for informatika tutoring? Find the right informatika tutor for online or in-person tutoring near you.
We access the information stored on your device for this website to function properly. This includes, for example, cookies or local browser cache. We use this to store the data necessary for the functioning of the website, data used for analytical purposes, or data stored by third parties.
If this information is essential for the operation of this website, we store it automatically. For everything else, we need your consent, which you can choose to give below. Your consent is valid for 12 months. Should you refuse, we will ask you for consent again in 6 months, but you are free to change your mind at any time. For more information, please see our GDPR and Terms of Use.