You 
            can print out the telephone number of the third person as 
            follows:          
              
            writeln('Telephone number of ',name[3],' is: 
            ',tele[3]);     
            
            Suppose you want to find the telephone number of JOE, but you 
            do not know the index number. To find the telephone number, you will 
            need to search through the array of names looking for JOE. If you 
            find a match you have found the index number.         
                         
                        
                        
             
            index := 0; 
            for 
            count :=  1 to 7  do    
            if 
            name[count] =  'JOE' then index : =    count; 
            Now to 
            print the name and telephone number:       
            if 
            index >0 then     
            writeln('Telephone number of ',name[index],' is: 
            ',tele[index]);     
            
            Program 10-1 first sets up an array of 7 names and 7 
            corresponding telephone numbers. This is done through constant 
            declaration of the array elements. There are many ways to do this. 
            Ideally, you would read the names and telephone numbers from a file 
            which is updated as needed. However, for the purpose of the search 
            and sort examples, this method of array declaration is sufficient. 
            In order to find the telephone number of a person the following 
            steps needs need to be followed:           
                     
			1 
			) ask for the name of the person.
            2
            ) initialize index to 0.   
            3
            ) search through the list for a match. 
            4
            ) If  match found set index to that element.
            5
            ) If the index is greater than 0 print the name, telephone number.
			6 
			) If the index remains zero then print 'Person not in file!'.    
			
            PROGRAM 10-1 
            
              
              
                | 
                   Program 
                  ShowTele(input,output); 
                   
                  type 
                  ArrayType = 
                  array[1..7] of string[8];  
                     
                  const 
                  Name : 
                  ArrayType =   ('JOHN','PHILIP','MARY','KAY',   
                  'SAM','JOE','JACK'); 
                  TELE : 
                  ArrayType= 
                    ('631-4431','834-3312','351-5522','531-6234', 
                   
                  '531-0064','563-3512','512-0695'); 
                  var 
                  person: 
                  string[8];  
                  index, i : 
                  integer;  
                  
                  begin 
                  {ask name of 
                  the person}     
                  write 
                  ('Telephone number for who: ');readln(person);  
                     
                   index 
                  := 0;  
                  for i :=  1 
                  to 7  do     
                  if person = 
                   name[i] then index : =    i;  
                  {search 
                  through the list for the person       
                  if found write 
                  the telephone number}      
                  if index >0 
                  then      
                  writeln('Telephone number of ',person, ' is: 
                  ',tele[index])  
                       
                  else 
                  writeln('person not in file');   
                           
                  end.
                       | 
				   Program run: 
            Turbo 
            Pascal Version 6.0 Copyright (c) 1983,90 Borland International 
                   
              
            Telephone number for who: MARY      
            Telephone number of MARY is: 351-5522       
            Type 
            EXIT to return to Turbo Pascal...        
            
            This program works quite well for such a small 
            list. Suppose you had 1,000 names in the list. With this program you 
            will have to wait until the entire 1,000 names have been searched, 
            even though you may have found a match within the first 10 names. If 
            different individuals had the same name, you will only get the 
            telephone number of the last person with the match. Let us modify 
            the program so that the first problem can be solved. To solve the 
            second program we need the program to print each name with a match; 
            in order to keep the program short, this is not discussed 
            here.
            PROGRAM 
            10-2 
            
              
              
                | 
                   Program 
                  ShowTele(input,output); 
                   
                  type 
                  ArrayType = 
                  array[1..7] of string[8];  
                     
                  const 
                  Name : 
                  ArrayType =   ('JOHN','PHILIP','MARY','KAY',   
                  'SAM','JOE','JACK'); 
                  TELE : 
                  ArrayType= 
                    ('631-4431','834-3312','351-5522','531-6234', 
                   
                  '531-0064','563-3512','512-0695'); 
                  var 
                  person: 
                  string[8];  
                  index, i : 
                  integer;    
                  found : 
                  boolean;   
                  
                  begin 
                  {ask name of 
                  the person}     
                  write 
                  ('Telephone number for who: ');readln(person);      
                   found 
                  := false;  
                  i:=1; 
                  while 
                  not(found) and (i <=  7)    do   
                  
                       
                  if person = 
                   name[i] then    
                  begin
                         
                  index := i;< /FONT> 
                  < /FONT>  
                        found 
                        := true; 
                   end;
                      
                  i:= i+1;  
                  END;
                    
                  {search through the list for the person
				    
                  if found write 
                  the telephone number}      
                  if found 
                  then   
                  writeln('Telephone number of ',person, ' is: 
                  ',tele[index])  
                       
                       else 
                  writeln('person not in file'); 
                    
                  end.
                   | 
            Program run: 
            Telephone number for who: JOHN      
            Telephone number of JOHN is: 631-4431       
            Type 
            EXIT to return to Turbo Pascal...        
            Microsoft(R) MS-DOS(R) Version 5.00     
            (C)Copyright Microsoft Corp 1981-1991.     
            B:\>  
            In 
            this example, since the names were not alphabetized, we had to 
            search through the entire list. This type of searching is known as 
            the sequential search through an unordered list or linear search. 
            However, if the list was alphabetized, like a telephone directory, 
            we could stop looking after a certain name is passed. For example, 
            you were looking for Annet Brooks; you looked through all names 
            beginning with 'Broo' and now you are at Jerry Brown. You know that 
            either you passed the name you are looking for or the name is not 
            listed.         
                    
            If you 
            have an alphabetized list you could look at the name in the middle 
            of that list and determine whether the name you are interested in 
            should be in the first half or the second half of the list. If it is 
            in the first half of the list, you could look at the middle name of 
            the first half of the list and determine whether the name is in the 
            first half or the second half of that portion, and so on. This way, 
            you cut the size of the list to one half each time. Such a searching 
            technique is known as the binary search. We will not be covering the 
            binary search here.           
                  
            SORTING
            A list 
            of ten random numbers could be sorted from the smallest to the 
            largest several different ways. One approach might be to look 
            through the list find the smallest number, place it a second list 
            called the sorted list and scratch it from the original list. Now 
            look for the smallest number in the remaining list, place it in the 
            sorted list and scratch it from the original list. Continue this 
            until only one number is left in the original list, move it to the 
            sorted list, and you are done. This algorithm can be used to sort a 
            list in Pascal.          
                      
            PROGRAM 10-3 
            
            end.
            Program run: 
            Unsorted list:   
            15 11 
            33 51 3 2 12 36 98 53           
            The 
            sorted list is:     
            2 3 11 
            12 15 33 36 51 53 98           
            Type 
            EXIT to return to Turbo Pascal...        
            Microsoft(R) MS-DOS(R) Version 5.00     
            (C)Copyright Microsoft Corp 1981-1991.     
            B:\>  
            Since 
            we can't scratch out a number from the memory, once a number is 
            used, we would set it to a large number so it would be used as the 
            smallest number again. Program 10-3 does the following:         
                           
                         
            
            1. 
            places ten integers in an array of numbers.        
            2. 
            prints these ten unsorted integers.     
            3. 
            find the smallest number from the list 10 times.         
            
            4. 
            when the smallest number is found save it's index.         
            
            5. 
            move the smallest number to the sorted list.        
            6. 
            scratch that number out from the original list.        
            
            (do 
            this by making it a large number).       
            7. 
            Print the sorted list.    
            The 
            main disadvantage to this sort algorithm is that we have to have two 
            arrays to do the sorting, the original array and the sorted one. The 
            second disadvantage is that searching for the smallest should be 
            done as many times as the total number of numbers. Each search goes 
            through the whole list.        
                         
                       
                          
                   
            Another algorithm for sorting is known as the bubble sort. 
            Bubble sort compares two adjacent numbers; if they are out of order, 
            the numbers are swapped. Keep doing this until there are no more 
            swaps. We will see that after one iteration of this bubbling 
            process, the largest number would be at the bottom. Knowing this, 
            the next time we only have to go through the list one less time. Let 
            us modify the above program to the bubble sort.        
                       
                        
                         
                       
                          
                      
             
            PROGRAM 
            10-4 
            
            end. 
            Program run:
            Unsorted list:   
            15 11 
            33 51 3 2 12 36 98 53           
            The 
            sorted list is:     
            15 11 
            33 51 3 2 12 36 98 53           
            Type 
            EXIT to return to Turbo Pascal...        
            Microsoft(R) MS-DOS(R) Version 5.00     
            (C)Copyright Microsoft Corp 1981-1991.     
            B:\>  
            Notice 
            that in Program 10-4 we compared the first number to the second 
            number and so on:         
                   
            If 
            numbers[count] > numbers[count+1] then ...     
            We 
            need to be very careful that count+1 does not go over the total 
            number of elements we have in the list. In order to do this we make 
            sure that 'count' will never get larger than one less than the total 
            number of elements.           
                          
                         
                  
            
            pass 
            :=  pass -1 ;   
            for 
            count :=  1 to pass do  ..;     
            If the 
            list was sorted to begin with, the program will go through the 
            repeat loop only one time. Since no swap occurred 'exchanged' will 
            remain false, which will terminate the loop.          
                        
                     
            
            How 
            can the bubble sort be applied to the name and telephone number list 
            we discussed earlier in this chapter? Let us write a program to sort 
            that list. However, here we have an unique problem, we only want to 
            sort the names, not the telephone numbers. We want the telephone 
            numbers to go with the names! Pay close attention to Program 10-5 to 
            see how it is done.           
                       
                         
                        
                        
                     
            PROGRAM 10-5 
            
              
              
                | 
                   Program 
                  Sort3(input,output);  
                  type 
                  ArrayType = 
                  array[1..7] of string[8];  
                     
                  const 
                  Name : ArrayType = 
                    ('JOHN','PHILIP','MARY','KAY', 'SAM','JOE','JACK');<  /FONT >  
                  TELE : 
                  ArrayType= 
                    ('631-4431','834-3312','351-5522','531-6234', 
                   
                  '531-0064','563-3512','512-0695'); 
                  var 
                  person, phone: 
                  string[8];   
                  index, i : 
                  integer;    
                  swapped : 
                  boolean;   
                  begin
                  
                  {write the 
                  unsorted lists}    
                  writeln('Unsorted list: ');writeln;   
                  for index :=  
                  1 to 7  do     
                  writeln(name[index],tele[index]:12); 
                     
                  {sort the 
                  names and telephone numbers}      
                   i 
                  := 7;  
                  repeat 
                  i:=i 
                  -1;  
                  swapped := 
                  false;< /FONT>  
                    for index := 1 to i do<  /P>  
                    
                      
                  if name[index] 
                  > name[index+1] then     
                  begin
                         
                  person := 
                  name[index];< /FONT>  
                  name[index] := 
                  name[index+1];< /FONT>  
                  name[index+1] 
                  := person;< /FONT>  
                  phone := 
                  tele[index];< /FONT>  
                  tele[index] := 
                  tele[index+1];< /FONT>  
                  tele[index+1]:= phone;  
                  swapped := 
                  true;< /FONT>  
                   end;
                      
                  until 
                  not(swapped);  
                  {print sorted 
                  names and telephone numbers}      
                  writeln('Sorted list: ');writeln;   
                  for index := 1 
                  to 7 do< /FONT> 
                        
                  writeln(name[index], tele[index]:12);   
                  end. <  /FONT>       | 
             
            Program run: 
            Unsorted list:   
            JOHN 
            631-4431   
            PHILIP 
            834-3312   
            MARY 
            351-5522   
            KAY 
            531-6234   
            SAM 
            531-0064   
            JOE 
            563-3512   
            JACK 
            512-0695   
            Sorted 
            list:   
            JACK 
            512-0695   
            JOE 
            563-3512   
            JOHN 
            631-4431   
            KAY 
            531-6234   
            MARY 
            351-5522   
            PHILIP 
            834-3312   
            SAM 
            531-0064   
            Type 
            EXIT to return to Turbo Pascal...        
            Microsoft(R) MS-DOS(R) Version 5.00     
            (C)Copyright Microsoft Corp 1981-1991.     
            B:\>  
            There are other sort algorithms that are used by 
            Pascal programmers. One such sort algorithm is the Quick Sort. Quick 
            Sort will not be discussed here. Another sort algorithm that you 
            should be familiar with is the Merge Sort. If you have a list 
            already sorted, but wanted to add just few names to it, there is no 
            need to sort the whole list. You can do a merge sort. The small list 
            should be sorted first. Then two pointers are used to go through the 
            main list and the small list. Values from the two lists are 
            compared, the smaller of the two is taken and written to the merged 
            list. This process continues until the smaller list is exhausted. 
            These algorithms are mentioned here for you to become familiar with 
            the terms. These algorithms work well with recursion, which we have 
            not discussed.
			
			Go to top of this chapter