470 likes | 488 Views
Array Processing. Lecture 7. Motivation. One of the most powerful programming tools available Help to organize a collection of homogeneous data items (same type and lenght). The individual data items that make up the array are called as Element of the array
E N D
Array Processing Lecture 7
Motivation • One of the most powerful programming tools available • Help to organize a collection of homogeneous data items (same type and lenght). The individual data items that make up the array are called as Element of the array • Example: Scores[3] indicated the third exam score
Operation on Arrays • Loading initial value into the element of array • Processing the elements of the array • Searching an array (linear or binary search) • Writing out the array content to the report
Example 7.1 Find the sum of the elements of an array • Each elemen of the array is accumulated into a variable called sum. When all elements have been added, the variable sum is printed.
Find_sum_of_elements Set sum to zero DO index = 1 to number_of_elements sum = sum + array(index) ENDO Print sum END
Example 7.2 Find the average of the elements of an array • Each element of the array is accumulated into a variable called sum. When all elements have been added, the average of the elements is found and printed.
Find_element_average Set sum to zero DO index = 1 to number_of_elements sum = sum + array(index) ENDO Average = sum / number_of_elements Print average END
Example 7.3 Find the largest elements of an array • The elements of an array are searched to determine which element is the largest. The algorithm starts by putting the first element of the array into the variable largest_element, and then looks at the other elements of the array to see if a larger value exists. The largest value is then printed.
Find_largest_element Set largest_element to array(1) DO index = 2 to number_of_elements IF array(index) > largest_element THEN largest_element = array(index) ENDIF ENDO Print largest_element END
Example 7.4 Find the smallest of the elements of an array • The elements of an array are searched to determine the smallest element. The algorithm starts by putting the first element of the array into the variable smallest_element, and then looks at the other elements of the array to see if a smaller value exists. The smallest value is then printed.
Find_smallest_element Set smallest_element to array (1) DO index = 2 to number_of_elements IF array(index) < smallest_element THEN smallest_element = array(index) ENDIF ENDO Print smallest_element END
Find_range_of_element Set smallest_element to array(1) Set largest_element to array(1) DO index = 2 to number_of_elements IF array(index) < smallest_element THEN smallest_element = array(index) ELSE IF array(index) > largest_element THEN largest_element = array(index) ENDIF ENDIF ENDO Print the range as smallest_element followed by largest_element END
Initialising the elements of an array • Because an array is an iternal data structure, initial values must be placed into the array before any information can be retrieved from it. • The initial values can be assigned to the element as constant or be read from file.
Loading constant values into array (only be used for data which is unlikely to be changed) Initialise_month_table month_table(1) = `Januari` month_table(2) = `February` . . . month_table(12) = `December` END
2. Loading initial values into an array from an input file Read_values_into_array Set max_num_elements to required value Set index to zero Read first input value DOWHILE (input value exist) AND (index<max_num_elements) index = index + 1 array(index) = input value Read next input value ENDDO IF (input value exist) AND index = max_num_elements THEN Print `Array size is too small` ENDIF END
Array of variable size Read_values_into_variable_array Set max_num_elements to required value Set index to zero Read first input value DOWHILE (input value NOT = 9999) AND (index<max_num_elements) index = index + 1 array(index) = input value Read next input value ENDDO IF index < max_num_elements THEN index = index + 1 array(index) = 9999 ELSE Print `Array size is too small` ENDIF END Sentinel value indicate the end of input records during initial processing and the last element of the array during further processing
Paired Arrays • Two array with the same number of elements are paired because they correspond each other. • Example: • A student number ID array and student name array
Paired Arrays Example(Algorithm to read a file of product codes and corresponding selling price and load them into corresponding arrays) Read_values_into_paired_array Set max_num_elements to required value Set index to zero Read first input value DOWHILE (NOT EOF input record) AND (index<max_num_elements) index = index + 1 product_codes(index) = input_product_code selling_prices (index) = input_selling_price Read next record ENDDO IF (NOT EOF input record) AND index = max_num_elements THEN Print `Array size is too small` ENDIF END
Searching an Array • The reason: • To edit an input value (ie. Valid element or not) • To retrieve information from array • To retrieve information from corresponding element in a paired array.
Linear search array Linear_search_of_an_array Set max_num_elements to required value Set element_found to false Set index to 1 DOWHILE (NOT element_found) AND (index <= max_num_elements) IF array(index) = input_value THEN Set element_found to true ELSE index = index + 1 ENDIF ENDDO IF element_found THEN Print array (index) ELSE Print ´value not found´, input_value ENDIF END
Binary Search Array(effective method for elements more than 25 and sorted into ascending sequence) Binary_search_of_an_array Set element_found to false Set low_element to 1 Set high_element to max_num_elements DOWHILE (NOT element_found) AND (low_element <= high_elements) index = (low_element + high_element)/2 IF input_value = array(index) THEN Set element_found to true ELSE IF input_value < array (index) THEN high_element = index – 1 ELSE low_element = index + 1 ENDIF ENDIF ENDDO IF element_found THEN Print array (index) ELSE Print ´value not found´, input_value ENDIF END
Writing out the contents of an Array Write_values_of_array DO index = 1 to number_of_elements Print array (index) ENDDO END
Example 7.6 Process exam scores • Design a program that will prompt for and receive 18 examination scores from a mathematics test, compute the class average, and display all the scores and the class average to the screen.
Control Structures required • An array to store the exam scores – called ´scores´ • An index to identify each element in the array • A DO loop to accept the scores • Another DO loop to display the scores to the screen.
Solution Algorithm Process_exam_scores Set total_score to zero DO index = 1 to 18 Prompt operator for score Get scores(index) total_score = total_score + scores(index) ENDDO Compute average_score = total_score / 18 DO index = 1 to 18 Display scores(index) ENDDO Display average_score END
Example 7.7 Process integer array • Design an algorithm that will read an array of 100 integer values, calculate the average integer value, and count the number of integers in the array that are greater than the average integer value. The algorithm is to display the average integer value and the count of integers greater than average.
Control Structures required • An array of integer values – called ´numbers´ • A DO loop to calculate the average of the integers • Another DO loop to count the number of integers greater than the average.
Solution Algorithm Process_integer_array Set integer_total to zero Set integer_count to zero DO index = 1 to 100 integer_total = integer_total + numbers(index) ENDDO integer_average = integer_total / 100 DO index = 1 to 100 IF numbers(index) > integer_average THEN add 1 to integer_count ENDIF ENDDO Display integer_average, integer_count END
Example 7.8 Validate sales number • Design an algorithm that will read a file of sales transactions and validate the sales numbers on each record. As each sales record is read, the sales number on the record is to be verifief against an array of 35 sales numbers. Any sales number not found in the array is to be flagged as an error.
Control Structures required • A previously initialised array of sales numbers, called ´sales_numbers´ • A DOWHILE loop to read the sales file • A DOWHILE loop to perform linear search • A variable element_found to stop the search
Solution Algorithm Validate_sales_numbers Set max_num_elements to 35 Read sales record DOWHILE sales_records exist Set element_found to false Set index to 1 DOWHILE (NOT element_found) AND (index <= max_num_elements) IF sales_numbers(index) = input sales number THEN Set element_found to true ELSE index = index + 1 ENDIF ENDDO IF NOT element_found THEN Print `invalid sales numer`, input sales number ENDIF Read sales record ENDDO END
Example 7.9 Calculate shipping Charge • Design an algorithm that will read an input weight for an item to be shipped, search an array of shipping weigths and retrieve a corresponding shipping charge. In this algorithm, two paired arrays, each containing six elements, have been established and initialised. The array, shipping_weights, contains a range of shipping weights in grams, and the array, shipping_charges, contains a corresponding array of shipping charges in dollars, as follows:
Control Structures required • Two arrays, called ´shipping_weigths´ and ´shipping_charges` • A DOWHILE loop to search the shipping_weigths array and then retrieve the shipping_charges • A variable element_found to stop the search when entry weight is found
Solution Algorithm Calculate_shipping_charge Set max_num_elements to 6 Read index to 1 Set element found to false Prompt for entry weigth Get entry weight DOWHILE (NOT element_found) AND (index <= max_num_elements) IF shipping_weights(index) < entry weight THEN add 1 to index ELSE set element_found to true ENDIF ENDDO IF element_found THEN shipping_charge = shipping charges(index) Display `shipping charge is`, shipping_charge ELSE Display `invalid shipping weight`, entry weight ENDIF END
Two-dimensional Arrays • Where two subscripts are required to locate an element in an array. • The number of elements is calculated as the product of the number of rows and the number of columns • Specified by: array(row_index,column_index)
Loading a two-dimensional array(from previous table) Read_values_into_array Set max_num_elements to 24 Set row_index to zero Read input file DOWHILE (input values exist) AND (row_index < 6) row_index = row_index + 1 DO column_index = 1 to 4 shipping_charges(row_index,column_index) = input value read input file ENDDO ENDDO IF (input values exist) AND row_index = 6 THEN Print ´Array size to small` ENDIF END
Searching Two dimensional Array Calculate_shipping_Charges Set row_index to 1 Set element_found to false Prompt for shipping_weight, zone Get shipping_weight, zone DOWHILE (NOT element_found) AND (row_index <= 6) IF shipping_weights(row_index) < input shipping_weight THEN add 1 to row_index ELSE set element_found to true ENDIF ENDDO IF element_found THEN IF zone = (1 or 2 or 3 or 4) THEN shipping_charge = shipping_charges(row_index, zone) display ´shipping charge is`, shipping_charge ELSE display `invalid zone`, zone ENDIF ELSE Display `invalid shipping weight`, input shipping_weight ENDIF END
Writing out the contents of 2-d array Write_values_of_array Set number_of_rows to required value Set number_of_columns to required value DO row_index = 1 to number_of_rows DO column_index = 1 to number_of_columns Print array (row_index, column_index) ENDDO ENDDO END