Sep '18
\\ תרגיל 1
function getRndInteger(min, max) {
return Math.floor(Math.random() * (max - min) ) + min;
}
function random_numbers(){
var n1= getRndInteger(0,100);
var n2= getRndInteger(0,100);
var n3= getRndInteger(0,100);
var nbig
console.log("the 3 numbers:" + n1 + ","+ n2 + ","+ n3 )
if (n1>n2){
if (n1>n3){
nbig=n1;
}else{
nbig=n3;
}
}else{
if (n2>n3){
nbig=n2;
}else{
nbig=n3;
}
}
console.log("The big number is:" + nbig)
}
תגובה אחת
Sep '18
\\תרגיל 2
function random_numbers_2(){
var num= getRndInteger(1000,9999);
console.log("The number is:" + num);
var lsstDigit=0;
var sumAllDigits=0;
while (num !=0){
lsstDigit=num%10;
sumAllDigits +=lsstDigit;
num=parseInt(num/10);
}
console.log("The sum of digit of the nummber is:" + sumAllDigits);
}
Sep '18
Oct '18
◄ ynonp
איך רושמים MOD בתוכנה ברקט?
temp = num1 mod num2;
זה מציג לי על ה-MOD שגיאה
תגובה אחת
Oct '18
◄ Real_time
הי,
פעולת Mod נרשמת בסימן אחוז כך:
temp = num1 % num2
Oct '18
הי,
רציתי לדעת ראשית איך מדבגים בתוכנת ברקט… שנית איך אני יודעת שפתרתי בדרך נכונה את התרגילים.
תגובה אחת
Oct '18
◄ Real_time
הי,
לגבי התרגילים הכי טוב להדביק כאן את הפיתרונות שלך ואז אפשר לדבר עליהם. לא יודע אם יש דבר כזה נכון אבל תמיד יש מה ללמוד מפיתרונות ותמיד אפשר לשפר.
את יכולה גם לפתוח חשבון בחינם בקודפן ואז זה מאוד נוח כי אפשר להדביק קוד ״חי״ באמצעות הדבקת קישור לקודפן שלו
לגבי Debug בריאקט אני חושב שהכי קל לשים נקודת עצירה בדפדפן. רק שימי לב שאת עובדת עם Source Maps כמו שהוסבר בסרטון בקורס ריאקט ואז תוכלי לראות את הקוד לפני וובפאק
תגובה אחת
Oct '18
◄ ynonp
אוקי פתרונות של תרגיל 3 ו4
function T3(num1,num2){
var temp = 0;
if(num1>num2){
temp = num1 % num2;
if(temp == 0)
console.log(num2)
else
console.log(temp)
}
else{
temp = num2 % num1;
if(temp == 0)
console.log(num1)
else
console.log(temp)
}
}
function T4(n1,n2){
var temp = 0;
var i=1;
if (n1>n2){
temp = n1*i;
while(temp%n2!=0){
i++;
temp = n1*i;
}
console.log(temp)
}
else{
temp = n2*i;
while(temp%n1!=0){
i++;
temp = n2*i;
}
console.log(temp)
}
}
2 תגובות
Oct '18
◄ Real_time
הי,
את הקוד כדאי להדביק בתוך בלוק של קוד כדי שיהיה קל לקרוא. עושים את זה עם שלושה סימני גרש הפוך (את יכולה ללחוץ עריכה על ההודעה שלך כי עדכנתי ולראות את זה בטקסט או בתמונה הבאה):
Oct '18
◄ Real_time
הי,
אני לא בטוח שהפיתרון שלך עובד בכל המקרים. נסתכל רגע על תרגיל 3 בו צריך למצוא את המספר הגדול ביותר אשר שניהם מתחלקים בו. ניקח למשל את המספרים 21 ו-8 - אז מספרים אלה לא מתחלקים באותם דברים והמספר הגדול ביותר ששניהם מתחלקים בו הוא 1. הקוד שלך מזהה ש 21 הוא הגדול ושהוא לא מתחלק ב-8 ולכן מחזיר את שארית החלוקה שהיא 5, אבל היה צריך להדפיס 1.
אני חושב שגישה יותר נכונה לתרגיל תהיה להתחיל מקטן (מ-1) ואז בלולאה להגדיל את המספר עד שמגיעים לאחד המספרים, ולאורך הדרך כל פעם מנסה לבדוק אם שני המספרים מתחלקים במספר שלך - ואם כן לרשום בצד את הערך. כשתגיעי לאחד המספרים תוכלי לקחת את המספר האחרון שרשמת בצד ולהדפיס אותו.
תגובה אחת
Oct '18
◄ ynonp
Oct '18
◄ Real_time
בואי נתחיל עם תרגיל 3 ונגיע איתו לפיתרון שטוב לנו ואחרי זה יהיה יותר קל לגשת ולדבר על 4 (בינתיים לא הכי הבנתי את הקוד שכתבת שם ולא יודע עד כמה הוא נכון, אבל בכל מקרה מאמין שנוכל להפוך את הקוד להרבה יותר קריא)
Oct '18
אוקי לגבי מה שרשמת
:אני חושב שגישה יותר נכונה לתרגיל תהיה להתחיל מקטן (מ-1) ואז בלולאה להגדיל את המספר עד שמגיעים לאחד המספרים, ולאורך הדרך כל פעם מנסה לבדוק אם שני המספרים מתחלקים במספר שלך - ואם כן לרשום בצד את הערך. כשתגיעי לאחד המספרים תוכלי לקחת את המספר האחרון שרשמת בצד ולהדפיס אות
אתה ביקשתה בתרגיל את המספר הגדול ביותר ששניהם מתחלקים ובלי קשר אם אתחיל תמיד מהספר הנמוך 1 תמיד 1 יתחלק בשני המספרים שאכניס…
ואיך הפתרון עכשיו של תרגיל 3
,
function T3(num1,num2){
var temp = 0;
if(num1>num2){
temp = num1 % num2;
while(num1% temp !=0 || num2%temp != 0){
temp = temp - 1;
}
console.log(temp)
}
else{
temp = num2 % num1;
while(num1% temp !=0 || num2%temp != 0){
temp = temp - 1;
}
console.log(temp)
}
}
Oct '18
רגע סורי לגבי הפתרון של תרגיל 3 אל תבדוק אותו עדיין אני צריכה לתקן משו אבל רק שאלה זה נכון שבקשתה את המספר הגדול ביותר שמתחלק בשניהם?
תגובה אחת
Oct '18
◄ Real_time
בתרגיל 3 המטרה למצוא את המספר הגדול ביותר ששניהם מתחלקים בו. המספר 1 בטוח יעבוד כאן כי כולם מתחלקים בו ואז למשל במספרים כמו 7 ו-13 הוא גם הכי טוב שתגיעי, אבל לפעמים כשלמספרים יש מחלק משותף אפשר למצוא משהו יותר גדול למשל 9 ו-6 מתחלקים שניהם ב-3.
Nov '18
הי,
להלן פתרונות שלי (גילוי נאות - נעזרתי בגוגל יחד עם ניסוי וטעיה):
תרגיל 1 - לינק פיתרון:
תרגיל 2 - לינק פיתרון:
תרגיל 3 - לינק פיתרון:
תרגיל 4 - לינק פיתרון:
Nov '18
ניסוי וטעיה וגם גוגל הם כלים לגיטימיים לגמרי (כל עוד דאגת ליותר ניסוי וטעיה מאשר גוגל)
בכל מקרה ולעניין-
-
שים לב שאתה כותב שוב ושוב את הקטע שמגריל מספר שלם בטווח מספרים מסוים. זו נראית דוגמא טובה למצב שהייתי מוציא קוד לפונקציה (כן אפילו שזו תהיה פונקציה של שורה אחת, רק לתת שם לקטע עושה הרבה הבדל כשחוזרים אליו עוד שבועיים).
-
אני רואה שבתנאי ויתרת על הסוגריים המסולסלים (תרגיל 3). זה עובד אבל נראה כמו טעות. מומלץ תמיד לרשום סוגריים מסולסלים אחרי if גם אם מדובר בשורה אחת.
חוץ מזה עבודה טובה
תגובה אחת
Nov '18
◄ ynonp
הי,
שולח קוד משופץ עבור תרגיל 1:
ניסיתי במקום לולאת for ליישם באמצעות forEach ושם בסוגריים לשים את יצירת המספר הרנדומלי.
משום מה זה לא מצליח וזה רושם שאין שם פונקציה:
"TypeError: 35 is not a function
at Array.forEach ()
at createThreeRandNum (dinezab.js:9:17)
גם כשיצרתי לשם כך פונקציה והכנסתי ל-forEach זה לא הצליח.
האם אפשרי בכל זאת ליישם זאת ב-forEach?
תודה.
תגובה אחת
Nov '18
◄ Nirb
יכול להדביק כאן את הקוד שלא עבד לך?
אפשר להדביק קוד בפורום אם כותבים אותו בתוך שלושה סימני Backtick (זה הסימן שיש על ה ~ רק בלי להחזיק את ה Shfit).
זה נראה ככה ``` - את זה כותבים בשורה חדשה, מתחת את הקוד ואז שורה חדשה נוספת עם שלושה סימני Backtick נוספים לסגירת בלוק הקוד. כשמדביקים קוד יוצא:
print("hello world")
Nov '18
להלן הקוד שניסיתי עם forEach:
function createRandomNum () {
const createArr = [];
createArr.forEach((Math.floor(Math.random() * 100) + 1));
who_is_bigger (createArr);
}
function who_is_bigger (randNumArr) {
console.log("Here are the three random numbers: "
+ randNumArr[0] +" " + randNumArr[1] + " " + randNumArr[2]);
console.log("The biggest number is: " + Math.max(randNumArr[0],randNumArr[1],randNumArr[2]));
}
createRandomNum ();
תגובה אחת
Nov '18
◄ Nirb
ל forEach צריך להעביר פונקציה - בגלל זה הקוד שלך לא עובד, כי אתה מעביר ערך קבוע. בעיה נוספת זה שהמערך ריק ולכן הפונקציה שבתוך forEach ממילא לא תופעל
הנה דוגמא למשהו שהיה אפשר לעשות עם forEach (לא למלא מערך, אלא רק להדפיס את כל האלמנטים בו):
const arr = [10, 20, 30];
const printValue = function(val) { console.log(val); }
arr.forEach(printValue);
טריק אחר שאפשר לייצר איתו מערך בשורה אחת משתמש ב fill ו map ואני אראה אותו ואשלח אותך לגוגל לקרוא קצת על שתי הפונקציות כדי להבין בדיוק איך זה עובד:
function randomValue() { return Math.floor(Math.random() * 100) + 1; }
var arr = new Array(5).fill(0).map(randomValue)
תגובה אחת
Nov '18
◄ ynonp
הי ינון,
תודה על ההסבר וההכוונה.
אכן הסתכלתי בגוגל על מתודות fill ו-map.
זה נראה ברור יותר ואף ניסיתי קצת להתעמק, על הדרך מצאתי אפשרות נוספת בעזרת מתודת from שם ניתן להכניס שני פרמטרים:
בראשון הכנסתי הגדרת מערך ללא ערכים, ובשניה ישירות את יצירת ה-map להפקת מספר רנדומלי לכל איבר דרך פונקציית חץ (ללא קריאה לפונקציה).
להלן הקוד בשתי הגרסאות:
גרסה ראשונה -
function createRandArrNum (){
return Math.floor(Math.random() * 100) + 1;
}
function createArr () {
const arrRand = new Array(3).fill(null).map(createRandArrNum);
who_is_bigger (arrRand);
}
function who_is_bigger (arr) {
console.log("Here are the three random numbers: "
+ arr[0] +" " + arr[1] + " " + arr[2]);
console.log("The biggest number is: " + Math.max(arr[0],arr[1],arr[2]))
}
createArr ();
גרסה שניה-
function createArr () {
// "from" method gets 2 parameter : one for definining an Array , second for "map" method
const arrRand = Array.from(Array(3), () => Math.floor(Math.random() * 100) + 1);
// by "from" method we can pass in parameter num 2 - direct function - here it's an arrow function
who_is_bigger (arrRand);
}
function who_is_bigger (arr) {
console.log("Here are the three random numbers: "
+ arr[0] +" " + arr[1] + " " + arr[2]);
console.log("The biggest number is: " + Math.max(arr[0],arr[1],arr[2]))
}
createArr ();
Feb '19
היי ינון
אשמח אם תוכל לעבור על פתרונות התרגילים ולהגיד אם הם נכונים ומה כדאי לשפר
תגובה אחת
Feb '19
◄ 11120
הי אביגיל,
בשמחה.
אגב- אפשר להיכנס למסך הגדרות משתמש כאן בפורום כדי לבחור לעצמך שם משתמש יותר נעים מאשר המספר הזה
(ובצד שלי אני צריך איכשהו לחבר את הפורום והאתר כך ששם המשתמש יילקח אוטומטית, אבל בינתיים בכל מקרה תצטרכי לעשות את זה ידנית)
לגבי התרגילים- הפיתרונות מעולים כתובים יפה וגם עושים את הדבר הנכון.
אני רושם את הדברים החשובים קודם ואחרי זה הערות יותר קטנות:
-
הפונקציה compare שלך מדפיסה את התוצאה. בדרך כלל אנחנו מעדיפים שפונקציה ״תחזיר״ תוצאה והפונקציה שקראה לה תדפיס את התוצאה - כלומר לא לערבב חישוב עם הדפסה.
-
את מגדירה פעמיים את הפונקציה random. זה לא נורא כשמדובר בתרגיל אבל בחיים האמיתיים זה יכול לבלבל. מומלץ למצוא שמות שונים לפונקציות שונות.
-
משהו ברווחים אצלך לא מסתדר בעין. ממליץ להקפיד לשים רווחים ואינדנטציה בצורה נכונה.
עכשיו כמה הצעות קטנות יותר לשיפור:
נראה שהשורה הזאת חוזרת על עצמה כמה פעמים:
var num1 = Math.floor(Math.random() * max);
מומלץ יותר לכתוב פונקציה שתקבל את הטווח ותחזיר מספר אקראי בטווח.
את שורת ההדפסה הזאת:
console.log("numbers: num1 "+ num1 + " num2 "+ num2 + " num3 " + num3);
אפשר בדפדפנים חדשים להחליף בשורה הקצת יותר קריאה (טוב תלוי את מי שואלים):
console.log(`numbers: num1 = ${num1}, num2 = ${num2}, num3 = ${num3}`);
(הסבר מלא על סימן הגרש ההפוך ועוד יכולות חדשות של JS נמצא בקורס ES6 כאן באתר)
מתכנתים היום מעדיפים להשתמש במילה let במקום במילה var. את יכולה לשמוע על ההבדל בין הפקודות בשיעור המתאים מקורס ES6:
https://www.tocode.co.il/bundles/es6/lessons/let-and-const
אני חושב שכדאי לצפות בו כבר עכשיו ולהתרגל לעבוד עם let כשאת פותרת את התרגילים בקורס. זה לא נורא להשתמש ב var, הוא עובד וימשיך לעבוד לנצח ויש עדיין מקומות שמשתמשים בכתיב הזה, אבל אם את עכשיו בונה לעצמך הרגלים עדיף להתרגל לדבר החדש יותר.
יש ב JavaScript פונצקיה בשם max שכבר יודעת לקבל מספר מספרים ולהחזיר את הגדול מביניהם. זה נראה ככה:
// returns 33
Math.max(10, 25, 33, 2)
Nov '19
היי ינון
כשאני כותב את פקודה- console.log יש לי error:unexpected console statment(no-console).
אם אני כותב את בתוך פונקציה זה מדפיס לי חלק מהקוד אבל לא מה שאני רוצה , ואם זה מחוץ לפונקציה זה מדפיס לי מה שביקשתי אבל עדיין יש לי בצד סימון של error.
אתה יודע למה זה?
תגובה אחת
Nov '19
◄ 11141
הי נתנאל,
אתה מתכוון בתוך ה Brackets? או בדפדפן?
תגובה אחת
Nov '19
◄ ynonp
יכול לשים פה תמונה של הודעת השגיאה שיהיה יותר ברור?
Dec '19
יש פה אולי סרטוני פתרונות או פתרונות של מי שכתב את השאלות?
תגובה אחת
Dec '19
◄ ketter
הי @ketter
אני בכוונה לא מפרסם פיתרונות כי זאת לא המטרה של התרגילים - יש מספיק דוגמאות בסרטי הוידאו, וחלק מהעניין בעבודה שלנו הוא להתמודד עם אתגרים חדשים. המטרה של התרגולים היא לתת לך סביבה יחסית מבוקרת להתמודד עם אתגרים שעדיין לא ראית.
רוצה לספר איפה נתקעת ואנסה לעזור?
Jan '20
function randomValue(min, max) {
return Math.floor(Math.random() * (max-min) + min);
}
//ex1
function greatestOf3() {
let max = 0;
for (let i = 0; i < 3; i++) {
let value = randomValue(0, 100);
if (max < value) {
max = value;
}
console.log("value " + i + " = " + value);
}
console.log("The max value is: " + max);
}
//ex2
function sumOfDigits() {
let sum = 0;
let value = randomValue(1000, 9999);
while (value) {
sum += value % 10;
value = Math.floor(value / 10);
}
console.log("Sum of digits is: " + sum);
}
//ex3
function gcdoclidis() {
let first = randomValue(1, 9999);
let second = randomValue(1, 9999);
let max = (first, second)=>{
if(first >= second)
return first;
else
return second;
}
let min = (first, second)=>{
if(first <= second)
return first;
else
return second;
}
let gap= max-min;
while(gap > 0) {
if(gap === 1) {
console.log("gcd is: 1");
return;
}
let temp = max;
max = min;
min = gap;
gap = max - min;
}
console.log("gcd is: " + min);
}
//ex4
function lcmOftwo() {
let first = randomValue(1, 9999);
let second = randomValue(1, 9999);
while(true){
let i = 1;
if((i % first)===0 && (i % second === 0)){
console.log("lcm is: " + i);
return;
}
}
}
Jan '20
Mar '20
איך מריצים את התוכנית בbrackets?
Mar '20
הי,
בקרטס הוא עורך טקסט. בשביל להריץ את התוכנית צריך למצוא את קובץ ה HTML ב File Explorer של חלונות וללחוץ עליו לחיצה כפולה. זה יפתח את הקובץ בדפדפן.
אם כתבת רק קובץ JavaScript תצטרך לכתוב גם קובץ HTML שיריץ אותו, ואת קובץ ה HTML אתה פותח בדפדפן. אם לדוגמא קובץ ה JavaScript נקרא main.js אז בקובץ ה HTML תוכל לכתוב:
<html>
<head></head>
<body>
<script src="main.js"></script>
</body>
</html>
May '20
נראה לי שהפתרון הכי פשוט לשאלה הראשונה הוא
var a = Math.round(Math.random()*100);
var b = Math.round(Math.random()*100);
while ( b == a) {
var b = Math.round(Math.random()*100);
}
var c = Math.round(Math.random()*100);
while ( c == a || b == c) {
var c = Math.round(Math.random()*100);
}
console.log("variant a "+a );
console.log("variant b "+b );
console.log("variant c "+c );
if (a >b && a>c) {
console.log("the bigest number is " + a)
}else if ((b >a && b>c)) {
console.log("the bigest number is " + b)
} else {console.log("the bigest number is " + c)}
ככה גם הJS דואג שלא תהיה חזרה על מספר
תגובה אחת
May '20
◄ netcohen
הי @netcohen
עובד, למרות שלפי הגדרת השאלה אין לנו בעיה אם חלק מהמספרים יהיו זהים. ואגב ל JavaScript יש לולאת do…while אז אפשר גם לכתוב:
do { var b = Math.round(Math.random()*100) } while (b == a);
May '20
הי,
האם תוכל בבקשה לעבור על הפתרונות שלי - אשמח להערות! תודה רבה!
//Random between min to max include both
function RandomInt(min,max) {
return (Math.floor((Math.random()*(Math.floor(max-min+1))) + min));
}
//T1;
function max_between_3_numbers() {
var num1 = RandomInt(0,100);
var num2 = RandomInt(0,100);
var num3 = RandomInt(0,100);
console.log("num1: " + num1 + " num2: " + num2 + " num3: " + num3);
console.log ("The max number is: " + (Math.max(num1,num2,num3)));
}
//T2
function sum_of_digits(min,max) {
var num = RandomInt(min,max);
var sum = 0;
var num_tmp = num;
while(num) {
sum+=num%10;
num=Math.floor(num/10);
}
console.log ("The number is: " + num_tmp + "\nAnd the sum of the digits is: " + sum);
}
function first_devide_by_second(num1,num2) {
if (num1/num2 == (Math.floor(num1/num2))) {
return 1;
}
return 0;
}
//T3
function largest_number_that_they_both_devide (num1,num2) {
min_num = Math.min(num1,num2);
for (var i = min_num; i>0; i--) {
if(first_devide_by_second(num1,i) && first_devide_by_second(num2,i)){
console.log ("The largest number is: " + i)
break;
}
}
}
//T4
function smallest_common_multiple(num1,num2) {
for (var i = Math.max(num1,num2); i<=num1*num2; i++) {
if(first_devide_by_second(i,num1) && first_devide_by_second(i,num2)) {
console.log ("The number is: " + i);
break;
}
}
}
function main() {
max_between_3_numbers();
sum_of_digits(1000,100000000);
largest_number_that_they_both_devide(128,236);
smallest_common_multiple(20,8);
}
main();
תגובה אחת
May '20
◄ 11159
הי
מבחינת פונקציונאליות נראה מעולה. כמה דברים מבחינת סגנון:
-
היום כבר לא כל כך מקובל להשתמש ב var. אני יודע זה מה שאני עובד איתו בקורס אבל האמת שממש בקרוב תעלה גירסא חדשה של הקורס הזה שם במקום var אני אכתוב תמיד let או const. שווה לזרוק מבט לשיעור כאן כדי להבין מה ההבדל ביניהם ובאופן כללי כמעט תמיד להתרגל לכתוב const או let במקום var:
https://www.tocode.co.il/bundles/es6/lessons/let-and-const
-
מבחינת שמות לפונקציות ב JavaScript אוהבים להשתמש בכתיב אותיות גמל אז smallestCommonMultiple
יהיה שם יותר מתאים מאשר זה עם הקו תחתי.
תגובה אחת
May '20
◄ ynonp
תודה רבה על ההיענות המהירה!
אקח לתשומת ליבי את ההערות.
Dec '20
◄ Yoni_Goren
היי,
פתרון שלי:
var arr = Array.from({length:3} , () => Math.floor(Math.random() * 100) + 1);
console.log(arr + " Max=> " + Math.max(...arr));
תגובה אחת
Jan '21
◄ ZaZza
הי @ZaZza
קשה לקרוא את הקוד בגלל היישור לימין. פה בפורום אפשר להדביק קוד בקלות באמצעות Markdown אם כותבים בשורה שלוש פעמים סימן גרש הפוך ``` אחר כך יורדים שורה ומתחילים לשים את הקוד ואז בשורה חדשה נוספת שוב שלוש פעמים גרש הפוך כדי לסיים.
חוץ מזה יש לקורס הזה גירסה חדשה יותר בקישור כאן:
https://www.tocode.co.il/bundles/frontend
שווה ללמוד ממנה
תגובה אחת
Jan '21
◄ ynonp
var arr = Array.from({length:3} , () => Math.floor(Math.random() * 100) + 1);
console.log(arr + " Max=> " + Math.max(...arr));
תודה
תגובה אחת
Jan '21
◄ ZaZza
כיוון מדליק ליצירת המערך. שים לב שכדאי להשתמש ב const או let במקום var כמעט בכל מקום בקוד