CMP 131 Introduction to Computer Programming Violetta Cavalli-Sforza Week 5, Lecture 2 (Tuesday)
TODAY Input/Output and Formatting Your questions on everything before the Quiz tomorrow
Input/Output (Read/Write) Procedures Definitions: –Input Operation: An instruction that reads data into memory. –Output Operation: An instruction that displays information stored in memory. –Procedure: A piece of code that is invoked from within the program and returns control to the program when finished –I/O Procedure: Pascal procedure that performs I/O operation. –Procedure Call Statement: An instruction that calls or activates a procedure.
Input/Output (Read/Write) Procedures Data can be stored in memory in three different ways: –Associated as a constant –Assigned to a variable –Read into a variable Reading is used if the data varies each time the program executes. Input/output procedures are supplied as part of Pascal compiler. Their names are standard identifiers.
The Same Identifier has Different Meanings in Different Places When a variable name occurs in a read/readln and a write/writeln statement, it has a different meaning: –write(MyVar) : MyVar is an expression The arguments to write are expressions (literals, constants, variables, combinations) whose value is retrieved for display –read(MyVar) : MyVar is interpreted as the address of a memory location to read into. You cannot have an expression as an argument to read Similarly, when a variable name occurs in an assignment statement, it has a different value on the right hand side (RHS) of the := and on the left hand side of the := –On the RHS, it is (part of) an expression whose value is being retrieved –On the LHS, it is the address of a memory location where the RHS value will be stored.
Reading Data … Procedures: read, readln Read data from standard input device “input” (e.g. keyboard) Syntax: read/readln(inloc1, inloc2, …, inlocN) inlocX is a location where to store the data Examples: read (SqMeters); readln (Letter1, Letter2, Letter3); read (Age, FirstInitial) Commas separate the variable names in input list
Reading Data … Use write/writeln to display a prompt message when the user is required to enter data –Otherwise the program is waiting and you don’t know why or what to enter. The order of data enter must correspond to the order of variables in the input list Reading numeric data: –Insert one or more blanks between numeric data items Reading character or string data: –Don't insert any blanks between consecutive data items unless the blank character is one of the data items being read
Read vs. Readline Procedure Read: –Will read from input just as much as it needs for its arguments and leave the rest to be consumed later. –Extra characters on the data line after a read operation are not read until the next read or readln operation Readln –Will read from input just as much as it needs for its arguments –It waits for a Return/Enter key character –Extra characters on the data line between what is needed and the end of line will be ignored after ReadLn is finished
PROGRAM ReadTest; VAR x,y: integer; BEGIN write('Type 2 integers separated by a space > '); read(x); writeln; writeln('Read x ',x); read(y); writeln; writeln('Read y ',y); writeln('Type ENTER to exit program.'); readln; END.
PROGRAM ReadLnTest; VAR x,y,z: integer; BEGIN writeln('Type 2 or more integers separated by a space.'); writeln('Terminate your input by pressing ENTER.'); readln(x,y); writeln('Read x ',x,' and y ',y); read(z); writeln('Read z ',z); END.
Writing/Displaying Data Procedures: write, writeln Write data to standard output device “output” (e.g. terminal) Syntax: write/writeln(expr1, expr2, …, exprN) where exprX is an expression, whose value is to be written, with optional formatting information Examples: writeln (Letter1, Letter2, Letter3); write (‘Age = ’, Age, ‘First Initial = ’,FirstInitial) write (SqMeters:10:2); Commas separate the variable names in output list Writes every argument in the output list in the order in which it is given.
write vs. writeln Procedure writeln –used to display a line of program output, including a newline at the end; cursor advances to the next line after the output is displayed. –without any output list instructs the output device to advance by a blank line write –Cursor doesn't advance to the next line after the output is displayed.
Self-Check What is the output if the entered data are 5 7? writeln (‘Enter two integers>’); readln(M, N); M := M + 5; N := 3 + N; writeln (‘M = ‘, M); writeln (‘N = ‘, N); What of the output of this code? write (‘My name is’); writeln (‘Doe, Jane’); writeln ; write(‘I live in ‘); write(‘Ann Arbor, MI’); writeln (‘and my zip code is ‘, 48109);
No Formatting with write/writeln Integer values: take the space they need Real values: Most Pascal compilers use scientific notation (floating-point notation) to display real values, but you can change that with formatting directives. Character values display as themselves, without quotes Boolean values display as FALSE and TRUE with no quotes String literals, the characters inside the quotes are printed, but not the quotes themselves
PROGRAM TestOutputNoFormat; BEGIN writeln('An integer with no formatting : ', 45); writeln('A real with no formatting: ', 45.67); writeln('A character with no formatting: ', '#'); writeln('Boolean values, no formatting : ', false, ' and ', true); END.
Formatting Integer Output Formatting Integer Values – b stands for blank space ValueFormatPrinted Output 234:4b234 :5bb234 :1234 :Lenbb234 (if Len=5) -234:4-234 :5b-234 :1-234
Formatting Integer Output Add the symbol ‘:n’ to the integer output list item, where n specifies the number of digits to be displayed (field width). The digits will be right-justified. For negative numbers, the minus sign is included in the counts of digits displayed The format specification ‘:1’ can always be used to display any integer values without leading blanks. The field width specification may be a variable, or even an expression The syntax for each integer item in an output list is: :
PROGRAM TestOutputIntFormat; VAR Dollars, Cents : integer; BEGIN Dollars := 5; Cents := 33; writeln('Your collection was worth '); writeln(Dollars : 1, ' dollars', ' and ', Cents :1, ' cents. '); writeln(Dollars : 2, ' dollars', ' and ', Cents :2, ' cents. '); writeln(Dollars : 3, ' dollars', ' and ', Cents :3, ' cents. '); writeln(Dollars : 4, ' dollars', ' and ', Cents :4, ' cents. '); writeln(Dollars : 5, ' dollars', ' and ', Cents :5, ' cents. '); Dollars := -2; Cents := 89; writeln('but is now worth '); writeln(Dollars : 1, ' dollars', ' and ', Cents :1, ' cents. '); writeln(Dollars : 2, ' dollars', ' and ', Cents :2, ' cents. '); writeln(Dollars : 3, ' dollars', ' and ', Cents :3, ' cents. '); writeln(Dollars : 4, ' dollars', ' and ', Cents :4, ' cents. '); writeln(Dollars : 5, ' dollars', ' and ', Cents :5, ' cents. '); END.
Formatting Real Output Examples: b stands for blank space ValueFormatPrinted Output :5:2b3.14 :4:23.14 :3:23.14 :5:1bb3.1 :8:5b :93.142E :9-3.14E :4:
Formatting Real Output Total field width & desired number of decimal places should be indicated. Add “:n:d“ to the integer. –n = total field width –d = number of decimal digits. Total field width should be large enough to accommodate all digits before and after the decimal point –Pascal will use the extra space it needs anyhow so your nicely formatted data may not look so well formatted after all. Decimal point & sign for negative numbers are included in the count. It is possible to use the form “:n“ for real numbers. In this case, the real value is printed in scientific notation using a total of n print positions.
Formatting Real Output Eliminating Leading Blanks: –Choose a format that will display the smallest value expected without leading blanks.. –Examples: :1is displayed as :3:1is displayed as –To display a real value without leading blanks, use format specification ‘:3:1’ for one decimal place or ‘:4:2’ for two decimal places. –If you use ‘:n’, the scientific notation will be displayed.
Formatting Character & String Output Formatting Strings: –A string value is always printed right-justified in its field. –If the field width is too small to accommodate the string value, Pascal will take the space it needs. Examples: b stands for blank space StringFormatPrinted Value '*':1* :2b* 'ACES':1ACES :2ACES :3ACES :4ACES :5bACES
PROGRAM TestOutputStringFormat; BEGIN writeln('ACES':1); writeln('ACES':2); writeln('ACES':3); writeln('ACES':4); writeln('ACES':5); writeln('ACES':6); END.
Self-Check Show how the value (stored in X) would be displayed using the following formats X :8:4 X:8:3X:8:1X:8:0X:8 Assuming X = (type Real) and I = 100 (type Integer). What will the output of the following statements look like? writeln(‘X is ‘ :10, X :6:2, ‘I is ‘ :4, I :5); write(‘I is ‘ :10, I : 1); writeln(‘X is ‘ :10, X :2:1);