220 likes | 234 Views
Learn about simple, ordinal, and real types; pointers, structured types, arrays, records, sets, and procedures in Modula 2 programming language.
E N D
Chapter 2.6 Modula 2 Structured Types
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
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
ARRAY type ARRAY type index type component type
ARRAY element array element array variable designator index expression
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.
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
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
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 *)
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 *)
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
Tools : Jack : device to lift a car Wrench : device to loose or fasten bolts Repairing a flat tireRefinement of “tools”
TYPE Date = RECORD Day : [1 .. 31]; Month : [1 .. 12]; Year : [1900 .. 2100] END; VAR Today : Date; RECORD example
END RECORD type field list fields fixed fields field type
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;
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;
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;
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
Variant RECORDs variant fields variant list variant
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
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
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