+ All Categories
Home > Documents > CMPE 104

CMPE 104

Date post: 31-Dec-2015
Category:
Upload: fleur-castaneda
View: 25 times
Download: 0 times
Share this document with a friend
Description:
CMPE 104. Pascal (Modified slides of Tom Rethard). Pascal. Designed by Niklaus Wirth Development started in 1968 First working compiler in 1970 Pascal-70 Report was on 29 pages. Pascal Goals. Goals It is teaching language Reliability Simplicity Efficiency Wirth: - PowerPoint PPT Presentation
60
1 CMPE 104 Pascal (Modified slides of Tom Rethard)
Transcript
Page 1: CMPE 104

1

CMPE 104

Pascal

(Modified slides of Tom Rethard)

Page 2: CMPE 104

2

Pascal Designed by Niklaus Wirth Development started in 1968 First working compiler in 1970 Pascal-70 Report was on 29 pages

Page 3: CMPE 104

3

Pascal Goals Goals

It is teaching language Reliability Simplicity Efficiency

Wirth: “the principle to include features that were well

understood, in particular by implementers, and to leave out those that were still untried and unimplemented, proved to be the most successful single guideline.”

1. The language is suitable for teaching programming in a systematic way.

2. The implementation of the language is reliable and efficient, at compile-time and run-time, on all available computers.

Page 4: CMPE 104

4

Example

Program AbsMean (input, output);const Max = 900;type index = 1 .. Max;var

N: 0 .. Max;Data: array [index] of real;sum, avg, val: real;i: index;

Page 5: CMPE 104

5

Example (con’t)beginsum := 0;readln (N);for i := 1 to N do

beginreadln (val);if val < 0 then Data[i] := valelse Data[i] := val

end;for i := 1 to N do

sum = sum + Data[i];avg := sum/N;writeln (avg);

end.

Page 6: CMPE 104

6

EnumerationsTypeDayOfWeek = (Sun, Mon, Tue, Wed, Thu, Fri, Sat);Month = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec);vartoday, tomorrow: DayOfWeek;begin…today := Tue;tomorrow := today + 1;…today = Jan; /* type error …

Page 7: CMPE 104

7

Operations := succ pred = <> < > <= >=

Page 8: CMPE 104

8

Subrange Types

var DayOfMonth 1 .. 31; Restricts the range of values for

DayOfMonth to the integer subrange of 1..31

Can also use in enumerations:Type WeekDay = Mon .. Fri;

Page 9: CMPE 104

9

Sets Set of <ordinal type> (enumeration type(char,Boolean), subrange type) Var S, T: set of 1..10; S := [1, 2, 3, 5, 7]; T := [1 ..6]; If T = [1, 2, 3, 5] then …

Page 10: CMPE 104

10

Set Operations = <> <= subset or equal >= But: no < or > !

Page 11: CMPE 104

11

Arrays Any upper or lower bound Can also use enumeration types as

array indices Examples

var A: array [1 .. 100] of real;var HoursWorked: array [Mon .. Fri] of

0 .. 24;

Page 12: CMPE 104

12

Arrays

Var day: Mon .. Fri; TotalHours: 0..120;begin

TotalHours := 0;for day := Mon to Fri do TotalHours := TotalHours +

HoursWorked[day];

Page 13: CMPE 104

13

Arrays of Characters

Any finite discrete type for index

var Occur: array [char] of integer;…

Occur[ch] := Occur[ch] + 1;…

if Occur[‘e’] > Occur[‘t’] then …

Page 14: CMPE 104

14

More Complex Arrays

var M: array [1..20] of

array [1 .. 100] of real;

or

var m: array [1 .. 20, 1 .. 100] of real;

Page 15: CMPE 104

15

More on Arrays Need to be static, not dynamic

Must know types at compile time

Dimensions are part of the array type

Arrays are considered the same type if index types and base types both match

Page 16: CMPE 104

16

Type problemstype vector = array [1 .. 100] of real;var U, V, vector;function sum (x: vector): real;

…begin … end {sum};

Can writevar W: array [1 ..75] of real;

But cannot write:Sum(W)

Page 17: CMPE 104

17

Type Problems Types of W and of x are not the

same because the ranges of the indices are different!

Page 18: CMPE 104

18

Record Types Heterogeneous data Multiple components Various types

Page 19: CMPE 104

19

Recordstype

person = recordname: string;age: 16 .. 100;salary: 10000 .. 100000;sex: (male, female);birthdate: date;hiredate: date;

end;string = packed array [1 ..30] of char;date = record

mon: month;day: 1 ..31;year: 1900 .. 2100;

end;month = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec);

Page 20: CMPE 104

20

Using a Record To use a record:

var newhire: person;

just like any other type

Page 21: CMPE 104

21

Getting to the Components

varnewhire: person;today: date;…newhire.age := 25;newhire.sex := female;newhire.date := today;

Page 22: CMPE 104

22

More Possibilities

if newhire.name[1] = ‘A’ then …

typeemployeeNum = 1000 .. 9999;

varemployees: array

[employeeNum] of person;EN: employeeNum;

Page 23: CMPE 104

23

Making it Simpler

with newhirebegin

age := 25;sex := female;date := today

end;

Page 24: CMPE 104

24

Storage Groupings Homogeneous

Arrays All elements are the same type Computed (dynamic) selector (subscript or

index) Heterogeneous

Records Elements (components) may be of different

types Static selector

Page 25: CMPE 104

25

Variant Records Sometimes records vary from one

record type to another. Think of this as a primitive form of

subclassing

Page 26: CMPE 104

26

Variant Recordstype

plane = recordflight: 0 .. 999;kind: (B727, B737, B747);status (inAir, onGround, atTerminal);altitude: 0 .. 100000;heading: 0 .. 359;arrival: time;destination: airport;location: airport;runway: runwayNumber;parked: airport;gate: 1.. 100;departure: time;

end; {plane}

Page 27: CMPE 104

27

What’s Wrong? Not all data has meaning at the

same time. Can imply a plane is located at one

airport and is parked at another Violates security principle.

Page 28: CMPE 104

28

Variant Recordstype

plane = recordflight: 0 .. 999;kind: (B727, B737, B747);case status: (inAir, onGround, atTerminal);inAir:(

altitude: 0 .. 100000;heading: 0 .. 359;arrival: time;destination: airport);

onGround: (location: airport;runway: runwayNumber);

atTerminal: (parked: airport;gate: 1.. 100;departure: time);

end; {plane}

Page 29: CMPE 104

29

Implementation

flightkind

status

altitudeheadingarrival

destination

locationrunway

parkedgate

departure

Page 30: CMPE 104

30

The Dreaded Pointer There is a problem with pointers

and strong typing! Pascal solves this problem by

typing pointers

Page 31: CMPE 104

31

Typed Pointers

varp: ^real;x: real;c: char;

beginnew(p);p^ := 3.14159;c := p^; {illegal}

end

Page 32: CMPE 104

32

Pointers with Records

varp: ^plane;

begin…p^.plane.parked[1] ……

end;

Page 33: CMPE 104

33

Interpretations for equivalency

Structural equivalenceStructural descriptions of the types be the same

Name equivalenceNames must be same

Page 34: CMPE 104

34

Structural Equivalence

varx: record id: integer; weight: real end;y: record id: integer; weight: real end;

The above are the same because their structure is the same

Page 35: CMPE 104

35

But… Consider thistype

person = record id: integer; weight: real end;car = record id: integer; weight: real end;

The above are the same because their structure is the same, so:

car := person;

according to structural equivalency is legal!

Page 36: CMPE 104

Name Equivalencevar

x: record id: integer; weight: real end;y: record id: integer; weight: real end;

Is actually ambiguous, Different versions of Name Equivalence Rule

differ on this example. If reinterpreted as follows, then they are different

typeT00029: record id: integer; weight: real end;T00030: record id: integer; weight: real end;

varx: T00029;y: T00030;

Page 37: CMPE 104

37

Name Equivalence Issues

type age = 0 .. 150;var

n: integer;a: age;

Is n:= a legal? Pure name equivalence says no Logic says yes Revised Pascal Report says that a subrange

of a type is still that type

Page 38: CMPE 104

38

Comparison Name Equivalence generally safer

More restrictive Name Equivalence is easier to

implement Simply a string comparison Structural equivalence requires a

recursive function ISO Pascal specifies name

Equivalence

Page 39: CMPE 104

39

Name Structures Pascal provides six types

Constant bindings Type bindings Variable bindings Procedure and function bindings Implicit enumeration bindings Label bindings

Page 40: CMPE 104

40

Constant bindings const MaxData = 100; MaxData can be used almost

anywhere All declarations Executable statements (for loops, etc.) Expressions BUT, not in other const declarations!

const MaxDataMinus1 = MaxData –1; is not allowed

Page 41: CMPE 104

41

Constructors Record constructors Procedure/Function

The major scope defining construct

Page 42: CMPE 104

42

Procedures

procedure <name> (<formal arguments>);

<declarations>begin

<statements>end;

Page 43: CMPE 104

43

A Problemprocedure P (...);

...begin

...Q(...)...

end;procedure Q (...);

...begin

...P(...)...

end;

Page 44: CMPE 104

44

A Problem Solvedprocedure Q(...) forward;procedure P (...);

...begin

...Q(...)...

end;procedure Q (...);

...begin

...P(...)...

end;

Page 45: CMPE 104

45

Procedure Constructionprocedure <name> (<formal arguments>);

<label declarations><const declarations><type declarations><var declarations><procedure and function declarations>

begin<statements>

end;

Page 46: CMPE 104

46

Pascal eliminates the block Simplifies name structure Complicates efficient use of

memory

Page 47: CMPE 104

47

Control structures Reflects structured programming

ideas

Page 48: CMPE 104

48

For Loop

for <name> := expression { to | downto } <expression> do <statement>

Bounds of the loop are computed once, at loop entry => definite iterator

Page 49: CMPE 104

49

While Loop Also a “Leading Decision Indefinite

Iterator”while <condition> do <statement>

Checks at top of loop Can use “while true do....” for a

loop exiting from the middle (Mid-Decision Iterator)

Page 50: CMPE 104

50

Repeat Loop Also “Trailing Decision Indefinite

Iterator”repeat <statement> until <condition>

Checks at bottom of loop

Page 51: CMPE 104

51

Unlabeled Case Statement Modeled according to Fortran

computed gotocase <expression> of

<statement>,<statement>,...<statement>

end case;

Page 52: CMPE 104

52

case I ofbegin ... S1 ... end;begin ... S2 ... end;

begin ... S3 ... end;begin ... S4 ... end;

end case;

No labels are provided.

Page 53: CMPE 104

53

Labeled Case Statement Major contribution of Pascal

case <expression> of<case clause>;<case clause>;...<case clause>

end case;Designed by C.A. Hoare: the most important

of his many contributions to language design

Page 54: CMPE 104

54

Labeled Case Statement

case I of1: begin ... S1 ... end;2: 3: begin ... S23 ... end;4: begin ... S4 ... end;end case;

Some dialects of Pascal add an otherwise case.

Page 55: CMPE 104

55

Parameter Passing Passing by reference

Replaces Algol pass by name Intended to allow side effects (ie, I-O

parameter usage) Passes only the address

Passing by value Intended for input only parameters Side effects not allowed Done by copy-in

Page 56: CMPE 104

56

Pass as Constant Original specification contained this

instead of pass by value Similar to C const parameter passing Allowed compiler to pass either

address or value Called procedure could not modify it Elimination encourages call by

reference

Page 57: CMPE 104

57

Procedure type vector=array[1..100] of real; var A:vector … procedure P(x:vextor); \*pass by constant begin writeln(x[1]); A[1]:=0; writeln(x[1]) end; begin P(A) end;

Page 58: CMPE 104

58

Pass as Constant Two orthogonal issues involved

Should copy its value or use its address?

Should be I or I-O parameter Approach violates the

Orthogonality Principle

Page 59: CMPE 104

Procedure

Procedure difsq (function f:real; x:real):realbegin

difsq:= f(x*x) – f(-x*x)end

difsq(sin,theta)=sin(theta^2 ) – sin(-theta^2)

Page 60: CMPE 104

Procedure arguments The arguments of a formal

procedure parameter shall be specified

Procedure difsq (function f(y:real):real; x:real):real


Recommended