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')
Hľadáš doučovanie predmetu informatika? Nájdi si správneho doučovateľa predmetu informatika pre doučovanie online alebo osobne v tvojom okolí.
Pre správne fungovanie stránky pristupujeme k informáciám uloženým v tvojom zariadení. Ide napríklad o cookies alebo lokálnu pamäť prehliadača. Ukladáme tam dáta potrebné pre fungovanie stránky, údaje využívané na analytické účely alebo údaje ukladané tretími stranami.
Ak sú tieto informácie nevyhnutné pre chod stránky, ukladáme ich hneď automaticky. Na všetky ostatné potrebujeme súhlas, ktorý môžeš udeliť nižšie. Tvoj súhlas si uchováme 12 mesiacov, pri odmietnutí sa ťa na súhlas opäť opýtame po 6 mesiacoch, svoje rozhodnutie však môžeš zmeniť kedykoľvek. Bližšie informácie nájdeš na stránke ochrany osobných údajov a vo všeobecných podmienkach používania.