קוד זה יגרום להצגת "!Hello World" על המסך ולירידת הסמן לשורה הבאה.
פקודות בסיסיות.
כל בלוק בשפה מתחיל במילה השמורה Begin ויסתיים במילה השמורה End ולאחריה נקודה. הפקודות בשפה מופרדות ביניהן בעזרת נקודה פסיק (כמו שפות רבות אחרות שהושפעו משפת Algol. בשל ההגדרה של הפקודות ב"מופרדות בנקודה פסיק" ולא "מסתיימות בנקודה פסיק", הוספה של נקודה פסיק לאחר הפקודה האחרונה תגרום לשגיאת הידור; מאפיין זה גרר ביקורת רבה. בסופה של התוכנית יש להוסיף תו נקודה במקום נקודה ופסיק. מחרוזת תוקף בגרש (codice_14) יחיד בלבד ולא בגרשיים (codice_15) כפי שמקובל בשפות תכנות אחרות. הערה תוקף בתווים codice_16 בתחילתה והתווים codice_17 בסופה.
הגדרות והכרזות.
קבוע.
כדי להכריז על קטע זיכרון שתוכנו נשאר קבוע במהלך כל התוכנית, יש להשתמש במילה השמורה codice_4. לדוגמה:
Example1 : Boolean = False;
Example2 : Array [3 .. 5] of Char = ('F', 'o', 'o');
משתנה.
מערכת הטיפוסים של השפה היא בעלת טיפוסיות סטטית ובטוחה יחסית, כך שלא ניתן להמיר בין טיפוסי נתונים מובחנים. מאפיין זה סייע להקל על לימוד השפה, אך גרר ביקורת בשל הקושי הרב לבצע פעולות שבשפות אחרות (כגון שפת C) הן קלות לביצוע.
בפסקל ישנם כמה טיפוסי משתנים:
Type StringNine = String [9];
החל מגרסה 7 של טורבו פסקל נוספה מחרוזת "NullTerminated" שגודלה 65,535 תווים.
ההכרזה על משתנה תתבצע באמצעות המילה השמורה codice_6 לפני גוף התוכנית. ניתן לבצע הכרזה והשמת ערך בפקודה אחת, אך יש מהדרים שאינם תומכים באפשרות זו:
Var i : Integer = 0;
מערך.
בפסקל ניתן ליצור מערכים מטיפוסי נתונים שונים כגון מספרים, מחרוזות, מצביעים ואף מבנה רשומות. כדי להכריז על מערך יש לציין את שמו, מספר איבריו וסוג הטיפוס של המערך, למשל, באופן הבא:
Var myArray : Array [0..261] of Char;
ניתן להגדיר טווח של איברי מערך לא רק באמצעות מספרים אלא אף באמצעות תווים. בדוגמה הבאה ייווצר מערך שגודלו יהיה בדיוק מספר האותיות שבא'-ב' הלועזי.
Var aLetters: Array ['A'..'Z'] of Char;
באמצעות התו פסיק ניתן ליצור מערכים רבי ממדים בסוגריים המרובעים שבהם אנו מגדירים את מספר האיברים. בדוגמה הבאה ניתן לראות מערך תלת ממדי המייצג למעשה קובייה.
Var myArray : Array [0..10, 0..10, 0..10] of Char;
לפני השימוש במערך יש לאפס את המערך כדי לנקות אותו ממידע אקראי. כדי לגשת למידע במערך יש להשתמש בסוגריים מרובעים לאחר שם המערך, בהם אינדקס המיוצג על ידי מספר, אות או משתנה.
משתנה מורכב - רשומה.
משתנה מסוג "רשומה" הוא משתנה שמוגדר על ידי המתכנת וכולל צירוף של מספר טיפוסי משתנים ביחד. הוא יכול להכיל בתוכו משתנים רגילים, מערכים ומצביעים. שימושים נפוצים הם במבנה ערכים טבלאי וברשימות מקושרות. הגדרת רשומה נעשית באמצעות המילים השמורות "Record" ו־"End", בתוך קטע הקוד של "Var". לדוגמה:
tW32FindData = Record
iFileAttributes : LongInt;
iCreationTime : Array [0..1] of LongInt;
cFileName : Array [0..261] of Char;
ניתן ליצור מבנה של רשומה דינמית, שבה תתבצע הגדרה דינמית של המשתנים בזמן ריצה, כאשר המשתנים שברשומה ישתנו בהתאם לערכי שדה או שדות אחרים. הדבר נעשה באמצעות פקודת codice_33, בדומה לפקודת Case רגילה, יוכרזו משתנים שונים בכל תנאי, וכך מבנה השדות ישתנה מרשומה לרשומה, לפי הערכים שבפועל קיימים בהם.
ניתן להשתמש במילה codice_34 על מנת לקצר את הגישה במשתנה רשומה ולוותר על הקידומת של שם משתנה הרשומה, כך לאחר פקודת With אפשר לגשת ישירות למשתני הרשומה.
קבוצות.
ניתן ליצור בפסקל אוסף של פריטים מכל סוג שהוא בתוך משתנה יחיד מסוג codice_35. מספר הפריטים המרבי הוא 256. ניתן לבצע פעולות שונות על קבוצות, כמו למשל בדיקה האם קבוצה מכילה או מוכלת בקבוצה אחרת, איחוד, חיסור וחיתוך בין הקבוצות. דוגמה להגדרת קבוצה:
TheSet : SET OF BaseType
TheSet := [Element1, Element2, ... ElementN];
שגרה.
שגרה (פרוצדורה) היא קטע ביצועי שאינו מחזיר ערך. שגרה מוגדרת באמצעות כותרת שבה המילה השמורה codice_8, שם השגרה, שמות וסוג הפרמטרים שהיא מקבלת. לאחר מכן ניתן להגדיר קבועים ומשתנים מקומיים. גוף השגרה תחום באמצעות המילים codice_9 ו־codice_10. לדוגמה:
Procedure PrintManyTimes (t : integer; s : string);
i : Integer;
Begin
For i := 1 To t Do
Writeln (s);
שגרה זו מקבלת מספר (t) ומחרוזת (s). השגרה מדפיסה t פעמים את המחרוזת s.
פונקציה.
פונקציה מוגדרת באמצעות כותרת שבה המילה השמורה codice_7, שם הפונקציה, שמות וסוג הפרמטרים שהיא מקבלת, וסוג תוכן שהיא מחזירה. בדומה לשגרה, לאחר מכן ניתן להגדיר קבועים ומשתנים מקומיים. גוף השגרה תחום באמצעות המילים codice_9 ו־codice_10. עם זאת במהלך התוכנית יש לבצע השמת ערך לשמה של הפונקציה, פעולה שתגרום לפונקציה להחזיר ערך. לדוגמה:
Function Get_NumberCard (Num : Integer) : Integer;
St1 : String;
Number, Code : Integer;
Begin
St1 := Card_GetIdent(C, Num);
St1 := Str_Get(St1, 2, '-');
Val(St1, Number, Code);
Get_NumberCard := Number;
פונקציה זו מקבלת מספר, קוראת בעצמה לפונקציות אחרות (שלא הוגדרו כאן) מהן היא מקבלת מידע, ולבסוף מחזירה מספר.
כתיבה וקריאה.
בפסקל, קלט ופלט אינטראקטיבי (למשתמש וממנו) מבוצע באמצעות השגרות codice_42 ו־codice_12. קיימות גם השגרות codice_44 ו־codice_45, המבצעות ירידת שורה לאחר ביצוע פעולת הכתיבה או הקריאה.
Write('The value of iNum is ', iNum);
השמה.
השמה נעשית באמצעות נקודתיים וסימן שווה ("=:"). כך לדוגמה, codice_48 הוא חיבור המשתנה A והמספר 5 והשמת התוצאה במשתנה X.
מבני בקרה.
תנאי If...Then...Else.
מבנה codice_49 מאפשר לבצע פקודות באופן בררני באמצעות התניה ולבצע הסתעפות של התוכנה לכיוונים שונים. אם התנאי לא התקבל ניתן לבצע פקודה חלופית באמצעות codice_50. ניתן לכתוב תנאי If מקוננים.
If Variable &gt; Value Then
Statement1
Statement2;
אין למקם את סימן הנקודה פסיק לאחר המילה Then או לפני ה-Else. ניתן להשתמש ב-Begin ו-End לשם ביצוע מספר פקודות מותנות (פקודה מורכבת).
תנאי Case...End.
תנאי codice_51 מאפשר ליצור תנאי מרובה על ערכים מטיפוס נתונים סדור מסוג מספרי או Char. היא יכולה לפעול על טווחי ערכים ואף טווחי משנה. בטורבו פסקל נוספה פקודת Else שאינה קיימת בשפה התקנית.
Case Variable of
Value1: Statment1;
Value2: Statment2
Else Statment3;
לולאות.
לולאת For...Do.
לולאת...For היא פקודה מחזורית המורה לבצע קטע קוד מספר פעמים קבוע מראש. בתחילת הפעלתה יש לקבוע את מספר הפעמים שהיא תתבצע. לדוגמה: codice_52. במקרה זה codice_53 הוא המשתנה המונה, והמניה תתבצע מ־1 עד ל־7. כברירת מחדל, פסקל תחזור רק על הפקודה שמיד לאחר הוראת הלולאה, בדומה לתנאי If. כדי לכלול מספר פקודות יש להשתמש במילים codice_9 ו־codice_10.
For i := 1 to 10 Do
Statement1;
לולאת While...Do.
לולאה זו היא פקודה המבצעת את קטע קוד כל עוד תנאי כלשהו מתקיים. היא נחשבת לגמישה יותר מכיוון שהיא יכולה לבחון תנאים שבזמן כתיבת התוכנית אינם ברורים כגון גודל של קובץ.
While Variable &gt; Value Do
Statement1;
לולאת Repeat...Until.
לולאה זו אף היא מתקיימת על פי תנאי. היא דומה ללולאת While...Do וההבדל העיקרי הוא שהתנאי מוערך רק לאחר ביצוע הקוד, ולכן תמיד יתבצע הקוד לפחות פעם אחת. הבדל נוסף הוא שלולאת While ממשיכה לרוץ כל עוד התנאי המוערך מתקיים (כלומר מקבל ערך "TRUE") ואילו לולאת Repeat ממשיכה לרוץ כל עוד התנאי המוערך לא מתקיים (כלומר מקבל ערך "False").
Repeat
Statement1;
Until Variable &gt; Value;
מצביעים והקצאה דינמית.
פסקל תומכת בשימוש במצביעים ובהקצאת זיכרון דינמית. כדי ליצור ולהשתמש במצביעים יש להשתמש באופרטור codice_58. יצירת מצביע נעשית באמצעות שימוש באופרטור ^ בצידו השמאלי של המשתנה המוצבע, ואילו ביצוע פעולת השמה נעשית באמצעות שימוש באופרטור ^ בצידו הימני של המשתנה המצביע.
לדוגמה, כדי להגדיר מבנה ששמו MyRecord ובו שלושה משתנים, כאשר המשתנה RecPtr מצביע אליו, והוא גם משולב כאחד מאיבריו (ליישום של רשימה מקושרת), נכתוב את הקוד הבא:
String20 = String[20];
RecPtr = ^MyRecord;
MyRecord = Record
Name: String20;
Age: integer;
Next: RecPtr
כדי להכריז על משתנה pb, מצביע מסוג MyRecord, יש לכתוב את הקוד הבא:
pb: RecPtr
יצירה של רשומה חדשה וביצוע השמה של שם, גיל ומצביע, כך שהמצביע יצביע לכלום, יש לכתוב את הפקודות הבאות:
New(pb);
pb^.Name := 'Eli Gold';
pb^.Age := 18;
pb^.Next := Nil;
מילים שמורות.
לפי תקן ISO הבסיסי בפסקל קיימות 35 מילים שמורות, לצורך שימושים מיוחדים של השפה כגון מזהים, אופרטורים, קבועים ופקודות תכנותיות. לא ניתן לכנות משתנים בשמות אלה. בתקן המורחב נוספו עוד 13 מילים נוספות.
and | array | begin | case | const | div |do | downto | else | end | file | for | function | goto | if | in | label | mod | nil | not | of | or | packed | procedure | program | record | repeat | set | then
and then | bindable | export | import | module | only | or else | otherwise | pow | protected | qualifed | restricted | value |
הרחבות לפסקל.