Т-Банк

Алгоритмы.

Мини-курс по C++

Лекция 1. Ввод, вывод, числа и условия

В этой лекции мы начнём писать программы на C++. Наша цель простая: научиться создавать маленькие программы, которые читают данные, считают ответ и выводят его на экран.

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

Code::Blocks

На курсе мы будем писать код в Code::Blocks. Это среда разработки: в ней можно редактировать программу, запускать её и смотреть ошибки.

Мы рекомендуем устанавливать версию со встроенным компилятором: codeblocks-25.03mingw-setup со страницы загрузки.

Если у тебя Windows, можно скачать установщик Code::Blocks с MinGW напрямую с нашего сайта.

Обычно ты будешь работать с файлом на C++, например main.cpp. Внутри этого файла находится текст программы. Более подробную информацию про установку и использование Code::Blocks можно найти в видеолекции.

Первая программа

Вот минимальная программа на C++:

#include <iostream>
using namespace std;

int main() {
    cout << "Hello, world!";
    return 0;
}

Если её запустить, она выведет:

Hello, world!

Разберём программу по частям.

#include <iostream>

Эта строка подключает библиотеку для ввода и вывода.

using namespace std;

Эта строка нужна, чтобы писать cout коротко. Без неё пришлось бы писать std::cout.

int main() {
    ...
}

main - главная функция программы. Именно с неё начинается выполнение.

Фигурные скобки { и } показывают, где начинается и где заканчивается тело функции.

cout << "Hello, world!";

cout выводит данные на экран. Текст нужно писать в двойных кавычках.

return 0;

Эта строка завершает программу - возвращает 0 из функции main. Значение 0 означает, что программа закончилась успешно.

Вывод нескольких строк

Чтобы вывести несколько строк, можно использовать \n.

#include <iostream>
using namespace std;

int main() {
    cout << "First line\n";
    cout << "Second line";
    return 0;
}

Результат:

First line
Second line

\n переводит вывод на новую строку.

Значения можно “соединять” через <<. Например, вот код, эквивалентный коду выше:

#include <iostream>
using namespace std;

int main() {
    cout << "First line\n" << "Second line";
    return 0;
}

Переменные

Переменная - это ячейка, в которой программа хранит значение.

Например:

#include <iostream>
using namespace std;

int main() {
    int x = 5;
    cout << x;
    return 0;
}

Здесь создаётся переменная x, в неё записывается число 5, а потом программа выводит значение x.

int x = 5;

int означает, что в переменной будет храниться целое число.

Значение переменной можно менять:

int x = 5;
x = 10;
cout << x;

Эта программа выведет:

10

Сначала в x было записано 5, потом мы заменили это значение на 10.

Ввод данных

Пока что числа были прямо внутри программы. Но в задачах обычно нужно читать данные: их вводит пользователь или проверяющая система.

Для ввода используется cin.

#include <iostream>
using namespace std;

int main() {
    int x;
    cin >> x;
    cout << x;
    return 0;
}

Что происходит:

Если запустить программу и ввести:

17

программа выведет:

17

Можно читать несколько чисел:

#include <iostream>
using namespace std;

int main() {
    int a, b;
    cin >> a >> b;
    cout << a + b;
    return 0;
}

Если ввести:

3 8

программа выведет:

11

Числа можно вводить через пробел или с новой строки. Для cin это почти одно и то же.

Арифметика

В C++ можно выполнять обычные арифметические операции.

a + b
a - b
a * b
a / b
a % b

Значения операций:

Пример:

#include <iostream>
using namespace std;

int main() {
    int a, b;
    cin >> a >> b;

    cout << a + b << "\n";
    cout << a - b << "\n";
    cout << a * b << "\n";

    return 0;
}

Если ввести:

10 3

программа выведет:

13
7
30

Целочисленное деление

С делением целых чисел нужно быть внимательным.

cout << 7 / 2;

Этот код выведет:

3

Почему не 3.5? Потому что 7 и 2 - целые числа. При делении двух целых чисел C++ тоже получает целое число и отбрасывает дробную часть.

Остаток от деления

Операция % возвращает остаток от деления.

cout << 7 % 2;

Результат:

1

Потому что 7 делится на 2 с остатком 1.

Ещё примеры:

cout << 10 % 3 << "\n";
cout << 15 % 5 << "\n";
cout << 18 % 4 << "\n";

Результат:

1
0
2

Остаток от деления часто используют, чтобы проверить чётность числа. Если число делится на 2 без остатка, оно чётное.

Типы int и double

Тип переменной говорит компилятору C++, какие значения можно хранить.

Два важных типа:

Пример:

#include <iostream>
using namespace std;

int main() {
    int a = 7;
    double b = 2.5;

    cout << a << "\n";
    cout << b << "\n";

    return 0;
}

Если задача работает только с целыми числами, обычно используют int. Если нужны дроби, используют double.

Логические выражения

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

a == b
a != b
a < b
a > b
a <= b
a >= b

Что они означают:

Важно: для проверки равенства используются два знака ==, а не один.

a == b

Один знак = используется для присваивания:

x = 5;

Пример:

#include <iostream>
using namespace std;

int main() {
    int a, b;
    cin >> a >> b;

    cout << (a < b);

    return 0;
}

Если ввести:

3 8

программа выведет:

1

Если ввести:

10 4

программа выведет:

0

В C++ значение 1 означает “правда”, а 0 означает “ложь”.

Условный оператор if

if позволяет выполнить часть программы только при выполнении условия.

#include <iostream>
using namespace std;

int main() {
    int x;
    cin >> x;

    if (x > 0) {
        cout << "positive";
    }

    return 0;
}

Если ввести положительное число, программа выведет:

positive

Если ввести 0 или отрицательное число, программа ничего не выведет.

Общий вид:

if (условие) {
    // команды, которые выполняются, если условие истинно
}

Условие пишется в круглых скобках. Команды, которые зависят от условия, пишутся внутри фигурных скобок.

if-else

Если нужно выполнить какие-то команды при невыполнении условия, есть оператор else, то есть “иначе”. Он пишется после окончания блока оператора if и выполняется, когда условие в if ложно.

#include <iostream>
using namespace std;

int main() {
    int x;
    cin >> x;

    if (x > 0) {
        cout << "positive";
    } else {
        cout << "not positive";
    }

    return 0;
}

Если x > 0, выполнится первая ветка. Иначе выполнится вторая.

Примеры:

Ввод: 5
Вывод: positive
Ввод: -2
Вывод: not positive
Ввод: 0
Вывод: not positive

Несколько условий

Если вариантов больше двух, можно использовать else if.

#include <iostream>
using namespace std;

int main() {
    int x;
    cin >> x;

    if (x > 0) {
        cout << "positive";
    } else if (x < 0) {
        cout << "negative";
    } else {
        cout << "zero";
    }

    return 0;
}

Программа проверяет условия сверху вниз:

  1. Если x > 0, выводит positive.
  2. Иначе, если x < 0, выводит negative.
  3. Иначе выводит zero.

Важно: выполняется только одна подходящая ветка.

Сложные условия

Иногда одного сравнения мало. Например, нужно проверить, что число находится в диапазоне от 10 до 20.

Для этого есть логические операции:

&&
||
!

Они означают:

Пример с &&:

#include <iostream>
using namespace std;

int main() {
    int x;
    cin >> x;

    if (x >= 10 && x <= 20) {
        cout << "inside";
    } else {
        cout << "outside";
    }

    return 0;
}

Здесь условие истинно только тогда, когда обе части верны:

Важно: в отличие от Python, следующая запись в C++ не проверяет, что x находится между 10 и 20:

10 <= x <= 20

Пример с ||:

#include <iostream>
using namespace std;

int main() {
    int x;
    cin >> x;

    if (x == 0 || x == 10) {
        cout << "special";
    } else {
        cout << "ordinary";
    }

    return 0;
}

Здесь достаточно, чтобы была верна хотя бы одна часть: x == 0 или x == 10.

Проверка чётности

Число чётное, если оно делится на 2 без остатка.

В C++ это записывается так:

x % 2 == 0

Полная программа:

#include <iostream>
using namespace std;

int main() {
    int x;
    cin >> x;

    if (x % 2 == 0) {
        cout << "even";
    } else {
        cout << "odd";
    }

    return 0;
}

Примеры:

Ввод: 8
Вывод: even
Ввод: 9
Вывод: odd