260 likes | 431 Views
Arrays. 01204111 Computer & Programming Group 350-352 Dept. of Computer Engineering Kasetsart University. Adopted from Thanomkulabut’s experiences. Brushed up by MikeLab .Net Factory @KU. Version 2012. Review. An array is an indexed collection of objects, all of the same type
E N D
Arrays 01204111 Computer & Programming Group 350-352 Dept. of Computer Engineering Kasetsart University Adopted from Thanomkulabut’s experiences. Brushed up by MikeLab.Net Factory @KU. Version 2012
Review • An array is an indexed collectionof objects, all of the same type • Array declaration double[] score; score = new double[5]; double[] score; score = new double[5]{1,2,3,3,5}; score score 1 2 3 4 5
Review (2) • Declaration only • int [] ai; • Declaration & creation • int [] ai =newint[4]; • Declaration & creation & initialization • int [] ai=newint[4]{1, 2, 3, 4}; • int [] ai= newint[]{1, 2, 3, 4}; • int [] ai= {1, 2, 3, 4};
3 0 1 2 score Review (3) • Access array elements int [] score = newint[4]; Runtime Error!! -3 4 7 score[4] = 5; score[0] = -3; score[2+1] = 7; Score[3-1] = score[0]+score[3] Console.WriteLine(score[2]); 4
Arrays Concept • Array is a reference data type. • Reference variables are used to refer to the data, not the data themselves. score Create Label double[] score; score = new double[5]; Reserve Memory id 0 1 2 3 4
Arrays with Methods :Example1 11 14 15 micky 1 4 5 class AM { static void Main(){ int[] Arr = {1, 4, 5}; Console.WriteLine (“1:{0} {1} {2}”,Arr[0],Arr[1],Arr[2]); Add10(Arr); Console.WriteLine (“2:{0} {1} {2}”,Arr[0],Arr[1],Arr[2]); } static void Add10(int[] micky){ for(int i=0;i<micky.Length;i++) micky[i] += 10; } } Arr id 0 1 2 Output 1: 1 4 5 2: 11 14 15
Arrays with Methods :Example2 static void Main(){ char[] data; data = ReadArray(4); showArray(data); } static char[] ReadArray(int N){ char[] info = new char[N]; for(int i=0;i<N;i++) info[i] = char.Parse(Console.ReadLine()); return info; } static void showArray(char[] Nobi){ for(int i=0;i<Nobi.Length;i++) Console.Write(Nobi[i]); } data info Nobi info B e a r N=4 id 0 1 2 3 B e a r B e a r Monitor
Self test static void Main(){ int[] mynum; mynum = new int[5] {4,0,-1,2,3}; Change(mynum); for(inti=0; i<mynum.Length; i++) Console.Write("{0} ",mynum[i]); } static void Change(int[] arr){ arr[0] = 5; arr[2] = 7; arr[3] = -8; } • What is the output of this partial program?
Example 1 static void Main(){ char[] name1,name2; name1 = new char[4] {'N','O','B','I'}; name2 = reverse(name1); showArr(name1); showArr(name2); } static char[] reverse(char[] arr){ int j=0; char[] arr_re = new char[arr.Length]; for(int i=arr.Length-1;i>=0;i--){ arr_re[j] = arr[i]; j++; } return arr_re; } static void showArr(char[] arr){ foreach(char x in arr) Console.Write(x); Console.WriteLine(); } • What is the output of this partial program? Output NOBI IBON
Pass by value VS by reference • Pass by value • We can only change the elements inside the array • Pass by reference • We can change the elements inside the array • We can change the array that variable refers to
mynum Pass by Value 5 0 -1 4 id id 0 2 0 2 1 1 static void Main(){ int[] mynum; mynum = new int[3] {4,0,-1}; Console.WriteLine ("Before mynum[0] = {0}",mynum[0]); Change(mynum); Console.WriteLine ("After mynum[0] = {0}",mynum[0]); } static void Change(int[] arr){ arr[0] = 5; arr = new int[3] {10,13,15}; Console.WriteLine ("In Change arr[0] = {0}",arr[0]); } arr 13 15 10 Output Before mynum[0] = 4 In Change arr[0] = 10 After mynum[0] = 5
Pass by Reference mynum arr 5 0 -1 4 id id 0 2 0 2 1 1 static void Main(){ int[] mynum; mynum = new int[3] {4,0,-1}; Console.WriteLine ("Before mynum[0] = {0}",mynum[0]); Change(ref mynum); Console.WriteLine ("After mynum[0] = {0}",mynum[0]); } static void Change(ref int[] arr){ arr[0] = 5; arr = new int[3] {10,13,15}; Console.WriteLine ("In Change arr[0] = {0}",arr[0]); } mynum arr 13 15 10 Output Before mynum[0] = 4 In Change arr[0] = 10 After mynum[0] = 10
Multi-dimensional Array (introduction) • If you want to keep score of 50 students • If each student have 10 test double[] score = new double[50]; double[] score0 = new double[50]; double[] score1 = new double[50]; double[] score2 = new double[50]; double[] score9 = new double[50];
Multi-dimensional Array Declaration • 1 dimension • <type> [] <name>; • int [] score; • Multi-dimensional • 2 Dimension • <type> [ , ] <name>; • int [ , ] score; • 3 Dimension • <type> [ , , ] <name>; • int [ , , ] score;
Multi-dimensional Array Declaration score • 1 Dimension • <name> = new <type>[<dim size>]; • score = new int[4]; • 2 Dimension • <name> = new <type>[<dim1 size >,<dim2 size>]; • score = new int[4,2]; • 3 Dimension • <name> = new <type>[<dim1 size>,<dim2 size>,<dim3 size>]; • score = new int[4, 2, 3]; score score
Multi-dimensional Array Declaration with Initialization • 1 Dimension • int[] score = new int[3] {6, 1, 3}; • 2 Dimension • int [,] score = new int[2, 3] { {1, 8, 4} ,{3, 6, 9} }; • int [,] score = { {1, 8, 4} ,{3, 6, 9} }; • int [,] score = { {1, 8, 4} ,{3, 6, 9} }; score 6 1 3 score 1 8 4 3 6 9
Index of Multi-dimensional Array int[,] score = { {5,3,1}, {9,2,4} }; 0 1 2 • score[0,1] = 7; • score[2-1 , 1+1] = 0; • Console.Write(score[0,0]); • for(int i = 0; i<=2 ; i++) score[0,i] = 3; • Console.Write(score.Length); score 0 7 3 5 3 3 1 3 1 0 9 2 4 5 6
Selftest Matrix • Declare, create and initialize array name Matrix ‘v’ ‘a’ ‘y’ ‘q’ ‘p’ ‘z’ Format I char[,] Matrix; ‘s’ ‘b’ Matrix = new char[4,2]{ {'v','a'}, {'y','q'}, {'p','z'}, {'s','b'} };
0 1 2 Array.GetLength() score 0 5 3 1 1 9 2 4 • Get numbers of ROW in ARRAY • arrayname.GetLength(0); • score.GetLength(0); • Get numbers of Column in ARRAY • arrayname.GetLength(1); • score.GetLength(1); • Get numbers of all elements in ARRAY • arrayname.Length; • score.Length; 2 3 6
Example 2 Student 1 • Write the program to get score from 4 students (each student has 2 test) score1= 3 score2= 8 Student 2 score1= 6 score2= 7 Student 3 score1= 8 score2= 10 Student 4 score1= 9 score2= 7
Student 1 Example 2 score1= 3 score2= 8 Student 2 score1= 6 score2= 7 • Write the program to get score from 4 students (each student has 2 test) Student 3 score1= 8 score2= 10 double[,] score = new double[4,2]; for(int i=0;i<score.GetLength(0);i++){ Console.WriteLine("Student {0}",i+1); for(int j=0;j<score.GetLength(1);j++) { Console.Write("score{0} = ",j+1); score[i,j] = double.Parse(Console.ReadLine()); } Console.WriteLine(); } Student 4 score1= 9 score2= 7 score 0 1 0 3 8 1 6 7 2 8 10 3 9 7
Example 2 with Method static void Main(){ double [,] arr; arr = ReadArray2(2,4); } static double[,] ReadArray2(int row, int col){ double[,] score = new double[4,2]; for(int i=0;i<score.GetLength(0);i++){ Console.WriteLine("Student {0}",i+1); for(int j=0;j<score.GetLength(1);j++){ Console.Write("score{0} = ",j+1); score[i,j] = double.Parse(Console.ReadLine()); } Console.WriteLine(); } return score; }
Self test 3 8 6 7 • From previous example, write the partial program to find summation of all scores of all students 8 10 9 7 double sum = 0; for(int i=0;i<score.GetLength(0);i++){ for(int j=0; j<score.GetLength(1); j++){ sum += score[i,j]; } } Console.WriteLine("Sumation = {0}",sum); score 0 1 0 1 2 3
Self test 3 8 6 7 • From previous example, write the partial program to find average of scores of all students in first test 8 10 9 7 double sum = 0; for(int i=0;i<score.GetLength(0);i++){ sum += score[i,0]; } double avg = sum/score.GetLength(0); Console.WriteLine ("Average of First test = {0}",avg); score 0 1 0 1 2 3
Self test 3 8 6 7 • From previous example, write the partial program to find average scores of all test of last student 8 10 9 7 double sum = 0; for(int j=0;j<score.GetLength(1);j++){ sum += score[3,j]; } double avg = sum/score.GetLength(1); Console.WriteLine ("Average of last student = {0}",avg); score 0 1 0 1 2 3
How to find Array’s #dimension? • By property Rank int [] matrix = new int[5]; Console.WriteLine(matrix.Rank); 1 int [,] matrix = new int[5,2]; Console.WriteLine(matrix.Rank); 2 int [,,] matrix = new int[5,2,3]; Console.WriteLine(matrix.Rank); 3