Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 CMPE 104 Pascal (Modified slides of Tom Rethard)

Similar presentations


Presentation on theme: "1 CMPE 104 Pascal (Modified slides of Tom Rethard)"— Presentation transcript:

1 1 CMPE 104 Pascal (Modified slides of Tom Rethard)

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

3 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 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 5 Example (con’t) begin sum := 0; readln (N); for i := 1 to N do begin readln (val); if val < 0 then Data[i] := val else Data[i] := val end; for i := 1 to N do sum = sum + Data[i]; avg := sum/N; writeln (avg); end.

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

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

8 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 9 Sets Set of (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 10 Set Operations = <> <= subset or equal >= But: no !

11 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 12 Arrays Var day: Mon.. Fri; TotalHours: 0..120; begin TotalHours := 0; for day := Mon to Fri do TotalHours := TotalHours + HoursWorked[day];

13 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 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 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 16 Type problems type vector = array [1.. 100] of real; var U, V, vector; function sum (x: vector): real; … begin … end {sum}; Can write var W: array [1..75] of real; But cannot write: Sum(W)

17 17 Type Problems Types of W and of x are not the same because the ranges of the indices are different!

18 18 Record Types Heterogeneous data Multiple components Various types

19 19 Records type person = record name: 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 20 Using a Record To use a record: var newhire: person; just like any other type

21 21 Getting to the Components var newhire: person; today: date; … newhire.age := 25; newhire.sex := female; newhire.date := today;

22 22 More Possibilities if newhire.name[1] = ‘A’ then … type employeeNum = 1000.. 9999; var employees: array [employeeNum] of person; EN: employeeNum;

23 23 Making it Simpler with newhire begin age := 25; sex := female; date := today end;

24 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 25 Variant Records Sometimes records vary from one record type to another. Think of this as a primitive form of subclassing

26 26 Variant Records type plane = record flight: 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 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 28 Variant Records type plane = record flight: 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 29 Implementation flight kind status altitude heading arrival destination location runway parked gate departure

30 30 The Dreaded Pointer There is a problem with pointers and strong typing! Pascal solves this problem by typing pointers

31 31 Typed Pointers var p: ^real; x: real; c: char; begin new(p); p^ := 3.14159; c := p^; {illegal} end

32 32 Pointers with Records var p: ^plane; begin … p^.plane.parked[1] … … end;

33 33 Interpretations for equivalency Structural equivalence Structural descriptions of the types be the same Name equivalence Names must be same

34 34 Structural Equivalence var x: 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 35 But… Consider this type 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!

36 Name Equivalence var 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 type T00029: record id: integer; weight: real end; T00030: record id: integer; weight: real end; var x: T00029; y: T00030;

37 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 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 39 Name Structures Pascal provides six types Constant bindings Type bindings Variable bindings Procedure and function bindings Implicit enumeration bindings Label bindings

40 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 41 Constructors Record constructors Procedure/Function The major scope defining construct

42 42 Procedures procedure ( ); begin end;

43 43 A Problem procedure P (...);... begin... Q(...)... end; procedure Q (...);... begin... P(...)... end;

44 44 A Problem Solved procedure Q(...) forward; procedure P (...);... begin... Q(...)... end; procedure Q (...);... begin... P(...)... end;

45 45 Procedure Construction procedure ( ); begin end;

46 46 Pascal eliminates the block Simplifies name structure Complicates efficient use of memory

47 47 Control structures Reflects structured programming ideas

48 48 For Loop for := expression { to | downto } do Bounds of the loop are computed once, at loop entry => definite iterator

49 49 While Loop Also a “Leading Decision Indefinite Iterator” while do Checks at top of loop Can use “while true do....” for a loop exiting from the middle (Mid-Decision Iterator)

50 50 Repeat Loop Also “Trailing Decision Indefinite Iterator” repeat until Checks at bottom of loop

51 51 Unlabeled Case Statement Modeled according to Fortran computed goto case of,,... end case;

52 52 case I of begin... S 1... end; begin... S 2... end; begin... S 3... end; begin... S 4... end; end case; No labels are provided.

53 53 Labeled Case Statement Major contribution of Pascal case of ; ;... end case; Designed by C.A. Hoare: the most important of his many contributions to language design

54 54 Labeled Case Statement case I of 1: begin... S 1... end; 2: 3: begin... S 23... end; 4: begin... S 4... end; end case; Some dialects of Pascal add an otherwise case.

55 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 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 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 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

59 Procedure Procedure difsq (function f:real; x:real):real begin difsq:= f(x*x) – f(-x*x) end difsq(sin,theta)=sin(theta^2 ) – sin(-theta^2)

60 Procedure arguments The arguments of a formal procedure parameter shall be specified Procedure difsq (function f(y:real):real; x:real):real


Download ppt "1 CMPE 104 Pascal (Modified slides of Tom Rethard)"

Similar presentations


Ads by Google