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

הי @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")

להלן הקוד שניסיתי עם 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 ();

ל 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)
 

הי ינון,

תודה על ההסבר וההכוונה.
אכן הסתכלתי בגוגל על מתודות 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 ();
לייק 1