• Tidak ada hasil yang ditemukan

pas_int_v.zip 116.82KB 2013-07-11 22:06:38

N/A
N/A
Protected

Academic year: 2017

Membagikan "pas_int_v.zip 116.82KB 2013-07-11 22:06:38"

Copied!
50
0
0

Teks penuh

(1)

SECTION 1 page

Getting Started start here 1

Example 1 your first Pascal program 1

Example 2 cost of buying stamps 4

Designing Programs the four design stages 5

Example 3 cost of a bus journey 5

Example 4 garden fencing 10

Example 5 darts scores 12

Example 6 student test results 12

Example 7 soccer team points 13

Text Variables string data type 14

Example 8 input name and age 14

Semicolons semicolon as a separator 16

Example 9 percentage test result 16

Example 10 sales of chips 17

Example 11 average race times 19

Decisions, decisions IF...THEN...ELSE statements 20

Example 12 old enough to vote? 20

Example 13 exam - pass or fail 21

Example 14 guess the capital city 22

Example 15 electronic scoreboard 25

Example 16 calculating income tax 26

Over and over different types of loops 26

The Unconditional Loop average exam marks 27

The Conditional Loop the guessing game 30

Example 17 the guessing game again... 30

(2)

SECTION 2 page

Procedures, procedures the need to use procedures 35

Example 19 different flavours of chips 35

Example 20 capital cities again 40

Example 21 invoices and sales tax 42

SECTION 3

Arrays the need to use arrays 45

Example 22 read in students' test marks 45

Validation the need to validate data 48

Rounding rounding and truncating 50

Example 23 painting a room 51

SECTION 4

Functions and Parameters what are they? 57

Example 24 using functions 60

Validation again using Boolean results 61

Procedures and Parameters source data and results data 63

Example 25 actual and formal parameters 63

More on Parameters local and global parameters 70

SECTION 5

Files and File Processing storing data on disk 75

Text Files writing to and reading from text files 75

(3)

SECTION 6

Sorting the need to sort data 95

Example 27 the bubble sort 95

Recursion powerful....but what is it? 99

APPENDIX 1

(4)

SECTION 1

Introduction

Pascal is an example of a high level computer programming language. There are many other programming languages and they each have their own advantages and disadvantages.

This course aims to teach you the basics of the language. We'll start with some easy examples and work our way up. Don't be afraid to experiment and don't take things at face value; ask questions - it's the best way to learn.

Getting Started

We'll type in a short Pascal program and demonstrate how it works. Pascal recognizes certain instructions and keywords - we'll type these in capital letters, while anything else will be in small letters. Make sure you use spaces and punctuation exactly as shown here in the examples.

Example 1

 load up your version of Pascal

 type in this program - use your own name instead of A Programmer!

PROGRAM my_first; {short demonstration program}

VAR {by A Programmer}

index : INTEGER; BEGIN

FOR index := 1 TO 10 DO BEGIN

WRITELN(index) END

(5)

checks through your program looking for syntax errors - any obvious mistakes that you might have made, or instructions that Pascal can't understand.

If there are syntax errors, you'll need to correct them before going any further. This is sometimes the most difficult part of getting a program to work properly - check spellings and punctuation carefully!

When your program compiles successfully you are ready to run the program and see if it does what it is supposed to...

 run the program and note what happens

Now for some comments - read them carefully and don't be tempted to skip over this part because it will help you understand what's coming next. We'll look at each line in turn:

PROGRAM my_first; {short demonstration program}

All Pascal programs start with the keyword PROGRAM followed by a name and then a semicolon. The rest of this line is enclosed by curly brackets. Anything in curly brackets is ignored by the computer - the reason it is there, though, is to act as a comment and to help the reader see what each part of the program does. When you write your own programs you should always include such comments.

VAR {by A Programmer}

VAR is short for variable. If your program uses any numbers - or variables - then this is where we say what they are called and what sort of variables they are. As before, the comment in curly brackets is ignored by the computer.

index : INTEGER;

...our program uses just one variable. It is called index and it is a whole number, or integer.

Now we come to the start of the main program. It begins, surprisingly enough, with...

BEGIN

Notice that the lines are now set in a little way from the left margin. This is called indenting and helps to make the program easier to read.

FOR index := 1 TO 10 DO

(6)

BEGIN

...marks the start of the instruction(s) in the loop

WRITELN(index)

...is the only instruction in the loop. It prints out the value of the variable index. Notice, again, that it has been indented.

END

...marks the end of the loop and

END.

...marks the end of the program. Note that there is only ever one full stop in a Pascal program, right at the end.

Let's make one or two changes to the program:

 load my_prog.pas if it isn't already

 change line 6 to read FOR index := 1 TO 20 DO

 compile the program

 run the program and note what happens

 change line 8 to read WRITELN('hello world')

 compile and run this program

 change line 8 to read WRITELN(index, ' times 3 is ', index * 3)

 compile and run this program

So far, we've seen that a Pascal program is made up of a number of instructions. The file containing these instructions is compiled before the program can be run.

(7)

 choose New from the File menu and type in our next example:

PROGRAM stamps; {calculates the cost of stamps}

VAR {by A Programmer}

cost : REAL; number : INTEGER; total : REAL; BEGIN

cost := 0.65;

WRITELN('enter the number of stamps'); READLN(number);

total := number * cost;

WRITELN('you ordered ', number, ' stamps'); WRITELN('the total cost is ', total)

END.

 save the program as stamps.pas

 compile and run the program

It should be obvious that the result is not what you might have expected. To explain why that is, let's look more closely at what's happening. Firstly, the program uses three numbers, or variables, called cost, number and total. The one called number is an integer (a whole number) because it doesn't make much sense to have, say, 0.7 of a stamp! The other numbers, however - called cost and total - are not, of course, always going to be whole numbers and so they are described as type REAL which means they can have a decimal part. That's exactly what has happened and it's just that the answer is not written in a way that is clear to us. We can solve it though...

 change the second last line to this:

WRITELN('the total cost is ', total :5:2);

This is just a bit of formatting so that, when the number total is printed, 5 spaces will be allowed for it and there will be 2 numbers after the decimal point. Easy, see...

The program you've just done is different from the first one in that the user had to enter information when the program is run. In other words, it is interactive as, indeed is most of the software that you use. An improvement that we might consider making is to allow the user to say what the price of each stamp is, rather than assume that it's 65c. How could you make the

(8)

Here's another clue: the two lines will be similar to the part of the program that asks the user to type in the number of stamps...

See your teacher if you're not sure how to do this.

 make the changes to the program

 compile and run the program

 check that it works

Designing Programs

In order to write a program, you first need to decide exactly what it is supposed to do. That might sound obvious but if you make mistakes at this stage it's unlikely that your program will work properly. There are four important processes to consider:

 analyze the problem, decide what the program is meant to do and design a solution

code the program - type in the Pascal code

test the program - check that it produces correct results

evaluate the solution - does it do what it's supposed to? Could it be improved?

We'll run through the following example to show you how the process works.

Example 3

A bus company requires a program which will calculate the cost of a journey given the rate per mile and the length of the journey. For example, if the company charges $0.75 per mile and the journey is 15 miles then the cost of the journey is 0.75 x 15 = $11.25

1. Design a Solution

Many programs follow a basic design that looks something like this:

1. input information 2. process the information 3. output the results

We'll use that approach to solve our example and start with the following:

(9)

does. The first step is to ask the user to enter the information required. What information do we need? Remember that the user needs to be prompted, or told, what to type in, otherwise they won't know what to do...

1.1 ask user to enter rate per mile 1.2 read in rate per mile

1.3 ask user to enter mileage 1.4 read in mileage

Notice the numbering system - step 1 has been broken down into four separate steps 1.1 to 1.4 The second step is fairly simple and can be described in one line...

2.1 calculate cost = rate x mileage

Step 3 is also straightforward...

3.1 print the mileage 3.2 print the rate per mile 3.3 print the cost

So we started with a simple design and refined it, putting in the necessary detail. The complete design is shown below:

1.1 ask user to enter rate per mile 1.2 read in rate per mile

1.3 ask user to enter mileage 1.4 read in mileage

2.1 calculate cost = rate x mileage

3.1 print the mileage 3.2 print the rate per mile 3.3 print the cost

(10)

2. Code the Program

The program needs to use three numbers - the number of miles, the rate per mile and the cost of the journey. We now need to decide i) what to call these numbers, an identifier and, ii) what type of numbers they are. Here's our suggestion, listed in a table

identifier type

rate REAL

miles INTEGER

cost REAL

Remember that whole numbers are INTEGERs. Numbers which might have a decimal part are called REAL numbers. So, now for the code...

PROGRAM bus_journey; {to calculate journey cost}

VAR {by A Programmer}

rate : REAL; miles : INTEGER; cost : REAL; BEGIN

WRITELN('enter the rate per mile '); READLN(rate);

WRITELN('enter the number of miles '); READLN(miles);

cost := rate * miles;

WRITELN('number of miles = ', miles); WRITELN('rate per mile = $', rate); WRITELN('cost of journey = $', cost) END.

(11)

 edit the last but one and last but two lines to read:

WRITELN('rate per mile = $', rate :5:2); WRITELN('cost of journey = $', cost :5:2);

 compile and run the program

 explain why it was not necessary to edit the line

WRITELN('number of miles = ', miles);

We're going to make one or two more changes now...

 edit line 7 to read

WRITE('enter the rate per mile ');

(notice we're using WRITE instead of WRITELN)

 and edit line 9 to read

WRITE('enter the number of miles ');

 compile and run the program

 describe what difference the changes make when you run the program:

 which do you prefer?

(12)

3. Testing the Program

Once you have the program working, you should test it to make sure it works properly. For example, we might draw up a table like the one below and check out various possibilities. What happens if you enter 6.5 for the number of miles? It is, after all, supposed to be a whole number.

 copy and fill in the rest of this table

rate miles expected

answer

result or comment

2 50

0.25 100

0 100

3 6.5

3 mmm

A summary of the results might go something like:

"The program gives correct results for whole numbers. If the user enters a decimal number for the number of miles then a 'run-time error' occurs and the program stops. This also happens if the user enters a letter instead of a number"

4. Evaluation

An evaluation should say whether the program does the job that is was designed for and whether it could be improved. For example:

(13)

A gardener requires a program which will calculate the length of fencing needed for a rectangular garden, given that she knows the length and width.

1. Design a Solution

Using a similar approach to the last example, we'll start with the following:

1. get information from user 2. calculate length of fence 3. print out results

As before, we take each of these steps in turn and write down in more detail what each one does. What information do we need? How do we calculate the length of fencing?

Step 1 becomes:

1.1 ask user to enter length of garden 1.2 read in the length

1.3 ask user to enter width of garden 1.4 read in the width

Step 2 becomes:

2.1 total length of fencing is 2 x length + 2 x width

Step 3 becomes:

3.1 print the length 3.2 print the width 3.3 print the total

The complete design is shown below.

1.1 ask user to enter length of garden 1.2 read in the length

1.3 ask user to enter width of garden 1.4 read in the width

2.1 total length of fencing is 2 x length + 2 x width

(14)

2. Code the Program

The program needs to use three numbers - the length and width of the garden and the total length of fencing. What type of numbers should they be - whole numbers or decimal numbers?

 decide what type of numbers you should use - INTEGER or REAL - then copy the table into your work book and complete it.

identifier type

length width total

 open your Pascal editor and type in the code for the program - you can use the last example as a guide.

 save your program as fencing.pas

 compile and run the program

3. Testing the Program

When you've got the program running, you need to test it.

 draw up a table similar to the one in the previous example and choose some suitable numbers to test your program

 write down a short summary of the results

4. Evaluation

Have a look at the evaluation for the last example and use it as a guide for this one.

(15)

A bar manager would like a program which calculates the darts score when a player throws three darts. The program should print out the three scores and their total.

1. Design a Solution

 write down a design for your solution as we have in the last two examples

 show the completed design to your teacher

2. Code the Program

 type in the code for your program

 save the program as darts.pas

 compile and run the program

3. Test the Program

 as before, draw up a table and choose some suitable numbers to test the program

 write a short summary of the results

4. Evaluation

 write a note giving an evaluation of the program

 show this to your teacher

Example 6

A teacher would like a program that calculates the average mark for students who sit three tests. Each mark is out of 60 and the program should print out the total mark and the average mark.

1. Design a Solution

 write down a design for your solution as we have in the last three examples

(16)

2. Code the Program

 type in the code for your program

 save the program as average1.pas

 compile and run the program

3. Test the Program

 as before, draw up a table and choose some suitable numbers to test the program

 write a short summary of the results

4. Evaluation

 write a note giving an evaluation of the program

 show this to your teacher

Example 7

A newspaper sports editor would like a program which calculates the numbers of points that a soccer team has. Teams get 2 points for a win, 1 for a draw and 0 if they lose.

1. Design a Solution

 write down a design for your solution as we have in the last few examples  show the completed design to your teacher

2. Code the Program

 type in the code for your program  save it as soccer.pas

(17)

 as before, draw up a table and choose some suitable numbers to test the program  write a short summary of the results

4. Evaluation

 write a note giving an evaluation of the program  show this to your teacher

Text Variables

All the programs you've done so far have used numeric variables - ie numbers. Each variable is of a particular type - real or integer - and each has its own name. Variables can be used in calculations as, for example:

average := total / 3;

In this case, average is calculated as having the value of total divided by 3. There are, however, other types of variables...

Variables used to represent text are often called string variables. An example would be a variable containing your name.

Example 8

 type in the following program then compile and run it

PROGRAM text; {using text variables}

VAR {by A Programmer}

name : STRING[10]; age : INTEGER; BEGIN

name := 'A Programmer'; {use your name here}

age := 15;

(18)

The variable called name is defined as a string variable in line 3:

name : STRING[10];

The number 10 in the square brackets means that the string can have up to 10 letters, or characters, in it. This program, of course, doesn't do a great deal. Apart from anything else, it prints the same thing every time you run it.

 edit the program to look like this:

PROGRAM text; {using text variables}

VAR

name : STRING[10]; age : INTEGER; days : INTEGER; BEGIN

WRITE('enter your name : '); READLN(name);

WRITE('enter your age : '); READLN(age);

days := 365 * age;

WRITELN('hello ', name); WRITELN('you are ', age);

WRITELN('you must be at least ', days, ' days old!') END.

 save the program as age.pas

At least this program produces different output depending on what you type in. You'll notice that a couple of the instructions used WRITE instead of WRITELN. Can you remember what

difference it makes?

 edit your program to use WRITELN instead of WRITE  write a short description of the difference in your work book

(19)

You have probably noticed that some lines in your Pascal programs have a semicolon at the end, and some don't. Sometimes, if you forget to put a semicolon at the end of a line, the compiler will report that as an error and refuse to compile your program - it's an easy mistake to make and everyone does it from time to time.

But what are the rules? When is a semicolon required and when does it not matter?

You need to be aware that semicolons are there because they separate one Pascal statement from the next so that the compiler knows where one statement ends and another begins. Here's an example from the program you've just done:

WRITELN('you are ', age);

WRITELN('you must be at least ', days, ' days old!') END.

The semicolon separates the two WRITELN statements but notice that we do not need a

semicolon at the end of the second last line - END is a keyword, not a statement, so it doesn't need a semicolon to separate it from the statement on the previous line.

Example 9

This next program is going to ask the user to enter their name, the number of marks they got in a test and the number of marks that the test is out of. We then calculate the percentage and print out the result. For example, Steve Shark might have scored 15 out of 20 and this is 75%

1. Design a Solution

 write down a complete design for your program  show the design to your teacher

2. Code the Program

 type in the code for your program  save it as percent.pas

(20)
(21)

 as before, draw up a table and choose some suitable data to test the program  write a short summary of the results

4. Evaluation

 write a note giving an evaluation of the program  show this to your teacher

Example 10

A youth club runs a disco every Friday, Saturday and Sunday. They sell different flavors of chips at 65c per bag. The youth club requires a program which adds up the total number of bags of chips of a particular flavor sold on the three nights and calculates the total money raised.

1 Design a Solution

Our first attempt is:

1. get information from user 2. calculate money raised 3. print out results

Step 1 becomes:

1.1 ask user to enter flavor of chips 1.2 read in flavor

1.3 ask user for number sold on Friday 1.4 read in number sold on Friday

1.5 ask user for number sold on Saturday 1.6 read in number sold on Saturday 1.7 ask user for number sold on Sunday 1.8 read in number sold on Sunday

Step 2 becomes:

(22)

Step 3 becomes:

3.1 print out flavor

3.2 print number of bags sold 3.3 print total money raised

The complete design is shown below:

1.1 ask user to enter flavor of chips 1.2 read in flavor

1.3 ask user for number sold on Friday 1.4 read in number sold on Friday

1.5 ask user for number sold on Saturday 1.6 read in number sold on Saturday 1.7 ask user for number sold on Sunday 1.8 read in number sold on Sunday

2.1 calculate total bags sold 2.2 calculate total money raised

3.1 print out flavor

3.2 print number of bags sold 3.3 print total money raised

2. Code the Program

 look again at what the program needs to do and decide how many variables you need  what type of variables are they?

 what will you call them?

 if you're not too sure, then see your teacher before you go any further  use the design above and type in the code for the program

 save the program as chips1.pas  compile and run the program

(23)

4. Evaluate the Solution

 write a report on your solution and suggest any improvements that you could make

[From now on we're not always going to ask you to do steps 3 and 4 ie to test the program and evaluate it. That's not because it isn't important, but because we think you should really do it as a matter of course and without needing to be asked every time. If it's necessary to look at this aspect for any particular examples then we will say so. See your teacher if there's any doubt.]

Example 11

The school PE department requires a program which will calculate average times run by students in the 100yds event. The program should ask for the student's name, their home room class and the best three times that the student has run. The results printed out should show the student's name, their home room class and their average time.

1. Design a Solution

 use the previous examples to help you design a solution to the problem.  show the design to your teacher

2. Code the Program

 decide what variables you need to use in the program

 as before, if you're not too sure, then see your teacher before you go any further  use your design and type in the code for the program

(24)

Decisions, decisions...

Our programs so far have broken down into a list of steps, one after the other. Sometimes, however, we need to make decisions and choose between two or more options.

Pascal uses the keywords IF, THEN and ELSE when making choices.

Example 12

This is a simple program that reads in a person's age and prints out a message.

 type in the program below  save it as voting.pas

PROGRAM voting; {to decide if you can vote or not}

VAR

age : INTEGER; name : STRING[20]; BEGIN

WRITE('enter your name '); READLN(name);

WRITE('enter your age '); READLN(age);

WRITELN('hello ', name); IF age < 18

THEN

WRITELN('you are too young to vote') ELSE

WRITELN('vote for the purple party!') END.

 run this program and check it using different input data

(25)

Here's another example. It reads in a person's test mark and prints a 'pass' or 'fail' message.

 type in the program  save it as passfail.pas

PROGRAM exam; {pass or fail an exam}

VAR

name : STRING[20]; mark : INTEGER; BEGIN

WRITE('enter your name '); READLN(name);

WRITE('enter your mark '); READLN(mark);

IF mark > 50 THEN

BEGIN

WRITELN('hi ', name);

WRITELN('you scored ', mark); WRITELN('well done, you passed') END

ELSE BEGIN

WRITELN('sorry ', name);

WRITELN('you scored ', mark);

WRITELN('you failed, better luck next time') END

END.

(26)

Example 14

This is a game for two players. The program should ask one of the players to enter the name of a country and then the name of its capital. The screen is cleared and the program should then ask the other player to enter the capital of the country and print an appropriate message, depending on whether the answer is right or wrong.

1. Design a Solution

Our first attempt looks like this:

1. get information from player 1 2. get answer from player 2 3. print appropriate message

Step 1 becomes:

1.1 prompt player 1 for country 1.2 read in country

1.3 prompt player 1 for capital 1.4 read in capital

1.5 clear the screen

Step 2 becomes:

2.1 prompt player 2 for answer 2.2 read in answer

Step 3 is the crucial one and becomes:

3.1 if answer is correct 3.2 then

3.3 print 'correct' message 3.4 else

(27)

1.1 prompt player 1 for country 1.2 read in country

1.3 prompt player 1 for capital 1.4 read in capital

1.5 clear the screen

2.1 prompt player 2 for answer 2.2 read in answer

3.1 if answer is correct 3.2 then

3.3 print 'correct' message 3.4 else

3.5 print 'incorrect' message

2. Code the Program

 type in the following program

 you should note that CLRSCR - the instruction to clear the screen - may be different on some machines; see your teacher if you're not sure

PROGRAM quiz; {a quiz game}

VAR

country : STRING[8]; capital : STRING[8]; answer : STRING[8]; BEGIN

WRITE('enter name of country '); READLN(country);

WRITE('enter name of capital '); READLN(capital);

CLRSCR;

WRITE('what is the capital of ', country, '?'); READLN(answer);

(28)

IF answer = capital THEN

BEGIN

WRITELN('the capital of ', country, ' is ', capital); WRITELN('well done, you got it right')

END ELSE BEGIN

WRITELN('sorry, you got it wrong');

WRITELN('the correct answer is ', capital) END

END.

 save the program as cities1.pas  compile and run the program

3. Test the Program

 copy and complete this table for the different test data shown

country capital answer result

France Paris Paris correct

France Paris paris

France Paris 77

Venezuela Caracas Caracas

USA Washington Washington

A summary of the results might be:

"The program gave correct results when the answer matched the capital exactly - it is case-sensitive in as much as upper and lower case letters have to be the same. For example, "Paris" is not the same as "paris". If the user enters a number instead of some text then the answer will be wrong but it will not cause a 'run-time error'.

(29)

An evaluation of the program might be:

"The program meets the design specification and produces correct results when tested. Many improvements are, however, possible. An obvious one would be so that the user could use either upper or lower case letters - provided, of course, that the spelling was correct. The program could be developed such that a number of questions were asked and the user could then be given a score."

Example 15

A large electronic scoreboard in a sports stadium displays the scores of the two teams during a game. At the end of the game we want it to display a 'congratulations' message to the winning team. A program is required which asks the user to enter the names of the two teams and the number of points scored by each. The program will then print out an appropriate message.

1. Design a Solution

 as before, design a suitable solution

 show the completed design to your teacher

2. Code the Program

 type in the code for your program  save it as scores.pas

 compile and run the program

3. Test the Program

 use suitable data to test your program and note the results

There is an obvious flaw in the specification. Does your test data reveal the problem? See your teacher if you're not sure.

4. Evaluate the Solution

Can you describe the problem with the design and suggest how it might be solved?

(30)

Those earning over a certain amount have to pay income tax. To keep the figures simple we'll say that if you earn less than $5000 you pay no income tax, otherwise you pay 25% of anything over $5000. A person earning $4500 would therefore pay no tax but someone earning $5500 would pay 25% of $500, ie $125 in tax.

See your teacher now if you're not sure how this works.

We would like a program which asks the user to enter the amount earned and which then calculates the tax paid, if any, and prints out the results.

1. Design a Solution

 as before, design a suitable solution

 show the completed design to your teacher

2. Code the Program

 type in the code for your program  save it as taxes.pas

 compile and run the program

Over and over ...

A loop is part of a program that gets repeated a number of times. The very first Pascal program you did had a loop in it. Loops can be conditional in which case they repeat until something happens - a condition is met - or they can be unconditional, in which case they are repeated for a fixed number of times. You've already seen an example of an unconditional loop - look back at the first program in this tutorial. The loop starts with...

FOR index := 1 TO 10 DO

... and the instruction(s) to be repeated go between a BEGIN and an END statement:

BEGIN

WRITELN(index) END

(31)

Recall Example 6 where a teacher wanted to read in three marks and calculate the average. Now consider what would happen if there were 10 or 20 or 200 marks...

...well this is what loops are designed for and if we know in advance how many times the loop is to be repeated, then so much the better!

Here's a different design for the program. As each mark is read in, we're going to keep a running total:

1. get information from user 2. calculate average

3. print results

Step 1 becomes:

1.1 set total to zero 1.2 loop for each student

1.3 prompt user to enter mark 1.4 read in the mark

1.5 update the total 1.6 end loop

Step 2 is:

2.1 average = total / number of marks

Step 3 is:

(32)

So the complete design looks like this:

1.1 set total to zero 1.2 loop for each student

1.3 prompt user to enter mark 1.4 read in the mark

1.5 update the total 1.6 end loop

2.1 average = total / number of marks

3.1 print out the total marks 3.2 print out the average mark

 type in this program and save it as average2.pas

PROGRAM unconditional; VAR

mark : INTEGER; total : INTEGER; average : REAL; BEGIN

total := 0;

FOR counter = 1 TO 10 DO BEGIN

WRITE ('type in the exam mark: '); READLN (mark);

total := total + mark END;

average := total / 10; WRITELN('the total is: ');

WRITELN('the average is: ', average) END.

(33)
(34)

Here's a better design that lets the user decide how many students there are:

1.1 set total to zero

1.2 prompt user to enter number of students 1.3 read in number of students

1.4 loop for each student

1.5 prompt user to enter mark 1.6 read in the mark

1.7 update the total 1.8 end loop

2.1 average = total / number of students

3.1 print out the total marks 3.2 print out the average mark

 can you make the necessary changes to your program?

See your teacher if you're not sure how to do this.

(35)

Now for a conditional loop. This is where you don't know in advance how many times you're going to have to go round the loop - you need to loop until something happens to stop the loop, or until a condition is met.

 type in this program

PROGRAM conditional; {a conditional loop}

VAR

number : INTEGER; guess : INTEGER; BEGIN

number := 5; REPEAT

WRITE('enter a number between 0 and 10: '); READLN(guess);

UNTIL guess = number;

WRITELN('what took you so long?') END.

 compile and run the program

As you can see, the loop is repeated until the number typed in is 5.

Example 17

We'll extend the idea now so that one user types in a number and the other person tries to guess it...

1. Design a Solution

Here's our design for the guessing game.

1. get number from player 1

(36)

Step 1 becomes:

1.1 prompt player 1 for number 1.2 read in number

1.3 clear the screen

Step 2 becomes:

2.1 repeat

2.2 prompt player 2 for guess 2.3 read in guess

2.4 until guess is correct

So the complete design is:

1.1 prompt player 1 for number 1.2 read in number

1.3 clear the screen

2.1 repeat

2.2 prompt player 2 for guess 2.3 read in guess

2.4 until guess is correct

3 print message

2. Code the Program

 type in the code for the program  save it as guess1.pas

(37)

We'd like now to extend the design of the previous program and add one or two new features. It would be helpful if the program could give some clues and say whether the guess is too big or too small. It would also be helpful if the program could count the number of guesses and print the total at the end. We'll start our new design just like the original one:

1. Design a Solution

1. get number from player 1

2. get guess(es) from player 2 until guess is correct 3. print message

Step 1 becomes:

1.1 prompt player 1 for number 1.2 read in number

1.3 clear the screen

Step 3 becomes:

2.1 repeat

2.2 prompt player 2 for guess 2.3 read in guess

2.4 print clue

2.5 update number of guesses 2.6 until guess is correct

Step 2.4 needs some clarification - note how the numbering system works...

2.4.1 if guess > number

2.4.2 then

2.4.3 print "guess is too big" 2.4.4 if guess < number

2.4.5 then

2.4.6 print "guess is too small"

Step 3 becomes:

3.1 print message

(38)

So the complete solution is:

1.1 prompt player 1 for number 1.2 read in number

1.3 clear the screen

2.1 repeat

2.2 prompt player 2 for guess 2.3 read in guess

2.4.1 if guess > number

2.4.2 then

2.4.3 print "guess is too big" 2.4.4 if guess < number

2.4.5 then

2.4.6 print "guess is too small" 2.5 update number of guesses 2.6 until guess is correct

3.1 print message

3.2 print number of guesses

2. Code the Program

As before, you should note that the whole point of designing the program is to make it easy to code. Check that the design above corresponds with the program below.

 type in the program

PROGRAM guessing; {a guessing game}

VAR

number : INTEGER; guess : INTEGER; total : INTEGER;

BEGIN

WRITE('enter the number to guess '); READLN(number);

(39)

IF guess > number THEN

WRITELN('guess is too big'); IF guess < number

THEN

WRITELN('guess is too small'); total := total + 1;

UNTIL guess = number;

WRITELN('well done');

WRITELN('you took ', total, ' guesses') END.

 save the program as guess2.pas  compile and run the program

(40)

SECTION 2

Introduction

You've now covered some of the basic programming ideas and are now in a position to think in more detail about how best to make programs work for you. Solving problems can be a

frustrating business but programming is meant to be fun too - remember that everyone makes mistakes and you shouldn't be surprised if your program doesn't work first time...

Procedures, procedures...

All of the programs you've done so far have been fairly short. For more complex tasks though, clearly, the code for the programs is going to be more complicated and much longer. For this reason, and also because it's good practice, most programs are broken down into smaller sections called procedures. A procedure, then, is a section of code which does a particular job. This part of the course is a rather simplified treatment of some of the issues involved in using procedures. We should note that, as with most things, there is more to the topic than meets the eye but a more detailed treatment can be left for later.

Example 19

To illustrate the use of procedures, we'll use Example 10, the design for which is shown below:

1. get information from user 2. calculate money raised 3. print out results

...which led us to this:

1.1 ask user to enter flavor of chips 1.2 read in flavor

1.3 ask user for number sold on Friday 1.4 read in number sold on Friday

1.5 ask user for number sold on Saturday 1.6 read in number sold on Saturday 1.7 ask user for number sold on Sunday 1.8 read in number sold on Sunday

(41)
(42)

Notice that, as with many designs, we start with a basic scheme with a small number of steps - in this case, three - and then take each of them in turn and write a more detailed description.

We wish to split our program into smaller 'chunks', or procedures, so we'll decide now that there will be three - one for each of the main steps 1, 2 and 3. Have a look at what each one does then decide on a name for the procedure in the same way that you choose names for variables.

step name

1. get information from user get_info 2. calculate money raised calc_sales

3. print results results

The main program now consists of the three procedures.

 type in the code below

PROGRAM chips; {to calculate chip sales}

VAR

flavor : STRING[10]; friday : INTEGER; saturday : INTEGER; sunday : INTEGER; bags : INTEGER; sales : REAL;

BEGIN {main program starts here}

get_info; calc_sales; results END.

(43)

procedures! We need to describe what each procedure does. Let's take get_info first and remind ourselves of the detailed description for step 1 as given in Example 10

1.1 ask user to enter flavor of chips 1.2 read in flavor

1.3 ask user for number sold on Friday 1.4 read in number sold on Friday

1.5 ask user for number sold on Saturday 1.6 read in number sold on Saturday 1.7 ask user for number sold on Sunday 1.8 read in number sold on Sunday

Our procedure will do just what is required for each of these steps. The code is shown below.

PROCEDURE get_info; {to get details from user}

BEGIN

WRITE('enter flavor of chips '); READLN(flavor);

WRITE('enter number sold on Friday '); READLN(friday);

WRITE('enter number sold on Saturday '); READLN(saturday);

WRITE('enter number sold on Sunday '); READLN(sunday)

END;

Notice again how closely the instructions follow the detailed design. The code for the procedure is slotted in before the start of the main program so that we now have:

PROGRAM chips; {to calculate chip sales}

VAR

(44)

PROCEDURE get_info; {to get details from user} BEGIN

WRITE('enter flavor of chips '); READLN(flavor);

WRITE('enter number sold on Friday '); READLN(friday);

WRITE('enter number sold on Saturday '); READLN(saturday);

WRITE('enter number sold on Sunday '); READLN(sunday)

END;

BEGIN {main program starts here}

get_info; calc_sales; results END.

 type in the extra code and save it as chips2.pas  compile the program

Again the error message should come as no surprise since we have only entered one of the three procedures so far. Step 2 looked like this and the procedure only has a couple of instructions in it...

2.1 calculate total bags sold 2.2 calculate total money raised

...and the code is...

PROCEDURE calc_sales; {to calculate the sales}

BEGIN

bags := friday + saturday + sunday; sales := 0.65 * bags

(45)

PROGRAM chips; {to calculate chip sales} VAR

flavor : STRING[10]; friday : INTEGER; saturday : INTEGER; sunday : INTEGER; bags : INTEGER; sales : REAL;

PROCEDURE get_info; {to get details from user}

BEGIN

WRITE('enter flavor of chips '); READLN(flavor);

WRITE('enter number sold on Friday '); READLN(friday);

WRITE('enter number sold on Saturday '); READLN(saturday);

WRITE('enter number sold on Sunday '); READLN(sunday)

END;

PROCEDURE calc_sales; {to calculate the sales}

BEGIN

bags := friday + saturday + sunday; sales := 0.65 * bags

END;

BEGIN {main program starts here}

get_info; calc_sales; results END.

 it's your turn now to write the code for the procedure results and put it into the program  save the complete program

 compile and run it and then show it to your teacher

(46)

Example 20

Here's the first attempt at a design for Example 14 again:

1. get information from player 1 2. get answer from player 2 3. print appropriate message

Each of these three steps will become a procedure. Let's choose names for them as follows:

step name

1. get information from player 1 get_info 2. get answer from player 2 get_answer 3. print appropriate message message

So the program looks like this just now:

PROGRAM quiz; {a quiz game}

VAR

country : STRING[8]; capital : STRING[8]; answer : STRING[8];

BEGIN {main program starts here}

get_info; get_answer; message END.

(47)

VAR

country : STRING[8]; capital : STRING[8]; answer : STRING[8];

PROCEDURE get_info; {to get information from player 1}

BEGIN

WRITE('enter name of country '); READLN(country);

WRITE('enter name of capital '); READLN(capital);

CLRSCR END;

PROCEDURE get_answer; {to get answer from player 2}

BEGIN

WRITE('what is the capital of ', country, '? '); READLN(answer)

END;

{the other procedure goes in here}

BEGIN {main program starts here}

get_info; get_answer; message END.

 enter the code above and save it as cities2.pas

 the procedure message below has been done for you, except that the lines have been jumbled up - you need to put them in the right order and put the procedure in the correct place in the program...

PROCEDURE message; {to print an appropriate message} ELSE

WRITELN('wrong - the answer is ', capital) IF answer = capital

WRITELN('correct - well done!') THEN

(48)

Example 21

We'll go through a complete example now to make sure we've got the hang of things so far.

A company gets orders from its customers and gives a discount of 10% on orders worth more than $200. Whatever the total comes to, sales tax at 5% has to be added. A typical bill, or invoice, might look like this:

value = 220.00

discount = 22.00 subtotal = 198.00 sales tax = 9.90

total = 207.90

If the value is less than $200 then the discount would, of course, be zero but you would still need to add sales tax.

See your teacher now if you're not sure how this works.

1. Design a Solution

Our first attempt is:

1. get value of order 2. calculate total 3. print invoice

[HINT: already you should see that the main program looks like being made up of three procedures]

Step 1 is straightforward...

(49)

2.1 if value is greater than $200 2.2 then

2.3 discount is 10% of value 2.4 else

2.5 discount is zero 2.6 subtotal is value - discount 2.7 sales tax is 5% of subtotal 2.8 total is subtotal + sales tax

Step 3 is simply

3.1 print value 3.2 print discount 3.3 print subtotal 3.4 print sales tax 3.5 print total

The complete design, then, looks like this:

1. get value of order 2. calculate total 3. print invoice

1.1 prompt user for value of order 1.2 read in value of order

2.1 if value is greater than $200 2.2 then

2.3 discount is 10% of value 2.4 else

2.5 discount is zero 2.6 subtotal is value - discount 2.7 sales tax is 5% of subtotal 2.8 total is subtotal + sales tax

(50)

So if we use get_value, calc_total and invoice for the procedure names, the outline of the program will look like this:

PROGRAM orders; {to print out an invoice}

VAR

value : REAL; discount : REAL; subtotal : REAL; sales_tax : REAL; total : REAL;

{procedure get_value goes here}

{procedure calc_total goes here}

{procedure invoice goes here}

BEGIN {main program starts here}

get_value; calc_total; invoice END.

 type in the outline of the program as above and save it as invoice.pas

 see your teacher now who will show you how to compile it without getting error messages

 add the procedure get_value and compile it to make sure there are no mistakes  add each of the other two procedures in turn, compiling the program after each one  save the complete program and run it.

Referensi

Dokumen terkait

Kepada peserta lelang yang keberatan dengan pengumuman ini diberikan kesempatan untuk menyampaikan sanggahan melalui aplikasi SPSE kepada Pokja IV Unit Layanan

groups of negotiation in the WTO system, but also exercised the WTO DSM to solve a dispute with another WTO member country. Indonesia has involved in the WTO DSM as complainant for

Effect of initial concentration of metal solution on adsorption efficiency of Cr(III) by polycalix[6]arene.. This fact can be explained on the basis of surface characteristics of

[r]

Berdalvrrl&lt;an hasil Evaluasi dan Penehian terhadap hatga tawaran lelang Pengadaan Pestisida ( Insektisida dffi, I.anlrlasid* ) Talsm Anggaran 7fi1T, dengan ini

Penyedia jasa konsultansi atau masyarakat yang keberatan terhadap Pengumuman Daftar Pendek pengadaan jasa Konsultansi penyusunan Anggaran Responsif Gender (ARG) dapat

Simulasi atau Micro Teaching Penggunaan Media Pembelajran dan APEM pada Anak Usia TKb. Sub Pokok

Pokja Pengadaan Makan dan Extra Fooding Diktuk Brig Polri SPN Polda NTB TA.2016 akan melaksanakan [Pelelangan Sederhana] Pascakualifikasi dengan SPSE untuk paket