יום שישי, 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
המבחנים הם מאתר משרד החינוך.

יום חמישי, 25 בינואר 2018

מבחן מערכות ספרתיות ומבוא לאלקטרוניקה סוף טרימסטר תשע"ח

מבחן מערכות ספרתיות ומבוא לאלקטרוניקה
25/01/2018





ייצוג "תור" ב-#C

ייצוג פשוט של "תור" (עליו למדנו במבנה נתונים) בשפת #C.

הקוד פשוט מאוד להבנה:



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace LearnQueue
{
    // תור = הראשון שנכנס הוא הראשון שיוצא
 
 

יום רביעי, 24 בינואר 2018

רשימה ג'נרית ב-#C

מימוש רשימה ג'נרית ב-#C

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



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication103
{
    class Node<T> // "המחלקה "צומת
    {
        private T info;
        private Node<T> next;
 
        public Node(T info)
        {
            this.info = info;
            this.next = null;
        }
 
        public Node(T info, Node<T> next)
        {
            this.info = info;
            this.next = next;
        }
 

תכנות ג'נרי ב-#C

Generic

פונקציות ג'נריות מאפשרות לנו לכתוב פעם אחת קוד שמתאים למספר סוגים של משתנים.
הקוד מקבל כפרמטר את סוג המשתנים ומגיב בהתאם.



דוגמא - פונקציה ג'נרית להדפסת מערך פשוטה:
(אפשר לתת לסוג המשתנים כל שם, כאן נשתמש ב-"E".)
    class Program
    {
        // פונקציה ג'נרית להדפסה של איברי מערך מכל סוג מספרי
        static void PrintArray<E>(E[] inputArray)
        {
            foreach (E element in inputArray)
                Console.Write(element + ", ");
            Console.WriteLine("\n");
        }
 
 
        static void Main(string[] args)
        {
            // double ו int יצירת מערך של 
            int[] intArray = { 1, 2, 3, 4, 5, 6 };
            double[] doubleArray = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7 };
 
            // int הדפסת מערך
            PrintArray<int>(intArray); // 1, 2, 3, 4, 5, 6, :ידפיס
 
            // double הדפסת מערך
            PrintArray<double>(doubleArray); // 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, :ידפיס
        }
    }

יום חמישי, 18 בינואר 2018

עבודה עם קבצי טקסט, הצפנה וקבלת מספר פרמטרים לא קבוע (Java)

עבודה עם קבצים בג'אווה

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





תוכלו לצפות בקוד כאן:




יום שלישי, 16 בינואר 2018

תכנות מקבילי Java Thread


Thread


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


הורדת מאמר (PDF): כאן או כאן.
ראו גם: Java מההתחלה, מדריך ביוטיוב של life michael.




יום שישי, 5 בינואר 2018

רשימות מקושרות ב-#C

זוכרים מהי רשימה מקושרת?
היום נלמד על רשימות מקושרות ב-#C.



רשימות מקושרות | Linked List
לפני שנלמד על רשימות מקושרות חשוב להבין שבשפת #C אין מצביעים. למה?
משום שבשפת #C כמעט כל דבר הוא מצביע! עד כדי כך שכבר אין צורך לסמן את זה באופן מיוחד.

הוכחה 1:
        static void Main(string[] args)
        {
            int[] arr1 = new int[5];
            int[] arr2 = new int[5];
            arr2 = arr1;
            arr2[0] = 19;
            Console.WriteLine(arr1[0]); // arr2 ידפיס 19, למרות שביצענו את השינויים על
        }