Math.rand() takie same liczby nie dodają się

0

Witam. Chciałbym policzyć sumę losowych liczb z zakresu od -10 do 10, sumowane mają być tylko liczby nieparzyste, oraz jeśli wylosowana liczba wystąpi 2 razy to bierze się ją pod uwagę tylko raz. Mam problem z tym ostatnim punktem. Proszę o pomoc.

Mój kod:

	            function los() {
                var sum = 0;
                for (var k = 1; ; k++) {
                    var losowa = Math.floor(Math.random() * 21) - 10;
                    document.write("<br/>" + losowa);
                    if ((losowa % 2) != 0) {
                        sum = sum + losowa;
                        document.write("<br /> SUMA: " + sum); //sprawdzenie
                    }
                    if (sum > 10 || k >= 20) break;

                }
                document.write("<br />Suma: " + sum);
            }
0

Jeśli chcesz sprawdzić sumę z zakresu to co po losowanie liczb? Możesz dodawać wylosowane liczby do listy. Później sprawdzasz na liście czy dana wartość już wystąpiła i jeśli tak to losujesz dalej.

var list = new List;
// losowanie 
if (list.pos < 0) {
list.append(losowa);
}

Dawno niepisałem w JS więc coś może być nie tak ze składnią :]

0

Tylko właśnie w zadaniu jest, że trzeba to zrobić za pomocą pętli oraz instrukcji warunkowych if, więc listy/tabele odpadają.

1

No ale sprawdzanie masz przecież dalej w pętli bo musisz losować te liczby. Jak ma się nie powtarzać bo musisz mieć gdzieś odłożone liczby żeby sprawdzać czy takiej już ie było.

0

Dalej nie za bardzo wiem jak mam to zrobić :(

0
kreativv napisał(a):

Dalej nie za bardzo wiem jak mam to zrobić :(

Co to za książka?

0
Mieciu napisał(a):

Co to za książka?

Kwalifikacje E.14 i EE.09 Podstawy programowania w języku JavaScript - Piotr Siewniak

0
                function los() {
                var sum = 0;
                var list = [];
                for (var k = 1; ; k++) {
                    var losowa = Math.floor(Math.random() * 21) - 10;
                    document.write("<br/>" + losowa);
                    if (((losowa % 2) != 0) && (list.indexOf(losowa) < 0) ) {
                        sum = sum + losowa;
                        list.add(losowa);
                        document.write("<br /> SUMA: " + sum); //sprawdzenie
                    }
                    if (sum > 10 || k >= 20) break;

                }
                document.write("<br />Suma: " + sum);
            }

Chyba coś takiego.

0

Po tej zmianie wyglada to tak:
screenshot-20180303102741.png

A przed:
screenshot-20180303102931.png

0

Trochę pomieszałem języki:

function los() {
	var sum = 0;
	var list = [];
	for (var k = 1; ; k++) {
		var losowa = Math.floor(Math.random() * 21) - 10;
		document.write("<br/>" + losowa);
		if (((losowa % 2) != 0) && (list.indexOf(losowa.toString()) < 0) ) {
			sum = sum + losowa;
			list.push(losowa.toString());
			document.write("<br /> SUMA: " + sum); //sprawdzenie
		}
		if (sum > 10 || k >= 20) break;

	}
	document.write("<br />Suma: " + sum);
}
0

Tylko chodzi mi o to, żeby to było zrobione bez tablic.

0

Ja w tej treści nigdzie nie widzę, że nie może być tablic czy list. Tablica/lista to co innego niż pętla/if więc jedno drugiego nie wyklucza. Jak chcesz to robić na if-ach to zadeklaruj tyle zmiennych bool ile liczb. Jeśli wylosujesz liczbę to zmieniasz zmienną dla liczby na True itd. tylko że to nie jest programowanie tylko pomyłka... Co Ci przeszkadzają te tablice?

0

Mi w niczym, upierdliwy nauczyciel i tyle.
(Wszystkie zadania przedstawione poniżej należy rozwiązać bez użycia tablic).

0

Mam nadzieję, że chociaż switcha można użyć :] bo jakość wstawionego zdjęcia nie pozwala na przeczytanie co tam jest napisane.

var _1, _2, _3;
var duplikat;
function los() {
    var sum = 0;
    for (var k = 1; ; k++) {
        var losowa = Math.floor(Math.random() * 21) - 10;
        document.write("<br/>" + losowa);
		duplikat = false;
		switch(losowa) {
			case 1: if (_1 == true) {
						duplikat = true;
						} else {
						_1 = true;
						}
						break;
			case 2: if (_2 == true) {
						duplikat = true;
						} else {
						_2 = true;
						}
						break;
			case 3: if (_3 == true) {
						duplikat = true;
						} else {
						_3 = true;
						}		
						break;						
		}
        if (((losowa % 2) != 0) && (duplikat == false) ) {
            sum = sum + losowa;
            document.write("<br /> SUMA: " + sum); //sprawdzenie
        }
        if (sum > 10 || k >= 20) break;
 
    }
    document.write("<br />Suma: " + sum);
}

Musisz oczywiście rozbudować ten kod o pozostałe możliwe wartości...

1 użytkowników online, w tym zalogowanych: 0, gości: 1