Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

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

Ad

YouTube-Videos werden auf SlideShare nicht mehr unterstützt.

Original auf YouTube ansehen

Ad

Курс по програмиране на C#
Занятие №3
Масиви. Многомерни масиви

2013

Ad

Съдържание
•
•
•
•
•
•

Масиви
Едномерни масиви
Особености на масивите
Многомерни масиви
Масиви от масиви
Приложения на ма...

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Hier ansehen

1 von 49 Anzeige
1 von 49 Anzeige

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

Herunterladen, um offline zu lesen

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

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

Anzeige
Anzeige

Weitere Verwandte Inhalte

Diashows für Sie (13)

Weitere von DAVID Academy (16)

Anzeige

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

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

×