IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Pluhtík
Člen
Avatar
Pluhtík:28.6.2018 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.6.2018 19:23
Avatar
Ota Vlna
Člen
Avatar
Ota Vlna:28.6.2018 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í
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
28.6.2018 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.