1 / 22

Understanding Modula 2 Types

Learn about simple, ordinal, and real types; pointers, structured types, arrays, records, sets, and procedures in Modula 2 programming language.

whaggerty
Download Presentation

Understanding Modula 2 Types

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 2.6 Modula 2 Structured Types

  2. Simple Types: valuescan’t be decomposed Ordinal Types: bijection with natural numbers Reals: approx. representation for real values Pointers: addresses in data memory Structured Types: Values have # components Arrays: all components have same type Records: components can have # types Sets: small sets of ordinal values Procedures: entire subprograms Types in Modula 2

  3. Simple Types: valuescan’t be decomposed Ordinal Types: bijection with natural numbers Reals: approx. representation for real values Pointers: addresses in data memory Structured Types: Values have # components Arrays: all components have same type Records: components can have # types Sets: small sets of ordinal values Procedures: entire subprograms Types in Modula 2

  4. ARRAY type ARRAY type index type component type

  5. ARRAY element array element array variable designator index expression

  6. ARRAY applications Mon Tue Wed Thu Fri Sat Sun 8 info. 9 info. st.pr. 10 info. st.pr. 11 info. st.pr. 12 13 14 15 teleN 16 teleN 17 st.pr. 18 teleE st.pr. 19 teleE st.pr.

  7. ARRAY applications TYPE Day = (Mon,Tue,Wed,Thu,Fri,Sat,Sun); Hour = [8..19]; Course = ARRAY[0..10] OF CHAR; Schedule = ARRAY Day, Hour OF Course; VAR RoomK1 : Schedule; BEGIN ... RoomK1[Wed,8] := "info."; ... END

  8. Sieve of Eratosthenes Print all primes <= Max Make a set of cardinals 2 <= x <= MAX FOR all cardinals present in set Print the first cardinal x remaining in the set Remove all multiples of x from the set

  9. 2 3 4 5 6 7 8 ... FALSE TRUE FALSE TRUE FALSE TRUE FALSE Sieve of Eratosthenes Make a set of cardinals 2 <= x <= MAX CONST Max = 1000; VAR Sieve : ARRAY[2..Max] OF BOOLEAN; i : [2..Max]; .. . FOR i:= 2 TO MAX DO Sieve[i] := TRUE END; (* FOR *)

  10. Sieve of Eratosthenes FOR all cardinals present in the set Print the first cardinal in the set Remove all multiples of it VAR p : CARDINAL; .. . FOR i := 2 TO Max DO IF Sieve[i] THEN p := i; WriteCard(p,5); WriteLn; WHILE p <= Max DO Sieve[p] := FALSE; p := p + i END (* WHILE *) END (* IF *) END (* FOR *)

  11. Simple Types: valuescan’t be decomposed Ordinal Types: bijection with natural numbers Reals: approx. representation for real values Pointers: addresses in data memory Structured Types: Values have # components Arrays: all components have same type Records: components can have # types Sets: small sets of ordinal values Procedures: entire subprograms Types in Modula 2

  12. Tools : Jack : device to lift a car Wrench : device to loose or fasten bolts Repairing a flat tireRefinement of “tools”

  13. TYPE Date = RECORD Day : [1 .. 31]; Month : [1 .. 12]; Year : [1900 .. 2100] END; VAR Today : Date; RECORD example

  14. END RECORD type field list fields fixed fields field type

  15. field identifier record variable designator RECORD element WITH Today DO Day := 20; Month := 10; Year := 1998; END Today.Day := 20; Today.Month := 10; Today.Year := 1998;

  16. Nested RECORDs example (1) TYPE Date = RECORD Day : [1 .. 31]; Month : [1 .. 12]; Year : [1900 .. 2100] END; String = ARRAY [0..29] OF Char; Identity = RECORD Name, FirstName : String; BirthPlace : String; BirthDate : Date; IssueDate : Date; END; VAR Myself : Identity; Today : Date;

  17. Nested RECORDs example (2) Today.Day := 20; Today.Month := 10; Today.Year := 1998 Myself.Name := "Tiberghien"; Myself.FirstName := "Jacques"; Myself.BirthPlace := "Berchem"; Myself.BirthDate.Day := 1; Myself.BirthDate.Month := 4; Myself.BirthDate.Year := 1946; Myself.IssueDate := Today;

  18. Nested RECORDs example (2) WITH Today DO Day := 20; Month := 10; Year := 1998 END; WITH Myself DO Name := "Tiberghien"; FirstName := "Jacques"; BirthPlace := "Berchem"; WITH BirthDate DO Day := 1; Month := 4; Year := 1946; END; IssueDate := Today; END

  19. Variant RECORDs variant fields variant list variant

  20. Car = RECORD Weight : CARDINAL; NumberDoors : CARDINAL; FrameId,EngineId : ARRAY[0..19] OF CHAR; Fuel :(Gasoline,FuelOil,LPG,Electricity); CASEEngine :(Explosion,Electricity) OF Explosion : NbrCylinders : CARDINAL; VolCylinders : CARDINAL| Electricity : Supply : (AC,DC); Voltage : CARDINAL; END; END; Variant RECORDwith explicit tag field

  21. Car = RECORD Weight : CARDINAL; NumberDoors : CARDINAL; FrameId,EngineId : ARRAY[0..19] OF CHAR; Fuel :(Gasoline,FuelOil,LPG,Electricity); CASE(Explosion,Electricity) OF Explosion : NbrCylinders : CARDINAL; VolCylinders : CARDINAL| Electricity : Supply : (AC,DC); Voltage : CARDINAL; END; END; Variant RECORDwith implicit tag field

  22. Simple Types: valuescan’t be decomposed Ordinal Types: bijection with natural numbers Reals: approx. representation for real values Pointers: addresses in data memory Structured Types: Values have # components Arrays: all components have same type Records: components can have # types Sets: small sets of ordinal values Procedures: entire subprograms Types in Modula 2

More Related