Zadanie z tablicą

0

Hej, jestem na samym początku nauki Javascript i póki co uczę się jeszcze zupełnych podstaw. Otrzymałem następujące zadanie: "Napisz program, który dla tablicy liczb wypisze, które są liczbami pierwszymi". Napisałem następujący kod:

let liczby = [2, 3, 4, 5, 6, 7, 8, 9, 10]

function givePrimeNumber(myNumber) {

myNumber = liczby[0]

  if (myNumber > 1 && myNumber < 4) {
    return myNumber
  }

  let dzielnik = 2;

  while (dzielnik < myNumber) {
    if (myNumber % dzielnik == 0) {
      return false
    }
    else {
      dzielnik ++;
      if (dzielnik == myNumber) {
        return myNumber
      }
    }
  }
}

console.log(liczby.forEach(givePrimeNumber))

Po wywołaniu w odpowiedzi dostaję undefined i nie rozumiem dlaczego. Pewno jest tutaj kilka błędów których nie widzę. Nie rozumiem do końca jak przypisać tą funkcję, aby wykonał ją po kolei na każdej liczbie z tablicy. Nie rozumiem też do końca skąd się bierze błąd undefined a dosyć często go otrzymuje rozwiązując zadania.

1

Błędów masz kilka.
Najpierw zrób funkcję, która sprawdza czy podana w argumencie liczba jest pierwsza.
Ten wiersz to psuje: myNumber = liczby[0]

Później zastanów się co tak rzeczywiście wyświetlasz w console.log .

<html>
  <body>
  
    <script>
      var liczby = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];

      function givePrimeNumber ( myNumber )
      {

        if ( myNumber < 2 )
        {
          console.log ( myNumber.toString() +" NIE JEST PIERWSZA" ) ;
          return false;
        }

        var dzielnik = 2 ;
        while ( dzielnik < myNumber )
        {
          if ( myNumber % dzielnik == 0 )
          {
            console.log ( myNumber.toString() +" NIE JEST PIERWSZA" ) ;
            return false;
          }
          else
          {
            if (dzielnik == myNumber)
            {
              console.log ( myNumber.toString() + " JEST PIERWSZA " ) ;
              return true;
            }
            
          }
          dzielnik++;
        }        
        console.log ( myNumber.toString() + " JEST PIERWSZA " ) ;
        return true;        
      }

      liczby.forEach(givePrimeNumber);
      
    </script>
  
  </body>
</html>
0

Hej, dzięki za odpowiedź. Funkcję, która sprawdza czy podana w argumencie liczba jest liczbą pierwszą, już mam:

function isPrimeNumber(myNumber) {

  if (myNumber > 1 && myNumber < 4) {
    return true
  }

  let dzielnik = 2;

  while (dzielnik < myNumber) {
    if (myNumber % dzielnik == 0) {
      return false
    }
    else {
      dzielnik ++;
      if (dzielnik == myNumber) {
        return true
      }
    }
  }
}

console.log(isPrimeNumber(7))

Nie wiem teraz, jak użyć tej funkcji tak, aby sprawdziła i wypisała mi liczby pierwsze w podanej tablicy.

0

Spróbowałem console.log(liczby.filter(isPrimeNumber)) i wygląda na to, że działa poprawnie. Nadal nie rozumiem do końca, czym jest błąd "undefined". Dostaję go dosyć często, ale nie widzę błędów. Czego mam szukać w kodzie albo na co zwracać uwagę gdy dostaję "undefined"?

Po Twoim edicie, w którym dodałeś kod teraz widzę, że w ogóle źle używałem forEach. Dzięki!

3

Raczej coś takiego:

function isPrimeNumber(liczba) {
  if (liczba==1)     return false;
  if (liczba==2)     return true;
  if (liczba%2 == 0) return false;

  let pierwiastek = Math.sqrt(liczba);
  for (dzielnik=3; dzielnik<=pierwiastek; dzielnik+=2) {
    if (liczba%dzielnik == 0) return false;
  }
  return true;
}

Nadal nie rozumiem do końca, czym jest błąd "undefined". Dostaję go dosyć często, ale nie widzę błędów. Czego mam szukać w kodzie albo na co zwracać uwagę gdy dostaję "undefined"?

Bo warunki w twojej funkcji są "dziurawe" dla niektórych wartości funkcja może wykonać wszystkie pętle i nie natrafić na żadne return, zatem nie zwróci żadnej wartości.

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