Download - תכנות פרוצדורלי - II
![Page 1: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/1.jpg)
II - תכנות פרוצדורלי
:מקור
Sethi, R. (1996). Programming Languages concepts & constructs, Addison-Wesley, 2nd Ed.
![Page 2: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/2.jpg)
פרדיגמה תכנותית בכלל והפרדיגמה הפרוצדורלית בפרטניתנת לביטוי באמצעות שפות תכנות שונות.
בתרגול זה נסקור שתי שפות אשר שייכות לפרדיגמה:Pascal ו- Cפרוצדורלית
שפתPascal שהיא strong type language. שפתC שהיא weak type language.
![Page 3: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/3.jpg)
טיפוסים .1
![Page 4: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/4.jpg)
basic typesטיפוסים בסיסיים -- ניתן להשוות בין ערכים של אותו טיפוס, מותר לרשמם בצד ימין של
משפטי השמה, ניתן להעביר אותם כפרמטר.
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>
![Page 5: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/5.jpg)
-בC( תו המרה/בקרה :conversion character מציין )איך להתייחס לערך הניתן לפונקציות קלט/פלט.
:שימו לב בשפתPascal.אין תווי המרה טיפוס void -קיים רק בC
![Page 6: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/6.jpg)
דוגמא לשימוש בתווי המרה היא קלט/פלט:
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];beginy := 5.0 ; st:= ‘entered’;writeln(‘Enter the number’);read(x);writeln(y);writeln(st,’the number’,st,x);
![Page 7: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/7.jpg)
טיפוסים ממוספרים enumerated types enumeration זוהי קבוצה סופית של פריטים. הפריטים
בקבוצה זו ממוינים. כל הפעולות שניתן לבצע על טיפוסים בסיסיים ניתן
(.enumerated typesלבצע גם על טיפוסים ממוספרים )
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
![Page 8: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/8.jpg)
טיפוס רשומה
С Pascal
struct <name> { <type1> name1; <type2> name2; …}
record <name1>: <type1> <name2>: <type2> …end
![Page 9: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/9.jpg)
רשומות רגילות רשומות פשוטות הן רשומות המורכבות מטיפוסים
פשוטים בלבד.С 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;
![Page 10: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/10.jpg)
בשפתC ניתן גם לקצר את תהליך הגדרת .typedefהמשתנה ע"י שימוש ב -
:לדוגמאtypedef struct Sbook{
….
} book;
…
book b;
![Page 11: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/11.jpg)
מצביעים בשפתC ניתן להגדיר מצביע לאותו טיפוס עוד לפני
שסיימנו להגדיר אותו. לעומת זאת בשפתPascal חייבים להכריז על קיום
טיפוס.
C Pascal
typedef struct Snode { int info; struct Snode * next;} node;
type link = ↑ node;node = record info : integer; next : link;end;
![Page 12: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/12.jpg)
גישה לשדות של רשומה בשפתPascal . " ניגשים לשדות של רשומה ע"י ↑
". לדוגמא:
b . ↑ price := 5.12 בשפתC:גישה לרשומה תלויה בסוג המשתנה אם משתנה הוא מצביע על רשומה אז הגישה לכל
b->price = 5.12' . לדוגמא : השדות היא ע"י ' ואם משתנה מכיל רשומה עצמה אז הגישה לכל
b.price = 5.12לדוגמא: השדות ע"י ' . '.
![Page 13: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/13.jpg)
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;
![Page 14: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/14.jpg)
משתנים וטווח חייהם. 2גלובלייםלוקליים תחום הגדרהscope
![Page 15: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/15.jpg)
מבני בקרה .3 תנאיםif ...else בחירה/הסתעפותcase... swich לולאותfor, while…
![Page 16: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/16.jpg)
פונקציות .4
הגדרת פונקציהC Pascal
<return type> <name> (<parameters>){ body return <something>}
function <name> (<parameters>) :<return type>beginbody<name> = <something>end
פונקציה מחזירה ערך returnע"י פקודת
פונקציה מחזירה ערך ע"י פעולת השמה לשם הפונקציה
![Page 17: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/17.jpg)
בשפת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
פרוצדורות
![Page 18: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/18.jpg)
העברת פרמטרים העברת פרמטרים לפונקציותby value .לפונקציה/לפרצדורה מועברים רק ערכים של פרמטרים אין תופעות לוואיside-effect פונקציה לא יכולה לשנות –
ערכים של משתנים שאינם מוגדרים בה.
by referenceהעברת פרמטרים .לפונקציה/לפרצדורה מועברות כתובות פונקציה יכולה לגרום תופעות לוואיside-effect לאחר –
ריצה של פונקציה ערכי משתנים שאינן מוגדרים בה יכולים להשתנות.
![Page 19: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/19.jpg)
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;beginx := 5; y := 6;swap (x,y);End
![Page 20: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/20.jpg)
- מערך חד-ממדי מבני נתונים .5
בשפת פסקל ניתן להגדיר תחום של מערך, במיליםאחרות אינדקס התחלה ואינדקס סיום.
לעומת זאת בשפתC ניתן לציין גודל בלבד. אינדקס -גודל< .1, ואינדקס סיום יהיה > 0התחלה תמיד יהיה
בשתי השפות הגישה לתא של מערך מתבצעת באמצעות.a[5]ציון האינדקס בין סוגריים ] [. לדוגמא:
Pascal С
1)2)
a: array[1..10] of integer;b: array [2 .. 7] of integer;
int a [10];
![Page 21: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/21.jpg)
Static vs Dinamic Array bounds בשפתPascal אינדקס של מערך לא חייב להיות
מספרA : array[char] of int;
A[‘+’] = 3;
בשפתPascal מספרים שונה 10 טיפוס המערך של מספרים. 100מטיפוס המערך של
האם לדעתכם זה בעיה? ואם כן למה?
![Page 22: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/22.jpg)
set typeקבוצה -בPascal( ניתן להגדיר מבני נתונים קבוצה set ע"י ציון )
רשימת איבריה בין סוגריים ] [ . כל איברי הקבוצה חייבים אין טיפוס כזה.Cלהיות בעלי אותו טיפוס. בשפת
:דוגמאות לקבוצות [ ] [ `0`…`9`] [`a`…`z`,`A`…`Z`]
![Page 23: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/23.jpg)
הגדרת קבוצה:A[ ,] [ :2,3[, ]1,3[, ]1,2[, ]3[, ]2[, ]1 יכול להיות ,]
[1,2,3 ]:פעולהפעולות משמעות
+ 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
![Page 24: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/24.jpg)
מערך דו-ממדי )מטריצה(
בהגדרת מטריצה הפרמטר הראשון מציין מספר שורות, והפרמטרכלומר: שני מציין את מספר העמודות.
( הגדרנו מטריצה בגודל 1בדוגמה )10x20( 1020 שורות, ו עמודות(;
( הגדרנו מטריצה בעלת 2ובדוגמא )שורות )שורה ראשונה 5 עמודות )עמודה ראשונה 3ו- (7, שורה אחרונה אינדקס 2אינדקס (.5, עמודה אחרונה אינדקס 3אינדקס
בשתי השפות הגישה לתא של מטריצה מתבצעת באמצעות ציוןאינדקסים בין סוגריים ] [: קודם אינדקס שורה ואחרי זה אינדקס
עמודה.
Pascal С
1)2)
a: array[1..10][1..20] of integer;b: array [2..7][3..5] of integer;
int a [10][20];
![Page 25: תכנות פרוצדורלי - II](https://reader035.vdocuments.mx/reader035/viewer/2022062422/568134be550346895d9bdfd9/html5/thumbnails/25.jpg)
מערך רב-ממדי .בשתי שפות ניתן להגדיר מערכים רב-ממדיים
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]