קורס Front-End Web Development שיעור תרגול JavaScript Syntax


זה נושא דיון מלווה לערך המקורי ב- https://www.tocode.co.il/bundles/html5-web-development/lessons/javascript-syntax-lab
\\ תרגיל 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)
        
}

\\תרגיל 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);
    
}

הי @Yoni_Goren
יכול להדביק את הפיתרונות בתוך שלושה סימני ` כדי שיראה כמו קוד? אפשר להיעזר בטבלא כאן:
https://commonmark.org/help/

איך רושמים MOD בתוכנה ברקט?
temp = num1 mod num2;
זה מציג לי על ה-MOD שגיאה

הי,

פעולת Mod נרשמת בסימן אחוז כך:

temp = num1 % num2

הי,
רציתי לדעת ראשית איך מדבגים בתוכנת ברקט… שנית איך אני יודעת שפתרתי בדרך נכונה את התרגילים.

הי,
לגבי התרגילים הכי טוב להדביק כאן את הפיתרונות שלך ואז אפשר לדבר עליהם. לא יודע אם יש דבר כזה נכון אבל תמיד יש מה ללמוד מפיתרונות ותמיד אפשר לשפר.

את יכולה גם לפתוח חשבון בחינם בקודפן ואז זה מאוד נוח כי אפשר להדביק קוד ״חי״ באמצעות הדבקת קישור לקודפן שלו

לגבי Debug בריאקט אני חושב שהכי קל לשים נקודת עצירה בדפדפן. רק שימי לב שאת עובדת עם Source Maps כמו שהוסבר בסרטון בקורס ריאקט ואז תוכלי לראות את הקוד לפני וובפאק

אוקי פתרונות של תרגיל 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) 
    }
        
}

הי,
את הקוד כדאי להדביק בתוך בלוק של קוד כדי שיהיה קל לקרוא. עושים את זה עם שלושה סימני גרש הפוך (את יכולה ללחוץ עריכה על ההודעה שלך כי עדכנתי ולראות את זה בטקסט או בתמונה הבאה):

הי,

אני לא בטוח שהפיתרון שלך עובד בכל המקרים. נסתכל רגע על תרגיל 3 בו צריך למצוא את המספר הגדול ביותר אשר שניהם מתחלקים בו. ניקח למשל את המספרים 21 ו-8 - אז מספרים אלה לא מתחלקים באותם דברים והמספר הגדול ביותר ששניהם מתחלקים בו הוא 1. הקוד שלך מזהה ש 21 הוא הגדול ושהוא לא מתחלק ב-8 ולכן מחזיר את שארית החלוקה שהיא 5, אבל היה צריך להדפיס 1.

אני חושב שגישה יותר נכונה לתרגיל תהיה להתחיל מקטן (מ-1) ואז בלולאה להגדיל את המספר עד שמגיעים לאחד המספרים, ולאורך הדרך כל פעם מנסה לבדוק אם שני המספרים מתחלקים במספר שלך - ואם כן לרשום בצד את הערך. כשתגיעי לאחד המספרים תוכלי לקחת את המספר האחרון שרשמת בצד ולהדפיס אותו.

אוקי ולגבי פתרון של תרגיל 4

בואי נתחיל עם תרגיל 3 ונגיע איתו לפיתרון שטוב לנו ואחרי זה יהיה יותר קל לגשת ולדבר על 4 (בינתיים לא הכי הבנתי את הקוד שכתבת שם ולא יודע עד כמה הוא נכון, אבל בכל מקרה מאמין שנוכל להפוך את הקוד להרבה יותר קריא)

אוקי לגבי מה שרשמת
:אני חושב שגישה יותר נכונה לתרגיל תהיה להתחיל מקטן (מ-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)
}

}

רגע סורי לגבי הפתרון של תרגיל 3 אל תבדוק אותו עדיין אני צריכה לתקן משו אבל רק שאלה זה נכון שבקשתה את המספר הגדול ביותר שמתחלק בשניהם?

בתרגיל 3 המטרה למצוא את המספר הגדול ביותר ששניהם מתחלקים בו. המספר 1 בטוח יעבוד כאן כי כולם מתחלקים בו ואז למשל במספרים כמו 7 ו-13 הוא גם הכי טוב שתגיעי, אבל לפעמים כשלמספרים יש מחלק משותף אפשר למצוא משהו יותר גדול למשל 9 ו-6 מתחלקים שניהם ב-3.

הי,

להלן פתרונות שלי (גילוי נאות - נעזרתי בגוגל יחד עם ניסוי וטעיה):

תרגיל 1 - לינק פיתרון:

תרגיל 2 - לינק פיתרון:

תרגיל 3 - לינק פיתרון:

תרגיל 4 - לינק פיתרון:

ניסוי וטעיה וגם גוגל הם כלים לגיטימיים לגמרי (כל עוד דאגת ליותר ניסוי וטעיה מאשר גוגל)

בכל מקרה ולעניין-

  1. שים לב שאתה כותב שוב ושוב את הקטע שמגריל מספר שלם בטווח מספרים מסוים. זו נראית דוגמא טובה למצב שהייתי מוציא קוד לפונקציה (כן אפילו שזו תהיה פונקציה של שורה אחת, רק לתת שם לקטע עושה הרבה הבדל כשחוזרים אליו עוד שבועיים).

  2. אני רואה שבתנאי ויתרת על הסוגריים המסולסלים (תרגיל 3). זה עובד אבל נראה כמו טעות. מומלץ תמיד לרשום סוגריים מסולסלים אחרי if גם אם מדובר בשורה אחת.

חוץ מזה עבודה טובה

הי,

שולח קוד משופץ עבור תרגיל 1:

ניסיתי במקום לולאת for ליישם באמצעות forEach ושם בסוגריים לשים את יצירת המספר הרנדומלי.
משום מה זה לא מצליח וזה רושם שאין שם פונקציה:
"TypeError: 35 is not a function
at Array.forEach ()
at createThreeRandNum (dinezab.js:9:17)

גם כשיצרתי לשם כך פונקציה והכנסתי ל-forEach זה לא הצליח.
האם אפשרי בכל זאת ליישם זאת ב-forEach?
תודה.

יכול להדביק כאן את הקוד שלא עבד לך?

אפשר להדביק קוד בפורום אם כותבים אותו בתוך שלושה סימני Backtick (זה הסימן שיש על ה ~ רק בלי להחזיק את ה Shfit).

זה נראה ככה ``` - את זה כותבים בשורה חדשה, מתחת את הקוד ואז שורה חדשה נוספת עם שלושה סימני Backtick נוספים לסגירת בלוק הקוד. כשמדביקים קוד יוצא:

print("hello world")