1 cmpe 104 pascal (modified slides of tom rethard)

Post on 16-Jan-2016

218 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

CMPE 104

Pascal

(Modified slides of Tom Rethard)

2

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

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.

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;

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.

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 …

7

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

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;

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 …

10

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

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;

12

Arrays

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

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

HoursWorked[day];

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 …

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;

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

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)

17

Type Problems Types of W and of x are not the

same because the ranges of the indices are different!

18

Record Types Heterogeneous data Multiple components Various types

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);

20

Using a Record To use a record:

var newhire: person;

just like any other type

21

Getting to the Components

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

22

More Possibilities

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

typeemployeeNum = 1000 .. 9999;

varemployees: array

[employeeNum] of person;EN: employeeNum;

23

Making it Simpler

with newhirebegin

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

end;

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

25

Variant Records Sometimes records vary from one

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

subclassing

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}

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.

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}

29

Implementation

flightkind

status

altitudeheadingarrival

destination

locationrunway

parkedgate

departure

30

The Dreaded Pointer There is a problem with pointers

and strong typing! Pascal solves this problem by

typing pointers

31

Typed Pointers

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

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

end

32

Pointers with Records

varp: ^plane;

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

end;

33

Interpretations for equivalency

Structural equivalenceStructural descriptions of the types be the same

Name equivalenceNames must be same

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

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!

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;

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

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

39

Name Structures Pascal provides six types

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

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

41

Constructors Record constructors Procedure/Function

The major scope defining construct

42

Procedures

procedure <name> (<formal arguments>);

<declarations>begin

<statements>end;

43

A Problemprocedure P (...);

...begin

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

end;procedure Q (...);

...begin

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

end;

44

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

...begin

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

end;procedure Q (...);

...begin

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

end;

45

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

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

begin<statements>

end;

46

Pascal eliminates the block Simplifies name structure Complicates efficient use of

memory

47

Control structures Reflects structured programming

ideas

48

For Loop

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

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

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)

50

Repeat Loop Also “Trailing Decision Indefinite

Iterator”repeat <statement> until <condition>

Checks at bottom of loop

51

Unlabeled Case Statement Modeled according to Fortran

computed gotocase <expression> of

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

end case;

52

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

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

end case;

No labels are provided.

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

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.

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

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

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;

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

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)

Procedure arguments The arguments of a formal

procedure parameter shall be specified

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

top related