Lecture 4

advertisement
ITEC 320
Lecture 4
Sub-Types
Functions
Review
• Types
• Homework
• Questions?
Functions /
Procedures
Outline
•
•
•
•
Subtypes / Enumerated types
Procedures
Functions
Problems
Functions /
Procedures
Compiler
tasks
• Compile time
– What errors are caught?
• Run-time
– What errors are caught
Functions /
Procedures
New types
• Example
type Temperature is range 32 .. 212;
type Pressure is range 0 .. 500;
t: Temperature;
p: Pressure;
t := 100; -- valid
p := t; -- compile error
Functions /
Procedures
Enumerated
types
• Map an int to a word
procedure enum_demo is
type Color is (red, blue, green);
c: color := green;
begin
if c = blue then -- do something
end if;
c:=0; --What happens here?
end enum_demo;
Functions /
Procedures
Modular
Types
• What do you think this is used for
type ClockHourType is mod 12;
startTime: ClockHourType := 10;
breakTime: ClockHourType := startTime + 2; -- 0
endTime: ClockHourType := startTime + 4; -- 2
Functions /
Procedures
Floating
point
• Example
type Money is delta 0.01 digits 15;
cent: Money := 0.01;
dollar: Money := 0.0;
for i in 1 .. 100 loop
dollar := dollar + cent;
end loop;
put(float(dollar)); -- 1.00
Functions /
Procedures
In-class
• Let's write a program in groups: Read a
low and a high value to define a range,
and then read a sequence of numbers,
until eof, and count the number of
numbers below, in, and above the range.
Calculate the percent in each group.
Assume the endpoints of the range are in
the range. Output, nicely formatted, the
counts and percents.
Functions /
Procedures
Functions
• Similar to java methods with a non-void
return type
• Must have a return type
• Must be defined before use
• Cannot modify parameters
Functions /
Procedures
Syntax
function sumArray(a: Int_Array) return integer is
s: Integer := 0; -- holds the sum
begin
for i in a'range loop
s := s + a(i);
end loop;
return s;
end sumArray;
Functions /
Procedures
Procedure
s
• No return type allowed
• Parameters can be changed
– In (default)
– Out (allows passing back to the caller)
– In Out (pass in and out)
• What about the get procedure’s
parameter?
• Structure charts help
Functions /
Procedures
Syntax
with ada.text_io; use ada.text_io;
with ada.integer_text_io; use ada.integer_text_io;
procedure inout is
procedure vars(a: in Integer; b: in out Integer;
c: out Integer) is
begin
b:= b+a;
c:= b+3;
end vars;
x: Integer;
y: Integer;
z: Integer;
begin
x:=2;
y:=3;
vars(x,y,z);
put(x'img & "|" & y'img & "|" & z'img);
end inout;
Functions /
Procedures
Issues
• Assigning to an in parameter
• Using an out parameter’s values in the
procedure (by default it can be anything)
• Forgetting to assign a value to an out
parameter
• Can’t fool variables
– I.e. passing an in mode variable to another
procedure where it is an out mode parameter
Functions /
Procedures
Problems
• Write a function/procedure that returns
whether or not a String is a palindrome
Functions /
Procedures
Problems
• Given n of 1 or more, return the factorial of
n, which is n * (n-1) * (n-2) ... 1. Compute
the result recursively (without loops).
Functions /
Procedures
Summary
• Functions
• Procedures
Functions /
Procedures
Download