תכנות פרוצדורלי - ii
DESCRIPTION
תכנות פרוצדורלי - II. מקור: Sethi, R. (1996). Programming Languages concepts & constructs , Addison-Wesley, 2nd Ed. פרדיגמה תכנותית בכלל והפרדיגמה הפרוצדורלית בפרט ניתנת לביטוי באמצעות שפות תכנות שונות. בתרגול זה נסקור שתי שפות אשר שייכות לפרדיגמה פרוצדורלית C ו- Pascal : - PowerPoint PPT PresentationTRANSCRIPT
II - תכנות פרוצדורלי
:מקור
Sethi, R. (1996). Programming Languages concepts & constructs, Addison-Wesley, 2nd Ed.
פרדיגמה תכנותית בכלל והפרדיגמה הפרוצדורלית בפרטניתנת לביטוי באמצעות שפות תכנות שונות.
בתרגול זה נסקור שתי שפות אשר שייכות לפרדיגמה:Pascal ו- Cפרוצדורלית
שפתPascal שהיא strong type language. שפתC שהיא weak type language.
טיפוסים .1
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>
-בC( תו המרה/בקרה :conversion character מציין )איך להתייחס לערך הניתן לפונקציות קלט/פלט.
:שימו לב בשפתPascal.אין תווי המרה טיפוס void -קיים רק בC
דוגמא לשימוש בתווי המרה היא קלט/פלט:
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);
טיפוסים ממוספרים 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
טיפוס רשומה
С Pascal
struct <name> { <type1> name1; <type2> name2; …}
record <name1>: <type1> <name2>: <type2> …end
רשומות רגילות רשומות פשוטות הן רשומות המורכבות מטיפוסים
פשוטים בלבד.С 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;
בשפתC ניתן גם לקצר את תהליך הגדרת .typedefהמשתנה ע"י שימוש ב -
:לדוגמאtypedef struct Sbook{
….
} book;
…
book b;
מצביעים בשפתC ניתן להגדיר מצביע לאותו טיפוס עוד לפני
שסיימנו להגדיר אותו. לעומת זאת בשפתPascal חייבים להכריז על קיום
טיפוס.
C Pascal
typedef struct Snode { int info; struct Snode * next;} node;
type link = ↑ node;node = record info : integer; next : link;end;
גישה לשדות של רשומה בשפתPascal . " ניגשים לשדות של רשומה ע"י ↑
". לדוגמא:
b . ↑ price := 5.12 בשפתC:גישה לרשומה תלויה בסוג המשתנה אם משתנה הוא מצביע על רשומה אז הגישה לכל
b->price = 5.12' . לדוגמא : השדות היא ע"י ' ואם משתנה מכיל רשומה עצמה אז הגישה לכל
b.price = 5.12לדוגמא: השדות ע"י ' . '.
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;
משתנים וטווח חייהם. 2גלובלייםלוקליים תחום הגדרהscope
מבני בקרה .3 תנאיםif ...else בחירה/הסתעפותcase... swich לולאותfor, while…
פונקציות .4
הגדרת פונקציהC Pascal
<return type> <name> (<parameters>){ body return <something>}
function <name> (<parameters>) :<return type>beginbody<name> = <something>end
פונקציה מחזירה ערך returnע"י פקודת
פונקציה מחזירה ערך ע"י פעולת השמה לשם הפונקציה
בשפת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
פרוצדורות
העברת פרמטרים העברת פרמטרים לפונקציותby value .לפונקציה/לפרצדורה מועברים רק ערכים של פרמטרים אין תופעות לוואיside-effect פונקציה לא יכולה לשנות –
ערכים של משתנים שאינם מוגדרים בה.
by referenceהעברת פרמטרים .לפונקציה/לפרצדורה מועברות כתובות פונקציה יכולה לגרום תופעות לוואיside-effect לאחר –
ריצה של פונקציה ערכי משתנים שאינן מוגדרים בה יכולים להשתנות.
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
- מערך חד-ממדי מבני נתונים .5
בשפת פסקל ניתן להגדיר תחום של מערך, במיליםאחרות אינדקס התחלה ואינדקס סיום.
לעומת זאת בשפתC ניתן לציין גודל בלבד. אינדקס -גודל< .1, ואינדקס סיום יהיה > 0התחלה תמיד יהיה
בשתי השפות הגישה לתא של מערך מתבצעת באמצעות.a[5]ציון האינדקס בין סוגריים ] [. לדוגמא:
Pascal С
1)2)
a: array[1..10] of integer;b: array [2 .. 7] of integer;
int a [10];
Static vs Dinamic Array bounds בשפתPascal אינדקס של מערך לא חייב להיות
מספרA : array[char] of int;
A[‘+’] = 3;
בשפתPascal מספרים שונה 10 טיפוס המערך של מספרים. 100מטיפוס המערך של
האם לדעתכם זה בעיה? ואם כן למה?
set typeקבוצה -בPascal( ניתן להגדיר מבני נתונים קבוצה set ע"י ציון )
רשימת איבריה בין סוגריים ] [ . כל איברי הקבוצה חייבים אין טיפוס כזה.Cלהיות בעלי אותו טיפוס. בשפת
:דוגמאות לקבוצות [ ] [ `0`…`9`] [`a`…`z`,`A`…`Z`]
הגדרת קבוצה: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
מערך דו-ממדי )מטריצה(
בהגדרת מטריצה הפרמטר הראשון מציין מספר שורות, והפרמטרכלומר: שני מציין את מספר העמודות.
( הגדרנו מטריצה בגודל 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];
מערך רב-ממדי .בשתי שפות ניתן להגדיר מערכים רב-ממדיים
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]