hisoka Posted September 6, 2017 Share Posted September 6, 2017 I have this javascript code and when I run it it does not print the result : function isprime(n) { if (n<2) { return false; } var q = Math.floor(Math.sqrt( n)); for( i = 2 ; i<= q ; i++) { var result = n%i; if(result==0) { return false; } else { document.write(result); } } } var prime = isprime(100); I do not know why ? any help on what is the problem is and how to solve it Link to comment Share on other sites More sharing options...
justsomeguy Posted September 6, 2017 Share Posted September 6, 2017 That function isn't written very well, it doesn't even always return a value. If you actually give it a prime number like 17 it doesn't return any value at all. If a function is going to return a value, it should always return a value. That function will never return true, how are you supposed to know if the number is prime or not? Link to comment Share on other sites More sharing options...
hisoka Posted September 7, 2017 Author Share Posted September 7, 2017 That is why I put the code here and asked for help because I do not know how that function will return a value , how it will print it in the computer screen so that I can see it . What to do so that the function is well written and how to do it !! Quote how are you supposed to know if the number is prime or not? Generally I know that an integer is a prime if it is not divisible by any prime less or equal to its square root hence we have in that code the var q = Math.floor(Math.sqrt( n)); it gives the square root of a number combined with math.floor and the for loop it takes n % i which is n % all numbers that are less or equal to the square root of n and dismisses or ignore all the numbers that are divisible by n as they are not prime . Moreover the role of the function is not to look if n is a prime or not otherwise to give all the primes between 2 and n My problem is I cannot make it print the values . You wrote that is it not well written , it does not return a value ....... I know all that . So what do you suggest to make it well writeen , return a value and print it in the screen . What is the substitution ? any suggest from you on what to do ? Link to comment Share on other sites More sharing options...
justsomeguy Posted September 7, 2017 Share Posted September 7, 2017 First, don't use document.write. That might mess up testing. Use console.log to print anything you want to the console, including debugging information. If you want to test what the function does you can print that also, e.g.: console.log("isprime(12):"); console.log(isprime(12); console.log("isprime(17):"); console.log(isprime(17); Make sure that every path through the function will result in a return statement. There is no "return true" in that function, that should be an indication that it's not doing what it's supposed to do. Link to comment Share on other sites More sharing options...
hisoka Posted September 9, 2017 Author Share Posted September 9, 2017 I changed that code with another code : function calculate(n) { for(i=0 ; i<=n ; i++) { var isprime = false; for(j=2 ; j<=n ; j++) { if(i%j===0 && i!==j) { isprime = true; } } if(isprime===false) { console.log(i+"\n"); } } } console.log(calculate(17)); then it gives me : 1 2 3 5 7 11 13 17 undefined I do not know why get undefined and how to correct the code so that I do not get undefined Link to comment Share on other sites More sharing options...
Ingolme Posted September 9, 2017 Share Posted September 9, 2017 You got undefined because the function is not returning anything. The function must use the return statement. 1 Link to comment Share on other sites More sharing options...
dsonesuk Posted September 10, 2017 Share Posted September 10, 2017 Just remove calculate(17) from console log(), it will add each value to console log without the need for return, also in Firefox the undefined shows for a Firefox file 'content.js' whixch is unrelated (check far right for filename causing undefined) Link to comment Share on other sites More sharing options...
dsonesuk Posted September 10, 2017 Share Posted September 10, 2017 IF you still want to use console.() to call function with argument, store each value in variable and return THAT final result to console.log function calculate(n) { var results = ""; for (i = 0; i <= n; i++) { var isprime = false; for (j = 2; j <= n; j++) { if (i % j === 0 && i !== j) { isprime = true; } } if (isprime === false) { results += i + "\n"; } } return results; } console.log(calculate(25)); 1 Link to comment Share on other sites More sharing options...
hisoka Posted September 18, 2017 Author Share Posted September 18, 2017 (edited) Now I am trying to take a number as input in box and once I press ok all the primes that are less than it are generated I did like this : function calculate(x) { var x = prompt("enter a number"); var results = "" ; var y=parseInt(x); for(i=0 ; i<n ; i++) { var isprime = false; for(j=2 ; j<n ; j++) { if(i%j===0 && i!==j) { isprime = true; } } if(isprime===false) { results += i + "\n"; } } return results; } console.log(calculate(x)); but it gives no result . I know that something I added in the code is wrong but I do not know how to correct it . Edited September 18, 2017 by hisoka Link to comment Share on other sites More sharing options...
dsonesuk Posted September 18, 2017 Share Posted September 18, 2017 You are prompting for input within the scope of function to x variable, while calling the function with argument outside the scope of function. It will never be able to know the variable x equals. 1 Link to comment Share on other sites More sharing options...
justsomeguy Posted September 18, 2017 Share Posted September 18, 2017 You're also trying to loop over n. What's n? 1 Link to comment Share on other sites More sharing options...
dsonesuk Posted September 18, 2017 Share Posted September 18, 2017 Ha, If you change n to x in function, anything referring to n need to be changed to x as well. 1 Link to comment Share on other sites More sharing options...
mbpowner Posted September 23, 2017 Share Posted September 23, 2017 Values arent being returned unless n is less than 2. Also, I'm not sure I think this is the best way to approach it: Quote function isPrime(int n){ if(n<2){ return false; } else if(n==2){ return true; } else if(n%2==0){ return false; }else{ for(int num=3; num+=2; num<n){ if(n%num==0){ return true; } } return false; } } This is because is a number is divisible by any even number, it's definitely divisible by 2. Just a suggestion on improving the efficiency. Link to comment Share on other sites More sharing options...
davej Posted September 23, 2017 Share Posted September 23, 2017 4 hours ago, mbpowner said: for(int num=3; num+=2; num<n){ for(var num=3 ; num<n ; num+=2) Link to comment Share on other sites More sharing options...
mbpowner Posted September 23, 2017 Share Posted September 23, 2017 (edited) Yh whoops, that's what I meant LOL. My bad. Just bcuz I code in java normally so it's easy to get carried away with the language and forget the syntax for the specific language. And that for loop was written in a bit of a rush. My apologies also just realized. There should be no int in the parameter of the function Edited September 23, 2017 by mbpowner Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now