Your SlideShare is downloading. ×
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Училищен курс по програмиране на C# (2013/2014), занятие №3

399

Published on

Училищен курс по програмиране на C# (2013/2014) …

Училищен курс по програмиране на C# (2013/2014)
Занятие №3: Масиви. Многомерни масиви

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
399
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Курс по програмиране на C# Занятие №3 Масиви. Многомерни масиви 2013
  • 2. Съдържание • • • • • • Масиви Едномерни масиви Особености на масивите Многомерни масиви Масиви от масиви Приложения на масивите
  • 3. Масиви • Какво е „масив“? – Структура от данни – Множество от елементи от един и същи тип – Константна големина • Няма възможност за вмъкване или изваждане на елементи – Едно или повече измерения – Индексиране на елемент
  • 4. Масиви • Характеристики на масивите в C# – Референтен тип данни – Тип на елементите – Размерност(и)
  • 5. Едномерни масиви • Едномерни масиви в C# – Брой на елементите (дължина/големина на масива) – цяло неотрицателно число n – Индекси на елементите – целите числа от 0 до n-1 включително
  • 6. Едномерни масиви • Деклариране на променлива от тип масив – Тип на елементите – Квадратни скоби – Наименование • Инстанциране на масив – Оператор new – Тип на елементите – Брой на елементите в квадратни скоби • Деклариране на променлива и инициализиране с масив // Деклариране на масиви int[] numbers; byte[] bytes; // Инстанциране на масиви numbers = new int[10]; bytes = new byte[0]; // Деклариране с инициализация // с празен масив string[] lines = new string[50];
  • 7. Едномерни масиви • Инстанциране на масив с инициализация на елементите // Инициализиране на масив // със стойности string[] names = new string[3] – Оператор new { "Иван", "Валери", – Тип на елементите "Александър" }; – Брой на елементите в квадратни скоби double[] temperatures = new double[] { -3.3, 0.2, 7.7, – Списък от стойности на елементите във 10.0, 14.5, 11.3 }; фигурни скоби string[] greetings = new[] • Съкратени записи (синтактична { "Hello", "Hi", захар) "Good afternoon" }; char[] vowels = { 'а', 'ъ', 'е', 'и', 'о', 'у' };
  • 8. Деклариране и инстанциране на масиви - демо // Демонстрация
  • 9. Едномерни масиви • Достъпване на елементи на масив // Достъпване на елемент на масив names[2] – Идентификатор на променливата// Прочитане на стойността на елемент масив Console.WriteLine(temperatures[0]); – Индекс на елемента в квадратни скоби // Записване на стойност в елемент • Прочитане на стойността на greetings[1] = "Good morning"; елемент на масива • Записване на стойност в елемент на масива
  • 10. Достъпване на елементи на масив - демо // Демонстрация
  • 11. Едномерни масиви • Обхождане на елементите на масив // Достъпване на дължината на масив byte[] bytes = new byte[250]; Console.WriteLine(bytes.Length); – Дължина на масива // Обхождане на елементите на масив int[] numbers = new int[10]; – Цикъл for for (int i = 0; i < numbers.Length; i++) – Индексиране на всеки от елементите с { помощта на брояча на цикъла Console.Write( "Input number #{0}: ", i); numbers[i] = int.Parse(Console.ReadLine()); }
  • 12. Обхождане на елементите на масив - демо // Демонстрация
  • 13. Едномерни масиви • Масивите като изброими колекции // Обхождане на масив като изброима – Предоставят елементите един по един, започвайки от нулевия – Цикъл foreach – Не се индексират елементите на масива явно // колекция string[] nouns = new string[] { "cat", "dog", "boy", "job", "tip", "lap", "cup", "mop" }; foreach (string noun in nouns) { Console.WriteLine(noun); }
  • 14. Масивите като изброими колекции - демо // Демонстрация
  • 15. Особености на масивите • Масивите са референтни типове – няколко променливи могат да реферират един и същи масив • Елементите на масивите могат да бъдат референтни или нереферентни типове – Ако типът на елементите е референтен, е възможно повече от един елемента на един или повече масива да реферират едно и също място в паметта
  • 16. Особености на масивите - демо // Демонстрация
  • 17. Многомерни масиви • Многомерни масиви Двумерни масиви (матрици) – две измерения Масиви с повече от две измерения Всяко от измеренията може да има различна дължина Измеренията са наредени – елементът с индекси m, n не съвпада с елемента с индекси n, m – Индексирането на елемент винаги е пълно – указва се индекс за всяко от измеренията – Хомогенност на измеренията - дължината на всяко измерение е независима от индексите по другите измерения – – – –
  • 18. Многомерни масиви • Деклариране на променлива от тип многомерен масив – Тип на елементите – Квадратни скоби с i-1 на брой запетаи • Инстанциране на многомерен масив – Оператор new – Тип на елементите – Списък с дължините на измеренията в квадратни скоби // Деклариране на двумерен масив int[,] matrix; // Деклариране на тримерен масив double[,,] values; // Инстанциране на многомерни масиви matrix = new int[8, 6]; values = new double[5, 5, 4]; // Деклариране с инициализация с // празен многомерен масив char[,] tiles = new char[10, 10];
  • 19. Многомерни масиви • Инстанциране на многомерен масив с инициализация на елементите // Инициализиране на двумерен масив // със стойности bool[,] truthTable = new bool[4, 3] { { false, false, false }, { false, true, false }, { true, false, false }, { true, true, true } }; char[,] ticTacToe = { { 'X', 'O', ' ' }, { ' ', 'X', ' ' }, { ' ', ' ', 'O' } };
  • 20. Деклариране и инстанциране на многомерни масиви - демо // Демонстрация
  • 21. Многомерни масиви • Достъпване на елемент на многомерен масив – Идентификатор на променливатамасив – Списък с индекси на елемента в квадратни скоби • Прочитане на стойността на елемент на многомерен масив • Записване на стойност в елемент на многомерен масив // Достъпване на елемент на двумерен // масив ticTacToe[0, 1] // Прочитане на стойността на елемент // на двумерен масив Console.Write(truthTable[1, 2]); // Записване на стойност в елемент // на двумерен масив ticTacToe[2, 0] = 'X';
  • 22. Достъпване на елементи на многомерен масив демо // Демонстрация
  • 23. Многомерни масиви • Обхождане на елементите на многомерен масив – Дължина на всяко от измеренията – Вложени цикли for – Елементът се индексира в тялото на най-вътрешния цикъл с помощта на броячите на всички цикли // Достъпване на дължината на измерение // на двумерен масив double[,] temperatures = new double[7, 24]; Console.WriteLine(temperatures.GetLength(0)); // Обхождане на елементите на двумерен // масив for (int i = 0; i < truthTable.GetLength(0); i++) { for (int j = 0; j < truthTable.GetLength(1); j++) { Console.Write( "{0,5} ", truthTable[i, j]); } Console.WriteLine(); }
  • 24. Обхождане на елементите на многомерен масив демо // Демонстрация
  • 25. Масиви от масиви • Масиви от масиви – – – – – Наричат се още назъбени масиви (jagged arrays) Тип на елементите – масив (едномерен, многомерен или назъбен) Външният масив може да бъде едномерен или многомерен Индексирането на елемент се извършва на стъпки Нехомогенност на измеренията – възможно е два елемента на външния масив да реферират масиви с различни дължини на измеренията
  • 26. Масиви от масиви • Деклариране на променлива от тип масив от масиви – Тип на елементите на вътрешния масив – Два или повече чифта квадратни скоби • Инстанциране на масив от масиви – Оператор new – Тип на елементите на вътрешния масив – Дължина на външния масив в квадратни скоби – Един или повече чифта празни квадратни скоби – Всеки от елементите на външния масив е null // Деклариране на масиви от масиви string[][] families; int[][][] sets; // Инстанциране на масиви от масиви families = new string[2][]; sets = new int[10][][]; // Деклариране с инициализиране с // празен масив byte[][] byteGroups = new byte[10][];
  • 27. Масиви от масиви • Инстанциране на масив от масиви с инициализация на елементите // Инициализиране на масив от масиви // със стойности string[][] employees = new string[4][] { new string[2] { "Sue", "Peter" }, new string[1] { "Bonnie" }, new string[] { "Ivan", "Kosta" }, new[] { "Max", "Sarah", "John" }, };
  • 28. Деклариране и инстанциране на масиви от масиви демо // Демонстрация
  • 29. Масиви от масиви • Достъпване на елемент на масив от масиви // Достъпване на елемент на външния // масив families[0] – Идентификатор на променливата// Достъпване на вътрешен елемент масив employees[2][1] – Индекс на елемента на външния масив // Прочитане на стойността на вътрешен • Достъпване на вътрешен елемент в // елемент Console.Write(sets[5][2][7]); масив от масиви // Записване на стойност във вътрешен – Идентификатор на променливата// елемент масив – Индекс на елемента на външния масив employees[0][1] = "Miranda"; – Индекс на елемента на вътрешния масив
  • 30. Достъпване на елементи на масив от масиви - демо // Демонстрация
  • 31. Масиви от масиви • Обхождане на вътрените елементи на масив от масиви – Дължина на външния масив – Дължина на всеки от вътрешните масиви – Вложени цикли for – Елементът може да се индексира на стъпки // Достъпване на дължината на външния масив Console.WriteLine(sets.Length); // Достъпване на дължината на вътрешен масив Console.WriteLine(families[1].Length); // Обхождане на масив от масиви for (int i = 0; i < employees.Length; i++) { Console.WriteLine("Department {0}:", i); string[] department = employees[i]; for (int j = 0; j < department.Length; j++) { Console.WriteLine(department[j]); } }
  • 32. Обхождане на елементите на масив от масиви демо // Демонстрация
  • 33. Масиви от масиви • Масивите от масиви като вложени изброими колекции – Вложени цикли foreach – Не се индексират елементите явно // Обхождане на масив от масиви като // вложени изброими колекции Console.Write("{ "); foreach (int[][] outerSet in sets) { Console.Write("{ "); foreach (int[] innerSet in outerSet) { Console.Write("{ "); foreach (int n in innerSet) { Console.Write("{0}, ", n); } Console.Write("} "); } Console.Write("} "); } Console.WriteLine("}");
  • 34. Масивите от масиви като вложени изброими колекции - демо // Демонстрация
  • 35. Приложения на масивите • Сортиране на информация – метод на пряката селекция – Масив с n на брой елемента – n-1 стъпки – На стъпка i се разглеждат елементите с индекси от i до n-1 (включително) – Най-малкият от тях се разменя с елемента с индекс i (в случай че това не е самият той) – След всяка стъпка, елементите с индекси от 0 до i (включително) са сортирани във възходящ ред
  • 36. Сортиране по метода на пряката селекция - демо // Демонстрация
  • 37. Приложения на масивите • Откриване на прости числа – сито на Ератостен – Масив с n на брой елемента от булев тип – Всички елементи с индекси, по-големи от 1, се инициализират с true – Открива се първият индекс, който е по-голям от предишното намерено просто число и на който съответства елемент със стойност true – Този индекс е следващото просто число – За всички индекси, които са по-големи и са кратни на него, се присвоява стойност false на съответните им елементи – Изпълнението продължава, докато може да бъде намерено ново просто число, по-малко от n
  • 38. Сито на Ератостен - демо // Демонстрация
  • 39. Приложения на масивите • Лабиринт – Двумерен масив с елементи от символен тип – Всеки елемент представлява квадратно поле от лабиринта (може да бъде празно пространство или стена) – Координати на играча спрямо горния ляв ъгъл – Безкраен цикъл: • Изчаква се натискане на клавиш • Ако е натиснат клавиш за движение, се прави опит за преместване в съответната посока • Ако е натиснат клавиш Escape, цикълът се прекратява • Ако преместването е невъзможно или е натиснат друг клавиш, не се случва нищо
  • 40. Лабиринт - демо // Демонстрация
  • 41. Задачи за упражнение • Създайте програма, в която се въвежда масив от цели числа и се извеждат най-голямото число, най-малкото число и средното аритметично на всички числа в масива. • Създайте програма, в която се въвежда масив от дробни числа, масивът се сортира във възходящ ред по метода на мехурчето и след това се извеждат сортираните числа. Допълнителни условия: – Потребителят да може да избере дължината на въвеждания масив; – Потребителят да може да избере между възходящ и низходящ ред на сортирането.
  • 42. Задачи за упражнение • Създайте програма, в която се въвежда масив от цели числа и се извежда броят на инверсиите. Два елемента с индекси i и j се намират в инверсия, точно когато i < j и елементът с индекс i е по-голям от елементa с индекс j. • Създайте програма, в която се въвежда двумерна квадратна матрица от дробни числа и се извеждат сумата на всички елементи по главния диагонал, сумата на всички елементи над него и сумата на всички елементи под него. Главен диагонал наричаме елементите с равни първи и втори индекси.
  • 43. Задачи за упражнение • Създайте програма, в която се въвежда правоъгълна матрица от температури (дробни числа) със 7 реда и 6 колони. Всеки от редовете съответства на ден от седмицата, започвайки с понеделник. Колоните съответстват на 00:00, 04:00, 08:00, 12:00, 16:00 и 20:00 часа. Всяка клетка от матрицата съдържа температурата в съответния час и ден за една седмица. Програмата трябва да пресметне и изведе средната температура за всеки от седемте дни, както и средната температура за всеки от шестте момента от денонощието.
  • 44. Задачи за упражнение • Създайте програма, в която се въвеждат текущите оценки (дробни числа между 2 и 6) по един учебен предмет на учениците от един клас. Възможно е всеки от учениците да има различен брой текущи оценки по предмета. Програмата трябва да пресмята и извежда срочната оценка на всеки от учениците (като средно аритметично от текущите му оценки), както и средния успех на целия клас по предмета (като средно аритметично от всички срочни оценки).
  • 45. Задачи за упражнение • В една местност има n на брой градове (номерирани от 0 до n-1) и някои от тях са свързани с пътища. Създайте програма, в която се въвежда n и след това за всеки от градовете последователно се въвеждат номерата на градовете, които са свързани с него чрез директен път. Програмата трябва да пресметне и изведе двойките градове, които са свързани с най-кратък път, минаващ през точно един друг град, точно два други града и т.н. За простота приемете, че пътищата са еднопосочни (наличието на път от град i до град j не гарантира наличие на обратен път от град j към град i).
  • 46. Въпроси?
  • 47. Благодаря! • Александър Далемски – sasho@david.bg – Skype: musasho – https://facebook.com/adalemski • ДАВИД академия – – – – acad@david.bg http://acad.david.bg/ @david_academy https://facebook.com/DavidAcademy

×