Blad z przekazywaniem tablicy do funkcji

Blad z przekazywaniem tablicy do funkcji
CR
  • Rejestracja:około 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:około 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:około 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:około 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:około 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?
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)