АЙТИШНЫЙ САЙТ ПЕТРА СЕМИЛЕТОВА

ПЕТР СЕМИЛЕТОВ

ПРОСТО С++: УРОК 6

Комменты и код. Логика в программе - выбор и сравнение. Думаем за программу и воплощаем думы в коде.

Как программа принимает решения? Как перенести в исходный код собственные логические рассуждения?

Напишем простейшую программу - виртуального взяточника, гнусного мздоимца, который будет запрашивать число и решать, много это или мало. Допустим, всё что больше 10000 - много, меньше 10000 - мало, а если равно 10000 - в самый раз!

По мере изложения примеров я буду пояснять их как в тексте исходного кода, так и вне его. Комментарии в языке программирования это просто отмеченный особым образом текст, на который компилятор не обращает внимания. Человек видит такой текст и принимает к сведению, а для компилятора он не имеет значения. В C++, комментарием считается всё, что начинается с двух косых черт - // - и до конца строки, это называется однострочным комментарием.

Многострочный комментарий - это текст, заключенный между /* и */.

//однострочный комментарий

/*
а это - 
многострочный комментарий
*/

Комментирование используется, чтобы на простом языке объяснить себе на память, или другим людям, как работает код. Иногда строки кода отмечают как комментарий, чтобы отключить такой код. Например, он работает неправильно, вы хотите написать другой кусочек кода, но старый вам пригодится, и вы просто закомментируете его, то бишь оформите как комментарий, а ниже пишете новый вариант кода. Итак, комментирование - это еще и удобный способ отключения ненужных строк кода.

Но перейдем к примеру 06-01.cpp.

#include <iostream>

using namespace std;

int main (int argc, char *argv[])
{
//простенькая текстовая заставка
  cout << "*** Виртуальный мздоимец 1.0 ***" << endl;

//Вывод текста приветствия для пользователя, для оживления диалога
  cout << "Привет! Я - виртуальный взяточник..." << endl;

//Просим пользователя ввести число:
  cout << "Сколько вы дадите на лапу? (нажмите Enter после ввода)" << endl;

//объявление переменной vzyatka типа int
//в которую мы запишем введенное пользователем число
  int vzyatka;

//направляем пользовательский ввод с клавиатуры из
//объекта cin в переменную vzyatka
  cin >> vzyatka;

//"реагируем", сравнивая значение переменной
//vzyatka с 10000

  if (vzyatka < 10000) //если меньше 10000
     cout << "Маловато будет!" << endl; //то выводим это

  if (vzyatka > 10000) //если больше 10000
     cout << "Я не так жаден, как вы думаете!" << endl; //выводим это

  if (vzyatka == 10000) //и ежели равно 10000
     cout << "Премного благодарен!" << endl; //выводим это

//выходим из функции main, то бишь программы
//возвращая системе ноль
  return 0;
}

Итак, мы объявляем переменную vzyatka типа int и предлагаем пользователю ввести число, которое запишется в нашу переменную vzyatka.

А далее мы знакомимся с чудесным ключевым словом if - если. В скобках следом за ним записывается выражение сравнения. Мы сравниваем значение переменной vzyatka с неким числом, в нашем случае 10000. Для этого используются операторы сравнения - меньше, больше, равно.

Сразу проясню.

Одинарный знак равенства = в С++ присваивает значение переменной. Переменная стоит слева, значение справа от знака равенства.

Двойной знак равенства == - это оператор сравнения. Он сравнивает, равно ли то, что стоит слева, тому, что стоит справа от двойного знака равенства.

Покамест разберем только три таких оператора сравнения - больше, меньше, равно. Технически они действуют как функции и тоже возвращают значение. Это значение может быть одним из двух - истина или ложь.

Если пользователь ввел 10, и мы сравниваем vzyatka < 10000, результатом сравнения этого будет истина, ибо vzyatka меньше 10000.

Истина на английском называется true, ложь false - вы часто с этим столкнетесь в документации к языкам программирования, в примерах и так далее. Технически, в С++, истина и ложь имеют вполне осязаемые числовые значения. Ложь принята за ноль, а истина - любое ненулевое значение.

Итак,

  if (vzyatka < 10000)
     cout << "Маловато будет!" << endl;

Далее, если vzyatka меньше 10000, пишем на консоль, дескать, мало!

  if (vzyatka > 10000)
     cout << "Я не так жаден, как вы думаете!" << endl;

Далее, если vzyatka больше 10000, пишем на консоль, что это слишком много!

  if (vzyatka == 100)
     cout << "Премного благодарен!" << endl;

Если vzyatka равно 10000, пишем на консоль благодарность.

Другой пример. Что, если мы хотим в ответ на любое введенное число, которое не является сто, писать “не годится”?

Нам нужно использовать оператор “не равно” - !=. Итак, равно записывается как два знака равенства “==”, а не равно это !=.

Вообще восклицательный знак - ! - в С++ означает отрицание, приставку не.

Пример 06-02.cpp, уже скучнее, зато не будем многословны. Введенное пользователем значение поместим в переменную x (можно читать хоть икс, хоть хы, хоть ху):

#include <iostream>

using namespace std;

int main (int argc, char *argv[])
{
  int x;
  cout << "введите число" << endl;
  
  cin >> x;

  if (x != 100)
      cout << "не годится!" << endl;
  else
        cout << "годится" << endl;

  return 0;
}

Так, строка с “не равно” понятна. Если значение переменной x не равно 100, сердито пишем - не годится!

А что за слово else дальше? В переводе оно значит ИНАЧЕ. Вся конструкция наша в программе читается так:

   Если x не равно 100
           пишем "не годится", 
   ИНАЧЕ пишем "годится"

Итак, слово else помогает нам задать альтернативную ветку логического выражения.

Если нечто, делаем одно, иначе делаем другое.

Но в жизни мы часто делаем более сложный выбор, взвешивая несколько критериев. В С++ для этого есть логические операции И (AND) - пишется как &&, ИЛИ (OR) - пишется как ||, ну а с отрицанием !(НЕ, NOT) вы уже знакомы.

Напишем программу, эдакий банкомат наоборот - она будет принимать только одно из двух чисел, 100 и 200, и отказываться от других.

Пример 06-03.cpp:

#include <iostream>

using namespace std;

int main (int argc, char *argv[])
{
  int x;
  cout << "введите число" << endl;
  
  cin >> x;

  if (x == 100 || x == 200)
     cout << "годится!" << endl;
  else
        cout << "не годится" << endl;

  return 0;
}

Разберем:

  if (x == 100 || x == 200)

Если x равно 100 или x == 200, то выполняем следующую строку, в которой пишем, что годится! Иначе, else, пишем, что не годится.

То бишь, если хоть одна из проверок в скобках, одна из проверок, разделенных логическим ИЛИ, срабатывает, то результат вычисления выражения в скобках считается истинным.

Я понимаю, что это нудные примеры, зато очень простые. Разобрать операцию логического И, которое обозначается как &&, нам поможет довольно натужный пример, но я не могу сейчас придумать ничего лучше.

Напишем программу, в которой пользователь вводит число, а программа проверяет, больше ли это число десяти и в то же время меньше ли оно ста.

Пример 06-04.cpp:

#include <iostream>

using namespace std;

int main (int argc, char *argv[])
{
  int x;
  cout << "введите число" << endl;
  
  cin >> x;

  if (x > 10 && x < 100)
     cout << "годится!" << endl;
  else
        cout << "не годится" << endl;

  return 0;
}
```cpp

Весь цимус здесь в строке проверки,

```cpp
  if (x > 10 && x < 100)

Если x больше 10, логическое И &&, x меньше 100, пишем, что выполняем следующую строку, в которой пишем, что число годится! Иначе, после else, пишем, что число не годится.

Иными словами, то, что заключено в скобки, является истиной только при соответствии обоим условиям проверки.

Можно гибко задавать какие угодно условия. Например:

  if (x > 10 && x != 100)

Тут проверяется, чтобы x было больше 10 и при этом х не равно 100.

Итак, логические операторы позволяют нам программировать логику, создавать ветки выполнения программы, которые выполняются после проверки условий. Однако что, если ветка не ограничивается одним только выражением, но содержит несколько?

Самое время поговорить о составных операторах. Но - уже на следующем уроке.

Поддержать курс:

Навигация:

Оглавление

Предыдущий урок

Следующий урок