4. Низове (1)
Променливи от тип string
Низ е редица от символи:    "Hello", "Това е низ".
Дефиниция на променлива: string name="John";
Заглавен файл:         #include <string>
Оператор за присвояване: name="Carl";
Извеждане на низове:    cout << name;
Вход:               cin >> name;
Вход на цял ред:       getline(cin, name);
Дължина на низ:       int n=name.length();
Празен низ:                          ""
Автоматична инициализация: string response; 
Поднизове
string greeting = "Hello World!\n"
string sub = greeting.substr(0, 4);
cout << sub;

Hell

Сливане на низове
string fname = "Nikolay";
string lname = "Kirov";
string name = fname + lname;
NikolayKirov

string name = fname + " " + lname;
Nikolay Kirov

Поне един от аргументите на сливането трябва да е променлива

Форматиран изход



5. Обекти (1)
Конструиране на обекти
   int k;
   string greeting = "Hello";
 * Тип данни клас - класовете се дефинират от програмата:    Time
 * Конструиране на обект:       Time(23,59,59)
 * Включване на файл с дефиниция на класа:
    #include "ccc_time.cpp"
 * Дефииране на променлива от тип Time:
        Time day_end = Time(23,59,59);
   или
   Time day_end(23,59,59);
 * Конструктор и параметри на конструктора
 * Конструиране по подразбиране:
       Time now = Time();
   или
   Time now;

Използване на обекти
* член-функции на класа:
   Time wake_up(7,0,0);       // 7:00:00
   wake_up.add_seconds(1000); // 7:16:40
 * функции на класа Time:

Име Действие
Time() Конструира обект, показващ текущото време
Time(h,m,s) Конструира обект, показващ h часа, m минути и s секунди
t.get_seconds() Връща броя на секундите в t.
t.get_minutes() Връща броя на минутите в t.
t.get_hours() Връща броя на часовете в t.
t.add_seconds(n) Премества t с nсекунди напред.
t.seconds_from(t2) Пресмята броя на секундите между t  и t2.
#include <iostream>
using namespace std;
#include "ccc_time.cpp"
int main()
{ Time now;
  Time day_end(23, 59, 59);
  long seconds_left = day_end.seconds_from(now);

  cout << "There are " << seconds_left 
      << " seconds left in this day.\n";
  return 0; }

Обекти от реалния свят



6. Условни оператори  (2)
Условният оператор if
*  намиране на корените на квадратно уравнение:
#include <iostream>
using namespace std;
int main()
{
 double a, b, c;
 cout << "Enter the coeficients a, b and c:";
 cin >> a >> b >> c;
 double det = b*b - 4*a*c;
 if (det >= 0)
 {
  double x1 = (-b+sqrt(det))/(2*a);
  double x2 = (-b-sqrt(det))/(2*a);
  cout << "The roots are: " << x1 << " and " << x2;
 }
 return 0;
}
 
if  ( условие) оператор;
* блок

Операции за числови сравнения
 

 >  по-голямо
 >=  по-голямо или равно
 <  по-малко
 <=  по-малко или равно
 ==  равно
 !=  различно
* сравнянане на числа
* сравняване на низове - лексикографкса наредба, ASCII таблица

Проверка за валидност на входните данни

Операторът if/else
#include <iostream>
using namespace std;
int main()
{
 double a, b, c;
 cout << "Enter the coeficients a, b and c:";
 cin >> a >> b >> c;
 double det = b*b - 4*a*c;
 if (det >= 0)
 {
  double x1 = (-b+sqrt(det))/(2*a);
  double x2 = (-b-sqrt(det))/(2*a);
  cout << "The roots are: " << x1 << " and " << x2;
 }
 else cout << "The equation has no real roots."

 return 0;
}

if   (условие)  оператор1 else   оператор2;

Програмиране на алтернативи
#include <iostream>
#include <string>
using namespace std;
int main()
{
   int n;
   string name;
   cin >> n >> name;
   name = name.substr(0, 4);

   double value = 0;

   if (name == "penn")
      value = n * 0.01;
   else if (name == "nick")
      value = n * 0.05;
   else if (name == "dime")
      value = n * 0.10;
   else if (name == "quar")
      value = n * 0.25;
   else
   cout << name << " is not a valid coin name\n";
   cout << "Value = " << value << "\n";
   return 0;
}
 А без операторите else?
 if (name == "penn") value = n * 0.01;
 if (name == "nick") value = n * 0.05;
 if (name == "dime") value = n * 0.10;
 if (name == "quar") value = n * 0.25;

Вложени условни оператори
  if (x > 0) {
     if (y >= 0) {cout << y/x; }
    cout << y*x;
  }



7. Логически променливи и операции (2)
Булева алгебра  - проверка на верността на твърдения
 * Логически константи:
  - истина, да, true,  1
  - лъжа,    не, false, 0
 * Основни логически операции:
  - и,      конюнкция, and
  - или, дизюнкция,  or
  - не,   отрицание,    not
 
 A  B  A and B
 false  false  false
 false  true  false
 true  false  false
 true  true  true
 
 A  B  A or B
 false  false  false
 false  true  true
 true  false  true
 true  true  true
 
 A  not A
 false  true
 true  false
 

Закони на де Морган  [Аугуст де Морган (1806-1871)]
* отрицание на конюнкция 
   not (A and B)
                 дава същия резултат както
   (not A) or (not B)
* отрицание на дизюнкция
   not (A or B)
                дава същия резултат както
  (not A) and (not B)

Логически операции
* Да изразим условието, че даден адрес се намира извън континенталната част на САЩ, т.е. друга държава или щатите Аляска и Хавай.

not (country == "USA" and state != "AK" and state != "HI")

state != "AK" and state != "HI"
not (state == "AK") and not (state == "HI")
not (state == "AK" or state == "HI")

not (country == "USA" and not (state == "AK" or state == "HI"))
not (country == "USA") or (state == "AK" or state == "HI")
     country != "USA" or state == "AK" or state == "HI"

* Проверка дали сме пропуснали даден момент от време - фиксиран час и минути.

#include <iostream>
using namespace std;
#include "ccc_time.cpp"

int main()
{
   cout << "Enter the time that the homework is due"
   cout << " (hours minutes): ";
   int hours;
   int minutes;
   cin >> hours >> minutes;
   Time homework_due(hours, minutes, 0);
   Time now;

   if (now.get_hours() < homework_due.get_hours() or
      (now.get_hours() == homework_due.get_hours()
   and now.get_minutes() <= homework_due.get_minutes()))
      cout << "Still time to finish the homework.\n";
   else
      cout << "The homework is already past due.\n";
   return 0;
}
* Отложени пресмятания
 - За оператора end - ако първият аргумент е false
 - За оператора or   - ако първият аргумент е true
double area;
cin >> area;
if (cin.fail() or area < 0) cout << "Input error";

Булеви променливи
bool ship_by_air = false;
if (country != "USA") ship_by_air = true;
else if (state == "AK" or state == "HI")
                      ship_by_air = true;

if (ship_by_air) shipping_charge = 20;
else shipping_charge = 10;
Стойност на булева променлива може да бъде една от двете стойности (константи) true или false.