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

Tworzenie wzoru z gwiazdek w konsoli przeglądarki za pomocą pętli zagnieżdżonych

0 głosów
2,289 wizyt
pytanie zadane 6 lutego 2017 w JavaScript przez svyatogor92 Użytkownik (670 p.)

Witajcie,

Na kurs JS mam do wykonania na jutro pewne zadanie i nie wiem jak sobie z nim poradzić, oto polecenie:

Napisz program rysujący na podstawie wartości zmiennej n następujący schemat (tutaj dla n = 5):

  *   *
*   *   *
  *   *  
*   *   *
  *   *

Użyj do tego pętli zagnieżdżonych, a w wewnętrznej pętli dodaj if sprawdzający odpowiedni warunek (jeżeli i + j jest nieparzyste, to ma być gwiazdka).

 

Pomożecie? :)

1
komentarz 6 lutego 2017 przez vector Dyskutant (9,200 p.)

Bardzo klarownie jest napisane co trzeba zrobić w celu wyświetlenia tego 'rysunku'. Czego nie rozumiesz w tym opisie ?

Użyj do tego pętli zagnieżdżonych, a w wewnętrznej pętli dodaj if sprawdzający odpowiedni warunek (jeżeli i + j jest nieparzyste, to ma być gwiazdka).

komentarz 6 lutego 2017 przez svyatogor92 Użytkownik (670 p.)

Na podstawie polecenia zrobiłem coś takiego:

var n = 5;
var sum = i+j;

for(i = 0; i <= 5; i++) {
  for(j = 0; j <= 5; j++){
    if(sum % 2 == 0) {
    console.log("*");
    } else {
    console.log(" ");
  }
  }
}

i konsola chrome wywala błąd: zadanie5.js:2 Uncaught ReferenceError: i is not defined at zadanie5.js:2

i nie wiem dlaczego.

1
komentarz 6 lutego 2017 przez vector Dyskutant (9,200 p.)

Zgubiłeś słowo kluczowe var przed i = 0; i j = 0;. Nie wiem również dlaczego definiujesz sum poza pętlą a nie w pętli. Kolejny problem z tym kodem jest taki iż console.log wyświetla za każdym razem znak nowej linij. Aby to naprawić można albo najpierw stworzysz ciąg reprezentujący jedną linijkę i dopiero użyć console.log albo użyć czegoś innego niż console.log.

komentarz 6 lutego 2017 przez svyatogor92 Użytkownik (670 p.)
nie no koniecznie musi być console.log.

Jak stworzyć taki ciąg reprezentujący jedną linijkę?
komentarz 6 lutego 2017 przez svyatogor92 Użytkownik (670 p.)

zmodyfikowałem:

var n = 5;

for(var i = 0; i <= n; i++) {
  for(var j = 0; j <= n; j++){
    var sum = i+j;
    if(sum % 2 == 0) {
    console.log("*");
    } else {
    console.log(" ");
    }
  }
}

Konsola wyrzuca teraz:

*
zadanie5.js:9  
zadanie5.js:7 *
2zadanie5.js:9  
zadanie5.js:7 *
zadanie5.js:9  
zadanie5.js:7 *
zadanie5.js:9  
2zadanie5.js:7 *
zadanie5.js:9  
zadanie5.js:7 *
zadanie5.js:9  
zadanie5.js:7 *
2zadanie5.js:9  
zadanie5.js:7 *
zadanie5.js:9  
zadanie5.js:7 *
zadanie5.js:9  
2zadanie5.js:7 *
zadanie5.js:9  
zadanie5.js:7 *
zadanie5.js:9  
zadanie5.js:7 *
2zadanie5.js:9  
zadanie5.js:7 *
zadanie5.js:9  
zadanie5.js:7 *
zadanie5.js:9  
zadanie5.js:7 *

1
komentarz 6 lutego 2017 przez vector Dyskutant (9,200 p.)
edycja 6 lutego 2017 przez vector
for(i = 0; i <= n; i++) {
  var line = "";
  for(j = 0; j <= n; j++){
    if(sum % 2 == 0) {
      line += "*";
    } else {
      line += " ";
    }
  }
  console.log(line);
}

Specjalnie zostawiłem poprzednie błędy abyś mógł je samodzielnie poprawić. Takie małe ćwiczenie.

komentarz 6 lutego 2017 przez svyatogor92 Użytkownik (670 p.)
var n = 5;

for(var i = 0; i <= 5; i++) {
  var line = "";
  for(var j = 0; j <= 5; j++){
    var sum = i+j;
    if(sum % 2 == 0) {
      line += "*";
    } else {
      line += " ";
    }
  }
  console.log(line);
}

Konsola daje:


zadanie5.js:13 * * *
zadanie5.js:13  * * *
zadanie5.js:13 * * *
zadanie5.js:13  * * *
zadanie5.js:13 * * *
zadanie5.js:13  * * *

1
komentarz 6 lutego 2017 przez vector Dyskutant (9,200 p.)

Hint: Zastanów się ile razy wykonuje się pętle w zależności od n.

komentarz 6 lutego 2017 przez svyatogor92 Użytkownik (670 p.)

No tyle razy jaką wartość ma n, czyli:

var n = 5;

for(var i = 0; i <= n; i++) {
  var line = "";
  for(var j = 0; j <= n; j++){
    var sum = i+j;
    if(sum % 2 == 0) {
      line += "*";
    } else {
      line += " ";
    }
  }
  console.log(line);
}

ale to nadal daje:

zadanie5.js:13 * * * 
zadanie5.js:13  * * *
zadanie5.js:13 * * * 
zadanie5.js:13  * * *
zadanie5.js:13 * * * 
zadanie5.js:13  * * *

Czyli nie tylko jedną linię za dużo, ale także w pierwszej, trzeciej i piątej o jedną * za dużo na początku.

 

1
komentarz 6 lutego 2017 przez vector Dyskutant (9,200 p.)

No tyle razy jaką wartość ma n

tylko jedną linię za dużo 

No czyli jednak nie tyle razy jaką wartość ma n 

komentarz 6 lutego 2017 przez svyatogor92 Użytkownik (670 p.)

Ach rozumiem- chodzi o to, że dla i <= n i n = 5 wykonuje się 6 razy bo od 0 do 5.
Poprawiłem:

var n = 5;

for(var i = 0; i < n; i++) {
  var line = "";
  for(var j = 0; j < n; j++){
    var sum = i+j;
    if(sum % 2 == 0) {
      line += " ";
    } else {
      line += "*";
    }
  }
  console.log(line);
}

Z tym, że jak pewnie widzisz zamieniłem if (sum % 2 == 0) {line += "*"} na {line += "*"}, czyli teraz dla sum parzystej jest puste pole a dla nie parzystej jest *, czyli odwrotnie niż w poleceniu prawda?

1
komentarz 6 lutego 2017 przez vector Dyskutant (9,200 p.)

zawsze możesz zmienić numerację i tudzież j na [1, 2, ..., n].

komentarz 6 lutego 2017 przez svyatogor92 Użytkownik (670 p.)

Chodzi o:

var n = 5;
 
for(var i = 0; i < =n; i--) {
  var line = "";
  for(var j = 0; j < =n; j--){
    var sum = i+j;
    if(sum % 2 == 0) {
      line += " ";
    } else {
      line += "*";
    }
  }
  console.log(line);
}

aby zmienić numeracje i oraz j?

1
komentarz 6 lutego 2017 przez vector Dyskutant (9,200 p.)
for(var i = 1; i <= n; i++) {
  var line = "";
  for(var j = 0; j < n; j++){

lub

for(var i = 0; i < n; i++) {
  var line = "";
  for(var j = 1; j <= n; j++){

 

komentarz 6 lutego 2017 przez svyatogor92 Użytkownik (670 p.)
Teraz wszystko działa :)
Dziekuję Ci bardzo! :)

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
4 odpowiedzi 2,999 wizyt
pytanie zadane 20 lipca 2015 w C i C++ przez Decol Użytkownik (560 p.)
0 głosów
2 odpowiedzi 330 wizyt
pytanie zadane 15 lipca 2015 w PHP przez DL TD Nałogowiec (36,710 p.)
0 głosów
1 odpowiedź 540 wizyt

93,604 zapytań

142,528 odpowiedzi

322,995 komentarzy

63,090 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...