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')
Шукаєш репетитора з предмету informatika? Знайди потрібного репетитора з предмету informatika онлайн або поблизу себе.
Ми отримуємо доступ до інформації, що зберігається на вашому пристрої, щоб забезпечити належну роботу цього веб-сайту. Це, наприклад, файли cookie або локальний кеш браузера. Ми використовуємо її для зберігання даних, необхідних для функціонування веб-сайту, даних, що використовуються в аналітичних цілях, або даних, що зберігаються третіми сторонами.
Якщо ця інформація необхідна для роботи цього веб-сайту, ми зберігаємо її автоматично. Для всього іншого нам потрібна ваша згода, яку ви можете надати нижче. Ваша згода дійсна протягом 12 місяців. Якщо ви відмовитеся, ми знову попросимо вас дати згоду через 6 місяців, але ви можете змінити свою думку в будь-який час. Для отримання додаткової інформації, будь ласка, ознайомтеся з нашим регламентом GDPR та Умовами Використання.