- Оператори
- Цикли
- Условни блокове
- Упражнение
- Какво следва?
Оператори?
Операторите биват четири вида - логически, аритметически, оператори за сравнение и оператори за присвояване(все още наричани комбинирани с изключение на един оператор). Те са доста важна част от това как нашата програма функционира. Нека дадем примери за тези оператори и да започнем първо с по-важните и по-лесните - аритметическите оператори. Чрез тях можем да създаваме различни изрази.
Аритметическите оператори биват:
- Събиране - Изписва се чрез символа + - Извършва събиране между две променливи/константи.
- Изваждане - Изписва се чрез символа - - Извършва изваждане между две променливи/константи.
- Деление - Изписва се чрез символа / - Извършва деление между две променливи/константи.
- Деление на цели числа с остатък - Изписва се чрез символа % - Извършва деление с остатък между две променливи/константи и връща остатъка.
- Умножение - Изписва се чрез символа * - Извършва умножение между две променливи/константи.
Да се съберат числата 5 и 8 и да се изведе резултата на екрана.
Код за потвърждение: Избери целия код
int a = 5;
int b = 8;
cout << (a + b) << endl;
Нека продължим нататък с операторите за сравнение и да видим как можем да ги използваме. Операторите за сравнение в C++ са:
- По-голямо от - Изписва се чрез симолва > - Сравнява дали една променлива/констана е по-голяма от друга.
- По-голямо от или равно на - Изписва се чрез симолва >= - Сравнява дали една променлива/констана е по-голяма от или равна на друга.
- Равно на - Изписва се чрез симолва == - Сравнява дали една променлива/констана е равна на друга.
- По-малко от - Изписва се чрез симолва < - Сравнява дали една променлива/констана е по-малка от друга.
- По-малко от или равно на - Изписва се чрез симолва > - Сравнява дали една променлива/констана е по-голяма от друга.
Задачата е същата като горната, разликата е, че тук използваме оператор за сравнение (по-голямо от), а не аритметически оператор.
Код за потвърждение: Избери целия код
int a = 5;
int b = 8;
cout << (a > b) << endl;
Можете да го направите за упражнение за останалите оператори същото. Ще преминем на логическите и комбинираните оператори, понеже там ще има малко повече примери.
Комбинираните оператори служат за спестяване на време за писане и място. Изглеждат малко нечетливо първоначално, но с времето се свиква.
- Събиране и присвояване - Изписва се чрез += - Извършва действие събиране с друга променлива/константа и запазва резултата в себе си. Например:
Искаме да съберем а и b в променливата a. Това ще се случи по следният начин:Код за потвърждение: Избери целия код
int a = 5; int b = 8; a += b; // Този ред се равнява на a = a + b и се чете а присвоява досегашната си стойност + стойността на променливата b
- Изваждане и присвояване - Изписва се чрез -= - Извършва действие изваждане с друга променлива/константа и запазва резултата в себе си. Например:
- Деление и присвояване - Изписва се чрез /= - Извършва действие деление с друга променлива/константа и запазва резултата в себе си. Например:
- Деление с остатък и присвояване - Изписва се чрез %= - Извършва действие деление с остатък с друга променлива/константа и запазва резултата в себе си. Например:
- Умножение и присвояване - Изписва се чрез *= - Извършва действие умножение с друга променлива/константа и запазва резултата в себе си. Например:
- Нарастване - Изписва се чрез ++ - Извършва действието събиране и присвояване, но само с едно. Тоест, ако имаме променливата int a = 1, когато извършим a++ тя ще стане 2. Представете си го като a = a + 1;
- Намаляване - Изписва се чрез -- - Извършва действието изваждане и присвояване, но само с едно. Тоест, ако имаме променливата int a = 1, когато извършим a-- тя ще стане 0. Представете си го като a = a - 1;
И сега отиваме на логическите оператори. Логическите оператори се използват в логически изрази, които могат да бъдат условия. Най-често ги използваме в условия, когато искаме да проверим няколко неща едновременно. Нека дадем пример:
Да кажем, че отиваме в един автосалон и си казваме, че ако има бяла или червена кола, то това ще е тя. Ако няма, просто ще си тръгнем. Как това може да се случи? В главата ни реално се случва една проверка, която ние не осъзнаваме, защото е елементарна. Реално, мозъка ни прави една проверка чрез очите. Като огледаме целият салон ние виждаме една бяла кола, но не виждаме червена. Това ни устройва, защото сме си го наумили.
Какво се опитвам да кажа? Искам да кажа, че ние правим тази проверка неусетно, докато при програмирането трябва сами да си я напишем. Нека видим един поток на работа:
- Влизаме в автосалона
- Оглеждаме колите
- Търсим специфичен цвят
- Ако го намерим, си казваме "Супер, точно това търся"
- Ако не го намираме, просто си тръгваме и продължаваме към следващият автосалон
- ИЛИ - Изписва се чрез || - Условието изпълнено ако една от двете страни е изпълнена. Нека се върнем на примера по-горе с колите. Спомняте си, че още при влизането ни в автосалона си казахме, че ако има кола с червен или бял цвят, тя ще е колата, която ще си вземем. Ето това е примерна проверка. Влизаме в салона, няма кола с червен цвят, но има с бял. Това ни удовлетворява и нашето условие е изпълнено.
- И - Изписва се чрез && - Условието изпълнено ако и двете страни са изпълнена. Горе-долу същото каквото казах по-горе, но с една промяна. Искаме сега да влезем наново в друг автосалон и да търсим бяла кола, която да е под 50 000 лева. Тук условието се променя малко, защото имаме две неща, които искаме да се случат. Искаме колата да е бяла и да е под 50 палки.
- Отрицание - Изписва се чрез ! - Малко трудно би се обяснило това, поне от моя гледна точка, но нека го обясня така. Представете си го като жена в цикъл - казва ти едно, прави обратното. Тоест, ако имаме една проверка, която връща, че е истина - примерно, намерили сме кола, която е бяла и е под 50 000 лева, то ако приложим отрицанието, това означава, че израза от истина става неистина, ако това въобще има някаква логика. Нека го дадем като пример в програмирането:
Имаме една булева променлива със стойност true . Искаме да обърнем резултата да е false.
Код за потвърждение: Избери целия код
bool check = true; check = !check; // Тоест, тук на check присвояваме неговата обратна стойност, която на true е false
Цикли
Циклите представяват женски изблик на нервност и нужда за глад, дължащ се на разли- майтапя се.
Циклите представляват набор от действия повторени даден брой пъти. Например, отиваме да бягаме на стадион и си казваме, че ще направим три обиколки. Ние извършваме действието бягане за три обиколки. Това представлява един цикъл. Нека видим различните видове цикли и кога да ги използваме.
Видовете цикли са три в C++:
- for - За този цикъл трябва да знаем колко пъти ще искаме да се изпълни преди да го използваме. Примерно: Ние обикаляме стадиона и сме си го задали, че три пъти ще го обиколим. Ние знаем колко пъти ще го обиколим и този цикъл ще ни свърши работа, за да извършим действието чрез програма. Ето самият синтаксис и начин на използване на този цикъл:
Синтаксис:Нека сега да го обясним набързо:Код за потвърждение: Избери целия код
for(<тип данни> <име на променливата, която ще служи за брояч>; <променливата ни, която е брояч> <оператор за сравнение> <променлива/константа, която съдържа в себе си края на цикъла, тоест докога да върти самият брояч>; <променливата ни, която е брояч> <оператор за нарастване или намаляване, или комбиниран за присвояване>) { <действия> }
- <тип данни> - Най-често е int, защото все пак ни трябва брояч, а брояча нараства с единица примерно.
- <име на променливата, която ще служ за брояч>, <променливата ни, която е брояч> - Как ще се казва променливата ни, която ще използваме за брояч.
- <оператор за сравнение> - Оператор, по който да сравняваме
- <променлива/константа, която съдържа в себе си края на цикъла, тоест докога да върти самият брояч> - Докога този цикъл ще се изпълнява. Приемете го като условие
- <оператор за нарастване или намаляване, или комбиниран за присвояване> - Приемете го като стъпка. Нека го дадем и в реален пример.
Принципът на работата на този цикъл е да проверява всеки път стойността си и да я нараства. Тоест, ако първоначално стойността на index е 0, той проверява дали нулата е по-малка от стойността на нашата променлива laps и тогава нараства, след като приключи своето действие. Тоест, ако имаме нула първоначално, след като избягаме една обиколка, то брояча ни ще стане единица, заради стъпката, която е index++.Код за потвърждение: Избери целия код
int laps = 3; // Обиколки, които ще правим на стадиона for(int index = 0; index < laps; index++ ) { // Бягаме }
- while - Този цикъл го използвайте, когато не знаете определен край или брой. Тоест, сега ще дам пример с магаазин. Отивате в магазина и си избирате продукт, отивате на опашката. Вие сте пети. Окей, но след вас може да дойде още един човек, след този човек, който идва зад вас може да дойдат още трима и така до безкрай. Как се решава този проблем? Лесно е. Точно затова служи този цикъл. Тук ще използвам неща, за които ще говорим по-късно, за да мога да го покажа като пример как би изглеждало това с опашката в магазина, но първо нека видим синтаксиса на цикъла:
Простичко нали? Условието може да бъде всякакво - от булев израз до най-простата проверка. Нека го покажем и като пример по-горният вариант:
Код за потвърждение: Избери целия код
while(<условие>) { <действия> }
Това е най-простичкото обяснение като цяло. Отново, използвайте го само, когато не знаете кога трябва да приключи цикъла.Код за потвърждение: Избери целия код
#include <queue> // Това ще го обясняваме по-нататък, служи за показване на примера за опашката. // Създаваме си опашката от хора queue<int> people; // Добавяме хора на опашката, не гледайте, че са цифри - представете си ги като хора people.push_back(3); people.push_back(1); people.push_back(4); // Използваме цикъла и задаваме условие // Условието гласи, че цикълът ще се изпълнява, докато опашката не се изпразни или докато хората не си тръгнат и не останат хора на //опашката. while(!people.empty()) { cout << "The person " << people.back() << " payed and went out!" << endl; people.pop_back(); // Човекът сие платил и излиза. }
- do-while - Или така нареченият от мене глупакоустойчив цикъл. Този цикъл първо изпълнява действията, после проверява условието. Доста добър начин е за валидация на вход. Например: Искаме да събираме числа въведени от нас, докато не въведем 0. Но нека преди това да видим синтаксис:
Сега и примерната задачка - Нека напишем програма, която да събира числа въведени от нас, докато не въведем 0. Ето и как би изглеждала програмата:Код за потвърждение: Избери целия код
do { <действия> } while(<условие>);
Код за потвърждение: Избери целия код
int sum = 0, input; do { cout << "Enter number: " << endl; cin >> input; sum += input // или sum = sum + input; } while(input > 0);
Условни блокове
Нека поговорим малко и за условните блокове. Те са доста често срещано нещо в нашият живот. Всеки ден ние правим избори на базата на две или повече неща при дадени условия. Например: Аз днеска избрах да не ходя с автобус на работа, а да отида пеша. Тези така наречени условни блокове са все още известни като разклонени алгоритми, защото на базата на избор, вие правите нещо коренно различно от успоредното действие и резултатът става различен. Как така? Ето как - аз казах, че днес съм ходил пеша до работа? Добре, по пътя си видях едно момченце, което имаше нужда от помощ - Изниква още един условен блок - Да му помогна ли или да си продължа? - Аз реших да му помогна, помогнах му, резултатът е различен от този, ако бях си продължил по пътя. То нямаше да ми се усмихне, нямаше да ми каже благодаря на неговият език, нямаше да го видя този резултат. Същото е и с тези условни блокове.Нека видим примери за такива и как да ги използваме:
- if-else - Това е най-простият условен блок, който може да срещнете и се използва много често в програмирането. Превежда се Ако това се случи, то ще се изпълни следното действие, в противен случай, ще стане нещо друго. Фактически, предадено като синтаксис е следното:
Чете се по следният начин: Ако условието е изпълнено, ще изпълня първите действия, в противен случай ще изпълня вторите действия
Код за потвърждение: Избери целия код
if(<условие>) { <първи действия> } else { <втори действия> }
Толкова е простичко и няма нужда да става по-сложно. Можете да ги и комбинирате, за да стане с малко повече условия. Можете и да ги слагате един в друг условен блок. Пример за един в друг условен блок:Работи по същата логика като горното обяснение. Просто влиза по-навътре. Относно комбинациите на условия, можете да правите така:Код за потвърждение: Избери целия код
if(<условие едно>) { if(<условие две>) { <първи действия> } else { <втори действия> } } else { <трети действия> }
Предполагам е ясна каква е логиката.Код за потвърждение: Избери целия код
if(<условие едно>) { <първи действия> } else if(<условие две>) { <втори действия> } else { <трети действия> }
Нека продължим напред със следващото и да обясним каква е разликата между двата условни блока. Следващото, с което ще продължим е switch. Реално, if и switch могат да работя по един и същи начин, просто единият в дадени ситуации е много по-компактен и лесен за употреба, красив откъм четене на пръв поглед и практичен спрямо другият. Например, if би се използвал за нещо, което искаш да провериш дали има стойност в него, нещо за по-голямо или по-малко, нещо за сравнение, но той не е удобен, ако трябва да се проверяват стойности на изброим тип. Това означава да имаме поне по три реда за всяка проверка, която трябва да е нещо от вида: if-else if-else , а това е безумно. Ето тук идва приложението на този условен блок под името switch. Нека видим синтаксиса му и да дадем пример:
Синтаксис:Как работи?Код за потвърждение: Избери целия код
switch(<променлива>) { case <Предполагаема стойност на променливата за условие>: <действия> break; default: <действия> break; }
Да кажем, че имаме една променлива, която ни служи да си направим избора. И имаме различни варианти. Ние си избираме един вариант и ако той е описан в case, то тогава ще се изпълни действието вътре в този case. Ако не, ще отиде по подразбиране в default и ще изпълни действията на default. Нека го дадем като пример:
Какво се случва? По подразбиране сме задали стойност единица на нашата променлива choice. Влизаме с нея в условният блок и той започва да проверява дали стойността на променливата ни съвпата с някой от нашите case-ове, които сме задали. Ако съвпада отива на този case, с който съвпада и изпълнява неговите действия, ако не намери отива в default.Код за потвърждение: Избери целия код
int choice = 1; switch(choice) { case 0: cout << "You chose 0!" << endl; break; case 1: cout << "You chose 1!" << endl; break; case 2: cout << "You chose 2!" << endl; break; default: cout << "No options were found like your choice!" << endl; break; }
Упражнение
Няма да има упражнение за тази тема, понеже е доста дълга, вярно, сложна е, но поразгледайте задачите отново, пробвайте ги, попроменете ги и така вижте кое, как и защо работи или не работи по този начин.
Какво следва?
В следващият пост ще разгледаме символните низове и ще видим приложение на for циклите.