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

25
ייייי ייייייייי- II :ררררSethi, R. (1996). Programming Languages concepts & constructs, Addison-Wesley, 2nd Ed.

Upload: dean-gilliam

Post on 02-Jan-2016

31 views

Category:

Documents


0 download

DESCRIPTION

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

TRANSCRIPT

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

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

:מקור

Sethi, R. (1996). Programming Languages concepts & constructs, Addison-Wesley, 2nd Ed.

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

פרדיגמה תכנותית בכלל והפרדיגמה הפרוצדורלית בפרטניתנת לביטוי באמצעות שפות תכנות שונות.

בתרגול זה נסקור שתי שפות אשר שייכות לפרדיגמה:Pascal ו- Cפרוצדורלית

שפתPascal שהיא strong type language. שפתC שהיא weak type language.

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

טיפוסים      .1

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

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

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

:שימו לב בשפתPascal.אין תווי המרה טיפוס void -קיים רק בC

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

דוגמא לשימוש בתווי המרה היא קלט/פלט:

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

טיפוסים ממוספרים 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

טיפוס רשומה

С Pascal

struct <name> { <type1> name1; <type2> name2; …}

record <name1>: <type1> <name2>: <type2> …end

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

רשומות רגילות רשומות פשוטות הן רשומות המורכבות מטיפוסים

פשוטים בלבד.С 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

בשפתC ניתן גם לקצר את תהליך הגדרת .typedefהמשתנה ע"י שימוש ב -

:לדוגמאtypedef struct Sbook{

….

} book;

book b;

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

מצביעים בשפת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

גישה לשדות של רשומה בשפתPascal . " ניגשים לשדות של רשומה ע"י ↑

". לדוגמא:

b . ↑ price := 5.12 בשפתC:גישה לרשומה תלויה בסוג המשתנה אם משתנה הוא מצביע על רשומה אז הגישה לכל

b->price = 5.12' . לדוגמא : השדות היא ע"י ' ואם משתנה מכיל רשומה עצמה אז הגישה לכל

b.price = 5.12לדוגמא: השדות ע"י ' . '.

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

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

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

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

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

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

פונקציות      .4

הגדרת פונקציהC Pascal

<return type> <name> (<parameters>){ body return <something>}

function <name> (<parameters>) :<return type>beginbody<name> = <something>end

פונקציה מחזירה ערך returnע"י פקודת

פונקציה מחזירה ערך ע"י פעולת השמה לשם הפונקציה

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

בשפת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

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

ערכים של משתנים שאינם מוגדרים בה.

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

ריצה של פונקציה ערכי משתנים שאינן מוגדרים בה יכולים להשתנות.

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

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

- מערך חד-ממדי מבני נתונים  .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

Static vs Dinamic Array bounds בשפתPascal אינדקס של מערך לא חייב להיות

מספרA : array[char] of int;

A[‘+’] = 3;

בשפתPascal מספרים שונה 10 טיפוס המערך של מספרים. 100מטיפוס המערך של

האם לדעתכם זה בעיה? ואם כן למה?

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

set typeקבוצה -בPascal( ניתן להגדיר מבני נתונים קבוצה set ע"י ציון )

רשימת איבריה בין סוגריים ] [ . כל איברי הקבוצה חייבים אין טיפוס כזה.Cלהיות בעלי אותו טיפוס. בשפת

:דוגמאות לקבוצות [ ] [ `0`…`9`] [`a`…`z`,`A`…`Z`]

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

הגדרת קבוצה: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

מערך דו-ממדי )מטריצה(

בהגדרת מטריצה הפרמטר הראשון מציין מספר שורות, והפרמטרכלומר: שני מציין את מספר העמודות.

( הגדרנו מטריצה בגודל 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

מערך רב-ממדי .בשתי שפות ניתן להגדיר מערכים רב-ממדיים

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]