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

funkcja javascript - znalezienie błędu

VPS Starter Arubacloud
0 głosów
178 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 471 wizyt
pytanie zadane 27 stycznia 2019 w JavaScript przez k2 Nowicjusz (180 p.)
0 głosów
1 odpowiedź 133 wizyt
0 głosów
1 odpowiedź 119 wizyt
pytanie zadane 13 sierpnia 2019 w Python przez SebbaGamess Użytkownik (690 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...