Avatar
Pluhtík
Člen
Avatar
Pluhtík:28. června 19:23

Zdravím, nefunguje mi tento kód (stánka se otevře prázdná). Učím se JS, který jsem do teď znal jen hodně hodně hodně málo a trošku si hraji s různými základy, abych se v něm zlepšil (tak moc jak to jen půjde).

let array1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
let array2 = [0, 1, 3, 8, 17, 23, 41, 82, 83, 84, 85, 87];
let array3 = [3, 4, 5, 6, 8, 9, 10, 12, 18, 19, 20, 22];
let array4 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];

function find_chosen(array, n, left, right) {
        if (left == right) && (array[left] != n)
                return null;
        else if (left == right) && (array[left] == n)
                return left;

        middle = left + Math.floor((right-left) / 2);
        if (n < array[middle])
                return find_chosen(array, n, left, middle-1);
        else if (n > array[middle])
                return find_chosen(array, n, middle+1, right);
        else
                return middle;
}

document.write(find_chosen(array1, 4, 0, array1.length-1) + " there should be number 4");
document.write(find_chosen(array1, 13, 0, array1.length-1) + " there should be Nill");
document.write(find_chosen(array2, 17, 0, array2.length-1) + " there should be number 4");
document.write(find_chosen(array2, 23, 0, array2.length-1) + " there should be number 5");
document.write(find_chosen(array3, 8, 0, array3.length-1) + " there should be number 4");
document.write(find_chosen(array3, 20, 0, array3.length-1) + " there should be number 10");
document.write(find_chosen(array4, 0, 0, array4.length-1) + " there should be number 13");

Zkusil jsem: Chtěl jsem si být jistý, že se jedná skutečně o chybu, kterou jsem udělal v kódu (nejspíš syntaxi), takže jsem si to zkusil naprogramovat v Pythonu, který znám lépe. V Pythonu (kód určitě pochopí i ti, co Python neumí, protože vypadá úplně jako pseudokód) mi tento kód funguje.

def find(array, n, left, right):
    if left == right and array[left] != n:
        return None
    elif left == right and array[left] == n:
        return left

    middle = left + ((right-left)//2)

    if n < array[middle]:
        return find(array, n, left, middle-1)
    elif n > array[middle]:
        return find(array, n, middle+1, right)
    else:
        return middle

array1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
array2 = [0, 1, 3, 8, 17, 23, 41, 82, 83, 84, 85, 87]
array3 = [3, 4, 5, 6, 8, 9, 10, 12, 18, 19, 20, 22]
array4 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
a1l = len(array1)-1
a2l = len(array2)-1
a3l = len(array3)-1
a4l = len(array4)-1

print(find(array1, 4, 0, a1l))
print(find(array1, 13, 0, a1l))
print(find(array2, 17, 0, a2l))
print(find(array2, 23, 0, a2l))
print(find(array3, 8, 0, a3l))
print(find(array3, 20, 0, a3l))
print(find(array4, 0, 0, a4l))

Chci docílit: Jedná se o hledání nějakého (nezáleží mi na tom, jestli je to první, poslední nebo prostřední výskyt) indexu čísla n v zadaném seřazeném poli s logaritmickou složitostí.

 
Odpovědět 28. června 19:23
Avatar
Ota Vlna
Redaktor
Avatar
Ota Vlna:28. června 20:12

V Javascriptu musíš celou podmínku uzavřít do závorek, což znamená že řádky 7 a 9 by měly vypadat takhle

if ((left == right) && (array[left] != n))

else if ((left == right) && (array[left] == n))

Příště až se ti otevře prázdná stránka, tak můj první nápad by bylo otevřít konzoli (F12), kde najdeš co jsi udělal za chybu i s řádkem jejího výskytu :)

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 28. června 20:12
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.