Курс по програмиране на C#
Занятие №4
Функции и методи. Често използвани методи

2013
Съдържание 1/2
• Функции и методи
–
–
–
–
–

Контрол на изпълнението
Видимост на променливите
Методи без връщана стойност
Методи с връщана стойност
Ограничения

• Параметри
– Референтни параметри
– Изходящи параметри
– Масиви от параметри
Съдържание 2/2
• Аргументи
– Незадължителни аргументи
– Именувани аргументи

• Презаписване на методи
• Често използвани методи
–
–
–
–
–
–

Символни низове
Превръщане на данни
Работа с файлове
Работа с масиви
Работа с конзола
Други методи
Функции и методи
• Какво е „функция“? Какво е „метод“?
– Функция е подпрограма, която извършва конкретна дейност и
може да бъде извиквана от друга част от програмата
– Функциите могат да приемат един или повече параметри
– Функциите могат да връщат единична стойност като резултат
– Аргумент е стойността подавана на даден параметър
– Метод е функция дефинирана в рамките на клас или структура
– Процедури наричаме функции, които не връщат резултат
– В езика C# методът е единственият начин за дефиниране на
функции
Функции и методи
• Приложение на функциите
–
–
–
–

Разбиване на приложението на по-конкретни задачи
Преизползване на програмния код
Разделяне на отговорностите и по-добра поддръжка
Подобрена разбираемост на кода

• BCL представлява библиотека от методи подпомагащи
разработчика в създаването на приложения без това да
става от нулата
Функции и методи
• Характеристики на методите
–
–
–
–

Наименование
Брой и тип на параметрите
Връщана стойност
Клас, в който методът е дефиниран

• Сигнатура на метод
– Наименование
– Ред, вид и тип на параметрите

• Наименованието на метода трябва да отразява неговото
предназначение
• В един и същи клас не може да има повече от един метод с
една и съща сигнатура
Функции и методи
• Деклариране на методи
– Тип на данните на връщаната
стойност (или “void” ако няма
такава)
– Наименование
– Описание на параметрите
– Тяло на метода

// метод без параметри и резултат
void Run()
{
// prison break
}
// метод с параметър без резултат
void Notify(string message)
{
// изпраща уведомления по e-mail
}
// метод с два параметъра и резултат
int Sum(int a, int b)
{
int c = a + b;
return c;
}
Функции и методи
• Използване на методи
– Наименование на клас или
обект, ако методът е
деклариран в друг клас
– Наименованието на метода
– Списък от аргументи

// извикване на метод без параметър
// (след атомна бомба - нищо)
DropNuclearBomb();
// извикване на метод с параметър
// (или „да изчезнеш за 60 секунди“)
SetBombTimer(60);
// извикване на метод с няколко
// параметъра
PlantBomb(here, “Ahmet”);
// използване на резултат
int sum = Sum(a, b);
// префиксиране с наименование на клас
Console.WriteLine(“Kaboom!”);
Контрол на изпълнението
• Изпълнението на метод започва при неговото извикване
• Изпълнението на метод приключва:
– при достигане на края му
– при достигане на ключовата дума „return”
– при възникване на грешка

• След изпълнение на метод, изпълнението продължава от
мястото, на което е бил извикан
Видимост на променливите
• Локални променливи за един
метод са тези декларирани в
неговото тяло
• В тялото на един метод не
могат да бъдат декларирани
повече от една променливи с
едно и също наименование
• Локалните променливи не
могат да бъдат достъпвани
извън метода
• Параметрите имат статут на
локални променливи

void GimmeFive()
{
// локална променлива “five”
int five = 5;
// използване на локална променлива
Console.WriteLine(“Hi {0}!”, five);
// къде отиваш ти, може би?!
string five = “Five”;
}
Console.WriteLine(five); // Ко?! Не!
Методи без връщана стойност
• Когато методът не връща
резултат, изпълнението
приключва:
– при достигане на края му
– при достигане на ключовата
дума “return”
– при възникване на грешка

void DoSomethingNerd(WeatherInfo info)
{
// ако времето не е хубаво…
if (!IsWeatherFine(info))
return;
// да порешаваме задачи!
SolveSomeMathsProblems();
}
Методи с връщана стойност
• Когато методът връща
резултат, изпълнението
приключва:
– при използване на ключовата
дума „return” следвана от израз
– при възникване на грешка

• След ключовата дума „return”
задължително трябва да има
израз, който връща стойност
от същия тип, като резултата
от метода

int Sum(int a, int b)
{
int c = a + b;
// Назад, назад, моме, Калино!
return c;
}
// взима дискриминантата на кв. у-е
double GetDiscriminant(
double a, double b, double c)
{
return b * b – 4 * a * c;
}
Методи връщащи стойност
• Извиквания към методи
връщащи стойност могат да
бъдат използвани в изрази
– В изрази извикването на метода
се заменя със стойността на
върнатия от него резултат

// имаме триъгълник със страни…
double a = 5, b = 3, c = 2;
// забравете, че сте видели това:
double s = Math.Sqrt(
GetSemiperimeter(a, b, c)
* (GetSemiperimeter(a, b, c) – a)
* (GetSemiperimeter(a, b, c) – b)
* (GetSemiperimeter(a, b, c) – c));
// по-добре го напишете така:
double p = GetSemiperimeter(a, b, c);
s = Math.Sqrt(p*(p-a)*(p-b)*(p-c));
// накрая, разбира се:
Console.WriteLine(”Лицето е {0}.”, s);
Параметри
• Параметър от стойностен тип
– Параметърът взима стойността
от съответния аргумент
– При изпълнение на
метода, стойността на
аргумента се запазва

// параметър от стойностен тип
void CountBackwards(int n)
{
for (; n > 0; n--)
Console.WriteLine(n);
}
// променлива от стойностен тип
int n = 100;
// използване на стойностен аргумент
CountBackwards(n);
// какво ще изпише тук?
Console.WriteLine(n);
Параметри
• Параметър от референтен
тип
– Параметърът взима
референцията от съответния
аргумент
– При изпълнение на
метода, референциите на
аргумента се запазват, но не
винаги и съхранените зад тях
данни

// масивите са от референтен тип
int[] arr = new [] { 1, 3, 2, 10, 0 };
// извикваме метод за сортиране
Array.Sort(arr);
// след извикването, масивът си е
// останал на същото място в паметта,
// но пък сортиран
Параметри
• Параметър от референтен
тип
– Да си припомним Иванчо!

• Но по-подробно с Иванчо и
други (референтни) типове
ще се запознаем по-късно в
курса

// правим си „референтно“ хлапе Иванчо
Person kid = new Person(“Иванчо”);
// Иванчо е слушал и отива да си играе
Play(kid);// Иванчо скача на въже…
// … и чупи два шийни прешлена
// Но, въпреки това, той е същият
// Иванчо, който е отишъл да си играе…
ShowCervicalVertebrae(kid);
// … просто явно е останал с пет
// функциониращи шийни прешлена
Функции и методи - демо
// демонстрация
Ограничения
• Методите могат да връщат
само една стойност
• Ако искаме да върнем
повече?!
–
–
–
–
–

масиви
структури
обекти
референтни параметри
изходящи параметри

// методът ни връща масив
string[] GetCourseInfo()
{
return new[]
{
// наименование на курса
“Курс по програмиране на C#”,
// наименование на организацията
“ДАВИД академия”,
};
}
string[] info = GetCourseInfo();
Console.WriteLine(
“Курс: {0}; Организация: {1}”,
info[0], info[1]);
// … и сега добавете годината! 
Референтни параметри
• Позволяват предаването на
аргументите по
референция, а не по
стойност
• Възможност за промяна на
аргумента в извиквания метод
• Възможност за връщане на
повече от една стойност чрез
използване на няколко
аргумента
• Декларират се с поставяне на
ключовата дума „ref” пред
дефиницията на параметъра

// деклариране
void GetCourseInfo(ref string course,
ref string organisation,
ref int year)
{
course = “Програмиране на C#”;
organisation = “ДАВИД академия”;
}
Референтни параметри
• Използват се с поставяне на
ключовата дума „ref” пред
аргумента
• Аргументът трябва да е
предварително декларирана
променлива от същия тип
• Аргументът трябва да има
предварително присвоена
стойност
• Извикването не гарантира, че
в метода ще се присвои
стойност на аргумента

// деклариране
void GetCourseInfo(ref string course,
ref string organisation,
ref int year)
{
course = “Програмиране на C#”;
organisation = “ДАВИД академия”;
}
// използване
string courseName = null;
string organisationName = null;
int year = 2013;
GetCourseInfo(ref courseName,
ref organisationName,
ref year);
Изходни параметри
• Позволяват връщането на
стойност в подаден (изходен)
параметър
• Задължителна промяна на
аргумента в извиквания метод
• Възможност за връщане на
повече от една стойност чрез
използване на няколко
аргумента
• Декларират се с поставяне на
ключовата дума „out” пред
дефиницията на параметъра

// деклариране
void GetCourseInfo(out string course,
out string organisation,
out int year)
{
course = “Програмиране на C#”;
organisation = “ДАВИД академия”;
year = 2013;
}
Изходни параметри
• Използват се с поставяне на
ключовата дума „out” пред
аргумента
• Аргументът трябва да е
предварително декларирана
променлива от същия тип
• Не е нужно аргументът да
има предварително
присвоена стойност
• Извикването гарантира, че в
метода ще се присвои
стойност на аргумента

// деклариране
void GetCourseInfo(out string course,
out string organisation,
out int year)
{
course = “Програмиране на C#”;
organisation = “ДАВИД академия”;
year = 2013;
}
// използване
string courseName;
string organisationName;
int year;
GetCourseInfo(out courseName,
out organisationName,
out year);
Масиви от параметри
• Не винаги е известно с колко
параметъра ще бъде извикан
даден метод
• Например string.Format!
• Какво да правим?!

string message;
// извикване с два аргумента
message = string.Format(
“Курс {0}”,
courseName);
// извикване с три аргумента
message = string.Format(
“Курс {0} на {1}”,
courseName, organisationName);
// извикване с четири аргумента
message = string.Format(
“Курс {0} ({2}) на {1}”,
courseName, organisationName, year);
// де факто могат да бъдат произволен брой
Масиви от параметри
• Произволен брой параметри
на метод указваме с масив от
параметри
• Декларират се с поставяне на
ключовата дума „params”
пред дефиницията на първия
параметъра
• Този параметър трябва да е
едномерен масив от типа
параметри, които очакваме
• В тялото на метода работим с
параметрите като с масив

// деклариране
void ShowContent(string title,
params string[] lines)
{
Console.WriteLine(“Title: {0}”, title);
for (int i = 0; i < lines.Length; i++)
{
Console.WriteLine(“{0}: {1}”,
i, lines[i]);
}
}
Масиви от параметри
• След масив от параметри не
може да има други
параметри
• Дефиницията на един метод
може да декларира само
един масив от параметри

// деклариране
void ShowContent(string title,
params string[] lines)
{
Console.WriteLine(“Title: {0}”, title);
for (int i = 0; i < lines.Length; i++)
{
Console.WriteLine(“{0}: {1}”,
i, lines[i]);
}
}
Масиви от параметри
• Извикването става с подаване
на 0 или повече параметъра
от типа на елементите в
декларирания аргумент
• Като параметър можем да
подадем и обикновен масив

// деклариране
void ShowContent(string title,
params string[] lines)
{
Console.WriteLine(“Title: {0}”, title);
for (int i = 0; i < lines.Length; i++)
{
Console.WriteLine(“{0}: {1}”,
i, lines[i]);
}
}
// използване с аргументи
ShowContent(“Day 1”, “My dead diary,”,
“I wrote yet another C# program!”);
// използване с масив
ShowContent(“Program.cs”,
File.ReadAllLines(“Program.cs”));
Незадължителни аргументи
• Незадължителни аргументи
– Деклариране: на параметъра
се задава стойност по
подразбиране
– Използване: за стойност на
пропуснатите аргументи се
използва стойността по
подразбиране на съответния
параметър

// деклариране на метод с
// незадължителни аргументи
void SendEmail(
string text,
string subject = null,
string from = null)
{
// …
}
// използване на метод с
// незадължителен аргумент
SendEmail(“Hi, there!”);
Именувани аргументи
• Именувани аргументи

•

// деклариране на метод с
// незадължителни аргументи
– Използване: споменава се
double GetRectangleSurface(
double width, double height = 0.0d)
наименованието на
параметъра, за който се подава {
return width * height;
стойност
}
Правила за използване
// използване на именувани аргументи
– Редът на именуваните аргументи double s = GetRectangleSurface(
height: 1.0d, width: 0.5d);
не е от значение
// използване на именувани и
– Именувани аргументи могат да // незадължителни аргументи
следват позиционни аргументи
s = GetRectangleSurface(width: 0.5d);

– След именувани аргументи не
могат да се използват
позиционни аргументи
Презаписване на методи
• Презаписването на методи е
възможността в една област
да бъдат декларирани повече
от един метод с едно и също
наименование, но различна
сигнатура
• Какво е сигнатура на метод?!
– Включва наименованието
му, типа и вида на параметрите
и техния ред
– Не включва връщания тип данни
и ключовата дума “params”

void F();
//
void F(int x);
//
void F(ref int x);
//
void F(int x, int y);
//
int F(string s);
//
int F(int x);
//
void F(string[] a);
//
void F(params string[] a); //

F()
F(int)
F(ref int)
F(int, int)
F(string)
F(int)
F(string[])
F(string[])

// ЗАБЕЛЕЖКА: сигнатурите не могат да се
// различават само по думите „ref” и “out”
void F(out int x);
// F(out int)
Методи, параметри, аргументи, презаписване - демо
// демонстрация
Често използвани методи – символни низове
• Проверка дали един низ е нулев, празен или съставен само
от интервали
• Форматиране на низ
• Подравняване и подкастряне на низ
• Взимане на дължината на низ
• Извличане на подниз
• Търсене и замяна на символ и подниз в низ
• Проверка за начало и край на низ
• Съединяване на масив от низове в низ
• Разделяне на низ на масив от низове
• Превръщане между малки и големи букви
Често използвани методи – превръщане на данни
• Превръщане на стойност в низ – ToString
• Превръщане на низ в стойност от числов тип – Parse
• Превръщане на стойност в основен тип данни – Convert
Често използвани методи – работа с файлове
• Четене и запис на файл като масив от байтове
• Четене и запис на файл като текст
• Четене и запис на файл като множество от редове
Често използвани методи – работа с масиви
•
•
•
•
•
•
•

Клониране на масив
Копиране на масив
Сортиране на масив
Изчистване на масив
Търсене в масив
Взимане на размерностите на масив
Обръщане на масив
Често използвани методи – работа с конзола
•
•
•
•
•
•

Изчистване на екрана
Издаване на звук
Изчитане и печат на текст
Установяване на големина на прозореца
Установяване на позиция на курсора
Допълнителни възможности:
–
–
–
–
–

Проверка за натиснати (специални) клавиши
Позиция на курсора
Цвят на шрифта и фона
Големина и позиция на прозореца
Заглавие на прозореца
Често използвани методи – други методи
• Генериране на произволни числа
– генериране на число
– изпълнение на събития с вероятностен характер

• Изчакване на определен интервал от време
Често използвани методи
// демонстрация
Задачи за упражнение – Златотърсачи
• Създайте метод GetFieldBounds, в който потребителят
въвежда две цели числа x ∈ (10; maxX) и y ∈ (10; maxY), maxX
и maxY се подават в параметър. Потребителят да може да
откаже въвеждането с въвеждане на празен низ, а методът
връща информация дали потребителят е отказал въвеждане
или не, както и въведените числа (ако са въведени такива).
Задачи за упражнение – Златотърсачи
• Създайте метод CreateField, който създава и връща
двумерен масив с размери m и n, елементите на който
запълнете с произволни стойности от изброим списък с
елементи:
– „OurGuy“ – точно един на произволно място в полето;
– „SomeGuy“ – брой съответстващ на 5% от местата в полето на
произволни места в полето;
– „Diamond” – брой съответстващ на 10% от местата в полето на
произволни места в полето (броят им се връща от метода);
– „Ground“ – произволно попълнен с вероятност 40%;
– „Grass“ – произволно попълнен с вероятност 30%;
– „Tree“ – произволно попълнен с вероятност 20%;
– „Stone“ – произволно попълнен с вероятност 10%.
Задачи за упражнение – Златотърсачи
• Създайте метод DrawField, който „рисува“ на екрана
съдържанието на масива от предишната задача. За всеки
елемент от масива поставя съответния оцветен символ:
–
–
–
–
–
–
–

„OurGuy“ – символ „☺“ (U+263A) oцветен в цвят по избор;
„SomeGuy“ – символ „☻” (U+263B) оцветен в цвят по избор;
„Diamond” – символ „♦“ (U+2666) оцветен в светло сиво;
„Ground“ – символ „▒“ (U+2592) оцветен в светло кафяво;
„Grass“ – символ „▓“ (U+2593) оцветен в светло зелено;
„Tree“ – символ „♣“ (U+2663) оцветен в тъмно зелено;
„Stone“ – символ „ “ (U+0665) оцветен в тъмно сиво.
Задачи за упражнение – Златотърсачи
• Направете метод MoveGuy, който приема като параметър
„поле“, двойка координатите и посока (стойност от
изброим списък “Up”, “Down”, “Left” или “Right”), и мести
„guy” намиращ се на съответните координати в съответната
посока, само като там има „ground”, „grass” или
„diamond”. След себе си „guy“ оставя „ground”.
• Направете метод MoveSomeGuys, който приема като
параметър „поле“ и премества всички „some guys“ в
произволна посока.
• Направете метод MoveOurGuy, който приема като
параметър „поле“ и посока, и мести „our guy” в
определената посока.
Задачи за упражнение – Златотърсачи
• Направете метод ProcessInput, който приема като
параметър „полето“ и проверява дали потребителят е
натиснал клавиш:
– Ако е натиснал стрелка, методът връща стойност съответстваща на
посоката на стрелката в референтен параметър
– Ако е натиснал Escape, методът връща информация за това в
изходен параметър
– Методът връща информация дали потребителят е натиснал клавиш
или не
Задачи за упражнение – Златотърсачи
• Направете програма съдържаща всички изработени погоре методи, като основната програма трябва да:
1. изчисти екрана
2. подкани потребителя да въведе размер на полето не по-голям от
този на екрана (ако потребителят не въведе такъв, програмата
трябва да прекрати работа)
3. създаде „поле“ с въведените от потребителя размери
4. до натискане на „Escape” или свършване на „диамантите“:
1.
2.
3.
4.

рисува „полето“
премества всички „other guys”
обработва входа от потребителя и, ако е нужно, премества “our guy”
изчаква 100 ms

5. извежда събрания от потребителя процент „диаманти“
Въпроси?
Благодаря!
• Валери Дачев
– valery@david.bg
– @vdachev
– https://facebook.com/vdachev

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

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

More Related Content

PPT
PPTX
Datastructures in python
PPT
Binary Trees.ppt
PDF
Python For Data Science Cheat Sheet
PPT
PPTX
Pandas Series
PPTX
OpenStack概要 ~仮想ネットワーク~
Datastructures in python
Binary Trees.ppt
Python For Data Science Cheat Sheet
Pandas Series
OpenStack概要 ~仮想ネットワーク~

What's hot (20)

PDF
「Neutronになって理解するOpenStack Network」~Neutron/Open vSwitchなどNeutronと周辺技術の解説~ - ...
PPTX
Python: Modules and Packages
PDF
Pandas
ODP
Python Modules
PPTX
Dictionaries and Sets in Python
PDF
Python Programming by Dr. C. Sreedhar.pdf
PPTX
Introduction to matplotlib
PDF
第 1 回 Jetson ユーザー勉強会
PDF
技術系文書作成のコツ
PPTX
Introduction to pandas
PPTX
Queue Implementation Using Array & Linked List
PDF
RDM 2020: Python, Numpy, and Pandas
PDF
Amandaを利用した仮想マシンバックアップ
PDF
Queues
PPTX
AVX-512(フォーマット)詳解
PDF
Python Variable Types, List, Tuple, Dictionary
PDF
OpenStack超入門シリーズ Novaのディスク周りあれこれ
PDF
What Are Python Modules? Edureka
PPTX
4. R- files Reading and Writing
PDF
Edge AI ソリューションを支える Azure IoT サービス
「Neutronになって理解するOpenStack Network」~Neutron/Open vSwitchなどNeutronと周辺技術の解説~ - ...
Python: Modules and Packages
Pandas
Python Modules
Dictionaries and Sets in Python
Python Programming by Dr. C. Sreedhar.pdf
Introduction to matplotlib
第 1 回 Jetson ユーザー勉強会
技術系文書作成のコツ
Introduction to pandas
Queue Implementation Using Array & Linked List
RDM 2020: Python, Numpy, and Pandas
Amandaを利用した仮想マシンバックアップ
Queues
AVX-512(フォーマット)詳解
Python Variable Types, List, Tuple, Dictionary
OpenStack超入門シリーズ Novaのディスク周りあれこれ
What Are Python Modules? Edureka
4. R- files Reading and Writing
Edge AI ソリューションを支える Azure IoT サービス
Ad

Viewers also liked (20)

PPTX
Училищен курс по програмиране на C# (2013/2014), занятие №3
PPTX
Училищен курс по програмиране на C# (2013/2014), занятие №11
DOCX
Училищен курс по програмиране на C# (2013/2014) - Упражнения
DOCX
Курс по програмиране на C# (2013) - Помагало
PPTX
Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
PPTX
Училищен курс по програмиране на C# (2013/2014), занятие №2
PPTX
Информационни технологи за V клас, изд. Булвест 2000
PPTX
Курс по уеб програмиране (2014), занятие №2 - CSS
PDF
OOP 1 - 5
PPT
История на лакомствата1
PDF
Лице
PPTX
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
DOCX
Помагало по география за 6 клас
PPTX
Училищен курс по програмиране на C# (2013/2014), занятие №13
PPT
Годишно обобщение по география и икономика - 5 клас
PPS
събиране на десетични дроби. свойства
PPS
деление на дд задачи
PPS
събиране и изваждане на дд
PPS
четене и сравняване на десетични дроби
PPT
всички действия с дд
Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014) - Упражнения
Курс по програмиране на C# (2013) - Помагало
Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
Училищен курс по програмиране на C# (2013/2014), занятие №2
Информационни технологи за V клас, изд. Булвест 2000
Курс по уеб програмиране (2014), занятие №2 - CSS
OOP 1 - 5
История на лакомствата1
Лице
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Помагало по география за 6 клас
Училищен курс по програмиране на C# (2013/2014), занятие №13
Годишно обобщение по география и икономика - 5 клас
събиране на десетични дроби. свойства
деление на дд задачи
събиране и изваждане на дд
четене и сравняване на десетични дроби
всички действия с дд
Ad

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

PPTX
Курс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
PPTX
Училищен курс по програмиране на C# (2013/2014), занятие №8
PPTX
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
PPTX
Училищен курс по програмиране на C# (2013/2014), занятие №10
PPTX
Училищен курс по програмиране на C# (2013/2014), занятие №14
PPTX
Училищен курс по програмиране на C# (2013/2014), занятие №1
PPTX
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
PPT
High Quality Code Introduction
PPT
Nakov High Quality Code
PPTX
Училищен курс по програмиране на C# (2013/2014), занятие №12
PPTX
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
PDF
Oop lab-10шаблонни
PPTX
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
PPTX
Училищен курс по програмиране на C# (2013/2014), занятие №7
PPTX
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
PPTX
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...
PPTX
.NET/C#_4
PPTX
.NET/C#_2
PDF
5. vb promenlivi
PPTX
.NET/C#_8
Курс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Училищен курс по програмиране на C# (2013/2014), занятие №8
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №14
Училищен курс по програмиране на C# (2013/2014), занятие №1
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
High Quality Code Introduction
Nakov High Quality Code
Училищен курс по програмиране на C# (2013/2014), занятие №12
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Oop lab-10шаблонни
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
Училищен курс по програмиране на C# (2013/2014), занятие №7
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...
.NET/C#_4
.NET/C#_2
5. vb promenlivi
.NET/C#_8

More from DAVID Academy (14)

PPTX
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
PPTX
Курс по уеб програмиране (2015), занятие №2 - CSS
PPTX
Курс по уеб програмиране (2015), занятие №1 - HTML
PPTX
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
PPTX
Курс по уеб програмиране (2014), занятие №1 - HTML
PPTX
Училищен курс по програмиране на C# (2013/2014), занятие №9
DOCX
Училищен курс по програмиране на C# (2013/2014) - Помагало
PPTX
Курс по информационни технологии (2013) - 5. HTTP & Web Services
PPTX
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
PPTX
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
PPTX
Курс по информационни технологии (2013) - 0. Представяне
DOCX
Курс по информационни технологии (2013) - Помагало
DOCX
Курс по програмиране на C# (2013) - Упражнения
PPTX
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №1 - HTML
Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014) - Помагало
Курс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
Курс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - Помагало
Курс по програмиране на C# (2013) - Упражнения
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции

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

  • 1. Курс по програмиране на C# Занятие №4 Функции и методи. Често използвани методи 2013
  • 2. Съдържание 1/2 • Функции и методи – – – – – Контрол на изпълнението Видимост на променливите Методи без връщана стойност Методи с връщана стойност Ограничения • Параметри – Референтни параметри – Изходящи параметри – Масиви от параметри
  • 3. Съдържание 2/2 • Аргументи – Незадължителни аргументи – Именувани аргументи • Презаписване на методи • Често използвани методи – – – – – – Символни низове Превръщане на данни Работа с файлове Работа с масиви Работа с конзола Други методи
  • 4. Функции и методи • Какво е „функция“? Какво е „метод“? – Функция е подпрограма, която извършва конкретна дейност и може да бъде извиквана от друга част от програмата – Функциите могат да приемат един или повече параметри – Функциите могат да връщат единична стойност като резултат – Аргумент е стойността подавана на даден параметър – Метод е функция дефинирана в рамките на клас или структура – Процедури наричаме функции, които не връщат резултат – В езика C# методът е единственият начин за дефиниране на функции
  • 5. Функции и методи • Приложение на функциите – – – – Разбиване на приложението на по-конкретни задачи Преизползване на програмния код Разделяне на отговорностите и по-добра поддръжка Подобрена разбираемост на кода • BCL представлява библиотека от методи подпомагащи разработчика в създаването на приложения без това да става от нулата
  • 6. Функции и методи • Характеристики на методите – – – – Наименование Брой и тип на параметрите Връщана стойност Клас, в който методът е дефиниран • Сигнатура на метод – Наименование – Ред, вид и тип на параметрите • Наименованието на метода трябва да отразява неговото предназначение • В един и същи клас не може да има повече от един метод с една и съща сигнатура
  • 7. Функции и методи • Деклариране на методи – Тип на данните на връщаната стойност (или “void” ако няма такава) – Наименование – Описание на параметрите – Тяло на метода // метод без параметри и резултат void Run() { // prison break } // метод с параметър без резултат void Notify(string message) { // изпраща уведомления по e-mail } // метод с два параметъра и резултат int Sum(int a, int b) { int c = a + b; return c; }
  • 8. Функции и методи • Използване на методи – Наименование на клас или обект, ако методът е деклариран в друг клас – Наименованието на метода – Списък от аргументи // извикване на метод без параметър // (след атомна бомба - нищо) DropNuclearBomb(); // извикване на метод с параметър // (или „да изчезнеш за 60 секунди“) SetBombTimer(60); // извикване на метод с няколко // параметъра PlantBomb(here, “Ahmet”); // използване на резултат int sum = Sum(a, b); // префиксиране с наименование на клас Console.WriteLine(“Kaboom!”);
  • 9. Контрол на изпълнението • Изпълнението на метод започва при неговото извикване • Изпълнението на метод приключва: – при достигане на края му – при достигане на ключовата дума „return” – при възникване на грешка • След изпълнение на метод, изпълнението продължава от мястото, на което е бил извикан
  • 10. Видимост на променливите • Локални променливи за един метод са тези декларирани в неговото тяло • В тялото на един метод не могат да бъдат декларирани повече от една променливи с едно и също наименование • Локалните променливи не могат да бъдат достъпвани извън метода • Параметрите имат статут на локални променливи void GimmeFive() { // локална променлива “five” int five = 5; // използване на локална променлива Console.WriteLine(“Hi {0}!”, five); // къде отиваш ти, може би?! string five = “Five”; } Console.WriteLine(five); // Ко?! Не!
  • 11. Методи без връщана стойност • Когато методът не връща резултат, изпълнението приключва: – при достигане на края му – при достигане на ключовата дума “return” – при възникване на грешка void DoSomethingNerd(WeatherInfo info) { // ако времето не е хубаво… if (!IsWeatherFine(info)) return; // да порешаваме задачи! SolveSomeMathsProblems(); }
  • 12. Методи с връщана стойност • Когато методът връща резултат, изпълнението приключва: – при използване на ключовата дума „return” следвана от израз – при възникване на грешка • След ключовата дума „return” задължително трябва да има израз, който връща стойност от същия тип, като резултата от метода int Sum(int a, int b) { int c = a + b; // Назад, назад, моме, Калино! return c; } // взима дискриминантата на кв. у-е double GetDiscriminant( double a, double b, double c) { return b * b – 4 * a * c; }
  • 13. Методи връщащи стойност • Извиквания към методи връщащи стойност могат да бъдат използвани в изрази – В изрази извикването на метода се заменя със стойността на върнатия от него резултат // имаме триъгълник със страни… double a = 5, b = 3, c = 2; // забравете, че сте видели това: double s = Math.Sqrt( GetSemiperimeter(a, b, c) * (GetSemiperimeter(a, b, c) – a) * (GetSemiperimeter(a, b, c) – b) * (GetSemiperimeter(a, b, c) – c)); // по-добре го напишете така: double p = GetSemiperimeter(a, b, c); s = Math.Sqrt(p*(p-a)*(p-b)*(p-c)); // накрая, разбира се: Console.WriteLine(”Лицето е {0}.”, s);
  • 14. Параметри • Параметър от стойностен тип – Параметърът взима стойността от съответния аргумент – При изпълнение на метода, стойността на аргумента се запазва // параметър от стойностен тип void CountBackwards(int n) { for (; n > 0; n--) Console.WriteLine(n); } // променлива от стойностен тип int n = 100; // използване на стойностен аргумент CountBackwards(n); // какво ще изпише тук? Console.WriteLine(n);
  • 15. Параметри • Параметър от референтен тип – Параметърът взима референцията от съответния аргумент – При изпълнение на метода, референциите на аргумента се запазват, но не винаги и съхранените зад тях данни // масивите са от референтен тип int[] arr = new [] { 1, 3, 2, 10, 0 }; // извикваме метод за сортиране Array.Sort(arr); // след извикването, масивът си е // останал на същото място в паметта, // но пък сортиран
  • 16. Параметри • Параметър от референтен тип – Да си припомним Иванчо! • Но по-подробно с Иванчо и други (референтни) типове ще се запознаем по-късно в курса // правим си „референтно“ хлапе Иванчо Person kid = new Person(“Иванчо”); // Иванчо е слушал и отива да си играе Play(kid);// Иванчо скача на въже… // … и чупи два шийни прешлена // Но, въпреки това, той е същият // Иванчо, който е отишъл да си играе… ShowCervicalVertebrae(kid); // … просто явно е останал с пет // функциониращи шийни прешлена
  • 17. Функции и методи - демо // демонстрация
  • 18. Ограничения • Методите могат да връщат само една стойност • Ако искаме да върнем повече?! – – – – – масиви структури обекти референтни параметри изходящи параметри // методът ни връща масив string[] GetCourseInfo() { return new[] { // наименование на курса “Курс по програмиране на C#”, // наименование на организацията “ДАВИД академия”, }; } string[] info = GetCourseInfo(); Console.WriteLine( “Курс: {0}; Организация: {1}”, info[0], info[1]); // … и сега добавете годината! 
  • 19. Референтни параметри • Позволяват предаването на аргументите по референция, а не по стойност • Възможност за промяна на аргумента в извиквания метод • Възможност за връщане на повече от една стойност чрез използване на няколко аргумента • Декларират се с поставяне на ключовата дума „ref” пред дефиницията на параметъра // деклариране void GetCourseInfo(ref string course, ref string organisation, ref int year) { course = “Програмиране на C#”; organisation = “ДАВИД академия”; }
  • 20. Референтни параметри • Използват се с поставяне на ключовата дума „ref” пред аргумента • Аргументът трябва да е предварително декларирана променлива от същия тип • Аргументът трябва да има предварително присвоена стойност • Извикването не гарантира, че в метода ще се присвои стойност на аргумента // деклариране void GetCourseInfo(ref string course, ref string organisation, ref int year) { course = “Програмиране на C#”; organisation = “ДАВИД академия”; } // използване string courseName = null; string organisationName = null; int year = 2013; GetCourseInfo(ref courseName, ref organisationName, ref year);
  • 21. Изходни параметри • Позволяват връщането на стойност в подаден (изходен) параметър • Задължителна промяна на аргумента в извиквания метод • Възможност за връщане на повече от една стойност чрез използване на няколко аргумента • Декларират се с поставяне на ключовата дума „out” пред дефиницията на параметъра // деклариране void GetCourseInfo(out string course, out string organisation, out int year) { course = “Програмиране на C#”; organisation = “ДАВИД академия”; year = 2013; }
  • 22. Изходни параметри • Използват се с поставяне на ключовата дума „out” пред аргумента • Аргументът трябва да е предварително декларирана променлива от същия тип • Не е нужно аргументът да има предварително присвоена стойност • Извикването гарантира, че в метода ще се присвои стойност на аргумента // деклариране void GetCourseInfo(out string course, out string organisation, out int year) { course = “Програмиране на C#”; organisation = “ДАВИД академия”; year = 2013; } // използване string courseName; string organisationName; int year; GetCourseInfo(out courseName, out organisationName, out year);
  • 23. Масиви от параметри • Не винаги е известно с колко параметъра ще бъде извикан даден метод • Например string.Format! • Какво да правим?! string message; // извикване с два аргумента message = string.Format( “Курс {0}”, courseName); // извикване с три аргумента message = string.Format( “Курс {0} на {1}”, courseName, organisationName); // извикване с четири аргумента message = string.Format( “Курс {0} ({2}) на {1}”, courseName, organisationName, year); // де факто могат да бъдат произволен брой
  • 24. Масиви от параметри • Произволен брой параметри на метод указваме с масив от параметри • Декларират се с поставяне на ключовата дума „params” пред дефиницията на първия параметъра • Този параметър трябва да е едномерен масив от типа параметри, които очакваме • В тялото на метода работим с параметрите като с масив // деклариране void ShowContent(string title, params string[] lines) { Console.WriteLine(“Title: {0}”, title); for (int i = 0; i < lines.Length; i++) { Console.WriteLine(“{0}: {1}”, i, lines[i]); } }
  • 25. Масиви от параметри • След масив от параметри не може да има други параметри • Дефиницията на един метод може да декларира само един масив от параметри // деклариране void ShowContent(string title, params string[] lines) { Console.WriteLine(“Title: {0}”, title); for (int i = 0; i < lines.Length; i++) { Console.WriteLine(“{0}: {1}”, i, lines[i]); } }
  • 26. Масиви от параметри • Извикването става с подаване на 0 или повече параметъра от типа на елементите в декларирания аргумент • Като параметър можем да подадем и обикновен масив // деклариране void ShowContent(string title, params string[] lines) { Console.WriteLine(“Title: {0}”, title); for (int i = 0; i < lines.Length; i++) { Console.WriteLine(“{0}: {1}”, i, lines[i]); } } // използване с аргументи ShowContent(“Day 1”, “My dead diary,”, “I wrote yet another C# program!”); // използване с масив ShowContent(“Program.cs”, File.ReadAllLines(“Program.cs”));
  • 27. Незадължителни аргументи • Незадължителни аргументи – Деклариране: на параметъра се задава стойност по подразбиране – Използване: за стойност на пропуснатите аргументи се използва стойността по подразбиране на съответния параметър // деклариране на метод с // незадължителни аргументи void SendEmail( string text, string subject = null, string from = null) { // … } // използване на метод с // незадължителен аргумент SendEmail(“Hi, there!”);
  • 28. Именувани аргументи • Именувани аргументи • // деклариране на метод с // незадължителни аргументи – Използване: споменава се double GetRectangleSurface( double width, double height = 0.0d) наименованието на параметъра, за който се подава { return width * height; стойност } Правила за използване // използване на именувани аргументи – Редът на именуваните аргументи double s = GetRectangleSurface( height: 1.0d, width: 0.5d); не е от значение // използване на именувани и – Именувани аргументи могат да // незадължителни аргументи следват позиционни аргументи s = GetRectangleSurface(width: 0.5d); – След именувани аргументи не могат да се използват позиционни аргументи
  • 29. Презаписване на методи • Презаписването на методи е възможността в една област да бъдат декларирани повече от един метод с едно и също наименование, но различна сигнатура • Какво е сигнатура на метод?! – Включва наименованието му, типа и вида на параметрите и техния ред – Не включва връщания тип данни и ключовата дума “params” void F(); // void F(int x); // void F(ref int x); // void F(int x, int y); // int F(string s); // int F(int x); // void F(string[] a); // void F(params string[] a); // F() F(int) F(ref int) F(int, int) F(string) F(int) F(string[]) F(string[]) // ЗАБЕЛЕЖКА: сигнатурите не могат да се // различават само по думите „ref” и “out” void F(out int x); // F(out int)
  • 30. Методи, параметри, аргументи, презаписване - демо // демонстрация
  • 31. Често използвани методи – символни низове • Проверка дали един низ е нулев, празен или съставен само от интервали • Форматиране на низ • Подравняване и подкастряне на низ • Взимане на дължината на низ • Извличане на подниз • Търсене и замяна на символ и подниз в низ • Проверка за начало и край на низ • Съединяване на масив от низове в низ • Разделяне на низ на масив от низове • Превръщане между малки и големи букви
  • 32. Често използвани методи – превръщане на данни • Превръщане на стойност в низ – ToString • Превръщане на низ в стойност от числов тип – Parse • Превръщане на стойност в основен тип данни – Convert
  • 33. Често използвани методи – работа с файлове • Четене и запис на файл като масив от байтове • Четене и запис на файл като текст • Четене и запис на файл като множество от редове
  • 34. Често използвани методи – работа с масиви • • • • • • • Клониране на масив Копиране на масив Сортиране на масив Изчистване на масив Търсене в масив Взимане на размерностите на масив Обръщане на масив
  • 35. Често използвани методи – работа с конзола • • • • • • Изчистване на екрана Издаване на звук Изчитане и печат на текст Установяване на големина на прозореца Установяване на позиция на курсора Допълнителни възможности: – – – – – Проверка за натиснати (специални) клавиши Позиция на курсора Цвят на шрифта и фона Големина и позиция на прозореца Заглавие на прозореца
  • 36. Често използвани методи – други методи • Генериране на произволни числа – генериране на число – изпълнение на събития с вероятностен характер • Изчакване на определен интервал от време
  • 38. Задачи за упражнение – Златотърсачи • Създайте метод GetFieldBounds, в който потребителят въвежда две цели числа x ∈ (10; maxX) и y ∈ (10; maxY), maxX и maxY се подават в параметър. Потребителят да може да откаже въвеждането с въвеждане на празен низ, а методът връща информация дали потребителят е отказал въвеждане или не, както и въведените числа (ако са въведени такива).
  • 39. Задачи за упражнение – Златотърсачи • Създайте метод CreateField, който създава и връща двумерен масив с размери m и n, елементите на който запълнете с произволни стойности от изброим списък с елементи: – „OurGuy“ – точно един на произволно място в полето; – „SomeGuy“ – брой съответстващ на 5% от местата в полето на произволни места в полето; – „Diamond” – брой съответстващ на 10% от местата в полето на произволни места в полето (броят им се връща от метода); – „Ground“ – произволно попълнен с вероятност 40%; – „Grass“ – произволно попълнен с вероятност 30%; – „Tree“ – произволно попълнен с вероятност 20%; – „Stone“ – произволно попълнен с вероятност 10%.
  • 40. Задачи за упражнение – Златотърсачи • Създайте метод DrawField, който „рисува“ на екрана съдържанието на масива от предишната задача. За всеки елемент от масива поставя съответния оцветен символ: – – – – – – – „OurGuy“ – символ „☺“ (U+263A) oцветен в цвят по избор; „SomeGuy“ – символ „☻” (U+263B) оцветен в цвят по избор; „Diamond” – символ „♦“ (U+2666) оцветен в светло сиво; „Ground“ – символ „▒“ (U+2592) оцветен в светло кафяво; „Grass“ – символ „▓“ (U+2593) оцветен в светло зелено; „Tree“ – символ „♣“ (U+2663) оцветен в тъмно зелено; „Stone“ – символ „ “ (U+0665) оцветен в тъмно сиво.
  • 41. Задачи за упражнение – Златотърсачи • Направете метод MoveGuy, който приема като параметър „поле“, двойка координатите и посока (стойност от изброим списък “Up”, “Down”, “Left” или “Right”), и мести „guy” намиращ се на съответните координати в съответната посока, само като там има „ground”, „grass” или „diamond”. След себе си „guy“ оставя „ground”. • Направете метод MoveSomeGuys, който приема като параметър „поле“ и премества всички „some guys“ в произволна посока. • Направете метод MoveOurGuy, който приема като параметър „поле“ и посока, и мести „our guy” в определената посока.
  • 42. Задачи за упражнение – Златотърсачи • Направете метод ProcessInput, който приема като параметър „полето“ и проверява дали потребителят е натиснал клавиш: – Ако е натиснал стрелка, методът връща стойност съответстваща на посоката на стрелката в референтен параметър – Ако е натиснал Escape, методът връща информация за това в изходен параметър – Методът връща информация дали потребителят е натиснал клавиш или не
  • 43. Задачи за упражнение – Златотърсачи • Направете програма съдържаща всички изработени погоре методи, като основната програма трябва да: 1. изчисти екрана 2. подкани потребителя да въведе размер на полето не по-голям от този на екрана (ако потребителят не въведе такъв, програмата трябва да прекрати работа) 3. създаде „поле“ с въведените от потребителя размери 4. до натискане на „Escape” или свършване на „диамантите“: 1. 2. 3. 4. рисува „полето“ премества всички „other guys” обработва входа от потребителя и, ако е нужно, премества “our guy” изчаква 100 ms 5. извежда събрания от потребителя процент „диаманти“
  • 45. Благодаря! • Валери Дачев – [email protected] – @vdachev – https://facebook.com/vdachev • ДАВИД академия – – – – [email protected] http://acad.david.bg/ @david_academy https://facebook.com/DavidAcademy