Модул 1. Увод в програмирането
Съдържание
1. Въведение в програмирането
Какво означава "да програмираме"?
Да програмираме означава да даваме команди на компютъра какво да прави
Командите се подреждат една след друга
Така те образуват компютърна програма
Компютърната програма е поредица от команди
Програмите се пишат на език за програмиране (Например C#, Java, JavaScript, Python, PHP, C, C++)
Използва се среда за програмиране (Например Visual Studio)
Компютърни програми
Програма = последователност от команди
Съдържа команди, пресмятания, проверки, повторения
Програмите се пишат в текстов формат
Текстът на програмата се нарича сорс код
Сорс кодът се компилира до изпълним файл (Например Program.cs се компилира до Program.exe)
Среда за разработка
За да програмирате, ви трябва среда за разработка
Integrated Development Environment (IDE)
За C# => Visual Studio за Windows или MonoDevelop за Linux и Max OS X
за Java => IntelliJ IDEA
за PHP => PHP Storm
Инсталирайте си Microsoft Visual Studio Community
https://visualstudio.microsoft.com/vs/community/
Алтернативни среди за разработка (online)
https://dotnetfiddle.net/
https://repl.it/repls/CostlyMonstrousAss
Създаване на конзолна програма
Стартирайте Visual Studio
Създайте нов конзолен проект
[File] > [New] > [Project] > [Visual C#] > [Windows] > [Console Application]
Писане на програмен код
Сорс кодът на програма се пише в секцията Main(string[] args)
Между отварящата и затварящата скоба { ... }
Натиснете [Enter] след отварящата скоба {
Кодът на програмата се пише отместен навътре
Напишете следния код: Console.WriteLine("Hello World");
За стартиране на програмата натиснете [Ctrl + F5]
Ако няма грешки, програмата ще се изпълни
Резултатът ще се изпише на конзолата
Тестване на програмата
Тествайте кода си онлайн: https://judge.softuni.bg/Contests/Practice/Index/600#0
Типични грешки в програмите
Писане извън тялото на Main() метода
Бъркане на малки и главни букви
Липса на ; в края на всяка команда
Липсваща кавичка " или липсваща скоба ( или )
2. Пресмятания, оператори, изрази
Четене на числа от конзолата
Четене на цяло число:
Пример: пресмятане на лице на квадрат със страна а:
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/609#0
Пресмятания в програмирането
Компютрите са машини, които обработват данни
Данните се записват в компютърната памет в променливи
Променливите имат име, тип и стойност
Дефиниране на променлива и присвояване на стойност:
След обработка данните се записват отново в променливи
Типове данни и променливи
Променливите съхраняват стойност от даден тип: Число, буква, текст (стринг), дата, цвят, картинка, списък
Типове данни:
Тип цяло число: 1, 2, 3, 4, 5, ...
Тип дробно число: 0.5, 3.14, -1.5, ...
Тип буква от азбуката (символ): 'a', 'b', 'c', ...
Тип текст (стринг): "Здрасти", "Hi", "Beer", ...
Тип ден от седмицата: понеделник, вторник, ...
Четене на дробно число
Четене на дробно число от конзолата:
Пример: прехвърляне от инчове в сантиметри:
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/609#1
Четене и печатане на текст
Четене на текст (стринг) от конзолата:
Пример: поздрав по име:
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/609#2
Съединяване на текст и числа
При печат на текст, числа и други данни, можем да ги съединим, използвайки шаблони {0}, {1}, {2}, ...
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/609#3
Аритметични операции: +, -, * и /
Събиране на числа (оператор +):
Изваждане на числа (оператор -):
Умножение на числа (оператор *):
Деление на числа (оператор /):
Особености при деление на числа в C#
При деление на цели числа резултатът е цяло число:
При деление на дробни числа резултатът е дробно число:
Съединяване на текст и число
Съединяване на текст и число (оператор +):
Друг пример:
Числени изрази
В програмирането можем да пресмятаме числени изрази:
Изчисляване на лице на трапец:
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/151#5
Закръгляне на числа
В програмирането можем да закръгляме дробни числа.
Закръгляне до следващо (по-голямо) цяло число:
Закръгляне до предишно (по-малко) цяло число:
Закръгляне до най-близко число:
Задача: Периметър и лице на кръг
Напишете програма, която въвежда радиуса r на кръг и изчислява лицето и периметъра на кръга.
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/151#5
Задача: Лице на правоъгълник в равнината
Правоъгълник е зададен с координатите на два от своите срещуположни ъгъла. Да се пресметнат площта и периметъра му.
3. Проверки (условни конструкции)
Сравняване на числа
В програмирането можем да сравняваме стойности:
Оператори за сравнение
Проверка за равенство
==
Проверка за различно
!=
По-голямо
>
По-голямо или равно
>=
По-малко
<
По-малко или равно
<=
Пример:
Прости проверки
В програмирането често проверяваме условия и да извършване различни действия според резултата от проверката.
Пример: въвеждаме оценка и проверяваме дали е отлична (≤ 5.50)
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/613#0
Проверки с if-else конструкция
Въвеждаме оценка, проверяваме дали е отлична или не е:
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/613#1
За къдравите скоби { } след if / else
Къдравите скоби { } въвеждат блок (група команди).
Задача: Четно или нечетно
Проверка дали цяло число е четно (even) или нечетно (odd)
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/613#2
Задача: По-голямото число
Да се напише програма, която чете две цели числа и извежда по-голямото от тях
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/613#3
Живот на променлива
Обхват, в който дадена променлива може да бъде използвана:
Серия от проверки
Конструкцията if-else-if-else може да е в серия. Пример: да се изпише с английски текст дадено число (от 0 до 10).
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/614#0
Задача: Бонус точки
Дадено е цяло число – брой точки:
Ако числото е до 100 включително, бонус точките са 5
Ако числото е по-голямо от 100, бонус точките са 20%
Ако числото е по-голямо от 1000, бонус точките са 10%
Допълнителни бонус точки:
За четно число -> 1 т.
За число, което завършва на 5 -> 2 т.
Да се напише програма, която пресмята бонус точките и общия брой точки след прилагане на бонусите.
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/614#1
Задача: Сумиране на секунди
Трима спортни състезатели финишират за някакъв брой секунди (между 1 и 50). Да се пресметне сумарното им време във формат "минути:секунди". Секундите да се изведат с водеща нула (2 -> "02", 7 -> "07", 35 -> "35").
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/614#2
Задача: Конвертор за мерни единици
Да се напише програма, която преобразува разстояние между посочените в таблицата мерни единици:
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/614#3
Дебъгване
Процес на закачане към изпълнението на програмата, което ни позволява да проследи процеса на изпълнение . Това ни позволява да откриваме грешки (бъгове).
Дебъгване във Visual Studio
Натискане на [F10] ще стартира програмата в debug режим.
Можем да преминем към следващата стъпка отново [F10]
Можем да създаваме [F9] стопери – breakpoints
До тях можем директно да стигнем изпозлвайки [F5]
Вложени проверки
Конструкциите if-else могат да се влагат една в друга:
Задача: Обръщение според възраст и пол
Според въведени възраст и пол (m / f) да се отпечата обръщение:
Mr. – мъж (пол m) на 16 или повече години
Master – момче (пол m) под 16 години
Ms. – жена (пол f) на 16 или повече години
Miss – момиче (пол f) под 16 години
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/615#0
Задача: Квартално магазинче
Предприемчив българин отваря по едно квартално магазинче в няколко града с различни цени за следните продукти:
Sofia
0.5
0.8
1.2
1.45
1.6
Plovdiv
0.4
0.7
1.15
1.3
1.5
Varna
0.45
0.7
1.1
1.35
1.55
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/615#1
Логическо "И"
Логическо "И" (оператор &&) означава няколко условия да са изпълнени едновременно:
Пример: проверка дали точка {x, y} се намира вътре в правоъгълника {x1, y1} – {x2, y2}
Необходимо е точката {x, y} да е: надясно от x1 и наляво от x2 и надолу от y1 и нагоре от y2
Задача: Точка в правоъгълник
Точка е вътрешна за даден правоъгълник, ако е: надясно от лявата му страна, наляво то дясната му страна, надолу от горната му страна и нагоре от долната му страна:
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/615#2
Логическо "ИЛИ"
Логическо "ИЛИ" (оператор ||) означава да е изпълнено поне едно измежду няколко условия:
Задача: плод или зеленчук?
Плодовете "fruit" са: banana, apple, kiwi, cherry, lemon, grapes
Зеленчуците "vegetable" са: tomato, cucumber, pepper, carrot
Всички останали са "unknown"
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/615#3
Логическо отрицание
Логическо отрицание (оператор !) означава да не е изпълнено дадено условиe.
Пример: Дадено число е валидно, ако е в диапазона [100 ... 200] или е 0. Да се направи проверка за невалидно число.
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/615#4
По-сложни логически условия
Точка лежи върху някоя от страните на правоъгълник, ако:
x съвпада с x1 или x2 и същевременно y е между y1 и y2 или
y съвпада с y1 или y2 и същевременно x е между x1 и x2
Опростяване на логически условия
Предходното условие може да се опрости ето така:
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/615#5
Условна конструкция switch-case
Switch-case работи като поредица if-else-if-else
Пример: Принтирайте деня от седмицата (на английски) според въведеното число (1 ... 7)
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/615#6
Множество етикети в switch-case
Напишете програма, която принтира вида на животно според името му: dog -> mammal; crocodile, tortoise, snake -> reptile; others -> unknown
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/615#7
4. Повторения (цикли)
Повторения (цикли)
В програмирането често пъти се налага да изпълним блок с команди няколко пъти. За целта използваме for цикъл:
Пример: числа от 1 до 100
Да се напише програма, която печата числата от 1 до 100:
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/616#0
Пример: числа до 1000, завършващи на 7
Да се напише програма, която намира всички числа в интервала [1 ... 1000], които завършват на 7:
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/616#1
Пример: всички латински букви
Да се напише програма, която отпечатва буквите от латинската азбука: a ... z. For-циклите работят не само с числа, може и с букви:
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/616#2
Пример: сумиране на числа
Да се напише програма, която въвежда n числа и ги сумира. От първия ред на входа се въвежда броят числа n. От следващите n реда се въвежда по едно число. Числата се сумират и накрая се отпечатва резултатът.
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/616#3
Пример: най-голямо число
Да се напише програма, която въвежда n числа и намира най-голямото измежду тях. От първия ред на входа въвежда броя числа n. От следващите n реда се въвежда по едно число.
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/616#4
Пример: най-малко число
Да се напише програма, която въвежда n числа и намира най-малкото измежду тях. Въвежда първо броя числа n, след тях още n числа.
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/616#5
Задача: лява и дясна сума
Да се напише програма, която въвежда 2*n числа. Проверява дали сумите на левите n и десните n числа са равни. При равенство печата "Yes" + сумата; иначе печата "No" + разликата (изчислена като положително число).
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/616#6
Задача: четна / нечетна сума
Да се напише програма, която въвежда n числа. Проверява дали сумата на числата на четни позиции е равна на сумата на числата на нечетни позиции. При равенство печата "Yes" + сумата; иначе печата "No" + разликата (положително число).
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/616#7
Правоъгълник от 10 x 10 звездички
Да се начертае на конзолата правоъгълник от 10 x 10 звездички:
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/617#0
Правоъгълник от N x N звездички
Да се начертае на конзолата правоъгълник от N x N звездички:
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/617#1
Вложени цикли
Вложени цикли = цикъл съдържа в себе си друг цикъл. Двата цикъла въртят различни променливи. Пример: външен цикъл (по row) и вътрешен цикъл (по col).
Квадрат от звездички
Да се начертае на конзолата квадрат от N x N звездички:
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/617#2
Триъгълник от долари
Да се начертае триъгълник от долари с размер n:
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/617#3
Квадратна рамка
Да се начертае на конзолата квадратна рамка с размер n:
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/617#4
Ромбче от звездички
Да се начертае ромбче от звездички с размер n:
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/617#5
Коледна елха
Напишете програма, която въвежда число n (1 ≤ n ≤ 100) и печата коледна елха с размер n:
Пращане на решения: https://judge.softuni.bg/Contests/Practice/Index/617#6
Слънчеви очила
Напишете програма, която въвежда цяло число n (3 ≤ n ≤ 100) и печата слънчеви очила с размер 5*n x n :
Пращане на решения: https://judge.softuni.bg/Contests/Practice/Index/617#7
Къщичка
Напишете програма, която въвежда число n (2 ≤ n ≤ 100) и печата къщичка с размер n x n:
Пращане на решения: https://judge.softuni.bg/Contests/Practice/Index/617#8
Диамант
Напишете програма, която въвежда цяло число n (1 ≤ n ≤ 100) и печата диамант с размер n:
Пращане на решения: https://judge.softuni.bg/Contests/Practice/Index/617#9
Числата от 1 до N през 3
Да се отпечатат числата от 1 до n със стъпка 3
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/619#0
Числата от N до 1 в обратен ред
Да се отпечатат числата от n до 1 в обратен ред (стъпка -1)
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/619#1
Числата от 1 до 2^n с for-цикъл
Да се отпечатат числата от 1 до 2^n
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/619#2
Четни степени на 2
Да се отпечатат четните степени на 2 до 2^n
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/619#3
Редица числа 2k+1
Да се отпечатат всички числа ≤ n от редицата: 1, 3, 7, 15, 31, ...
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/619#4
Число в диапазона [1 ... 100]
Да се въведе число в диапазона [1 ... 100]
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/619#5
Най-голям общ делител (НОД)
Най-голям общ делител (НОД) на две естествени числа a и b е най-голямото число, което дели едновременно a и b без остатък.
Да се въведат цели числа a и b и да се намери НОД(a, b):
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/619#6
Изчисляване на факториел
За естествено число n да се изчисли n! = 1 * 2 * 3 * ... * n
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/620#0
Сумиране на цифрите на число
Да се сумират цифрите на цяло положително число n.
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/620#1
Безкраен цикъл
Безкраен цикъл е когато повтаряме нещо до безкрайност:
Пример:
Прости числа
Едно число n е просто, ако се дели единствено на 1 и n
Едно число n е просто, ако се дели на число между 2 и n-1
Алгоритъм за проверка дали число е просто:
Проверяваме дали n се дели на 2, 3, ..., n-1
Ако се раздели, значи е композитно
Ако не се раздели, значи е просто
Проверка за просто число. Оператор break
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/620#2
Оператор break в безкраен цикъл
Да се напише програма, която въвежда четно число. При невалидно число да връща към повторно въвеждане.
Справяне с грешни числа: try … catch
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/620#3
Числа на Фибоначи
Числата на Фибоначи са следните: 1, 1, 2, 3, 5, 8, 13, 21, 34, ... F(n) = F(n-2) + F(n-1). Да се въведе n и да се пресметна n-тото число на Фибоначи
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/620#4
Пирамида от числа
Да се отпечатат числата 1 ... n в пирамида:
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/620#5
Таблица с числа
Да се отпечатат числата 1 ... n в таблица:
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/620#6
5. Подпрограми (функции и методи)
Прости Методи
Методите са именувано парче код, което може да се извика. Деклариране на прост метод:
Извикване на метода няколко пъти:
Защо да използваме методи?
Управляваме процеса на програмиране
Разделяме големи програми на малки части
По-добра организация на програмата ни
Подобрява четимостта на кода
Подобрява разбираемостта на кода
Избягваме повторението на програмен код
Подобрява поддръжката на кода
Преизползваемост на кода
Използване на съществуващи методи няколко пъти
Деклариране на методи
В C#, методите се декларират вътре в клас
Main() също е метод
Декларираните променливи са локални
Извикване на метод
Методите могат да бъдат извикани чрез името им
Извикване на метод:
Метод може да бъде извикан от:
Главният метод – Main()
Някой друг метод
Собственото си тяло – Рекурсия
Задача: Празна касова бележка
Да се напише метод, който печата празна касова бележка:
Направете 3 метода които принтират всяка част
Копирайте съдържанието от предишния слайд
Използвайте знака "\u00A9" за символът ©
Направете метод PrintReceipt(), който вика трита метода
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/621#0
Използване на параметри
Параметрите могат да бъдат всеки тип данни
Извикване на метод с конкретни стойности
Можем да подаваме нула или няколко параметъра
Параметрите могат да бъдат от различни типове
Всеки параметър има име и тип
Задача: Знак на цяло число
Да се създаде метод, който печата знака на цяло число n:
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/621#1
Задача: Принтиране на триъгълник
Да се създаде метод, който принтира триъгълник.
Първо създайте метод, който принтира един ред, състоящ се от числа в диапазон от определено начало до определен край:
После създайте метод, който принтира първата и после втората половина на триъгълника:
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/621#2
Задача: Рисуване на запълнен квадрат
Нарисувайте на конзолата запълнен квадрат със страна n
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/621#3
Типове на връщаната от метода стойност
Тип void – не връща никаква стойност (само изпълнява кода)
Други типове – връщат стойност от тип,съвместим с типа на метода
Оператор Return
Веднага спира изпълнението на метода
Връща определената стойност
void методите могат да бъдат спрени с използване на return;
Употреба на връщаната стойност
Стойностите могат да се:
Присвояват на променлива:
Използват в изрази:
Предават директно на друг метод:
Пример: превръщане на температура
Превърнете температурата от Фаренхайт в Целзий
Задача: Лице на триъгълник
Да се напише метод, който изчислява лицето на триъгълник по дадени основа и височина и връща стойността му.
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/622#0
Задача: Степен на число
Да се напише метод, който изчислява и връща резултата от повдигането на число на дадена степен:
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/622#1
Сигнатура на метода
Комбинацията от име и параметри се нарича сигнатура на метод.
Сигнатурата се използва за разграничаване между методи с едно и също име.
Методи с едно и също име, но различна сигнатура се наричат варианти на метод.
Варианти на методи
Можем да използваме едно име на няколко метода с различни сигнатури (име и параметри на метод)
Сигнатура и тип на връщаната стойност
Типът на връщаната стойност не е част от сигнатурата
Компилаторът не би могъл да прецени кой от двата метода да изпълни.
Изпълнение на програма
Изпълнението се продължава след извикване на метод:
Задача: Умножение на четна и нечетна сума
Да се напише програма, която умножава сумата от всички четни цифри на число и сумата на всички нечетни цифри на същото число:
Направете метод GetMultipleOfEvensAndOdds()
Направете методи GetSumOfEvenDigits() и GetSumOfOddDigits()
Използвайте Math.Abs() за негативните числа
Тестване на решението: https://judge.softuni.bg/Contests/Practice/Index/622#3
Last updated