1 / 47

Array Processing

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

grubio
Télécharger la présentation

Array Processing

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Array Processing Lecture 7

  2. 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

  3. 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

  4. Simple Algorithm to manipulate Array

  5. 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.

  6. Find_sum_of_elements Set sum to zero DO index = 1 to number_of_elements sum = sum + array(index) ENDO Print sum END

  7. 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.

  8. 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

  9. 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.

  10. 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

  11. 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.

  12. 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

  13. 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

  14. 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.

  15. 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

  16. 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

  17. 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

  18. 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

  19. 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

  20. 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.

  21. 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

  22. 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

  23. Writing out the contents of an Array Write_values_of_array DO index = 1 to number_of_elements Print array (index) ENDDO END

  24. Programming Example Using Array

  25. 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.

  26. Defining diagram

  27. 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.

  28. 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

  29. 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.

  30. Defining diagram

  31. 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.

  32. 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

  33. 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.

  34. Defining diagram

  35. 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

  36. 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

  37. 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:

  38. Defining diagram

  39. 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

  40. 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

  41. 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)

  42. One dimensional Array

  43. Two dimensional Array

  44. 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

  45. 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

  46. 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

More Related