• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

funkcja javascript - znalezienie błędu

Object Storage Arubacloud
0 głosów
190 wizyt
pytanie zadane 29 stycznia 2019 w JavaScript przez k2 Nowicjusz (180 p.)
edycja 29 stycznia 2019 przez k2

Cześć, mam następujące zadanie do wykonania:

Napisz funckję ,która ma zwracać informację czy podana liczba num` jest liczbą doskonałą, niekompletną czy żadną z tych .
Jeśli liczba jest doskonała zwróć -> "doskonała"
Jeżeli liczba jest niekompletna zwróć -> "niekompletna"
Jeżeli liczba nie jest ani doskonała ani niekompletna zwróć -> false
Liczba doskonała to taka liczba, która jest sumą wszystkich swoich dzielników (mniejszych od niej). Jest to np. 6:
6 = 3 + 2 + 1
Liczba niekompletna to taka liczba, która jest większa od sumy wszystkich swoich dzielników. Jest to np. 10:
1+2+5=8 < 10

.

Mam następujący kod, ale nie działa. Dla 28,10 i 6 daje wynik niekompletna, a dla 0 undefined. Gdzie jest błąd?



function sumDivisors(num){
    var sum = 0;
    for (var i = 1; i < num; i++){
        if (num % i === 0) {
            sum += i;
            var statement1 = "";
            if (sum === num) {
                statement1 = "doskonała";
            }
            else if (num > sum){
                statement1 = "niekompletna";
            }
            else  statement1 = false;
        }
        return(statement1);

    }
}

var num = 28;
console.log (sumDivisors(num));

var num = 10;
console.log (sumDivisors(num));

var num = 0;
console.log (sumDivisors(num));

var num = 6;
console.log (sumDivisors(num));

 

 

 

 

 

 

 

 

1 odpowiedź

+1 głos
odpowiedź 29 stycznia 2019 przez Secrus Nałogowiec (32,880 p.)
Wyznaczasz jaka jest liczba przed policzeniem całej sumy, dlatego dostajesz zawsze niekompletna. Wyizoluj sumowanie dzielnikow do funkcji osobnej od determinacji jaka jest liczba
komentarz 29 stycznia 2019 przez Secrus Nałogowiec (32,880 p.)
Dodatkowo dla 0, dostajesz undefined, bo zwracasz coś czego nie ma, przy takim warunku pętli, dla 0, nigdy się ona nie uruchomi
komentarz 29 stycznia 2019 przez k2 Nowicjusz (180 p.)

@Secrus,

Nie umiem tego jednak poprawić :/ Czy mógłbyś rozwinąć, w jaki sposób mam rozdzielić tą funkcję od determinacji? Mam teraz coś takiego:

function sumDivisors(num){
    var statement1="";
    if (num>1) {
        for (var i = 1; i < num; i++){
            var sum = 0;
            if (num % i === 0) {
                sum += i;
                return sum;

                if (sum === num) {
                    statement1 = "doskonała";
                }
                else if (num > sum){
                    statement1 = "niekompletna";
                }
                else {
                    statement1 = false;
                    break;
                }
            }
        }
    }
    else {
        statement1 = false;
    }
    return statement1;
    }

var num = 1;
console.log (sumDivisors(num));

var num = 6;
console.log (sumDivisors(num));

var num = 28;
console.log (sumDivisors(num));

var num = 10;
console.log (sumDivisors(num));

var num = 0;
console.log (sumDivisors(num));

Z góry dzięki za pomoc!:)

komentarz 29 stycznia 2019 przez Secrus Nałogowiec (32,880 p.)

szczerze to nie pisze w JS, ale sprobuje:

function sumDivisors(num){
	if (num > 1)
	{
		for(let i = 1; i < num; i++)
		{
			var sum = 0;
			if (num % i === 0)
			{
				sum += i
			}
		}
		return sum
	}
	else
	{
		return 'num must be greater than 1'
	}
}

function determine(num){
	num_sum = sumDivisors(num)
	if (num_sum === num)
		return "doskonała"
	else if (num_sum > num)
		return 'niekompletna'
	else
		return 'num greater than its sum'
}


na koniec wywolujesz funkcje determine z liczba ktora chcesz sprawdzic

komentarz 29 stycznia 2019 przez k2 Nowicjusz (180 p.)
Hmm..teraz dla wszystkich sprawdzanych liczb (6,28,1,0,10) dostaję " num greater than its sum".  dziwne.
komentarz 29 stycznia 2019 przez Secrus Nałogowiec (32,880 p.)
sprawdź może algorytm w takim razie, moje zmiany polegały jedynie na rozdzieleniu funkcji, nie sprawdzałem działania algorytmu

Podobne pytania

0 głosów
2 odpowiedzi 485 wizyt
pytanie zadane 27 stycznia 2019 w JavaScript przez k2 Nowicjusz (180 p.)
0 głosów
1 odpowiedź 149 wizyt
0 głosów
1 odpowiedź 127 wizyt
pytanie zadane 13 sierpnia 2019 w Python przez SebbaGamess Użytkownik (690 p.)

92,655 zapytań

141,546 odpowiedzi

319,984 komentarzy

62,024 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...