chapter 9: more about data, arrays, and files
Post on 05-Jan-2016
38 Views
Preview:
DESCRIPTION
TRANSCRIPT
Extended Prelude to Programming Concepts & Design, 3/e
byStewart Venit and Elizabeth Drake
Chapter 9:More About Data, Arrays, and Files
2
9.1 Random Numbers
• Random numbers are numbers whose values form an unpredictable sequence
• Many languages contain a Random Number Generator function to generate a sequence of random numbers
• Random numbers are often used in gaming programs, simulations, etc.
• The pseudocode Random(N) represents a function which causes the program to generate a random integer in the range 1 to N
3
Random Numbers (continued)
• Random(3) generates 1, 2, or 3
• To change the range of the numbers generated, shift the output of the function[Random(3) + 5] generates 6, 7, or 8
[Random(5) – 4] generates -3, -2, -1, 0, or 1
[Random(3) * 5] generates 5, 10, or 15
4
The Pseudorandom Number
Random numbers in a computer program are not truly random. They are generated by a mathematical algorithm.
The beginning value – the number that the algorithm uses to start with – is called the seed.
To ensure that the algorithm does not generate the same numbers each time, it is necessary to use a different seed each time.
An example of a good seed value is the number of milliseconds since the beginning of the current year since this value will only occur once every year.
For our purposes, pseudorandom numbers are just as useful as true random numbers.
5
9.2 ASCII Code
• A character is a single number, letter or symbol that can be typed at the keyboard.
• Each character is represented internally by a numeric code. The code for these numbers is called ASCII.
• ASCII stands for American Standard Code for Information Interchange.
• Lower and upper case letters are represented by different numbers.
• Even a space or blank is represented by a number!• Enclose characters in double quotes.• A string is a sequence of characters.• Enclose strings in double quotes.
6
Ordering Arbitrary Strings
• Two strings are equal if they have the same length and the same characters, in the same order.
• “Blue” and “B L U E” are not equal.• “c%$$” and “c%$$” are equal.• Enclosing a number in quotes causes the
number to be regarded as a string. For example:Write “1 + 2”
will not display 3, but will display the character string:
1 + 2
7
9.3 Additional Searching and Sorting Techniques
Binary Search:
• Searching for data can be done with the sequential search, as seen in Chapter 5. For large amounts of data, it is more efficient to use a binary search algorithm.
• Data must be sorted before a binary search can be used.
Suppose you are looking for a word in the dictionary. Using a sequential search you would look at the first word, then the second, then the third until you find the word you are looking for. Here’s how it would work using a binary search:
1. Open the dictionary to the target word's approximate location.
2. Check the target word against an entry on that page to determine if you have gone too far or not far enough.
3. Repeat steps 1 and 2 until you have located the target word.
8
Pseudocode for the Binary Search
Set Low = 0Set High = NSet Index = Int(N/2)Set Found = 0While (Found = 0) AND (Low <= High)
If Key = Array[Index] Then Set Found = 1
End IfIf Key > Array[Index] Then
Set Low = Index + 1 Set Index = Int((High + Low)/2)End IfIf Key < Array[Index] Then
Set High = Index - 1 Set Index = Int((High + Low)/2)End If
End While
9
A Walk Through a Binary Search
10
The Selection Sort
• The selection sort is a more efficient way to sort data than the bubble sort presented in Chapter 5.
• Here’s how we would use it to sort an array in ascending order (from smallest to largest). We make several passes through the array:– On the first pass, we locate the smallest array element and swap it with
the first array element.– On the second pass, we locate the smallest element after the first one
and swap it with the second element of the array.– On the third pass through the array, we locate the smallest element
after the second one and swap it with the third element of the array.– And so on. If the array contains N elements, it will be completely sorted
after at most N - 1 passes.
11
Pseudocode for the Selection Sort
To fully understand the selection sort algorithm, you must walk through the code using example data.
This pseudocode will sort an array consisting of N + 1 elements.
For K = 0 Step 1 To N - 1Set Min = Array[K]Set Index = KFor J = K + 1 Step 1 To N
If Array[J] < Min ThenSet Min = Array[J]Set Index = J
End IfEnd For (J)If K <> Index Then
Set Temp = Array[K]Set Array[K] = Array[Index]Set Array[Index] = Temp
End IfEnd For (K)
12
9.4 Introduction to Direct-Access Files
A direct-access file is often called a random access file. It is different from a sequential file in that any record can be read independently from the rest. A sequential file must be read from the beginning.
A sequential file is analogous to a tape player: if you want to listen to the 5th song, you must fast-forward through the first 4 songs.
A direct-access file is analogous to a CD: if you want to hear the 5th song on a CD, simply select Track 5 and you can jump right to it.
13
Defining Records for Direct-Access Files
A direct-access file must have a known structure for its records.
Record structures will be defined in our pseudocode language as a new data type. Consider the following a the definition of a data type:
Record Type StudentInfoCode As String[4]Name As String[12]
End Record
We can then declare a variable of this new type as follows:Declare Student as StudentInfo
14
Records of Data in a Direct-Access File
Declare Student as StudentInfoThe variable Student has 2 fields, both of them are Strings, and
their names are:Student.CodeStudent.Name
The record size for a direct-access file must be known exactly so it is possible to Seek to a particular record position in the file.SeekGet filename, record number, record variable
For example:SeekGet DataFile, 5, Student
will read the 5th record from the DataFile, and store the data in the variable called Student. There is a corresponding SeekPut for adding data to a direct-access file.
15
Using a Direct-Access File
The following program creates and displays a direct-access file with records of the form:Student ID (4-character string)Student name (12 character string)Units earned (integer)Grade point average (real)
Record Type StudentInfoCode As String[4]Name As String[12]Units As IntegerGPA As Real
End RecordContinued…
16
Using a Direct-Access File
17
9.5 Using Direct-Access Files:Indexed Files
Direct-access files are very useful for maintaining files of data that are frequently modified. For example, in a file of student data, we might want to add, delete, and update student information.
A realistic example of manipulating a direct-access file is developed in Ch. 8. We start with the record definition, and we open a direct-access file for Random Access.
Record Type StudentInfoCode As String[4]Name As String[12]Units As IntegerGPA As RealEnd Record
Declare Student As StudentInfoOpen “studata” For Random As DataFile, Len=Length(Student)
18
Adding, Deleting, Updating Records
To manipulate a direct-access file, we need to know the length of each record, and how many records are currently in the file.
In our pseudocode language, we will specify the length of each record at the time we open the file.
This calculates the bytes in each record:
Len = Length(Student)
This calculates the current length of the file in bytes:LOF(DataFile)
This calculates how many records are in the file:LOF(DataFile) / Length(Student)
19
Adding, Deleting, Updating Records (continued)
• Adding a recordWrite “Enter data for new student in the form:”Write “ID Code, Name, Units Earned, GPA”Input Student.Code, Student.Name, Student.Units,
Student.GPASet Last = LOF(DataFile) / Length(Student)SeekPut DataFile, Last + 1, Student
• Deleting a recordWrite “Record number of record to be deleted:”Input NumberSet Student.Code = “”Set Student.Name = “”Set Student.Units = 0Set Student.GPA = 0SeekPut DataFile, Number, Student
20
Adding, Deleting, Updating Records (continued)
• Modifying a recordThis program segment changes the data in the units earned and GPA fields of
the studata file
Write “Record number of record to be modified:”Input NumberSeekGet DataFile, Number, StudentWrite “Student name: ”, Student.NameWrite “Enter total units earned, new GPA”Write “or enter 0,0 to leave the record unchanged.”Input Student.Units, Student.GPAIf Student.Units <> 0 Then
SeekPut DataFile, Number, StudentEnd If
21
Indexed Files
• From the previous code, it might be noted that the difficulty with the direct-access file is that you must know the record number of the record you wish to delete, or modify.
• This is addressed by indexed files. The basic idea of an indexed file is that a separate file is maintained that contains a key item in the records along with the record number for that item.
• For example, the Student.Code is a unique identifier for each student, and a file can be created that contains the student codes and their associated record number. This file is called the index file, and its purpose is to make the access of the direct-access file more friendly and efficient.
22
Pseudocode Language (Ch 9)Random Number Generator
Random(N) generates a pseudorandom number from 1 to N
Create a Record for a direct-access file
Record Type RecordInfo
OneThing As String[4]
AnotherThing As Real
End Record
Declare a Variable of the new Type
Declare Variable As RecordInfo
Calculate bytes in each record:Len = Length(Student)
Calculate the length of file in bytes:LOF(DataFile)
Calculates number of records in the file:LOF(DataFile) / Length(Student)
To find a record in a direct-access file
SeekGet filename, record number, record variable
To add a record to a direct-access file
SeekPut filename, record number, record variable
top related