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

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

Масиви
Едномерни масиви
Особености на масивите
Многомерни масиви
Масиви от масиви
Приложения на масивите
Масиви
• Какво е „масив“?
– Структура от данни
– Множество от елементи от един и същи тип
– Константна големина
• Няма възможност за вмъкване или изваждане на елементи

– Едно или повече измерения
– Индексиране на елемент
Масиви
• Характеристики на масивите в C#
– Референтен тип данни
– Тип на елементите
– Размерност(и)
Едномерни масиви
• Едномерни масиви в C#
– Брой на елементите (дължина/големина на масива) – цяло
неотрицателно число n
– Индекси на елементите – целите числа от 0 до n-1 включително
Едномерни масиви
• Деклариране на променлива от
тип масив
– Тип на елементите
– Квадратни скоби
– Наименование

• Инстанциране на масив
– Оператор new
– Тип на елементите
– Брой на елементите в квадратни скоби

• Деклариране на променлива и
инициализиране с масив

// Деклариране на масиви
int[] numbers;
byte[] bytes;
// Инстанциране на масиви
numbers = new int[10];
bytes = new byte[0];
// Деклариране с инициализация
// с празен масив
string[] lines = new string[50];
Едномерни масиви
• Инстанциране на масив с
инициализация на елементите

// Инициализиране на масив
// със стойности
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 =
{ 'а', 'ъ', 'е', 'и', 'о', 'у' };
Деклариране и инстанциране на масиви - демо
// Демонстрация
Едномерни масиви
• Достъпване на елементи на масив // Достъпване на елемент на масив

names[2]
– Идентификатор на променливата// Прочитане на стойността на елемент
масив
Console.WriteLine(temperatures[0]);
– Индекс на елемента в квадратни скоби
// Записване на стойност в елемент
• Прочитане на стойността на
greetings[1] = "Good morning";

елемент на масива
• Записване на стойност в елемент
на масива
Достъпване на елементи на масив - демо
// Демонстрация
Едномерни масиви
• Обхождане на елементите на
масив

// Достъпване на дължината на масив
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());
}
Обхождане на елементите на масив - демо
// Демонстрация
Едномерни масиви
• Масивите като изброими колекции // Обхождане на масив като изброима
– Предоставят елементите един по
един, започвайки от нулевия
– Цикъл foreach
– Не се индексират елементите на
масива явно

// колекция
string[] nouns = new string[]
{ "cat", "dog", "boy", "job",
"tip", "lap", "cup", "mop" };
foreach (string noun in nouns)
{
Console.WriteLine(noun);
}
Масивите като изброими колекции - демо
// Демонстрация
Особености на масивите
• Масивите са референтни типове – няколко променливи
могат да реферират един и същи масив
• Елементите на масивите могат да бъдат референтни или
нереферентни типове
– Ако типът на елементите е референтен, е възможно повече от един
елемента на един или повече масива да реферират едно и също
място в паметта
Особености на масивите - демо
// Демонстрация
Многомерни масиви
• Многомерни масиви
Двумерни масиви (матрици) – две измерения
Масиви с повече от две измерения
Всяко от измеренията може да има различна дължина
Измеренията са наредени – елементът с индекси m, n не съвпада с
елемента с индекси n, m
– Индексирането на елемент винаги е пълно – указва се индекс за
всяко от измеренията
– Хомогенност на измеренията - дължината на всяко измерение е
независима от индексите по другите измерения
–
–
–
–
Многомерни масиви
• Деклариране на променлива от
тип многомерен масив
– Тип на елементите
– Квадратни скоби с i-1 на брой запетаи

• Инстанциране на многомерен
масив
– Оператор new
– Тип на елементите
– Списък с дължините на измеренията в
квадратни скоби

// Деклариране на двумерен масив
int[,] matrix;
// Деклариране на тримерен масив
double[,,] values;
// Инстанциране на многомерни масиви
matrix = new int[8, 6];
values = new double[5, 5, 4];
// Деклариране с инициализация с
// празен многомерен масив
char[,] tiles = new char[10, 10];
Многомерни масиви
• Инстанциране на многомерен
масив с инициализация на
елементите

// Инициализиране на двумерен масив
// със стойности
bool[,] truthTable = new bool[4, 3]
{ { false, false, false },
{ false, true, false },
{ true, false, false },
{ true, true, true } };
char[,] ticTacToe =
{ { 'X', 'O', ' ' },
{ ' ', 'X', ' ' },
{ ' ', ' ', 'O' } };
Деклариране и инстанциране на многомерни
масиви - демо
// Демонстрация
Многомерни масиви
• Достъпване на елемент на
многомерен масив
– Идентификатор на променливатамасив
– Списък с индекси на елемента в
квадратни скоби

• Прочитане на стойността на
елемент на многомерен масив
• Записване на стойност в елемент
на многомерен масив

// Достъпване на елемент на двумерен
// масив
ticTacToe[0, 1]
// Прочитане на стойността на елемент
// на двумерен масив
Console.Write(truthTable[1, 2]);
// Записване на стойност в елемент
// на двумерен масив
ticTacToe[2, 0] = 'X';
Достъпване на елементи на многомерен масив демо
// Демонстрация
Многомерни масиви
• Обхождане на елементите на
многомерен масив
– Дължина на всяко от измеренията
– Вложени цикли 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();
}
Обхождане на елементите на многомерен масив демо
// Демонстрация
Масиви от масиви
• Масиви от масиви
–
–
–
–
–

Наричат се още назъбени масиви (jagged arrays)
Тип на елементите – масив (едномерен, многомерен или назъбен)
Външният масив може да бъде едномерен или многомерен
Индексирането на елемент се извършва на стъпки
Нехомогенност на измеренията – възможно е два елемента на
външния масив да реферират масиви с различни дължини на
измеренията
Масиви от масиви
• Деклариране на променлива от
тип масив от масиви
– Тип на елементите на вътрешния масив
– Два или повече чифта квадратни скоби

• Инстанциране на масив от масиви
– Оператор new
– Тип на елементите на вътрешния масив
– Дължина на външния масив в квадратни
скоби
– Един или повече чифта празни
квадратни скоби
– Всеки от елементите на външния масив
е null

// Деклариране на масиви от масиви
string[][] families;
int[][][] sets;
// Инстанциране на масиви от масиви
families = new string[2][];
sets = new int[10][][];
// Деклариране с инициализиране с
// празен масив
byte[][] byteGroups = new byte[10][];
Масиви от масиви
• Инстанциране на масив от масиви
с инициализация на елементите

// Инициализиране на масив от масиви
// със стойности
string[][] employees = new string[4][]
{
new string[2] { "Sue", "Peter" },
new string[1] { "Bonnie" },
new string[] { "Ivan", "Kosta" },
new[] { "Max", "Sarah", "John" },
};
Деклариране и инстанциране на масиви от масиви демо
// Демонстрация
Масиви от масиви
• Достъпване на елемент на масив
от масиви

// Достъпване на елемент на външния
// масив
families[0]
– Идентификатор на променливата// Достъпване на вътрешен елемент
масив
employees[2][1]
– Индекс на елемента на външния масив
// Прочитане на стойността на вътрешен
• Достъпване на вътрешен елемент в // елемент
Console.Write(sets[5][2][7]);
масив от масиви
// Записване на стойност във вътрешен
– Идентификатор на променливата// елемент
масив
– Индекс на елемента на външния масив employees[0][1] = "Miranda";
– Индекс на елемента на вътрешния
масив
Достъпване на елементи на масив от масиви - демо
// Демонстрация
Масиви от масиви
• Обхождане на вътрените елементи
на масив от масиви
– Дължина на външния масив
– Дължина на всеки от вътрешните
масиви
– Вложени цикли 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]);
}
}
Обхождане на елементите на масив от масиви демо
// Демонстрация
Масиви от масиви
• Масивите от масиви като вложени
изброими колекции
– Вложени цикли 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("}");
Масивите от масиви като вложени изброими
колекции - демо
// Демонстрация
Приложения на масивите
• Сортиране на информация – метод на пряката селекция
– Масив с n на брой елемента
– n-1 стъпки
– На стъпка i се разглеждат елементите с индекси от i до n-1
(включително)
– Най-малкият от тях се разменя с елемента с индекс i (в случай че
това не е самият той)
– След всяка стъпка, елементите с индекси от 0 до i (включително) са
сортирани във възходящ ред
Сортиране по метода на пряката селекция - демо
// Демонстрация
Приложения на масивите
• Откриване на прости числа – сито на Ератостен
– Масив с n на брой елемента от булев тип
– Всички елементи с индекси, по-големи от 1, се инициализират с
true
– Открива се първият индекс, който е по-голям от предишното
намерено просто число и на който съответства елемент със
стойност true
– Този индекс е следващото просто число
– За всички индекси, които са по-големи и са кратни на него, се
присвоява стойност false на съответните им елементи
– Изпълнението продължава, докато може да бъде намерено ново
просто число, по-малко от n
Сито на Ератостен - демо
// Демонстрация
Приложения на масивите
• Лабиринт
– Двумерен масив с елементи от символен тип
– Всеки елемент представлява квадратно поле от лабиринта (може
да бъде празно пространство или стена)
– Координати на играча спрямо горния ляв ъгъл
– Безкраен цикъл:
• Изчаква се натискане на клавиш
• Ако е натиснат клавиш за движение, се прави опит за преместване в
съответната посока
• Ако е натиснат клавиш Escape, цикълът се прекратява
• Ако преместването е невъзможно или е натиснат друг клавиш, не се случва
нищо
Лабиринт - демо
// Демонстрация
Задачи за упражнение
• Създайте програма, в която се въвежда масив от цели
числа и се извеждат най-голямото число, най-малкото
число и средното аритметично на всички числа в масива.
• Създайте програма, в която се въвежда масив от дробни
числа, масивът се сортира във възходящ ред по метода на
мехурчето и след това се извеждат сортираните числа.
Допълнителни условия:
– Потребителят да може да избере дължината на въвеждания масив;
– Потребителят да може да избере между възходящ и низходящ ред
на сортирането.
Задачи за упражнение
• Създайте програма, в която се въвежда масив от цели
числа и се извежда броят на инверсиите. Два елемента с
индекси i и j се намират в инверсия, точно когато i < j и
елементът с индекс i е по-голям от елементa с индекс j.
• Създайте програма, в която се въвежда двумерна
квадратна матрица от дробни числа и се извеждат сумата
на всички елементи по главния диагонал, сумата на всички
елементи над него и сумата на всички елементи под него.
Главен диагонал наричаме елементите с равни първи и
втори индекси.
Задачи за упражнение
• Създайте програма, в която се въвежда правоъгълна
матрица от температури (дробни числа) със 7 реда и 6
колони. Всеки от редовете съответства на ден от
седмицата, започвайки с понеделник. Колоните
съответстват на 00:00, 04:00, 08:00, 12:00, 16:00 и 20:00 часа.
Всяка клетка от матрицата съдържа температурата в
съответния час и ден за една седмица. Програмата трябва
да пресметне и изведе средната температура за всеки от
седемте дни, както и средната температура за всеки от
шестте момента от денонощието.
Задачи за упражнение
• Създайте програма, в която се въвеждат текущите оценки
(дробни числа между 2 и 6) по един учебен предмет на
учениците от един клас. Възможно е всеки от учениците да
има различен брой текущи оценки по предмета.
Програмата трябва да пресмята и извежда срочната
оценка на всеки от учениците (като средно аритметично от
текущите му оценки), както и средния успех на целия клас
по предмета (като средно аритметично от всички срочни
оценки).
Задачи за упражнение
• В една местност има n на брой градове (номерирани от 0
до n-1) и някои от тях са свързани с пътища. Създайте
програма, в която се въвежда n и след това за всеки от
градовете последователно се въвеждат номерата на
градовете, които са свързани с него чрез директен път.
Програмата трябва да пресметне и изведе двойките
градове, които са свързани с най-кратък път, минаващ
през точно един друг град, точно два други града и т.н. За
простота приемете, че пътищата са еднопосочни
(наличието на път от град i до град j не гарантира наличие
на обратен път от град j към град i).
Въпроси?
Благодаря!
• Александър Далемски
– sasho@david.bg
– Skype: musasho
– https://facebook.com/adalemski

• ДАВИД академия
–
–
–
–

acad@david.bg
http://acad.david.bg/
@david_academy
https://facebook.com/DavidAcademy

More Related Content

What's hot

Компютърни системи
Компютърни системиКомпютърни системи
Компютърни системи
National humanitarian Secondary School
 
Правопис на прилагателните имена. Двойно -нн
Правопис на прилагателните имена. Двойно -ннПравопис на прилагателните имена. Двойно -нн
Правопис на прилагателните имена. Двойно -нн
roryace
 
числата до 100. събиране и изваждане. обиколка
числата до 100. събиране и изваждане. обиколкачислата до 100. събиране и изваждане. обиколка
числата до 100. събиране и изваждане. обиколка
Лидия Ганева
 
Мерни единици
Мерни единициМерни единици
Мерни единици
Antonia Stancheva
 
кондензатори
кондензаторикондензатори
кондензаториmtrad
 
работен лист прилагат. степенуване
работен лист прилагат. степенуванеработен лист прилагат. степенуване
работен лист прилагат. степенуванеVera
 
алгоритми
алгоритмиалгоритми
алгоритмиmtrad
 
Учителко портфолио - Ангел Ангелов
Учителко портфолио - Ангел АнгеловУчителко портфолио - Ангел Ангелов
Учителко портфолио - Ангел Ангелов
Ангел Ангелов
 
разтворимост на веществата
разтворимост на веществатаразтворимост на веществата
разтворимост на веществатаmtrad
 
5 октомври- международен ден на учителя
5 октомври- международен ден на учителя5 октомври- международен ден на учителя
5 октомври- международен ден на учителя
Mariya Stoilkova
 
сложни думи
сложни думисложни думи
сложни думи
Galina Naidenova
 
WordPress za početnike
WordPress za početnikeWordPress za početnike
WordPress za početnike
DejanVesic
 
съвременни теории за еволюцията
съвременни теории за еволюциятасъвременни теории за еволюцията
съвременни теории за еволюцията
aniezina
 
урок бдп
урок бдпурок бдп
Ученическо портфолио с ГлогстерЕДУ
Ученическо портфолио с ГлогстерЕДУУченическо портфолио с ГлогстерЕДУ
Ученическо портфолио с ГлогстерЕДУRose Sunrise
 
процес
процеспроцес
процес
yuriiklissarov
 
28. Национални символи - РК, Просвета, В. П.
28. Национални символи - РК, Просвета, В. П.28. Национални символи - РК, Просвета, В. П.
28. Национални символи - РК, Просвета, В. П.
Veska Petrova
 

What's hot (20)

Компютърни системи
Компютърни системиКомпютърни системи
Компютърни системи
 
Правопис на прилагателните имена. Двойно -нн
Правопис на прилагателните имена. Двойно -ннПравопис на прилагателните имена. Двойно -нн
Правопис на прилагателните имена. Двойно -нн
 
мерни единици- преговор
мерни единици- преговормерни единици- преговор
мерни единици- преговор
 
Elektrostatika
ElektrostatikaElektrostatika
Elektrostatika
 
числата до 100. събиране и изваждане. обиколка
числата до 100. събиране и изваждане. обиколкачислата до 100. събиране и изваждане. обиколка
числата до 100. събиране и изваждане. обиколка
 
Мерни единици
Мерни единициМерни единици
Мерни единици
 
кондензатори
кондензаторикондензатори
кондензатори
 
работен лист прилагат. степенуване
работен лист прилагат. степенуванеработен лист прилагат. степенуване
работен лист прилагат. степенуване
 
алгоритми
алгоритмиалгоритми
алгоритми
 
Учителко портфолио - Ангел Ангелов
Учителко портфолио - Ангел АнгеловУчителко портфолио - Ангел Ангелов
Учителко портфолио - Ангел Ангелов
 
разтворимост на веществата
разтворимост на веществатаразтворимост на веществата
разтворимост на веществата
 
5 октомври- международен ден на учителя
5 октомври- международен ден на учителя5 октомври- международен ден на учителя
5 октомври- международен ден на учителя
 
сложни думи
сложни думисложни думи
сложни думи
 
WordPress za početnike
WordPress za početnikeWordPress za početnike
WordPress za početnike
 
съвременни теории за еволюцията
съвременни теории за еволюциятасъвременни теории за еволюцията
съвременни теории за еволюцията
 
наречие
наречиенаречие
наречие
 
урок бдп
урок бдпурок бдп
урок бдп
 
Ученическо портфолио с ГлогстерЕДУ
Ученическо портфолио с ГлогстерЕДУУченическо портфолио с ГлогстерЕДУ
Ученическо портфолио с ГлогстерЕДУ
 
процес
процеспроцес
процес
 
28. Национални символи - РК, Просвета, В. П.
28. Национални символи - РК, Просвета, В. П.28. Национални символи - РК, Просвета, В. П.
28. Национални символи - РК, Просвета, В. П.
 

More from DAVID Academy

Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
DAVID Academy
 
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
DAVID Academy
 
Курс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSSКурс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSS
DAVID Academy
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTML
DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №14
Училищен курс по програмиране на C# (2013/2014), занятие №14Училищен курс по програмиране на C# (2013/2014), занятие №14
Училищен курс по програмиране на C# (2013/2014), занятие №14
DAVID Academy
 
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
DAVID Academy
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13
DAVID Academy
 
Курс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSКурс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSS
DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12
DAVID Academy
 
Курс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLКурс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTML
DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11
DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9
DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №8
Училищен курс по програмиране на C# (2013/2014), занятие №8Училищен курс по програмиране на C# (2013/2014), занятие №8
Училищен курс по програмиране на C# (2013/2014), занятие №8
DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №7
Училищен курс по програмиране на C# (2013/2014), занятие №7Училищен курс по програмиране на C# (2013/2014), занятие №7
Училищен курс по програмиране на C# (2013/2014), занятие №7
DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоУчилищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - Помагало
DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияУчилищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - Упражнения
DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №4
Училищен курс по програмиране на C# (2013/2014), занятие №4Училищен курс по програмиране на C# (2013/2014), занятие №4
Училищен курс по програмиране на C# (2013/2014), занятие №4
DAVID Academy
 
Курс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web ServicesКурс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web Services
DAVID Academy
 

More from DAVID Academy (20)

Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
 
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
 
Курс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSSКурс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSS
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTML
 
Училищен курс по програмиране на C# (2013/2014), занятие №14
Училищен курс по програмиране на C# (2013/2014), занятие №14Училищен курс по програмиране на C# (2013/2014), занятие №14
Училищен курс по програмиране на C# (2013/2014), занятие №14
 
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
 
Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13
 
Курс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSКурс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSS
 
Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12
 
Курс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLКурс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTML
 
Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11
 
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
 
Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9
 
Училищен курс по програмиране на C# (2013/2014), занятие №8
Училищен курс по програмиране на C# (2013/2014), занятие №8Училищен курс по програмиране на C# (2013/2014), занятие №8
Училищен курс по програмиране на C# (2013/2014), занятие №8
 
Училищен курс по програмиране на C# (2013/2014), занятие №7
Училищен курс по програмиране на C# (2013/2014), занятие №7Училищен курс по програмиране на C# (2013/2014), занятие №7
Училищен курс по програмиране на C# (2013/2014), занятие №7
 
Училищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоУчилищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - Помагало
 
Училищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияУчилищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - Упражнения
 
Училищен курс по програмиране на C# (2013/2014), занятие №4
Училищен курс по програмиране на C# (2013/2014), занятие №4Училищен курс по програмиране на C# (2013/2014), занятие №4
Училищен курс по програмиране на C# (2013/2014), занятие №4
 
Курс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web ServicesКурс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web Services
 

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

  • 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).
  • 47. Благодаря! • Александър Далемски – sasho@david.bg – Skype: musasho – https://facebook.com/adalemski • ДАВИД академия – – – – acad@david.bg http://acad.david.bg/ @david_academy https://facebook.com/DavidAcademy