Blad z przekazywaniem tablicy do funkcji

Blad z przekazywaniem tablicy do funkcji
CR
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 4 lata
  • Postów:64
0
Kopiuj
function sum(array){
var rozmiar = array.length;
return (sum(range(array[0],array[rozmiar-1])));
}
var tabs=[1,2,3,4,5,6,7,8,9,10,11,12];
console.log(sum(tabs));

Napisz funkcję o nazwie range przyjmującą dwa argumenty, start i end,
i zwracającą tablicę zawierającą wszystkie liczby od start do end włącznie.
Następnie napisz funkcję sum pobierającą tablicę liczb i zwracającą ich
sumę. Wykonaj powyższy program i sprawdź, czy rzeczywiście zwróci 55.

ten pierwszy podpunkt zadania zrobiony, nie do konca rozumiem jak ogarnac drugi, ktos cos?

CR
wpisalem sobie te dane do tablicy tabs, tak zeby sprawdzic czy smiga, potem dostosuje je do wymogow zadania
Yukiteru Gromadzki
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad rok
  • Postów:192
0

W zwróci sensie sumę liczb w tablicy?

Kopiuj
function sum(array) {
	return array.reduce((a, b) => a + b, 0)
}
console.log(sum(tabs)) // 78

edytowany 1x, ostatnio: Yukiteru Gromadzki
CR
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 4 lata
  • Postów:64
0
Kopiuj
function range(start,end)
{
  const tablica=[];
for(var i=0;i<end-start+1;i++){
    if(i==0) {
        tablica[i]=start;
    continue;
    }
    else if (i!=0){
    tablica[i]=tablica[i-1]+1;
    continue;
    }
}
for(var i=0;i<end-start+1;i++){
    console.log(tablica[i]);
}

}

range(3,11);

to jest pierwszy podpunkt, potem mialem napisac funkcje o nazwie sum, ktora by przyjela taka tablice a nastepnie zwrocila sume wszystkich jej elementow

Yukiteru Gromadzki
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad rok
  • Postów:192
0
Kopiuj
function sum(array) { return array.reduce((a, b) => a + b, 0); }

function range(min, max) {
	var list = [];
	for (var i = min; i <= max; i++) {
		list.push(i);
	}
	return list;
}	

console.log(sum(range(1, 12))); // 78 

?

edytowany 1x, ostatnio: Yukiteru Gromadzki
CR
nie chcialbym uzywac funkcji,metod ktorych nie znam, prosilbym o pomoc w upgradzie mojego kodu, by dzialal poprawnie
TS
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:394
1
cryptondr napisał(a):

bump

Metoda push dodaje po prostu kolejny element do tablicy. Reszta kodu funkcji range, którą podał kolega wyżej powinna być w miarę zrozumiała przy Twoim stanie wiedzy. Fakt, że przy sum to trochę więcej naczarował, ale łatwo to można przepisać do pętli for.

CR
wiem co robi metoda push, ale nie wiedzialem co robi metoda reduce i cala 1 funkcja
CR
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 4 lata
  • Postów:64
0

a jeszcze mam pytanie, w jaki sposob przekazywac zainicjalizowana tablice jako parametr do funkcji? moglby ktos pokazac na przykladzie?

TS
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:394
1

Nie wiem czy dobrze Cię rozumiem, ale to właśnie funkcje zwracają tę zainicjalizowaną tablicę. Rozważ taki kod:

Kopiuj

function dejTablice() {
  return [1,2,3];
}
console.log(dejTablice());

Tutaj jest wywołana funkcja. Ta funkcja zwraca tablicę przy pomocy słowa kluczowego return. Ten kod można zapisać też jako:

Kopiuj
console.log([1,2,3]);

Koniec końców console log dostaje wartość, która została zainicjalizowana w funkcji powyżej.

CR
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 4 lata
  • Postów:64
1

chodzi mi o to, ze chcialbym przykladowo napisac taka funkcje jak Ty

Kopiuj
function dejTablice() {
  return [1,2,3];
}
console.log(dejTablice());

ale przykladowo tak:

Kopiuj
function dejTablice(tablica){
return tablica[1];
}

console.log(dejTablice([1,2,3]));
CR
cos na pewno sknocilem
Yukiteru Gromadzki
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad rok
  • Postów:192
2

array.reduce() jest fajnie opisane na mozilli.

a jeszcze mam pytanie, w jaki sposob przekazywac zainicjalizowana tablice jako parametr do funkcji? moglby ktos pokazac na przykladzie?

Zasada jest ta sama dla każdego parametru w JS tzn.

Kopiuj
function funckja(twoja_tablica) { 
console.log(twoja_tablica); // wypisze w konsoli: [100, 23, 123]
console.log(twoja_tablica[0]); // wypisze w konsoli: 100
}

var tablica = [100, 23, 123];
funkcja(tablica);

TS
Co tu się stało? Przejąłeś mój post :D
Yukiteru Gromadzki
Wiem. Pisałem to bez spojrzenia na nowe posty. Wybacz :D
TS
Najśmieszniejsze, że te same komentarze są na tej i na poprzedniej stronie :D Albo, w zależności, gdzie to czytasz, na tej i kolejnej :D
TS
Niezły bug :D
Silv
O, to ten wątek. :)
TS
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:394
0

To jest zupełnie poprawny kod. W czym problem?

CR
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 4 lata
  • Postów:64
0

no tutaj rozumuje poprawnie, ale juz w pierwotnym kodzie, gdy przekazuje te parametry, nie dziala

Kopiuj
function sum(array){
var rozmiar = array.length;
return (sum(range(array[0],array[rozmiar-1])));
}
var tabs=[1,2,3,4,5,6,7,8,9,10,11,12];
console.log(sum(tabs));
CR
ktos wie czego?
Yukiteru Gromadzki
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad rok
  • Postów:192
0
cryptondr napisał(a):

no tutaj rozumuje poprawnie, ale juz w pierwotnym kodzie, gdy przekazuje te parametry, nie dziala

Kopiuj
function sum(array){
var rozmiar = array.length;
return (sum(range(array[0],array[rozmiar-1])));
}
var tabs=[1,2,3,4,5,6,7,8,9,10,11,12];
console.log(sum(tabs));

Czy dobrze rozumiem że bierzesz pierwszy i ostatni element tablicy (1 i 12) i z tego przedziału tworzysz nową taką samą tablicę jak pierwotna?(tablica o przedziale 1 do 12 w tym przypadku)
Bo jeżeli tak to trochę chyba mija się z celem.

Kopiuj
return (sum(range(array[0],array[rozmiar-1])));

Nic dziwnego że nie działa gdyż twoja funkcja range() wypisuje liczby z danego przedziału a NIE zwraca je jako tablicę a ponieważ nie zwraca tablicy nie ma wartości lenght.

Kopiuj
function range(start,end)
{
  const tablica=[];
for(var i=0;i<end-start+1;i++){
    if(i==0) {
        tablica[i]=start;
    continue;
    }
    else if (i!=0){
    tablica[i]=tablica[i-1]+1;
    continue;
    }
}
// tutaj wypisujesz zawartość tablicy z przedziałem liczb natomiast go nie zwracasz
for(var i=0;i<end-start+1;i++){
    console.log(tablica[i]);
}

// jeżeli zwrócisz tablicę to wszystko będzie działać
return tablica;
}

EDIT: Nie będzie. Nie przypatrzyłem się.
Tutaj:

Kopiuj
function sum(array){
var rozmiar = array.length;
return (sum(range(array[0],array[rozmiar-1]))); 

W funkcji sum wywołujesz ją samą co tworzy nieskończoną "pętle".

CR
czyli rozumiem warunek returna jest niepoprawny
Yukiteru Gromadzki
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad rok
  • Postów:192
1

czyli rozumiem warunek returna jest niepoprawny

W zasadzie to cała funkcja w tym wypadku.
Zauważ że zamiast w niej sumować listę to tylko w returnie wywołujesz ją znowu co tworzy nieskończoną "pętle" i freezeuje przeglądarke.

Dla testu spróbuj zamienić swoją funkcję sum na tę moją:

Kopiuj
function sum(array) { return array.reduce((a, b) => a + b, 0); }

i zauważysz że nie tylko przeglądarka nie zostaje ścięta ale i program działa prawidłowo.

W sumie to naprawdę zachęcam cię to zobaczenia array.reduce bo jest to proste i intuicyjne (masz nawet przykłady użycia)

Jeżeli nie chcesz to możesz oczywiście zrobić to bez tego tylko musisz tę sumę faktycznie liczyć.

edytowany 1x, ostatnio: Yukiteru Gromadzki
CR
no to jak inaczej zrobic to przy uzyciu przynajmniej jednej z tych dwoch funkcji? (sum,range)? bo range niby mozna zamienic na petle for i zsumowac cala petle?

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.