1 / 25

תכנות פרוצדורלי - II

תכנות פרוצדורלי - II. מקור: Sethi, R. (1996). Programming Languages concepts & constructs , Addison-Wesley, 2nd Ed. פרדיגמה תכנותית בכלל והפרדיגמה הפרוצדורלית בפרט ניתנת לביטוי באמצעות שפות תכנות שונות. בתרגול זה נסקור שתי שפות אשר שייכות לפרדיגמה פרוצדורלית C ו- Pascal :

Download Presentation

תכנות פרוצדורלי - II

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. תכנות פרוצדורלי - II מקור: Sethi, R. (1996). Programming Languages concepts & constructs, Addison-Wesley, 2nd Ed.

  2. פרדיגמה תכנותית בכלל והפרדיגמה הפרוצדורלית בפרט ניתנת לביטוי באמצעות שפות תכנות שונות. • בתרגול זה נסקור שתי שפות אשר שייכות לפרדיגמה פרוצדורלית C ו- Pascal: • שפת Pascal שהיא strong type language. • שפת C שהיא weak type language.

  3. 1.טיפוסים

  4. C Pascal type conversion character type values -- Boolean true, false int %d integer …-1,0,1,2,… double %f real …, 0.0, ..3.14, … char %c char a,b…!,#,8 7,… char* %s string[<size>] “ hello” unsigned <type> %u short <type> %h<tav-type> long <type> %l<tav-type> טיפוסים בסיסיים -- basic types ניתן להשוות בין ערכים של אותו טיפוס, מותר לרשמם בצד ימין של משפטי השמה, ניתן להעביר אותם כפרמטר.

  5. ב- C: תו המרה/בקרה (conversion character) מציין איך להתייחס לערך הניתן לפונקציות קלט/פלט. • שימו לב: • בשפת Pascal אין תווי המרה. • טיפוסvoid קיים רק ב- C

  6. C Pascal int x; double y = 5.0; char * st = “ entered”; printf(“Enter the number\n”); scanf(“%d”, &x); printf(“%lf”, y); printf(“ %s the number %d \n”, st,x); var x: integer; y: double; st: string[10]; begin y := 5.0 ; st:= ‘entered’; writeln(‘Enter the number’); read(x); writeln(y); writeln(st,’the number’,st,x); דוגמא לשימוש בתווי המרה היא קלט/פלט:

  7. C Pascal typedef enum { Mon,Tue,Wed,Thu,Fri,Sat,Sun } Result type day = (Mon,Tue,Wed,Thu,Fri,Sat,Sun); Mon<Tue< … <Sat<Sun טיפוסים ממוספריםenumerated types • enumerationזוהי קבוצה סופית של פריטים. הפריטים בקבוצה זו ממוינים. • כל הפעולות שניתן לבצע על טיפוסים בסיסיים ניתן לבצע גם על טיפוסים ממוספרים (enumerated types).

  8. С Pascal struct <name> { <type1> name1; <type2> name2; … } record <name1>: <type1> <name2>: <type2> … end טיפוס רשומה

  9. С Pascal struct book { char name[20]; int num[10]; double price; } type book = record name: string[20]; num: array[1..10] of integer; price: real; end struct book b; b: book; רשומות רגילות • רשומות פשוטות הן רשומות המורכבות מטיפוסים פשוטים בלבד.

  10. בשפת C ניתן גם לקצר את תהליך הגדרת המשתנה ע"י שימוש ב - typedef . • לדוגמא: typedef struct Sbook{ …. } book; … book b;

  11. C Pascal typedef struct Snode { int info; struct Snode * next; } node; type link = ↑ node; node = record info : integer; next : link; end; מצביעים • בשפת C ניתן להגדיר מצביע לאותו טיפוס עוד לפני שסיימנו להגדיר אותו. • לעומת זאת בשפת Pascal חייבים להכריז על קיום טיפוס.

  12. גישה לשדות של רשומה • בשפת Pascal ניגשים לשדות של רשומה ע"י " . ↑ ". לדוגמא: b . ↑ price := 5.12 • בשפת C גישה לרשומה תלויה בסוג המשתנה: • אם משתנה הוא מצביע על רשומה אז הגישה לכל השדות היא ע"י ' ' . לדוגמא : b->price = 5.12 • ואם משתנה מכיל רשומה עצמה אז הגישה לכל השדות ע"י ' . '. לדוגמא: b.price = 5.12

  13. Variant Records(רק בשפת Pascal ) type kind = (leaf, unary, binary); type link = ↑ node; node = record c1: integer; c2: real; case k: kind of leaf: (); unary: (child :link); binary: (lchild, rchild: link) end; … var x : node;

  14. 2.      משתנים וטווח חייהם • גלובליים • לוקליים • תחום הגדרה scope

  15. 3.מבני בקרה • תנאים if ...else • בחירה/הסתעפות case... swich • לולאות for, while …

  16. C Pascal <return type> <name> (<parameters>) { body return <something> } function <name> (<parameters>) :<return type> begin body <name> = <something> end פונקציה מחזירה ערך ע"י פקודת return פונקציה מחזירה ערך ע"י פעולת השמה לשם הפונקציה 4.פונקציות • הגדרת פונקציה

  17. פרוצדורות • בשפת C כל הפונקציות מחזירות ערך (גם כשפונקציה מחזירה void פעולה זו נחשבת להחזרת ערך). לעומת זאת בשפתPascal קיימות גם פרוצדורות, כאשר פרוצדורה אינה מחזירה ערך. • דוגמא לפרוצדורה ב Pascal- : procedure print_array ( a: array [1..5] of integer, int n) var i:integer; begin for i:=1 to 5 do writeln (a[i]); end

  18. העברת פרמטרים • העברת פרמטרים לפונקציות by value • לפונקציה/לפרצדורה מועברים רק ערכים של פרמטרים. • אין תופעות לוואי side-effect – פונקציה לא יכולה לשנות ערכים של משתנים שאינם מוגדרים בה. העברת פרמטרים by reference • לפונקציה/לפרצדורה מועברות כתובות. • פונקציה יכולה לגרום תופעות לוואי side-effect – לאחר ריצה של פונקציה ערכי משתנים שאינן מוגדרים בה יכולים להשתנות.

  19. C Pascal void swap (int* x, int * y) {int tmp; tmp:= *x ; *x:=*y ; *y:=tmp; } procedure swap (var x:integer; var y:integer) var tmp :integer; begin tmp:=x ; x:=y ; y:=tmp; End { int x,y; x = 5; y= 6; swap (&x, &y); } var x,y: integer; begin x := 5; y := 6; swap (x,y); End

  20. Pascal С 1) 2) a: array[1..10] of integer; b: array [2 .. 7] of integer; int a [10]; 5.מבני נתונים - מערך חד-ממדי • בשפת פסקל ניתן להגדיר תחום של מערך, במילים אחרות אינדקס התחלה ואינדקס סיום. • לעומת זאת בשפת C ניתן לציין גודל בלבד. אינדקס התחלה תמיד יהיה 0, ואינדקס סיום יהיה < 1-גודל> . • בשתי השפות הגישה לתא של מערך מתבצעת באמצעות ציון האינדקס בין סוגריים [ ]. לדוגמא: a[5].

  21. Static vs Dinamic Array bounds • בשפת Pascal אינדקס של מערך לא חייב להיות מספר A : array[char] of int; A[‘+’] = 3; • בשפת Pascal טיפוס המערך של 10 מספרים שונה מטיפוס המערך של 100 מספרים. האם לדעתכם זה בעיה? ואם כן למה?

  22. קבוצה set type • ב- Pascal ניתן להגדיר מבני נתונים קבוצה (set) ע"י ציון רשימת איבריה בין סוגריים [ ] . כל איברי הקבוצה חייבים להיות בעלי אותו טיפוס. בשפת C אין טיפוס כזה. • דוגמאות לקבוצות: • [ ] • [ `0`…`9`] • [`a`…`z`,`A`…`Z`]

  23. פעולה משמעות + set union A  B - set difference A-B = { x | x A and x B } * set intersection A  B / symmetric difference (A-B)  (B-A) =, , ,  comparing operators הגדרת קבוצה: • A יכול להיות: [ ], [1], [2], [3], [1,2], [1,3], [2,3], [1,2,3] • פעולות:

  24. Pascal С 1) 2) a: array[1..10][1..20] of integer; b: array [2..7][3..5] of integer; int a [10][20]; מערך דו-ממדי (מטריצה) • בהגדרת מטריצה הפרמטר הראשון מציין מספר שורות, והפרמטר שני מציין את מספר העמודות. כלומר: • בדוגמה (1) הגדרנו מטריצה בגודל 10x20 (10 שורות, ו20 עמודות); • ובדוגמא (2) הגדרנו מטריצה בעלת 5 שורות (שורה ראשונה אינדקס 2, שורה אחרונה אינדקס 7)ו- 3 עמודות (עמודה ראשונה אינדקס 3, עמודה אחרונה אינדקס 5). • בשתי השפות הגישה לתא של מטריצה מתבצעת באמצעות ציון אינדקסים בין סוגריים [ ]: קודם אינדקס שורה ואחרי זה אינדקס עמודה.

  25. Pascal С a: array[1..5][1..6][1..3] of integer; int a [5][6][3]; a: array[1..1][1..2]… [1..n] of integer; int a [1][2]…[n] מערך רב-ממדי • בשתי שפות ניתן להגדיר מערכים רב-ממדיים.

More Related