Two dimensional arrays Two dimensional arrays A two
- Slides: 41
Two dimensional arrays
Two dimensional arrays • A two dim array is doubly subscripted… • It has rows and columns • Tables of data are examples of two-dim arrays. • As with one-dim arrays, row and column length is fixed once the array is allocated • Arrays are homogeneous, so an array can’t store (for example) both floats and Strings
Applications in this ppt • • • UPS lookup using comboboxes UPS lookup using textboxes Yearly Rainfall simulator Roster/exam grades Processing rows (or columns) of a 2 -d array
Manipulating 2 -d arrays • For a one dimensional array we usually use 1 loop to traverse contents. • For 2 -D array we’ll usually use 2 loops, a “row” loop and a “column” loop. • The “outer” loop is the slow loop and determines the order of the traversal. • Each row (or column) or a 2 -d array is a 1 D array
Declaring data • If the data is known in advance it can be declared and initialized as a field value Dim data(, ) As Integer = {{12, 34, 56, 75}, {9, 2, 100, 6}, {500, 400, 300, 200}}
To display the data (row by row) in a listbox: For row = 0 To 2 strdata = "" For col = 0 To 3 strdata = strdata & data(row, col) & Control. Chars. Tab Next Listdata. Items. Add(strdata) Next
exercises • For the previous example, write code for summing all the contents of the array. • For the previous example, write code for finding the largest (smallest) element in the array. • What code would access the “diagonal” elements of a square array? • What code would “transpose” the contents of a square array? (swap rows to columns)
Row by row traversal
We might be interested in row (or column) computations – say sum contents of a row Dim row, col, sum As Integer sum = 0 'one loop needed to traverse a one dimensional subarray row = Integer. Parse(txtrow. text) For col = 0 To 3 sum = sum + data(row, col) Next
Display of functionality
The UPS rates application using comboboxes
Contents of weight combobox
Contents of zone combobox
Global (field) array declarations – note doubly subscripted array Dim rates(, ) As Decimal = {{1 D, 1. 5 D, 1. 65 D, 1. 85 D}, _ {1. 58 D, 2. 4 D, 3. 05 D}, _ {1. 71 D, 2. 52 D, 3. 1 D, 4 D}, _ {2. 04 D, 3. 12 D, 4 D, 5. 01 D}, _ {2. 52 D, 3. 75 D, 5. 1 D, 7. 25 D}} Dim weight() As Integer = {1, 3, 5, 10} Dim zone() As String = {"A", "B", "C", "D"}
Same, but using textboxes
The button code Dim weightindex, zoneindex As Integer Dim wtin As Integer wtin = Integer. Parse(txtwt. Text) Dim wtfound, zonefound As Boolean wtfound = False zonefound = False weightindex = 0 zoneindex = 0 While (Not wtfound) And weightindex <= 3 If wtin <= weight(weightindex) Then wtfound = True Else weightindex += 1 End If End While If wtfound = False Then weightindex = 4 End If While zonefound = False And zoneindex <= 3 If Me. txtzone. Text. To. Upper() = zone(zoneindex) Then zonefound = True Else zoneindex += 1 End If End While If zoneindex <= 3 Then ' txtdisplay. Text = weightindex & " " & zoneindex txtdisplay. Text = rates(weightindex, zoneindex). To. String("N") Else Message. Box. Show("weight or zone incorrect", "data error", Message. Box. Buttons. OK, Message. Box. Icon. Exclamation) End If
A Rainfall simulator
remarks • This is not very realistic, as I did not use real rainfall data to fill my rainfall array. • Real data could easily be incorporated: get (historic) max and min rainfall for each day, and use these numbers in your random generator. • But it shows how a simulator could be built to model weather (or something else). For example, a temperature simulator could be built similarly.
Global (field) values Dim rain(12, 31) As Double Dim nummonths As Integer = 12 Dim months As String() = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"} Dim days As Integer() = {31, 28, 31, 30, 31}
Form load fills rainfall array randomly Private Sub Rain. Fall_Load(By. Val sender As System. Object, By. Val e As System. Event. Args) Handles My. Base. Load Dim r As New Random(Date. Time. Now. Millisecond) Dim i, j As Integer For i = 0 To nummonths - 1 For j = 0 To days(i) - 1 rain(i, j) = r. Next. Double() * r. Next(0, 5) ’ not a very realistic simulation Next End Sub
The day-of-max-rain button Private Sub btnmaxday_Click(By. Val sender As System. Object, By. Val e As System. Event. Args) Handles btnmaxday. Click Dim i, j, m, d As Integer m=0 d=0 For i = 0 To nummonths - 1 For j = 0 To days(i) - 1 If rain(i, j) > rain(m, d) Then m=i d=j End If Next List. Box 1. Items. Add("Day of max rain was " & months(m) & d & "amt=" & rain(m, d). To. String("N 2")) End Sub
The month-of-min-rain button Private Sub btnminmon_Click(By. Val sender As System. Object, By. Val e As System. Event. Args) Handles btnminmon. Click Dim i, j, m, d As Integer Dim sum, tot As Double tot = 99999 For i = 0 To nummonths - 1 sum = 0 For j = 0 To days(i) - 1 sum += rain(i, j) Next If sum < tot Then m=i tot = sum End If Next List. Box 1. Items. Add("Month of min rain was " & months(m) & " amt= " & tot. To. String("N 2")) End Sub
Other buttons and functionality • I didn’t code the other buttons. • You could add a button: Redo simulation to refill the rain array again randomly
An exam recorder
Recording grades
Add grades for students
Compute averages for each student
Fields (globals) used Const classsize = 4 Public students As String() = {"Bob", "Marcy", "Jane", "Pete"} Dim exams(classsize, 3) As Integer
Add a grade button code • use selectedindex from the two comboboxes to see which student/ which exam score is being entered. • Check to make sure a legal row/col was selected and insert the grade into position (row=student#, col=exam#) of the exams array.
Add a grade button code Private Sub btnadd_Click(By. Val sender As System. Object, By. Val e As System. Event. Args) Handles btnadd. Click Dim row, col As Integer col = cboexam. Selected. Index() row = cbostudent. Selected. Index() If row >= 0 And row < 4 And col >= 0 And col < 3 Then exams(row, col) = Integer. Parse(txtexam. Text) Else Message. Box. Show("row=" & row & " col=" & col, "error", Message. Box. Buttons. OK) End If txtexam. Text = "" End Sub
Display button • Clear listbox. • Show names and which grades have been recorded. • Exams are all initialized to -99. In the loop, if a legal grade has not been recorded, a message is displayed for this exam. • 2 loops needed to traverse a 2 -D array, only one loop is needed for a 1 -D array. The outer loop adds a name from the name list onto the string to display, the inner loop adds an exam for this student, each time it goes around.
Display button code Private Sub btndisplay_Click(By. Val sender As System. Object, By. Val e As System. Event. Args) Handles btndisplay. Click Dim i, j As Integer Dim displaystring As String List. Box 1. Items. Clear() For i = 0 To classsize - 1 displaystring = students(i) For j = 0 To 2 If exams(i, j) = -99 Then displaystring = displaystring & Control. Chars. Tab & "no grade" Else displaystring = displaystring & Control. Chars. Tab & exams(i, j) End If Next List. Box 1. Items. Add(displaystring) Next End Sub
Calculate averages • Clear listbox. • You need a sum (and, optionally, an ave variable) of type double • For each set of scores (for each student) set sum=0. • Add across the row (inner loop) to the sum. • Display the name and average in the listbox.
Additions and improvements • Add labels for checkboxes • Add a clear-all button • Have number of exams be a constant like number of students in this example. • Provide (buttons or combobox for) other exam statistics, like high grade, low grade, and overall mean.
Generic array manipulation
About this example • An array is declared as a field value and filled (either at compile or in form load) • Buttons provided to add across any given row or column • Array declaration at the top of class: Dim data(, ) As Integer = {{12, 34, 56, 75}, {9, 2, 100, 6}, {500, 400, 300, 200}}
About this example: formload displays array contents in listbox Private Sub Form 1_Load(By. Val sender As System. Object, By. Val e As System. Event. Args) Handles My. Base. Load Dim row, col As Integer Dim strdata As String For row = 0 To 2 strdata = "" For col = 0 To 3 strdata = strdata & data(row, col) & Control. Chars. Tab Next Listdata. Items. Add(strdata) Next End Sub
Sum by row button Private Sub btnrow_Click(By. Val sender As System. Object, By. Val e As System. Event. Args) Handles btnrow. Click Dim row, col, sum As Integer sum = 0 'one loop needed to traverse a one dimensional subarray row = Integer. Parse(txtrow. text) For col = 0 To 3 sum = sum + data(row, col) Next ‘outside loop list results Listdata. Items. Add("sum of row " & row & "=" & sum) End Sub
Sum by row
Sum a column
- Circular motion is one dimensional or two dimensional
- Parallel arrays
- Array of arrays c++
- Java array operations
- Partially filled arrays
- Parallel arrays
- Why do we need arrays?
- Dynamic arrays and amortized analysis
- Arreglo unidimensional java ejemplo
- Java arreglos bidimensionales
- Mips array example
- Polynomial representation using array in c
- Assembly array of strings
- Global arrays in c
- Computer science arrays
- Searching and sorting arrays in c++
- Arrays visual basic
- Python find index of max
- Array advantages and disadvantages
- How many arrays in 24
- Arrays in pascal examples
- Mips declare array
- Creating arrays matlab
- Arrays as adt
- Partially filled array java
- Redundancy array of independent disk
- Python list of arrays
- Arrays
- Day 3: arrays
- Redundant array of inexpensive disks
- Small basic array
- Disadvantages of arrays
- Microled arrays
- Are vectors dynamic arrays
- Facts about arrays
- In her physics lab melanie rolls
- Characteristics of two dimensional shapes
- A topographic map is a two dimensional model
- A topographic map is a two dimensional model
- A 2-dimensional area with a known boundary is called as
- 7-7 scale drawings and models
- Two dimensional shapes that have 8 angles