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

Post on 02-Jan-2016

31 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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]

top related