יסודות התכנות בשפת C#‎ · פרק 1 — מבוא למדעי המחשב⌂📚🏠
פרק 1

מבוא למדעי המחשב

1.1 מערכת טכנולוגית

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

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

אם כן, מהי מערכת טכנולוגית?:

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

קלט – תהליך – פלט.

  1. קלט: הדברים שאנו מספקים למערכת. (מכניסים אותם אל המערכת)
  2. תהליך: סדרה של פעולות ופקודות שמתבצעות במערכת.
  3. פלט: המוצרים שהמערכת נותנת לנו.

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

קלטתהליךפלט

הקלט במערכות טכנולוגיות:

למערכות טכנולוגיות שונות יש סוגי קלט שונים:

קלט מידע הפעלה. בתחילת פעולתה של מערכת טכנולוגית נדרש מידע שקובע את המטרה הנדרשת מן המערכת: מהי מטרת המערכת? או מהו הפלט הנדרש ממנה? זהו קלט מידע ההפעלה.

התהליך במערכות טכנולוגיות:

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

הפלט במערכות טכנולוגיות:

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

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

1.2 מבנה המחשב

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

הנתונים שהמחשב קולט נקראים קלט (Input). ואילו המידע שהמחשב מוציא נקרא פלט (Output). העיבוד שמתבצע במחשב נעשה באמצעות קבוצת פקודות הנקראת תוכנית מחשב (computer program).

אפשר לחלק את המחשב לשני חלקים:

  1. חומרת המחשב.
  2. תוכנת המחשב.

חומרה: היא אוסף החלקים והרכיבים האלקטרוניים והפיזיקליים הפועלים יחד, ובראשם המעבד.

תוכנה: כוללת את מערכת ההפעלה ואת תוכנות המשתמש (תוכנות היישום). מערכת ההפעלה היא תוכנית שמנהלת את החומרה ואת המשאבים של המחשב ומספקת לנו ממשק הפעלה למחשב כולו. תוכנות המשתמש הן תוכנות היישומים השונות שמופעלות ממערכת ההפעלה.

חומרת המחשב מורכבת מ-3 יחידות:

  1. זיכרון (Memory).
  2. יחידת עיבוד מרכזית (CPU).
  3. התקני קלט-פלט (I/O).

המעבד:

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

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

זיכרון:

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

יחידת המידע הבסיסית היא הסיבית הבודדת (bit), והיא יכולה להכיל את הערך 0 או את הערך 1 בלבד. כל תא זיכרון מורכב מבית אחד (Byte) ויש לו כתובת משלו. בית הוא 8 סיביות, כלומר:

1 Byte = 8 bit

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

210 = kB
220 = MB
230 = GB
240 = TB

יש כמה סוגי זיכרון, ונזכיר מהם: זיכרון RAM וזיכרון ROM.

  1. זיכרון RAM (Random Access Memory): הוא הזיכרון הראשי במחשב, המיועד לקריאה ולכתיבה של נתונים, והתוכניות שפועלות במחשב מאוחסנות בו. זהו זיכרון מהיר, והוא קטן בגודלו ביחס לשטח האחסון בדיסק הקשיח. הנתונים שנרשמים בזיכרון זה ניתנים למחיקה באופן אוטומטי ועצמאי, במיוחד כאשר המחשב מסיים לפעול, או אם עבר זמן רב שבו לא נעשה שימוש בנתונים אלה, ואז נשמרים נתונים אחרים במקום הנתונים הישנים.
  2. זיכרון ROM (Read Only Memory): הוא זיכרון לקריאה בלבד. התוכניות שבזיכרון זה מאוחסנות בו בשלב ייצור המחשב, כך שאיננו יכולים לשנותן, ובין תפקידיו הפעלה מחדש של המחשב, והוא אחראי על הפעולות הראשוניות שהמחשב מבצע בתחילת הפעלתו. זיכרון זה קטן בגודלו, והנתונים שבו אינם ניתנים למחיקה כאשר מכבים את המחשב ומנתקים אותו מן החשמל.

התקני קלט-פלט:

Input – Output Unit: התקני הקלט והפלט הם אוסף התקנים ורכיבים שהמחשב משתמש בהם כדי לתקשר עם העולם החיצוני.

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

אפיקים:

היחידות מחוברות ביניהן באמצעות מוליכים חשמליים, שבהם המתח החשמלי בכל מוליך (תיל) הוא 0 V ("0") או 5 V ("1"), והם מתחלקים לשלוש קבוצות: אפיק נתונים Data Bus, אפיק כתובות Address Bus ואפיק בקרה Control Bus.

אפיק: הוא אוסף של קווים (תילים חשמליים), והם המסלולים שדרכם עוברים האותות החשמליים והנתונים במחשב.
  1. אפיק נתונים Data Bus: באמצעותו המעבד שולח או מקבל נתונים מן הזיכרון או מהתקני הקלט והפלט (קריאה/כתיבה). באפיק הנתונים יש כמה קווים, ומספרם הוא כפולות של המספר 8 (8, 16, 32, 64...), וכידוע נתון מורכב מ-8 סיביות, ואנו צריכים להעביר נתונים בבת אחת, באופן מתואם ומקבילי.
  2. אפיק הכתובות Address Bus: על אפיק הכתובות המעבד קובע את הכתובת שאליה יפנה בזיכרון או בהתקני הקלט והפלט, כדי לשלוח (לקבל) מידע ונתונים אל כתובת התא הנדרש בזיכרון או בהתקנים אלה.
  3. אפיק הבקרה Control Bus: באמצעותו המעבד שולח אותות לזיכרון או להתקני הקלט והפלט כדי להודיע להם שהוא רוצה לקרוא נתון או לכתוב נתון מסוים.

1.3 מבוא לשפות תכנות

אפשר לחלק את התוכנה (Software) לשלושה סוגים בסיסיים:

מערכות הפעלה:

OS = Operating Systems: הן תוכניות שמנהלות את משאבי החומרה ואת שאר התוכנות במחשב. מערכת ההפעלה מספקת את הרשת הדרושה לפעולת היישומים והתוכניות של המחשב, והיא פועלת גם כחוליה מקשרת בין המשתמש, חומרת המחשב והתוכניות השונות האחרות. מערכת ההפעלה היא התוכנית הראשונה שפועלת עם הפעלת המחשב, והיא זו שמאפשרת למשתמש להשתמש במחשב. תהליך ההפעלה מחדש של מערכת ההפעלה, שמתרחש עם הפעלת המחשב, נקרא אתחול.

מערכת ההפעלה הנפוצה ביותר היא Windows, אך יש מערכות הפעלה נוספות: DOS, Unix, Linux, Android..

יישומים:

Applications: הן תוכניות מחשב שמשתמשות ביכולות המחשב כדי לבצע משימות שהמשתמש צריך. יישומי מחשב יכולים להיות למשל דפדפני אינטרנט, תוכנות לעבודה עם טקסטים כמו Word, תוכנות לעבודה עם תמונות כמו פוטושופ וכו'...

שפות תכנות:

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

בעזרת שפת התכנות המתכנת יכול ליצור קובץ באמצעות העורך (Editor), שיכלול את הפקודות המתארות במילים את הפעולות שהוא רוצה שהמחשב יבצע. הפקודות שנכתבות לפי חוקי שפת התכנות אינן מובנות למעבד ישירות, ולכן יש צורך לתרגם את התוכנית שנכתבה בשפת התכנות לשפה שהמעבד מבין. התרגום נעשה בידי המהדר (Compiler) בתהליך שנקרא הידור (Compile), והוא מתרגם את הפקודות משפה עילית לשפת המכונה שהמעבד מבין.

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

שפה עילית:

High Level Language: היא שפה שבה פקודות התכנות נכתבות במילים מדוברות מן השפה האנושית ומובנות לנו, ולכן שפות תכנות עיליות הן שפות נוחות וקלות לשימוש, והן מאפשרות למתכנת לבצע פקודות ותוכניות מורכבות באמצעות פקודות בודדות ופשוטות.

דוגמה לשפות תכנות עיליות: שפת C, שפת C#‎, שפת Java, Pascal ...

דוגמה לפקודה בשפה עילית, למשל:

if(x>0) printf("x is a positive number");

זוהי פקודה בשפת C שמשמעותה: אם המשתנה x גדול מ-0, אז יודפס על מסך המחשב (באמצעות הפקודה printf) המשפט הבא: x is a positive number

אפשר לחלק את שפות התכנות העיליות לשני חלקים:

תכנות פרוצדורלי:

Procedural programming: תכנות פרוצדורלי הוא גישה בתכנות שמגבירה את חלוקת התוכנית (הקוד), על ידי פירוקה וניתוחה לחלקים ולקטעי תכנות, דבר המקל על תחזוקת התוכנית ועל מעקב אחר השינויים בה. יישום גישה זו החל בשנות השישים, 60s, בשפות כמו שפת C ו-Pascal.

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

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

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

תכנות מונחה עצמים:

OOP = Object-Oriented Programming: הן שפות תכנות בגישה שמשתמשת בעצמים כדי לתכנת תוכניות מחשב. בשפות אלה סגנון התכנות מצטיין בקלות החלוקה והפישוט. השפה מתייחסת לעולם כמורכב מעצמים בעלי תכונות ומאפיינים, במבנה היררכי ובקשרים ביניהם. כל עצם תכנותי שייך למחלקה (קבוצה) שיש לה תכונות ופעולות משלה, והיא פועלת כיחידה סגורה, מכומסת ועצמאית.

דוגמה לשפות תכנות מונחות עצמים: Java ו-C#‎.

שפת סף:

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

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

דוגמה לפקודות בשפת סף: כדי לכתוב את הפקודה הפשוטה Z = X + Y;, עלינו לכתוב בשפת סף את הפקודות הבאות:

mov ax, X;
add ax, Y;
mov Z, ax;

שפת מכונה:

Machine Language: היא השפה היחידה שהמעבד מבין ויכול לבצע, ולכן אפשר לקרוא לה שפת המחשב. היא בנויה מ-1 ו-0, ולכן היא שפה קשה לתכנות ולשימוש בידי האדם.

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

דוגמה לפקודה: 1011001110101111

1.4 האלגוריתם, משימות ובעיות אלגוריתמיות

המונח אלגוריתם הוא מונח בסיסי בתכנות.

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

המילים המודגשות בהגדרה שלמעלה הן שלוש תכונות חשובות של אלגוריתם:

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

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

התהליך המתואר באמצעות אלגוריתם נקרא "תהליך אלגוריתמי".

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

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

  1. מלא חצי ליטר מים בקומקום המיועד לקפה.
  2. הדלק את אש כיריים הגז.
  3. הנח את הקומקום המלא במים על האש.
  4. המתן עד שהמים יגיעו לרתיחה ויופיעו בועות.
  5. הוסף כף גדולה של קפה למים הרותחים שבקומקום.
  6. ערבב את תוכן הקומקום במשך דקה.
  7. כבה את אש כיריים הגז.

משימות ובעיות באלגוריתמים:

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

  1. שוט מהגדה A לגדה B עם הכבשה.
  2. שוט מהגדה B לגדה A לבדך.
  3. שוט מהגדה A לגדה B עם הזאב.
  4. שוט מהגדה B לגדה A עם הכבשה.
  5. שוט מהגדה A לגדה B עם הכרוב.
  6. שוט מהגדה B לגדה A לבדך.
  7. שוט מהגדה A לגדה B עם הכבשה.

שאלה 1.1: לדוגמה 1.2 שלמעלה יש פתרונות נוספים. כתוב פתרון אחר לבעיה.
דוגמה 1.3
יש לך שני דליי מים. דלי A יכול להכיל 5 ליטרים של מים, ודלי B יכול להכיל 3 ליטרים של מים. (אין על הדלי סימונים המראים את כמות המים). מותר לך למלא, לרוקן או להעביר מים בין שני הדליים. הנדרש הוא למלא את דלי A בכמות של 4 ליטרים של מים. כתוב אלגוריתם לביצוע המשימה.
פתרון:

  1. מלא את דלי B עד שיתמלא.
  2. העבר את המים מדלי B לדלי A.
  3. מלא את דלי B עד שיתמלא.
  4. העבר את המים מדלי B לדלי A עד שדלי A יתמלא.
  5. רוקן את דלי A.
  6. העבר את המים מדלי B לדלי A.
  7. מלא את דלי B עד שיתמלא.
  8. העבר את המים מדלי B לדלי A.

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

שורה לביצועתוכן דלי Aתוכן דלי B
1. מלא את דלי B עד שיתמלא.03
2. העבר את המים מדלי B לדלי A.30
3. מלא את דלי B עד שיתמלא.33
4. העבר את המים מדלי B לדלי A עד שדלי A יתמלא.51
5. רוקן את דלי A.01
6. העבר את המים מדלי B לדלי A.10
7. מלא את דלי B עד שיתמלא.13
8. העבר את המים מדלי B לדלי A.40
שאלה 1.2: בנה טבלת מעקב כדי להוכיח באמצעותה את נכונות הפתרון שהוצע למשימה שבה נדרש להעביר את הכבשה, הכרוב והזאב מגדת הנהר הראשונה לשנייה באמצעות הסירה.
שאלה 1.3: כתוב אלגוריתם למשימה שבה נדרש ממך למצוא כמה אנשים נמצאים בחדר מסוים.
שאלה 1.4: נתונים שני ארגזים ובהם כדורים זהים, וסכום הכדורים בשני הארגזים הוא מספר זוגי. גם מספר הכדורים בכל ארגז ידוע לך. כתוב אלגוריתם שבאמצעותו תוכל לקבל מספר שווה של כדורים בשני הארגזים על ידי העברת כדורים מארגז לארגז.
המאם ותד (أ. همام وتد) — כל זכויות הספר שמורות למחבר. הספר נכתב בערבית, ותרגם אותו לעברית פהד גאנם. המהדורה העברית מתפרסמת באישור המחבר, עם תיקונים שאישר. ליצירת קשר עם המחבר: hammam4112@gmail.com