Processing Matrices and Multidimensional Tables Svetlin Nakov Telerik Software Academy academy.telerik.com Technical Trainer www.nakov.com.

Slides:



Advertisements
Similar presentations
Windows Basic and Dynamic Disk Borislav Varadinov Telerik Software Academy academy.telerik.com System Administrator Marian Marinov CEO of 1H Ltd.
Advertisements

HTML Forms, GET, POST Methods Tran Anh Tuan Edit from Telerik Academy
Make swiftly iOS development Telerik Academy Telerik Academy Plus.
Amazon S 3, App Engine Blobstore, Google Cloud Storage, Azure Blobs Svetlin Nakov Telerik Software Academy academy.telerik.com.
RPN and Shunting-yard algorithm Ivaylo Kenov Telerik Software Academy academy.telerik.com Technical Assistant
Shortest paths in edge-weighted digraph Krasin Georgiev Technical University of Sofia g.krasin at gmail com Assistant Professor.
Telerik Software Academy Telerik School Academy.
Asynchronous Programming with C# and WinRT
Unleash the Power of JavaScript Tooling Telerik Software Academy End-to-end JavaScript Applications.
Character sequences, C-strings and the C++ String class, Working with Strings Learning & Development Team Telerik Software Academy.
Done already for your convenience! Telerik School Academy Unity 2D Game Development.
Processing Sequences of Elements Telerik School Academy C# Fundamentals – Part 1.
C# Fundamentals – Part I
NoSQL Concepts, Redis, MongoDB, CouchDB
The Business Plan and the Business Model Margarita Antonova Volunteer Telerik Academy academy.telerik.com Business System Analyst Telerik Corporation.
What are ADTs, STL Intro, vector, list, queue, stack Learning & Development Team Telerik Software Academy.
Making JavaScript code by template! Learning & Development Team Telerik Software Academy.
Svetlin Nakov Telerik Software Academy academy.telerik.com Manager Technical Training Who, What, Why?
Access to known folders, using pickers, writing to and reading from files, caching files for future access George Georgiev Telerik Software Academy academy.telerik.com.
Reading and Writing Text Files Svetlin Nakov Telerik Software Academy academy.telerik.com Technical Trainer
When and How to Improve Code Performance? Nikolay Kostov Telerik Software Academy academy.telerik.com Senior Software Developer and Technical Trainer
Classical OOP in JavaScript Classes and stuff Telerik Software Academy
Optimization problems, Greedy Algorithms, Optimal Substructure and Greedy choice Learning & Development Team Telerik Software.
Using Selenium for Mobile Web Testing Powered by KendoUI Telerik QA Academy Atanas Georgiev Senior QA Engineer KendoUI Team.
NoSQL Concepts, Redis, MongoDB, CouchDB Svetlin Nakov Telerik Software Academy academy.telerik.com Manager Technical Training
New features: classes, generators, iterators, etc. Telerik Academy Plus JavaScript.Next.
Creating E/R Diagrams with SQL Server Management Studio and MySQL Workbench Svetlin Nakov Telerik Software Academy Manager Technical.
Throwing and Catching Exceptions Tran Anh Tuan Edit from Telerik Software Academy
Loops, Conditional Statements, Functions Tran Anh Tuan Edit from Telerik Academy
Private/Public fields, Module, Revealing Module Learning & Development Team Telerik Software Academy.
Building Data-Driven ASP.NET Web Forms Apps Telerik Software Academy ASP.NET Web Forms.
Course Introduction Svetlin Nakov Telerik Software Academy academy.telerik.com Manager Technical Training
What is a Database, MySQL Specifics Trần Anh Tuấn Edit from Telerik Software Academy
General and reusable solutions to common problems in software design Vasil Dininski Telerik Software Academy academy.telerik.com Intern at Telerik Academy.
Planning and Tracking Software Quality Yordan Dimitrov Telerik Corporation Team Leader, Team Pulse, Team Leader, Team Pulse, Telerik Corporation,
What you need to know Ivaylo Kenov Telerik Corporation Telerik Academy Student.
Data binding concepts, Bindings in WinJS George Georgiev Telerik Software Academy academy.telerik.com Technical Trainer itgeorge.net.
Pavel Kolev Telerik Software Academy Senior.Net Developer and Trainer
Objects, Properties, Primitive and Reference Types Learning & Development Team Telerik Software Academy.
Processing Sequences of Elements Svetlin Nakov Telerik Corporation
When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.
Free Training and Job for Software Engineers Svetlin Nakov, PhD Manager Technical Training Telerik Corp. Telerik Software Academy.
Free Training and Job for Software Engineers Svetlin Nakov, PhD Manager Technical Training Telerik Corp. Telerik Software Academy.
Access to known folders, using pickers, writing to and reading from files, caching files for future access George Georgiev Telerik Software Academy academy.telerik.com.
Multidimensional Arrays, Sets, Dictionaries Processing Matrices, Multidimensional Arrays, Dictionaries, Sets SoftUni Team Technical Trainers Software University.
Doing the Canvas the "easy way"! Learning & Development Telerik Software Academy.
Processing Sequences of Elements Technical Trainer Telerik Corporation Doncho Minkov.
Creating and Running Your First C# Program Svetlin Nakov Telerik Software Academy academy.telerik.com Manager Technical Training
Subroutines in Computer Programming Telerik School Academy C# Fundamentals – Part 1.
Correctly Formatting the Source Code Nikolay Kostov Telerik Software Academy academy.telerik.com Senior Software Developer and Technical Trainer
Data Types, Primitive Types in C++, Variables – Declaration, Initialization, Scope Telerik Software Academy academy.telerik.com Learning and Development.
Learn to Design Error Steady Code Svetlin Nakov Telerik Software Academy academy.telerik.com Technical Trainer
Connecting, Queries, Best Practices Tran Anh Tuan Edit from Telerik Software Academy
Processing Sequences of Elements Telerik Software Academy C# Fundamentals – Part 2.
Telerik JavaScript Framework Telerik Software Academy Hybrid Mobile Applications.
Telerik Software Academy Databases.
Things start to get serious Telerik Software Academy JavaScript OOP.
Learning & Development Mobile apps for iPhone & iPad.
Processing Matrices and Multidimensional Tables Telerik Software Academy C# Fundamentals – Part 2.
Nikolay Kostov Telerik Software Academy academy.telerik.com Team Lead, Senior Developer and Trainer
Functions and Function Expressions Closures, Function Scope, Nested Functions Telerik Software Academy
Implementing Control Logic in C# Svetlin Nakov Telerik Software Academy academy.telerik.com Manager Technical trainer
Inheritance, Abstraction, Encapsulation, Polymorphism Telerik Software Academy Mobile apps for iPhone & iPad.
Mocking tools for easier unit testing Telerik Software Academy High Quality Code.
Creating and Initializing Arrays, Accessing Elements, Multiple Dimensions Learning & Development Team Telerik Software Academy.
Data Structures and Algorithms Telerik Software Academy
What why and how? Telerik School Academy Unity 2D Game Development.
Windows Security Model Borislav Varadinov Telerik Software Academy academy.telerik.com System Administrator
Lists, Stacks, Queues Svetlin Nakov Telerik Software Academy Manager Technical Trainer
Multidimensional Arrays
Presentation transcript:

Processing Matrices and Multidimensional Tables Svetlin Nakov Telerik Software Academy academy.telerik.com Technical Trainer

1. Matrices and Multidimensional Arrays  Declaring  Usage 2. Jagged Arrays  Declaring  Usage 3. The Array Class  Sorting  Binary Search 2

Using Array of Arrays, Matrices and Cubes

 Multidimensional arrays have more than one dimension (2, 3, …)  The most important multidimensional arrays are the 2-dimensional  Known as matrices or tables  Example of matrix of integers with 2 rows and 4 columns:

 Declaring multidimensional arrays:  Creating a multidimensional array  Use new keyword  Must specify the size of each dimension int[,] intMatrix; float[,] floatMatrix; string[,,] strCube; int[,] intMatrix = new int[3, 4]; float[,] floatMatrix = new float[8, 2]; string[,,] stringCube = new string[5, 5, 5]; 5

 Creating and initializing with values multidimensional array:  Matrices are represented by a list of rows  Rows consist of list of values  The first dimension comes first, the second comes next (inside the first) int[,] matrix = { {1, 2, 3, 4}, // row 0 values {1, 2, 3, 4}, // row 0 values {5, 6, 7, 8}, // row 1 values {5, 6, 7, 8}, // row 1 values }; // The matrix size is 2 x 4 (2 rows, 4 cols) 6

 Accessing N-dimensional array element:  Getting element value example:  Setting element value example: nDimensionalArray[index 1, …, index n ] int[,] array = {{1, 2}, {3, 4}} int element11 = array[1, 1]; // element11 = 4 int[,] array = new int[3, 4]; for (int row=0; row<array.GetLength(0); row++) for (int col=0; col<array.GetLength(1); col++) for (int col=0; col<array.GetLength(1); col++) array[row, col] = row + col; array[row, col] = row + col; Number of rows Number of columns 7

 Reading a matrix from the console int rows = int.Parse(Console.ReadLine()); int columns = int.Parse(Console.ReadLine()); int[,] matrix = new int[rows, columns]; String inputNumber; for (int row=0; row<rows; row++) { for (int column=0; column<cols; column++) for (int column=0; column<cols; column++) { Console.Write("matrix[{0},{1}] = ", row, column); Console.Write("matrix[{0},{1}] = ", row, column); inputNumber = Console.ReadLine(); inputNumber = Console.ReadLine(); matrix[row, column] = int.Parse(inputNumber); matrix[row, column] = int.Parse(inputNumber); }} 8

 Printing a matrix on the console: for (int row=0; row<matrix.GetLength(0); row++) { for (int col=0; col<matrix.GetLength(1); col++) for (int col=0; col<matrix.GetLength(1); col++) { Console.Write("{0} ", matrix[row, col]); Console.Write("{0} ", matrix[row, col]); } Console.WriteLine(); Console.WriteLine();} 9

Live Demo

 Finding a 2 x 2 platform in a matrix with a maximal sum of its elements int[,] matrix = { {7, 1, 3, 3, 2, 1}, {7, 1, 3, 3, 2, 1}, {1, 3, 9, 8, 5, 6}, {1, 3, 9, 8, 5, 6}, {4, 6, 7, 9, 1, 0} }; {4, 6, 7, 9, 1, 0} }; int bestSum = int.MinValue; for (int row=0; row<matrix.GetLength(0)-1; row++) for (int col=0; col<matrix.GetLength(1)-1; col++) for (int col=0; col<matrix.GetLength(1)-1; col++) { int sum = matrix[row, col] + matrix[row, col+1] + matrix[row+1, col] + matrix[row+1, col+1]; int sum = matrix[row, col] + matrix[row, col+1] + matrix[row+1, col] + matrix[row+1, col+1]; if (sum > bestSum) if (sum > bestSum) bestSum = sum; bestSum = sum; } 11

Live Demo

What are Jagged Arrays and How to Use Them?

 Jagged arrays are like multidimensional arrays  But each dimension has different size  A jagged array is array of arrays  Each of the arrays has different length  How to create jagged array? int[][] jagged = new int[3][]; jagged[0] = new int[3]; jagged[1] = new int[2]; jagged[2] = new int[5]; 14

 When creating jagged arrays  Initially the array is created of null arrays  Need to initialize each of them int[][] jagged=new int[n][]; for (int i=0; i<n; i++) { jagged[i] = new int[i]; } jagged[i] = new int[i]; } 15

Live Demo

 Check a set of numbers and group them by their remainder when dividing to 3 ( 0, 1 and 2 )  Example: 0, 1, 4, 113, 55, 3, 1, 2, 66, 557, 124, 2  First we need to count the numbers  Done with a iteration  Make jagged array with appropriate sizes  Each number is added into its jagged array 17

int[] numbers = {0,1,4,113,55,3,1,2,66,557,124,2}; int[] sizes = new int[3]; int[] offsets = new int[3]; foreach (var number in numbers) { int remainder = number % 3; int remainder = number % 3; sizes[remainder]++; sizes[remainder]++;} int[][] numbersByRemainder = new int[3][] { new int[sizes[0]], new int[sizes[1]], new int[sizes[0]], new int[sizes[1]], new int[sizes[2]] }; new int[sizes[2]] }; foreach (var number in numbers) { int remainder = number % 3; int remainder = number % 3; int index = offsets[remainder]; int index = offsets[remainder]; numbersByRemainder[remainder][index] = number; numbersByRemainder[remainder][index] = number; offsets[remainder]++; offsets[remainder]++;} 18

Live Demo

What Can We Use?

 The System.Array class  Parent of all arrays  All arrays inherit from it  All arrays have the same:  Basic functionality  Basic properties  E.g. Length property 21

Methods of ArrayMethods of Array  Important methods and properties of System.Array  Rank – number of dimensions  Length – number of all elements through all dimensions  GetLength(index) – returns the number of elements in the specified dimension  Dimensions are numbered from 0 22

Methods of Array (2)Methods of Array (2)  GetEnumerator() – returns IEnumerator for the array elements  BinarySearch(…) – searches for a given element into a sorted array (uses binary search)  IndexOf(…) – searches for a given element and returns the index of the first occurrence (if any)  LastIndexOf(…) – searches for a given element and returns the last occurrence index  Copy(src, dest, len) – copies array elements; has many overloads 23

Methods of Array (3)Methods of Array (3)  Reverse(…) – inverts the arrays elements upside down  Clear(…) – assigns value 0 (null) for each elements  CreateInstance(…) – creates an array  Accepts as parameters the number of dimensions, start index and number of elements  Implements ICloneable, IList, ICollection and IEnumerable interfaces 24

Sorting ArraysSorting Arrays

 Sorting in.NET is usually done with System.Array.Sort()  Sort(Array) – sorts array elements  Elements should implement IComparable  Sort(Array, IComparer) – sorts array elements by given external IComparer  Sort(Array, Comparison ) – sorts array elements by given comparison operation  Can be used with lambda expression 26

Sorting Arrays – ExampleSorting Arrays – Example 27 static void Main() { String[] beers = {"Zagorka", "Ariana", String[] beers = {"Zagorka", "Ariana", "Shumensko","Astika", "Kamenitza", "Bolqrka", "Shumensko","Astika", "Kamenitza", "Bolqrka", "Amstel"}; "Amstel"}; Console.WriteLine("Unsorted: {0}", Console.WriteLine("Unsorted: {0}", String.Join(", ", beers)); String.Join(", ", beers)); // Elements of beers array are of String type, // Elements of beers array are of String type, // which implement IComparable // which implement IComparable Array.Sort(beers); Array.Sort(beers); Console.WriteLine("Sorted: {0}", Console.WriteLine("Sorted: {0}", String.Join(", ", beers)); String.Join(", ", beers)); // Result: Sorted: Amstel, Ariana, Astika, // Result: Sorted: Amstel, Ariana, Astika, // Bolyarka, Kamenitza, Shumensko, Zagorka // Bolyarka, Kamenitza, Shumensko, Zagorka}

Sorting with IComparer and Lambda Expressions – Example 28 class Student { …} public class StudentAgeComparer : IComparer public class StudentAgeComparer : IComparer { public int Compare(Student firstStudent, Student secondStudent) public int Compare(Student firstStudent, Student secondStudent) { return firstStudent.Age.CompareTo(secondStudent.Age); return firstStudent.Age.CompareTo(secondStudent.Age); }}… Array.Sort(students, new StudentAgeComparer()); … Array.Sort(students, (x, y) => x.Name.CompareTo(y.Name));

Sorting with IComparer and Lambda Expressions Live Demo

Binary SearchBinary Search

 Binary search is a fast method for searching for an element in a sorted array  Has guaranteed running time of O(log(n)) for searching among arrays of with n elements  Implemented in the Array.BinarySearch( Array, object) method  Returns the index of the found object or a negative number when not found 31

Binary Search (2)Binary Search (2)  All requirements of the Sort() method are applicable for BinarySearch()  Either all elements should implement IComparable or instance of IComparer should be passed 32

Binary Search – ExampleBinary Search – Example 33 static void Main() { String[] beers = {"Zagorka", "Ariana", String[] beers = {"Zagorka", "Ariana", "Shumensko","Astika", "Kamenitza", "Bolqrka", "Shumensko","Astika", "Kamenitza", "Bolqrka", "Amstel"}; "Amstel"}; Array.Sort(beers); Array.Sort(beers); string target = "Astika"; string target = "Astika"; int index = Array.BinarySearch(beers, target); int index = Array.BinarySearch(beers, target); Console.WriteLine("{0} is found at index {1}.", Console.WriteLine("{0} is found at index {1}.", target, index); target, index); // Result: Astika is found at index 2. // Result: Astika is found at index 2. target = "Heineken"; target = "Heineken"; index = Array.BinarySearch(beers, target); index = Array.BinarySearch(beers, target); Console.WriteLine("{0} is not found (index={1}).", Console.WriteLine("{0} is not found (index={1}).", target, index); target, index); // Result: Mastika is not found (index=-5). // Result: Mastika is not found (index=-5).}

Binary SearchBinary Search Live Demo

Working with ArraysWorking with Arrays Best PracticesBest Practices

Advices for Working with Arrays  When given method returns an array and should return an empty array, return an array with 0 elements, instead of null  Arrays are passed by reference  To be sure that given method will not change the passed array, pass a copy of it  Clone() returns shallow copy of the array  You should implement your own deep clone when working with reference types 36

форум програмиране, форум уеб дизайн курсове и уроци по програмиране, уеб дизайн – безплатно програмиране за деца – безплатни курсове и уроци безплатен SEO курс - оптимизация за търсачки уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop уроци по програмиране и уеб дизайн за ученици ASP.NET MVC курс – HTML, SQL, C#,.NET, ASP.NET MVC безплатен курс "Разработка на софтуер в cloud среда" BG Coder - онлайн състезателна система - online judge курсове и уроци по програмиране, книги – безплатно от Наков безплатен курс "Качествен програмен код" алго академия – състезателно програмиране, състезания ASP.NET курс - уеб програмиране, бази данни, C#,.NET, ASP.NET курсове и уроци по програмиране – Телерик академия курс мобилни приложения с iPhone, Android, WP7, PhoneGap free C# book, безплатна книга C#, книга Java, книга C# Николай Костов - блог за програмиране

1. Write a program that fills and prints a matrix of size (n, n) as shown below: (examples for n = 4) a)b) c)d) * 38

2. Write a program that reads a rectangular matrix of size N x M and finds in it the square 3 x 3 that has maximal sum of its elements. 3. We are given a matrix of strings of size N x M. Sequences in the matrix we define as sets of several neighbor elements located on the same line, column or diagonal. Write a program that finds the longest sequence of equal strings in the matrix. Example: hafifihohifohahixx xxxhohaxx sqqspppps ppqqs ha, ha, ha s, s, s 39

4. Write a program, that reads from the console an array of N integers and an integer K, sorts the array and using the method Array.BinSearch() finds the largest number in the array which is ≤ K. 5. You are given an array of strings. Write a method that sorts the array by the length of its elements (the number of characters composing them). 6. * Write a class Matrix, to holds a matrix of integers. Overload the operators for adding, subtracting and multiplying of matrices, indexer for accessing the matrix content and ToString(). 40

7. * Write a program that finds the largest area of equal neighbor elements in a rectangular matrix and prints its size. Example: Hint: you can use the algorithm "Depth-first search" or "Breadth-first search" (find them in Wikipedia). Depth-first searchBreadth-first searchDepth-first searchBreadth-first search

 “C# Telerik Academy  csharpfundamentals.telerik.com csharpfundamentals.telerik.com  Telerik Software Academy  academy.telerik.com academy.telerik.com  Telerik Facebook  facebook.com/TelerikAcademy facebook.com/TelerikAcademy  Telerik Software Academy Forums  forums.academy.telerik.com forums.academy.telerik.com