יום רביעי, 27 ביוני 2018

ביצוע "מיון מיזוג" על מערך דו ממדי

Merge Sort על מערך דו ממדי


"Merge Sort" הוא אחד מהאלגוריתמים המפורסמים למיון מערכים.
תוכלו לקרוא עליו בהרחבה באתר של GeeksforGeeks.

נדגים עיקרון חשוב בעניין מערכים דו-ממדיים:
"מערך דו ממדי מתנהג ונשמר בזיכרון בדיוק כמו מערך חד ממדי."


לדוגמה, המערך:
[15],[22],[33]
[20],[80],[17]

נשמר בזיכרון כך:
[20],[80],[17],[15],[22],[33]

למעשה אם מערך חד ממדי לא שונה מ"מצביע", אז מערך דו ממדי לא שונה מ"מצביע למצביע".





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

הקוד:
(הקוד זמין גם כאן)

יום ראשון, 24 ביוני 2018

עוד על מבוכים, הפעם עם JavaFX

יצירה קלה של מבוכים חדשים עם ממשק משתמש גרפי


פוסט זה ממשיך בנושא פתרון מבוכים.

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

הורדת קובץ הרצה
הורדת קוד מקור




סרטון הסבר:


יום רביעי, 20 ביוני 2018

מציאת הפתרון המהיר ביותר למבוך

הפתרון המהיר ביותר למבוך

הקוד הבא הוא למעשה חידה מפורסמת. נתקלתי בו בבלוג של Symbol/Skyance, ועם שינויים מסוימים אני מביא אותו לכם.



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

עליכם לכתוב תוכנית מחשב שתמצא את הדרך הקצרה ביותר שניתן ללכת בה במבוך מההתחלה עד לסיום.





יום שלישי, 19 ביוני 2018

קורס מבוא לתכנות של הבסמ"ח

קורס מבוא לתכנות של Basmach!

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

בסך הכל ארבעה פרקים חשובים מאוד.
בקורס לומדים ++C. משום שכבר למדנו אותה נוכל להתמקד בסטנדרטים של הבסמ"ח.






ייצוא הפרויקט לקובץ EXE (‏Java)

ייצוא קובץ EXE באמצעות Launch4j

אז כתבתם פרויקט ב-NetBeans וכעת אתם רוצים לשתף אותו עם העולם,
לשם כך אתם רוצים לייצא אותו אל קובץ EXE.



נתחיל:
נתחיל בכך שתהיה לכם תוכנה מוכנה כלשהי, לדוגמה מחשבון פשוט אותו תוכלו ליצור כפי שמודגם כאן.


יצירת קובץ JAR הניתן להרצה:
ייצאו את הקוד שלכם אל קובץ JAR, אותו למעשה ניתן להריץ אף מבלי שתמשיכו ותעטפו אותו כקובץ EXE.
עשו זאת על ידי לחיצה ימינית על הפרויקט ואז בחירה באפשרות "Clean and Build".
קובץ ה-JAR ייווצר בתיקייה dist של הפרויקט.

יום שני, 18 ביוני 2018

יצירת קובץ EXE עם כל הספריות dll הדרושות (#C)

קבצי dll ב-Visual Studio

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

- כל הספריות בפרויקט שלנו שמורות תחת References.
- רק אחרי שנוסיף את הספרייה לפרויקט נוכל לקרוא לה על ידי using.




הוספת ספרייה לפרויקט:
דרך 1: להוריד את ה-dll ולהוסיף אותו ידנית.
דרך 2: אם מדובר בספרייה מוכרת, יתכן שניתן בעזרת NuGet להגיע אליה ישירות באמצעות חיפוש אונליין בויזואל סטודיו.
אפשר להגיע אל NuGet כך: TOOLS->Library Package Manager->Manage NuGet Packages for Solution.
או כפי שמתואר כאן.










יצירת קובץ EXE שמכיל את כל הספריות שעשינו בהן שימוש:

יום שישי, 1 ביוני 2018

אודות המבחן האחרון ("מעבדה") ב-SQL ו-Access

פרויקט Access


ביום רביעי ה-30/05/2018 היה יום הלימודים האחרון של יד' תוכנה - הגשת פרויקטים שנתיים לבוחנים של משרד החינוך.
על הפרויקט הגדול ב-Java עוד נכתוב בהמשך, אבל כמה מילים על הפרויקט ב-Access:


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



מה קיבלנו:
הבוחנים לא התעניינו ב-Access, יתכן שזו הייתה אי הבנה, הם ביקשו לראות את קשרי הגומלין בין הטבלאות, ואז נתנו לנו כרבע שעה לבצע משימה כלשהי.









משימות לדוגמה:

יום שלישי, 15 במאי 2018

מדריכים לתחילת עבודה עם JavaFX

ממשק גרפי עם JavaFX


בשלב מסויים אנחנו רוצים שהתוכנה שלנו תראה כמו תוכנה שהיינו מצפים לראות מותקנת על המחשב, כזו עם כפתורים וממשק נוח.
בעברה של Java היה נהוג להשיג את התוצאות האלה באמצעות Swing, אך מאחר והיא מיושנת וסובלת מחוסר תאימות למסכי 4K חיפשתי פתרון עדכני יותר: קבלו את JavaFX - הספרייה הרשמית שמחליפה את Swing.

אחת היכולות החשובות של JavaFX היא האפשרות לחלק את הקוד על פי מודל MVC הנוח.
להרחבה על המודל: Derek Banas, Traversy Media, HandsonERP

כבר בהתחלה, כמובן אחרי שהתקנתם את NetBeans, מומלץ להוריד את התוכנה SceneBuilder לעיצוב חלונות התוכנה בקבצי FXML.
להורדה: כאן.








מדריכים ל-JavaFX:

- סדרת מדריכים מומלצת מאת ProgrammingKnowledge

יום שלישי, 8 במאי 2018

חידה: קוד שמדפיס את עצמו

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



נסו זאת בעצמכם! זה אפשרי.




יום שישי, 4 במאי 2018

ניהול תקשורת בין משתמשים ללא "צד שרת"

תקשורת ללא "צד-שרת"



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



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



לצורך כך ניצור בבסיס הנתונים טבלה בשם "PlayersWaitingForGame":

 



ה-ID יהיה כמובן PK ו-Identity.
ה-PlayerID מקושר בקשר גומלין לטבלת Players.
ה-SecondPlayerID מקושר גם הוא בקשר גומלין לטבלת Players.

יום שלישי, 1 במאי 2018

יצירת פרוצדורה ב-SQL Server

Procedure - TSQL

פרוצדורה היא פונקציה (קטע קוד) ששמורה בשרת ה-SQL ומבצעת רצף פעולות בעת שקוראים לה.
פרוצדורה יכולה לקבל ערכים ולהחזיר ערכים.

יצירה:


CREATE procedure שם
@Parameter01 int, @Parameter02 nvarchar(30) -- קבלת פרמטרים
AS
      ...קוד...
go




עריכת פרוצדורה שכבר יצרנו:
ALTER procedure שם
@Parameter01 int, @Parameter02 nvarchar(30) -- קבלת פרמטרים
AS
      ...קוד...
go


יום ראשון, 29 באפריל 2018

מדריך ווידאו - חיבור Access ל-SQL Server

המדריך החדש של גידי (בהתאם להנחיות משרד החינוך החדשות):





פקודות בסיסיות בשפת פסקל

אז משרד החינוך הוסיף לנו שפה חדשה בהתראה מאוד קצרה: Pascal.


- מדריך בויקיפדיה
- מדריך באנגלית
- קומפיילר אינטרנטי: כאן או כאן







סינטקס:


Syntax pascal:


חשוב להדגיש שפסקל לא מבחינה בין אותיות גדולות לקטנות!

Settings variabels
Exampels:
type
days, age = integer;
yes, true = boolean;
name, city = string;
fees, expenses = real;
Now, the types so defined can be used in variable declarations −
var
weekdays, holidays : days;
choice: yes;
student_name, emp_name : name;
capital: city;
cost: expenses;

יום ראשון, 8 באפריל 2018

ירושה ג'נרית של מחלקת ה-SQL לכל טבלה - Java

אחרי שהבנו איך להשתמש בירושה רגילה לצורך תכנון המחלקות שלנו שמטפלות בטבלאות ה-SQL,
נראה היום איך להשתמש בירושה ג'נרית כדי להגיע לאותן תוצאות בפחות קוד.

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







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

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










קוד:

יום רביעי, 4 באפריל 2018

ירושה של מחלקת ה-SQL לכל טבלה - Java

הדגמה של מחלקה כללית לענייני טבלאות SQL ממנה יורשות המחלקות של כל הטבלאות



אחרי שהבנו את הבסיס כאן וכאן, הגיע הזמן לשימוש מעשי.
נדגים על בסיס הנתונים "NORTHWND" על הטבלה "Employees".


תזכורות:
לא לשכוח להוסיף את הדרייבר.
 * protected = רק היורשים יכולים להשתמש
 * final = לא ניתן לשינוי
 * abstract class = מחלקה שניתן לרשת אותה אבל לא ניתן ליצור מופע שלה






מחלקה לייצוג שגיאה:
public class CustomError {
    public String CustomMessage;
    public String SystemMessage;
    public Boolean isThereError;
    public CustomError(){
        CustomMessage = "Good";
        SystemMessage = "Good";
        isThereError = false;
    }
}




מחלקה לייצוג עובד:

יום רביעי, 14 במרץ 2018

חידה: מיון ספרות של מספר שלם



לפניך חידה: כתוב פונקציה אשר מקבלת מספר ומחזירה מספר המורכב מאותן ספרות אך בסדר יורד.

לדוגמה:
עבור המספר 23989769
תחזיר          99987632


אסור להשתמש במערך או בכל מבנה נתונים קיים. (למעט משתנים כמובן).
אסור להשתמש בפונקציות מיון קיימות.
אסור לקרוא לאף פונקציה שהיא למעט הפונקציה עצמה.
רק אתם וההבנה שלכם במספרים.









יום שני, 5 במרץ 2018

Enum ב-#C

Enum

בעבר למדנו על Enum בשפת C, היום נלמד עליו ב-#C.
Enum מאפשר לנו ליצג במילים דברים שהיינו יכולים ליצג במספרים, למען קריאות התוכנית למתכנת.

- ניתן ליצור Enum בתוך ומחוץ למחלקות ולמבנים. (מבנים = structs).
- פנייה לקבוע של אינם מסויים היא באמצעות שם האינם.
- אם מדובר באינם ציבורי ממחלקה אחרת, ניתן לפנות אליו רק בצירוף שם המחלקה.
- לכל מילה יש ערך מספרי. בברירת המחדל למילה הראשונה יש את הערך 0 ולכל מילה אחריה יש ערך גדול ב-1.
- לא ניתן להוסיף קבועים לEnum במהלך התוכנית.








דוגמאות:


Enum בתוך מחלקה, והמרה מקבוע אל int:
    class Program
    {
        // יצירת אינם ציבורי בתוך מחלקה
        public enum Season { WINTER, SPRING, SUMMER, FALL } 
 
        static void Main(string[] args)
        {
            // לתת למשתנה את הערך המספרי של קבוע מסוים בתוך האינם
            // int שימו לב שבשפת סי שארפ נדרשת המרה ל  
            int x = (int)Season.WINTER;
            int y = (int)Season.SUMMER;
 
            Console.WriteLine("WINTER = {0}", x); // ידפיס 0
            Console.WriteLine("SUMMER = {0}", y); // ידפיס 2
        }
    }



יום שני, 19 בפברואר 2018

פרסום קוד: מציאת כל הפתרונות האפשריים של כדור מחומשים (#C)

מציאת כל הפתרונות האפשריים שיש לכדור המחומשים

הכל התחיל מכדור מחומשים יפה ושלם.
מדובר היה במשחק, לפרק את הכדור ולהרכיב אותו בחזרה, איזה כיף.
אך אבוי! אחרי שפורק הכדור איש לא הצליח להרכיב אותו בהצלחה.

עברו שנים, ונזכרתי שאני מתכנת...





תמונה של הכדור מפורק:




יום שישי, 16 בפברואר 2018

מבני נתונים מבחנים חיצוניים וסיכומים

סיכומים ומבחנים חיצוניים מהשנים 2006-2017

להורדה: כאן, או כאן.

סמל 714911



בנוסף, צילום עיקרי המחברת של דביר ושל איציק
להורדה: כאן, או כאן.

(תודה דביר, תודה איציק)







יום שלישי, 6 בפברואר 2018

בגרות לבתי ספר על־יסודיים - מדעי המחשב (#C ו-Java)


בגרות במדעי המחשב


להורדת המבחנים והפתרונות של שנים 2016-2017: כאן.







שאלון 899381
המבחנים הם מאתר משרד החינוך.