540 likes | 736 Views
Arrays. CSC 171 FALL 2001 LECTURE 10. 1937 - Alan Turing developed the idea of a "Universal Machine" capable of executing any describable algorithm, and forming the basis for the concept of "computability".
E N D
Arrays CSC 171 FALL 2001 LECTURE 10
1937 - Alan Turing developed the idea of a "Universal Machine" capable of executing any describable algorithm, and forming the basis for the concept of "computability". Turing's ideas differed from those of others who were solving arithmetic problems by introducing the concept of "symbol processing". History: Alan Turing Founder of Computer Science
The Turing Machine Tape memory (movable) a b c a a b b c a Read head q0 h q1 q3 q2 State machine
The Turing Machine • A Turing machine is a quintuple (K,S,d,s,H) • K is a finite set of states • S is an alphabet of symbols • s is the initial state • H is the halting state • d is the transition function • From (K-H) x S • To K x (S U {move_tape_left, move_tape_right})
The Turing Test • Turing put forward the idea of an 'imitation game', in which a human being and a computer would be interrogated under conditions where the interrogator would not know which was which, the communication being entirely by textual messages. • Turing argued that if the interrogator could not distinguish them by questioning, then it would be unreasonable not to call the computer intelligent. • Turing's 'imitation game' is now usually called 'the Turing test' for intelligence.
Arrays • Suppose we want to write a program that reads a set of test grades and prints them, marking the highest grade? 65.2 81.7 31.3 95.4 < - highest grade 76.1 58.6
Individual data items • If we knew that there were always 150 students in the class, we could store the data as individual variables • score1,score2,score3, . . , score150 • What would the data entry code look like? • What would the printing code look like? • How about finding the max?
Arrays • An array is a collection of data items of the same type • Every element of the collection can be accessed separately.
Constructing Arrays double [] data = new double[10];
Setting Array values • To get values into an array you need to specify which slot you want to use. • Specification is done with the [ ] operator • The [ ] operator follows the name of the array • The [ ] operator encloses and integer-valued expression called the index or subscript
Setting array values data[4] = 29.95;
Using array values • Similar to setting int i = 4 ; System.out.println(“data[“+i+”] ==“+ data[i]); > data[4] ==29.95
Array data items • Suppose we want to write a program that reads a set of test grades and prints them, marking the highest grade? • What would the data entry code look like? • What would the printing code look like? • How about finding the max?
Array issues • Does it work? double [] data = new double[10]; data[10] = 5.4;
Array issues • Does it work? double [] data = new double[10]; data[10] = 5.4; When the program runs, an out-of-bounds subscript generates an exception and terminates the program – why?
Array issues • Can we search for the top grade as follows double maxScore = data[0]; for (int i = 1;I<=data.length;i++) If (data[i] > maxScore) maxScore = data[i];
Array issues • An array of length n has index values from 0 to (n-1) double maxScore = data[0]; for (int i = 1;I<data.length;i++) If (data[i] > maxScore) maxScore = data[i];
Array issues • Does it work? public static void main(String[] args){ double[] data; If (data[0] > 4.0) System.out.println(“GT 4!”); }
Array issues • Arrays must be allocated! public static void main(String[] args){ double[] data = new double[10]; If (data[0] > 4.0) System.out.println(“GT 4!”); }
Array issues • Arrays can be initialized! public static void main(String[] args){ double[] data = {2,3,4,5,6}; If (data[0] > 4.0) System.out.println(“GT 4!”); } // note: new int[] {2,3,4,5,6} ; is also legal
Copying Arrays Is this ok? double [] data = new double[10]; double[] testScores; testScores = data;
Copying Arrays Is this ok? double [] data = new double[10]; double[] testScores; testScores = data; How many arrays are there?
Copying Array REFERENCES double [] data = new double[10]; double[] testScores; testScores = data;
Copying Arrays • So, what if we want to make two “real” copies – what does the code look like? • Write a method so that int[] x = {3,4,5,6,7,8,9,10}; int[] y = myCopy(x);
Copying public static int[] myCopy(int[] x){ int[] r_arry = new int[x.length]; for (int i = 0 ; i< x.length;i++) r_arry[i] = x[i]; return r_arry; }
System.arrayCopy //System.arraycopy(from,fromstart,to,toStart,count); System.arraycopy(data,0,prices,0,data.length);
1940 A major need for supporting the war effort was to decrypt the intercepted messages of the German forces. Encrypted in the early years using the US designed ENIGMA, a team at Bletchley Park, built a series of machines culminating in 1943 with Colossus. History: Colossus Bletchley Park
More Arrays • Suppose we want to write a program that reads a set of test product names, prices, and quality scores prints them, marking the best value? (score/prices) Digital 500X, $3499.00, score 73 ZEOS Pentium-III/500, $2545.00, score 70 Micro Express MF, $2195.00, score 72 < - best value Polywell Poly 450IP, $2099.00, score 30
Parallel Arrays • One solution, can you think of a better one?
Arrays of Objects • Easier to deal with - arrays hold references
Multidimensional Arrays • Arrays of arrays • Arrays are objects • Arrays hold references to objects • Ergo, arrays can hold arrays
Tables are 2D arrays // how easy to modify code ???? int[][] mtable = new int[5][5]; for(i=0;i<5;i++) • for(int j=0;j<5;j++) mtable[i][j] = (i+1)*(j+1); int size = 5; int[][] mtable = new int[size][size]; for(i=0;i<size;i++) for(int j=0;j<size;j++) mtable[i][j] = (i+1)*(j+1);
Arrays of Arrays int [][] powers = new int[10][10];
Allocating arrays of arrays int size = 10; int[][] mtable = new int[size][]; for(i=0;i<mtable.length;i++) { mtable[i]= new int[size]; for(int j=0;j<mtable[i].length;j++) mtable[i][j] = (i+1)*(j+1); }
Alternately • The following is legal. • What is the structure? int[][] b = new int[5][]; for (int i=0;i<b.length;i++) b[i] = new int[i+1];
Alternately int[][] b = new int[5][]; for (int i=0;i<b.length;i++) b[i] = new int[i+1]; This is known as a triangular array Is b[3][1] a legal reference or b[1][3]?
Passing Arrays • In JAVA • Primitives are passed by value • A copy of the variable is made & used • Modifications made do not affect calling value • public void myAdd(int x) { x++;} • Objects are passed by reference • Since the reference is passed it is possible to change the value in the calling method • Public void myAdd (int[] x) {x[0]++;}
Pass by value public class passArry { public static void main(String args[]){ int x1 = 3; System.out.println("x1 == "+x1); myAdd(x1); System.out.println("x1 == "+x1); } public static void myAdd(int x) {x++;} }
Pass by reference public class passArry { public static void main(String args[]){ int[] x2 = {4,5,6}; System.out.println("x2[0] == "+x2[0]); myAdd(x2); System.out.println("x2[0] == "+x2[0]); } public static void myAdd(int[] x) {x[0]++;} }
Exercise • Write a method that takes an integer array and prints the values
Exercise • Write a method that takes an integer array and prints the values public static int myPrint(int[] x){ for (int i = 0 ; i<x.length;i++) System.out.println(x + “[“+i+”] == “+ x[i]); }
Exercise • Write a method that takes an integer array, and two integer indices and swaps the value
Exercise Write a method that takes an integer array, and two integer indices and swaps the value public static void mySwap(int[] x, int i, int j){ int temp = x[i]; x[i] = x[j]; x[j] = temp; }
Exercise • Write a method that takes an integer array and returns the index of the maximum value
Exercise • Write a method that takes an integer array and returns the index of the maximum value public static int myMax(int[] x){ int rvalue = 0; for (int i = 0 ; i<x.length;i++) if (x[i] > x[rvalue]) rvalue = i; return rvalue; }
Exercise • Overload the max finder to take an array and an index – the method now returns the index of the maximum value >= the index passed in
Exercise • Overload the max finder to take an array and an index – the method now returns the index of the maximum value >= the index passed in public static int myMax(int[] x, int j){ int rvalue = j; for (int i = j ; i<x.length;i++) if (x[i] > x[rvalue]) rvalue = i; return rvalue; }
Sorting • Write a method that takes an integer array • Loop through all the positions in the array, one after the other • At each (current) position, find the max from that position to the rest of the array. • Swap the value with the current position • This is termed selection sort