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

funkcja javascript - znalezienie błędu

0 głosów
58 wizyt
pytanie zadane 29 stycznia w JavaScript, jQuery, AJAX przez k2 Nowicjusz (180 p.)
edycja 29 stycznia 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 przez Secrus Pasjonat (24,740 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 przez Secrus Pasjonat (24,740 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 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 przez Secrus Pasjonat (24,740 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 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 przez Secrus Pasjonat (24,740 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 67 wizyt
0 głosów
1 odpowiedź 111 wizyt
+1 głos
2 odpowiedzi 514 wizyt
pytanie zadane 26 lipca 2017 w JavaScript, jQuery, AJAX przez modest Nowicjusz (210 p.)
Porady nie od parady
Forum posiada swój własny chat IRC, dzięki któremu będziesz mógł po prostu pogadać z innymi Pasjonatami lub zapytać o jakiś problem. Podstrona z chatem znajduje się w menu pod ikoną człowieka w dymku.IRC

61,302 zapytań

107,232 odpowiedzi

223,311 komentarzy

32,790 pasjonatów

Przeglądających: 284
Pasjonatów: 15 Gości: 269

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...