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

Math.rand() takie same liczby nie dodają się
KR
  • Rejestracja:około 7 lat
  • Ostatnio:około 7 lat
  • Postów:7
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:

Kopiuj
	            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);
            }
edytowany 3x, ostatnio: kreativv
CL
  • Rejestracja:prawie 16 lat
  • Ostatnio:8 miesięcy
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.

Kopiuj
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ą :]

KR
  • Rejestracja:około 7 lat
  • Ostatnio:około 7 lat
  • Postów:7
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ą.

CL
  • Rejestracja:prawie 16 lat
  • Ostatnio:8 miesięcy
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.

KR
  • Rejestracja:około 7 lat
  • Ostatnio:około 7 lat
  • Postów:7
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?

KR
  • Rejestracja:około 7 lat
  • Ostatnio:około 7 lat
  • Postów:7
0
Mieciu napisał(a):

Co to za książka?

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

CL
  • Rejestracja:prawie 16 lat
  • Ostatnio:8 miesięcy
0
Kopiuj
                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.

KR
  • Rejestracja:około 7 lat
  • Ostatnio:około 7 lat
  • Postów:7
0

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

A przed:
screenshot-20180303102931.png

CL
  • Rejestracja:prawie 16 lat
  • Ostatnio:8 miesięcy
0

Trochę pomieszałem języki:

Kopiuj
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);
}
KR
  • Rejestracja:około 7 lat
  • Ostatnio:około 7 lat
  • Postów:7
0

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

CL
  • Rejestracja:prawie 16 lat
  • Ostatnio:8 miesięcy
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?

KR
  • Rejestracja:około 7 lat
  • Ostatnio:około 7 lat
  • Postów:7
0

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

edytowany 1x, ostatnio: kreativv
CL
  • Rejestracja:prawie 16 lat
  • Ostatnio:8 miesięcy
0

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

Kopiuj
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...

KR
Dzięki, jutro popróbuje i dam znać. A co do zdjęcia to w nawiasie (w poprzednim poście) jest napisane co pisze w tabelce.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.