Модул 1. Увод в програмирането

Mатериалиarrow-up-right | Задачиarrow-up-right | Решенияarrow-up-right

Съдържание

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

Задача: Квартално магазинче

Предприемчив българин отваря по едно квартално магазинче в няколко града с различни цени за следните продукти:

city / product
coffee
water
beer
sweets
peanuts

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