|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
קורס:"שפת C"
מתוך הספר: C - מדריך מקצועי
מערכת המחשבמחשב הוא מערכת אלקטרונית היכולה לקרוא נתונים ממקור קלט כלשהו, לעבד אותו ולהציג כפלט את תוצאת העיבוד. העיבוד במחשב מבוצע ע"י תכניות הכתובות בשפה המובנת על ידו. מערכת המחשב כוללת חומרה ותוכנה : החומרה היא אוסף רכיבים אלקטרוניים ומכניים הפועלים במשולב, כשבמרכזם יחידת העיבוד המרכזית - המעבד. התוכנה במחשב כוללת את מערכת ההפעלה ותוכניות משתמש. מערכת ההפעלה היא תוכנה המנהלת את החומרה ומספקת ממשק לתפעול המחשב בכללותו. תוכניות המשתמש על סוגיהן מורצות מעל מערכת ההפעלה:
חומרת המחשבהמחשב כולל מספר יחידות חומרה:
תרשים לוגי:
כפי שניתן לראות בתרשים, המעבד מתקשר עם רכיבי החומרה באמצעות אפיק הכתובות (Address Bus) ואפיק הנתונים (Data Bus). קווי בקרה נוספים משמשים לתזמון ולבקרת הרכיבים לצורך פעולה משולבת. על מנת להפעיל את היחידות הנ"ל ולארגן אותן לפעול במשולב מכיל המחשב בנוסף:
מערכת ההפעלהמערכת ההפעלה היא תוכנה המפעילה את ציוד המחשב ומספקת שירותים שונים למשתמש כגון: ניהול מערכת הקבצים, ניהול הזיכרון הראשי, הרצת וניהול תכניות ועוד. התרשים הלוגי הבא מתאר את מיקומה ותפקידה של מערכת ההפעלה במחשב:
מרכיבי מערכת ההפעלה
מבנה המעבד (CPU)המעבד הוא שם מקוצר ליחידת העיבוד המרכזית (CPU, Central Processing Unit) המפעילה ומנהלת את מכלול החומרה שבמחשב:
המעבד מורכב ממספר יחידות בסיסיות:
כפי שצוין קודם, אפיק הכתובות (Address Bus) ואפיק הנתונים (Data Bus) ביחד עם קווי הבקרה הם הקשר של המעבד לעולם החיצון, כלומר, לרכיבי החומרה שבמערכת. נסקור כעת את מרכיבי המעבד, את תפקידיהם וכיצד הם פועלים במשולב. יחידה חשבונית-לוגיתיחידה זו היא לב המעבד: היא מבצעת את הפעולות החשבוניות (חיבור, חיסור, כפל וחילוק) ואת פעולות ההשוואה הלוגיות (קטן מ-, גדול מ-, שווה ל-) הנדרשות בביצוע תכנית מחשב. פעולות מורכבות כגון חזקה או חישוב תנאי מורכב נפרטות להוראות החשבוניות/לוגיות הבסיסיות יותר. מעבדים מודרניים כוללים כיום תתי-יחידות המבצעות פעולות חשבוניות הן בשלמים והן בממשיים. לדוגמא, מסכם (Adder) היא תת-יחידה המבצעת חיבור של שני מספרים, ומכפל (Multiplier) היא תת-יחידה במעבד המבצעת כפל בין שני מספרים. אנו נבחן כעת את יחידת המסכם שבמעבד מכיוון שהיא שימושית הן לביצוע פעולות חיבור/חיסור, הן לביצוע של פעולות הכפלה (ע"י חיבור חוזר כמספר הכופל) והן לביצוע פעולות לוגיות. מבנה המסכם (Adder)המסכם מקבל בשתי כניסותיו שני מספרים, מחשב את סכומם ומציב אותו באוגר תוצאה במוצא שלו: יחידה זו מאפשרת למעבד לבצע פעולת חיבור בין 2 מספרים. באמצעותה ניתן גם לממש חיסור וכפל:
אוגרים כלליים (General Purpose Registers)האוגרים הכלליים הם רכיבים אלקטרוניים המשמשים לאחסנת מספרים לשם ביצוע חישובים שונים. כל אוגר מכיל מספר מסוים של סיביות שתלוי בסוג המחשב. לדוגמא, מערכת הכוללת 4 רגיסטרים - A,B,C,D:
ערכה של כל אחת מסיביותיו של כל רגיסטר יכול להיות "0" או "1". אוגר מצב (Status Register)באוגר זה מוצב בכל רגע נתון מצב המעבד לאחר הפעולה החשבונית/לוגית האחרונה:
אוגר זה מתאר בכל אחת מהסיביות שבו את התכונות של התוצאה שהתקבלה במסכם. כל סיבית מתארת מצב פעולה מסוים:
דוגמא לתרגום קטע תוכנית במעבד: if X==Y ... חישוב ביטוי לוגיביטוי לוגי הוא ביטוי שתוצאתו היא "אמת" (True) או "שקר" (False). דוגמאות:
שאלה: כיצד המעבד בודק האם X == Y? 1) המעבד מבצע חיסור של Y מ- X : (אפשר גם להפך)
2) המעבד בודק את סיבית Z שבאוגר המצב:
בדומה, הבדיקה האם X > Y מבוצעת כך: 1) המעבד מבצע חיסור של Y מ- X :
2) המעבד בודק את סיביות Z ו- N שבאוגר המצב:
תרגיל: כיצד יבדוק המעבד את ערכו של הביטוי הבוליאני X >= Y ?מבנה הוראת מכונהתכניות מתורגמות ע"י המהדר לשפת מכונה. שפת מכונה מורכבת מסדרת הוראות מכונה המבוצעות בזו אחר זו לפי הסדר המוכתב ע"י התוכנית. בדוגמאות הבאות נניח שנתון מעבד עם שפת מכונה שבה הוראות בעלות שלושה מרכיבים :
דוגמאות1. נניח שפעולת החיבור בעלת קוד 5, ונניח שאנו רוצים להוסיף לתוכן אוגר B את הערך 3: B¬B+3. ההוראה בשפת מכונה :
2. נניח שקוד פעולת החיסור הוא 8. לביצוע 6 - A תבוצע הוראת המכונה:
3. נניח שפעולת ההעתקה/הצבה בעלת קוד 6. אנו רוצים לבצע את הפעולה C¬A.
4. נדרש לבצע 2 פקודות: הוספת 21 לתוכן אוגר A : A¬A + 21. העתקת תוכן אוגר A לאוגר C : C¬A. ההוראות:
תרגולקרא/י סעיף זה בספר ובצע/י את תר' 1-3 שבעמ 9. אוגר מצביע ההוראות (Instruction Pointer)אוגר מצביע ההוראות מציין מהי ההוראה הבאה בתור לביצוע. בדרך כלל ההוראות מבוצעות לפי סדר הופעתן, אולם ייתכנו דילוגים (ע"י הוראות דילוג) לכתובות כלשהן. מצביע ההוראות מכיל את כתובתם בזיכרון (ראה/י להלן). לדוגמא, נניח שגודל כל הוראה בזיכרון הוא 12 בתים (כלומר 4 בתים לאופקוד, ו- 4 בתים לכל אופרנד). הוראות שפת המכונה בזיכרון יכולות להיראות כך:
ה- IP הוא הערך שבעמודה השמאלית, והוא מכיל את כתובות ההוראות בזיכרון. באמצעות ה-IP מיישמים דילוג (jump) לכתובת לא עוקבת. יחידת הבקרה (Control Unit)יחידת הבקרה מכוונת ומתזמנת את פעולת היחידות השונות במעבד. היא מבצעת זאת ע"י שליחת וקבלת אותות אל/מהיחידות: ביחידת הבקרה נמצא המפענח - אחראי לתרגום פקודת המכונה לרצף של אותות בקרה ליחידות המתאימות במעבד, המחוללים את ביצוע הפקודה בפועל. הזיכרון (Memory)הזיכרון הוא אוסף של תאים שבהם נמצא קוד התכנית לביצוע, ערכי הנתונים ומידע נוסף. לכל תא בזיכרון יש כתובת (Address) ודרכה טוענים אותו למעבד. על מנת לטעון נתון מהזיכרון, המעבד כותב באפיק הכתובות (Address Bus) את כתובתו, וכתוצאה מכך הנתון נטען לאפיק הנתונים (Data Bus):
בדוגמא שבתרשים, ההנחה היא שכל מרכיב בהוראה - קוד ההוראה, הנתון הראשון והנתון השני - הם כל אחד בגודל 4 בתים. לכן כל הוראה תופסת 12 בתים בזיכרון. כאשר יש צורך בביצוע הוראה מסוימת, יחידת הבקרה שבמעבד מעבירה על אפיק הכתובות את כתובת ההוראה לביצוע, ובתגובה, יחידת הזיכרון טוענת לאפיק הנתונים את ההוראה המתאימה. המעבד אז קורא את ההוראה מאפיק הנתונים ומבצע אותה. לדוגמא, נניח שהמעבד סיים לבצע את ההוראה שבכתובת 1012:
בכדי לבצע את ההוראה הבאה, נדרשות 3 טעינות של נתונים מהזיכרון:
ולאחר טעינת כל שלושת מרכיבי ההוראה, המעבד מוכן לבצעה:
קטע הנתונים (Data Segment) וקטע קוד התוכנית (Code Segment)תוכניות מחשב מחולקות לשני קטעים עיקריים: קטע הנתונים וקטע קוד התכנית. כאשר תכנית נטענת לזיכרון לצורך ביצוע, מוקצים לה שני קטעי זיכרון עבור הנתונים ועבור הוראות התכנית. דוגמא לתכנית:
התכנית כוללת שני משתנים בקטע הנתונים, var1 ו- var2 - אלו הם שני שמות שניתנו ע"י כותב/ת התכנית. הם מייצגים תאים בזיכרון שניתן לכתוב אליהם ולקרוא את ערכם.
לדוגמא, בביצוע ההוראה המתחילה מכתובת 1024, המעבד מבצע פעולת החסרה של var1 מ- var2 ומציב את התוצאה ב- var2:
לצורך ביצוע הוראה זו, על המעבד ראשית להביא את ערכם של המשתנים var1 ו- var2 מקטע הנתונים שבזיכרון, לבצע את החישוב ולאחר מכן לעדכן את ערכו של var2 ע"י כתיבתו לזיכרון. סדרת הפעולות הנדרשת היא לכן:
הסבר: המעבד קורא את ראשית את קוד ההוראה, 8, המציין פעולת חיסור. לאחר מכן, הוא קורא את הנתון הראשון, var2, שהוא כתובת של תא בקטע הנתונים, כתובת 744. מכיוון שכך, המעבד מעביר הוראת קריאה נוספת של הנתון עצמו היושב בכתובת 744, הערך 47. באופן דומה נקרא ערכו של המשתנה var1 מכתובת 740. לאחר השלמת קריאת ערכי האופרנדים של ההוראה, היא מבוצעת: var2¬ var2 - var1, כלומר, var2 מקבל את הערך 35. לכן הפעולה האחרונה של המעבד היא אחסון התוצאה בכתובת המשתנה var2, כלומר בכתובת 744. רכיבי קלט פלטבנוסף לגישה לזיכרון, המעבד יכול לפנות לרכיבי קלט פלט. לדוגמא, תכנית מחשב טיפוסית יכולה לבצע קריאה של ערך נתון בזיכרון ע"י קלט מהמקלדת, לבצע אתו חישוב מסוים ולהדפיסו כפלט למסך. אלו רק שתי דוגמאות להתקני קלט/פלט: מרכיבים שכיחים נוספים הם כונן קשיח, כונן דיסקטים, כונן תקליטורים, מודם:
לשם ביצוע קלט/פלט , בדומה לגישה לזיכרון, המעבד מעביר על אפיק הכתובות את "כתובת" רכיב הקלט/פלט שאליו הוא פונה. אם לדוגמא נדרש לקרוא נתון מהמקלדת, וכתובת המקלדת היא 5056, המעבד יציב כתובת זו על אפיק הכתובות, ובתגובה רכיב החומרה שבמקלדת יעביר את הנתון שהקליד המשתמש על אפיק הנתונים. באופן דומה, אם כתובת המסך היא 5057, המעבד ידפיס נתון למסך ע"י הצבת הנתון על אפיק הנתונים והצבת הכתובת 5057 על אפיק הכתובות. תכנית הדוגמא הבאה קוראת מהמקלדת (כתובת 5056) ע"י הוראת קליטה (קוד 30) לרגיסטר A, לאחר מכן מכפילה אותו ב- 2 ע"י הוראת חיבור עצמי (קוד 5), ולבסוף מדפיסה אותו למסך ע"י הוראת הדפסה (קוד 31):
המבנה הכולל של המעבד, הזיכרון והתקני הקלט/פלטלסיכום, התרשים הבא מציג את המבנה הכולל של כל מרכיבי מערכת המחשב שהכרנו: המעבד, הזיכרון והתקני הקלט/פלט:
תרגולקרא/י סעיף זה בספר ובצע/י את תר' 1-2 שבעמ' 14.
שפת אסמבלרמכיוון שקשה לבני אדם להבין את שפת המכונה, קיים ייצוג שמי של הוראות המכונה בשפה הנקראת אסמבלר: בשפה זו יש שמות לפקודות השונות, וכך הן הופכות למובנות לעין האנושית. לדוגמא, שפת אסמבלר מתאימה לדוגמאות שלעיל, תספק שמות לפקודות:
כמו כן, ניתנים שמות להתקני הקלט פלט: לדוגמא, התקן המקלדת ייקרא keyboard והתקן המסך screen. תכנית אסמבלר לדוגמא תראה כך: _DATA data1 = 13 data2 = 6
_CODE add data2, data1 move A, data2 in keyboard, B sub A, B out screen, A
הסבר: בתכנית האסמבלר מוגדרים שני קטעי התכנית - תחילת קטע הנתונים מצוינת ע"י _DATA ותחילת קטע קוד התכנית ע"י _CODE. בקטע הנתונים מוגדרים שני משתנים עם ערכים התחלתיים, ובקטע הקוד הוראות בשפת אסמבלר. קרא/י סעיף זה בספר ובצע/י את התרגיל שבעמ' 15. מבוא לחשבון בינרייחידת המידע הבסיסית במחשב היא סיבית (Bit). ערכה של הסיבית יכול להיות 0 או 1. יחידת המידע בית (Byte) היא סידרה של 8 סיביות מקובצות יחדיו. לדוגמא:
יחידת המידע מילה (Word) היא בעלת גודל משתנה ממחשב למחשב. גדלים מקובלים הם 2 בתים (16 סיביות), 4 בתים (32 סיביות) ויש מחשבים בעלי מילה באורך 8 בתים (64 סיביות). כמה ערכים ניתן לייצג ע"י בית?
באופן כללי, ב- n סיביות ניתן לייצג 2n ערכים. בהתאם לכך, ב- 8 סיביות ניתן לייצג 28 ערכים, כלומר 256. יחידות בתים: KB, MB ו- GBערך החזקה 2n כאשר n=10, 20, 30, 40 ... הוא קרוב למספר עשרוני בכפולות של 10, ונהוג לתת שמות מקוצרים לערכים אלו. דוגמאות:
יחידות אלו מקילות בהתייחסות לערכים גדולים של חזקות של 2. לדוגמא, החזקה 214 ניתנת לביטוי פשוט כ- 24
ייצוג מספרים עשרוניכיצד אנחנו מייצגים מספר עשרוני? נרשום את ערך המספר 1692 כסכום של ערכים בחזקות של 10: 1692 = 1*1000 + 6*100 + 9*10 + 2*1 = 1*103 + 6*102 + 9*101 + 2*100 בייצוג העשרוני קיימות 10 ספרות 9 ...2, 1, 0 לכן אנו אומרים שהן מיוצגות בבסיס 10. מיקומה של ספרה במספר קובע את הערך שהיא מייצגת בו. חיבור מספרים עשרוניים מבוצע כך:
ייצוג מספרים בינריבייצוג בינרי קיימות רק 2 ספרות לכן נאמר שהן מיוצגות בבסיס 2. לדוגמא, המספרים הבאים הם בינריים: 1, 101, 100100, 1111001001 כיצד מתורגם מספר בינרי למספר עשרוני? ניקח לדוגמא את המספר הבינרי 0110: 0110 = 0*23 + 1*22 + 1*21 + 0*20 = 0 + 4 + 2 + 0 = 6 כלומר 01102 = 610 תרגולקרא/י סעיף זה בספר ובצע/י את תר' 1-6 שבעמ' 18.
חיבור מספרים בינרייםנרשום את הערך העשרוני של כל המספרים המיוצגים ע"י מספר בינרי בעל 4 ספרות:
כללי החיבור בבסיס 2 :
חיבור מספרים בינריים מבוצע בדומה לחיבור מספרים עשרוניים:
הפיכה מייצוג עשרוני לייצוג בינריכדי להפוך מספר המיוצג בשיטה העשרונית למספר בייצוג בינרי צריך לבצע את התהליך הבא: 1. נתון המספר העשרוני X. 2. חלק את X ב- 2 ורשום את השארית. 3. חלק את המנה שהתקבלה ב- 2 ורשום את השארית החדשה. 4. חזור על פעולה 3 עד לקבלת מנה 0. 5. המספר בייצוג בינרי הוא סידרת השאריות בסדר כתיבה הפוך. לדוגמא, נמיר את המספר העשרוני 137 למספר בינרי:
המספר הבינרי שהתקבל: 10001001 תרגולקרא/י סעיף זה בספר ובצע/י את תר' 1-4 שבעמ' 19. ייצוג מספרים שליליים בשיטת משלים ל- 2 (Two's Complement)בייצוג עשרוני מסמנים מספר שלילי ע"י סימן "-". בייצוג בינרי מסמנים מספר בינרי ע"י הספרה השמאלית ביותר של הנתון : אם היא 0 - המספר חיובי, 1 - שלילי. דוגמא: מספר חיובי - 0 1 1 0 1 1 0 0 מספר שלילי - 0 1 1 1 0 1 1 1 מובן שטווח המספרים הניתנים לייצוג כאשר סיבית אחת מוקדשת לסימן קטן פי 2. לדוגמא, כפי שראינו, מספר הערכים הניתנים לייצוג ע"י בית (8 סיביות) הוא 28=256 עבור מספרים חיוביים, אולם אם נרצה לשריין מקום לסיבית הסימן, יקטן מספר הערכים פי 2 ל- 27=128. קיימות מספר שיטות לייצוג מספרים שליליים: השיטה המקובלת נקראת "משלים ל- 2" (Two's complement). בשיטה זו, נניח שאנו רוצים לכתוב בייצוג בינרי את המספר השלילי -33 (ייצוג עשרוני):
התקבל המספר השלילי המבוקש בשיטת "משלים ל- 2". כלומר, בכדי לקבל ייצוג של מספר שלילי יש לרשום אותו תחילה בבסיס בינרי כחיובי, להפוך כל סיבית, ולבסוף להוסיף 1. תכונות של מספרים בינרייםהגדרות:
תכונות:
אם נזיז את כל הסיביות של מספר בינרי שמאלה מקום אחד ונוסיף סיבית 0 מימין, יהיה ערך המספר הבינרי המתקבל גדול פי- 2 מערכו המקורי. לעומת זאת, הזזה ימינה במקום אחד מהווה חילוק ב- 2 (חילוק שלם, ללא שארית). פעולה זו על סיביות נקראת הזזה (SHIFT). דוגמאות: הזזת המספר 0010 = 2 מקום אחד שמאלה תיתן את הערך: 0100 = 4 הזזת המספר 0101 = 5 מקום אחד ימינה תיתן את הערך: 0010 = 2 באופן כללי, הזזה של סיביות מספר בינרי n מקומות שמאלה שקולה לכפלה ב- 2n, ואילו הזזה ימינה n סיביות שקולה לחילוק ב- 2n. דוגמאות: הזזת המספר 00000100 = 4 שלושה מקומות שמאלה תיתן את הערך: 00100000 = 32 הזזת המספר 00001101 = D שלושה מקומות ימינה תיתן את הערך: 00000001 = 1 ייצוג מספרים הקסה-דצימלי (בסיס 16)השימוש במספרים בייצוג בינרי מסורבל וקשה להבנה. נעזרים בייצוג הקסה-דצימלי (בסיס 16) המתאים לבסיס הבינרי. הספרות בבסיס 16 : 9 - 0 - כמו בייצוג עשרוני. A - בייצוג עשרוני ערך 10. B - בייצוג עשרוני ערך 11. C - בייצוג עשרוני ערך 12. D - בייצוג עשרוני ערך 13. E - בייצוג עשרוני ערך 14. F - בייצוג עשרוני ערך 15. כל ספרה הקסה-דצימלית מתאימה ל- 4 ספרות בינריות:
בהתאם לכך, בית מיוצג ע"י 2 ספרות הקסה-דצימליות. לדוגמא : נתון בית בייצוג הקסה-דצימלי: B9. מהו המספר בייצוג בינרי? תשובה: 9 הוא בעל ערך 1001 , B הוא בעל ערך 1011, ולכן ערך הבית 10111001. כפי שניתן לראות, ההמרה בין הבסיסים הבינרי וההקסה-דצימלי היא ישירה. המרה בין בסיסים דצימלי והקסה-דצימליההמרה בין ייצוג הקסה-דצימלי לייצוג עשרוני זהה להמרה בין הייצוג הבינרי לעשרוני.
1F3416 = 1*163 + 15*162 + 3*161 + 4*160 = 1*4096 + 15*256 + 3*16 + 4*1 = 798810
חיבור מספרים הקסה דצימלייםחיבור מספרים הקסה דצימליים מבוצע בדומה לבסיסים אחרים (דצימלי ובינרי), כאשר בבסיס 16 יש לקחת בחשבון את הספרות 0-F. דוגמאות לחיבור מספרים חד ספרתיים: F + 1 = 10 8 + 7 = F F + F = 1E דוגמאות לחיבור מספרים רב ספרתיים: 1.
2.
תרגולקרא/י סעיף זה בספר ובצע/י את תר' 1-4 שבעמ' 23.
ייצוג מספרים אוקטלי (בסיס 8)בייצוג אוקטלי המספרים הם בבסיס 8, והם כוללים את הספרות 0..7. בדומה למספרים בבסיס הקסה-דצימלי, ספרות בסיס 8 מתאימות למספרים בינריים בני 3 סיביות. דוגמאות: 78 = 1112 = 710 108 = 001 0002 = 810 128 = 001 0102 = 1010 ההמרות בין הבסיס האוקטלי והבסיסים הקודמים הן בדומה לבסיסים האחרים. יצירת תכנית מחשבתכניות הרצות על מחשב מסוים כתובות בשפת מכונה, כלומר בשפה המובנת ע"י המעבד המסוים שבלב המחשב. שפת המכונה מורכבת מאוסף הוראות הכתובות כקודים בינריים - כלומר בבסיס 2 - והיא כוללת אפשרויות לגישה לנתונים בזיכרון, ביצוע פעולות חישוב חשבוניות ולוגיות וכן גישה להתקני הקלט/פלט השונים במחשב:
מכיוון ששפת המכונה קשה להבנה ע"י בני אדם, הוגדרו שפות תכנות עיליות הדומות לשפת אנוש: אלה כתובות באופן טקסטואלי, וכוללות הוראות נוחות לקריאת נתונים מהקלט, הגדרת משתנים בזיכרון, ביצוע פעולות חשבוניות ולוגיות, הדפסת נתונים לפלט וכו'. לדוגמא, התכנית לעיל תיכתב כך בשפה עילית:
תכנית בשפה עילית נכתבת ע"י עורך (Editor) לקובץ. בדרך כלל מותאמת תכנית העורך במיוחד לשפה ומסייעת בכתיבת תכניות ע"י מתן עזרה מקוונת לשפת התכנות, סימון מרכיבים שונים בשפה בצבעים מיוחדים וכו'. תכניות הכתובות בשפות התכנות העיליות מתורגמות לשפת המכונה ע"י מהדר (Compiler): מהדר הוא בעצמו תכנית מחשב הקוראת תכנית שפה עלית מהקובץ בו היא כתובה - קובץ המקור - ומתרגמת אותה לשפת מכונה. התכנית המתורגמת נשמרת לקובץ הנקרא קובץ ביצוע. התרשים הבא מתאר מהלך יצירה של תכנית - עריכה, שמירה לקובץ, טעינה לזיכרון והידור:
בדרך כלל העורך והמהדר - ביחד עם כלי פיתוח נוספים - כלולים בסביבת פיתוח משולבת (IDE, Integrated Development Environment) המאפשרת הפעלת הוראות כמו הידור, הרצה וניפוי ע"י ממשק משתמש גרפי ידידותי. סביבת הפיתוח מאפשרת גם ארגון קבצי תכניות בפרוייקטים, קביעת מאפייני עריכה והידור, שמירת תכניות לקבצים ועוד. אלגוריתמיםאלגוריתם הוא סדרה של הוראות מדויקות לביצוע משימה נתונה. הוראות האלגוריתם חייבות להיות מובנות וחד-משמעיות למי שאמור לבצע אותו. לדוגמא, נניח שבבעלותנו פיצרייה, וקיבלנו הזמנה טלפונית למשלוח פיצה ללקוח בכתובת מסוימת. ההוראות לשליח עם קטנוע יהיו:
מכיוון שהשליח מבין כל אחת מההוראות והן חד-משמעיות הוא יבצען ללא קושי. לעומתו, מורה לנהיגה על קטנוע לא ייתן לתלמיד בשיעורו הראשון את ההוראה "סע לכתובת זו" מכיוון שהתלמיד לא יודע כיצד לבצע זאת. הוא ייתן לו סדרת הוראות לביצוע תת-משימה זו:
באופן דומה, בהגדרת אלגוריתם ליצירת תכנית מחשב יש לקחת בחשבון אילו הוראות בסיסיות קיימות בשפת התכנות המיועדת. אלגוריתמים כתכנון תכנית מחשבאלגוריתמים משמשים להגדרה מקדימה, לפני כתיבת תכנית המחשב, למשימה הנדרשת לביצוע. את הוראות האלגוריתם ניתן לרשום באופן טקסטואלי, בדומה להכנת מתכון לבישול, ע"י תרשים זרימה, או בכל צורה אחרת. לדוגמא, נתונה המשימה הבאה:
ננסה להגדיר את האלגוריתם לביצוע המשימה:
האם האלגוריתם מוביל לביצוע המשימה? ראשית, נבדוק אם הוראותיו מובנות בשפת התכנות המיועדת:
ונגדיר את ההוראה במפורט:
נכתוב שוב את האלגוריתם במלואו:
תרשים האלגוריתם:
האם הוראות האלגוריתם הן חד-משמעיות? התשובה לכך שוב תלויה בשפת התכנות: בהגדרת המשתנים לא צוין סוג המספר - ממשי או שלם - ולכן היא איננה חד-משמעית בשפת תכנות המפרידה בין טיפוס מספרים שלם לבין ממשי. נכתוב שוב את האלגוריתם, תוך ציון הטיפוס המספרי של המשתנים: משתני הקלט יהיו ממשפחת השלמים. משתנה התוצאה, avg, צריך להיות ממשי מכיוון שהוא מכיל ממוצע, וזה בדרך כלל אינו ערך שלם.
כעת האלגוריתם מוגדר היטב עבור שפות תכנות עיליות. בפרק הבא נממש את האלגוריתם בשפת C. מבוא לשפת Cשפת C היא אחת השפות הנפוצות ביותר בעולם התוכנה מזה כשלושה עשורים. חברות הייטק ואנשי תוכנה רבים בכל העולם עדיין משתמשים בה כשפה עיקרית לפיתוח. מבין כל שפות התכנות הקיימות בעולם, לשפת C מספר המהדרים הרב ביותר למגוון מערכות, החל ממחשבי Unix, PC, Mainframe וכלה במערכות זמן אמת. אחד מענפי שוק ההייטק הנשלט עדיין ברובו ע"י שפת C הוא שוק המערכות משובצות המחשב. בין המערכות הרבות השייכות לקטגוריה זו:
בעשורים האחרונים פותחו גישות תוכנה שונות מהגישה הפרוצדורלית, כאשר הבולטת מביניהן היא הגישה מונחית העצמים. חלוצת הגישה היא שפת C++ שהינה הרחבה של שפת C, ובעיקבותיה התפתחה גם Java. מכיוון ש- C++ היא הרחבה של C, שפת C היא קדם ללימוד שפת C++. כיום, מרבית המהדרים של שפת C הם גם מהדרים של שפת C++. משום כך, ניתן ורצוי לנצל שיפורים שהוכנסו לשפה ב- C++ ולכתוב תכניות בשפת C משופרת. בהמשך נציין בכל מקום את השיפורים המתאימים ב- C++. בכדי לנצל את השיפורים, יש להגדיר למהדר שקובץ המקור הוא קובץ C++ - זה מבוצע בדרך כלל ע"י מתן סיומת מתאימה לקובץ (.cpp ב- Windows ו- .cc ב- Unix/Linux), או ע"י קביעת האופציה המתאימה בסביבת הפיתוח. רקע היסטורישפת C פותחה בראשית שנות ה- 70 ע"י דניס ריצ'י. היא מבוססת על השפות הקודמות B (קן תומפסון) ו- BCPL (מרטין ריצ'רדס) ומכאן קיבלה את שמה. שפת C נוצרה כאמצעי לפיתוח מערכת ההפעלה Unix. לשפת C הוגדר תקן ע"י מכון התקנים האמריקאי ANSI מספר כללים בתקן שונים מההגדרה הראשונית של השפה. רוב המהדרים כיום מותאמים לתקן זה (ANSI-C) מה שמאפשר העברת תכניות הכתובות בשפת C ממערכת אחת לאחרת במינימום שינויים.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||