SlideShare ist ein Scribd-Unternehmen logo
1 von 47
Курс по програмиране на 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

Weitere ähnliche Inhalte

Was ist angesagt?

EG-I-3-73-78-Naselja i proces urbanizacije u svetu
EG-I-3-73-78-Naselja i proces urbanizacije u svetuEG-I-3-73-78-Naselja i proces urbanizacije u svetu
EG-I-3-73-78-Naselja i proces urbanizacije u svetuTeacherDN
 
Srđan Mladenović - Pravni i poreski aspekti pokretanja biznisa
Srđan Mladenović - Pravni i poreski aspekti pokretanja biznisaSrđan Mladenović - Pravni i poreski aspekti pokretanja biznisa
Srđan Mladenović - Pravni i poreski aspekti pokretanja biznisabsckragujevac
 
Radijacija i njeno dejstvo na čovjeka
Radijacija i njeno dejstvo na čovjekaRadijacija i njeno dejstvo na čovjeka
Radijacija i njeno dejstvo na čovjekaOlivera Lučić
 
Ултразвук
УлтразвукУлтразвук
Ултразвукmtrad
 
Заштићена подручја Србије
Заштићена подручја СрбијеЗаштићена подручја Србије
Заштићена подручја СрбијеMilena Skaro
 
атмосферно налягане
атмосферно налягане  атмосферно налягане
атмосферно налягане dani_ni1
 
Varijabilnost
VarijabilnostVarijabilnost
VarijabilnostAlleteja
 
Фотони.обяснение на фотоефекта
Фотони.обяснение на фотоефектаФотони.обяснение на фотоефекта
Фотони.обяснение на фотоефектаmtrad
 
GS-76-81-kretanje i teritorijalni razmeštaj stanovništva srbije
GS-76-81-kretanje i teritorijalni razmeštaj stanovništva srbijeGS-76-81-kretanje i teritorijalni razmeštaj stanovništva srbije
GS-76-81-kretanje i teritorijalni razmeštaj stanovništva srbijeTeacherDN
 
Privreda osnovne karakteristike i podela
Privreda osnovne karakteristike i podelaPrivreda osnovne karakteristike i podela
Privreda osnovne karakteristike i podelaprijicsolar
 
Satirična knjizevnost - prezentacija nekoliko satiričnih dela srpskih i rusk...
Satirična knjizevnost - prezentacija  nekoliko satiričnih dela srpskih i rusk...Satirična knjizevnost - prezentacija  nekoliko satiričnih dela srpskih i rusk...
Satirična knjizevnost - prezentacija nekoliko satiričnih dela srpskih i rusk...MilanStankovic19
 
Životni procesi
Životni procesiŽivotni procesi
Životni procesiEna Horvat
 
горива
горивагорива
гориваmtrad
 
13. Nervno misicna sinapsa
13. Nervno misicna sinapsa13. Nervno misicna sinapsa
13. Nervno misicna sinapsaltixomir
 
дисперсия
дисперсиядисперсия
дисперсияmtrad
 

Was ist angesagt? (20)

Krvne grupe
Krvne grupeKrvne grupe
Krvne grupe
 
Nacionalni parkovi
Nacionalni parkoviNacionalni parkovi
Nacionalni parkovi
 
EG-I-3-73-78-Naselja i proces urbanizacije u svetu
EG-I-3-73-78-Naselja i proces urbanizacije u svetuEG-I-3-73-78-Naselja i proces urbanizacije u svetu
EG-I-3-73-78-Naselja i proces urbanizacije u svetu
 
Srđan Mladenović - Pravni i poreski aspekti pokretanja biznisa
Srđan Mladenović - Pravni i poreski aspekti pokretanja biznisaSrđan Mladenović - Pravni i poreski aspekti pokretanja biznisa
Srđan Mladenović - Pravni i poreski aspekti pokretanja biznisa
 
Radijacija i njeno dejstvo na čovjeka
Radijacija i njeno dejstvo na čovjekaRadijacija i njeno dejstvo na čovjeka
Radijacija i njeno dejstvo na čovjeka
 
Ултразвук
УлтразвукУлтразвук
Ултразвук
 
Заштићена подручја Србије
Заштићена подручја СрбијеЗаштићена подручја Србије
Заштићена подручја Србије
 
атмосферно налягане
атмосферно налягане  атмосферно налягане
атмосферно налягане
 
Radioaktivnost
RadioaktivnostRadioaktivnost
Radioaktivnost
 
Varijabilnost
VarijabilnostVarijabilnost
Varijabilnost
 
Фотони.обяснение на фотоефекта
Фотони.обяснение на фотоефектаФотони.обяснение на фотоефекта
Фотони.обяснение на фотоефекта
 
GS-76-81-kretanje i teritorijalni razmeštaj stanovništva srbije
GS-76-81-kretanje i teritorijalni razmeštaj stanovništva srbijeGS-76-81-kretanje i teritorijalni razmeštaj stanovništva srbije
GS-76-81-kretanje i teritorijalni razmeštaj stanovništva srbije
 
Privreda osnovne karakteristike i podela
Privreda osnovne karakteristike i podelaPrivreda osnovne karakteristike i podela
Privreda osnovne karakteristike i podela
 
Satirična knjizevnost - prezentacija nekoliko satiričnih dela srpskih i rusk...
Satirična knjizevnost - prezentacija  nekoliko satiričnih dela srpskih i rusk...Satirična knjizevnost - prezentacija  nekoliko satiričnih dela srpskih i rusk...
Satirična knjizevnost - prezentacija nekoliko satiričnih dela srpskih i rusk...
 
Životni procesi
Životni procesiŽivotni procesi
Životni procesi
 
горива
горивагорива
горива
 
6. razred sistematizacija gradiva.pdf
6. razred sistematizacija gradiva.pdf6. razred sistematizacija gradiva.pdf
6. razred sistematizacija gradiva.pdf
 
13. Nervno misicna sinapsa
13. Nervno misicna sinapsa13. Nervno misicna sinapsa
13. Nervno misicna sinapsa
 
Kalendar života.pdf
Kalendar života.pdfKalendar života.pdf
Kalendar života.pdf
 
дисперсия
дисперсиядисперсия
дисперсия
 

Mehr von 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 - CSSDAVID Academy
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLDAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №14
Училищен курс по програмиране на C# (2013/2014), занятие №14Училищен курс по програмиране на C# (2013/2014), занятие №14
Училищен курс по програмиране на C# (2013/2014), занятие №14DAVID 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), занятие №13DAVID Academy
 
Курс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSКурс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSDAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12DAVID Academy
 
Курс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLКурс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLDAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №8
Училищен курс по програмиране на C# (2013/2014), занятие №8Училищен курс по програмиране на C# (2013/2014), занятие №8
Училищен курс по програмиране на C# (2013/2014), занятие №8DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №7
Училищен курс по програмиране на C# (2013/2014), занятие №7Училищен курс по програмиране на C# (2013/2014), занятие №7
Училищен курс по програмиране на C# (2013/2014), занятие №7DAVID 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), занятие №4DAVID Academy
 
Курс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web ServicesКурс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web ServicesDAVID Academy
 

Mehr von 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