Файловый ввод – вывод

Для чтения из файла a.in необходимо перед оператором cin (к примеру в начале main) прописать:

    freopen("a.in", "r", stdin);

Для записи в файл a.out

    freopen("a.out", "w", stdout);

Если файл, в который производиться запись, отсутствует, то он будет автоматически создан. Существующий же файл – перезапишется.

 

Цикл while с предусловием

Цикл — это код, выполняемый пока истинно некоторое условие. После каждого выполнения кода проверяется некоторое условие, и если оно выполнилось, код начинает своё выполнение сначала – начинается новая итерация цикла.

Синтаксис:

    while(){}

В () пишется условие, цикл будет выполняться пока оно истинно.

В{} пишется тело цикла.

Пример:

int n = 3;

While (n--)

{

cout << n << "\n";

}

Вывод:

2

1

0

 

Цикл while с постусловием

Синтаксис:

    do {}

    while();

Сначала выполниться тело цикла, и только после этого провериться условие.

Пример:

double a, n = 3, m = 2;

    do {

a = n-- / m;

              cout << a << "\n";

    } while (a);

Вывод:

    1.5

    1

    0.5

    0

Если записать цикл с такой же логикой в виде цикла с предусловием, то программа выдаст ошибку “а не инициализировано”.

Цикл for

Цикл for в С это модифицированный цикл while. Он содержит 3 блока:

For(1 блок; 2 блок; 3 блок)

Блок объявления. В нём можно задать переменные, которые будет использоваться в цикле (к примеру счётчик), только одного типа.

Блок условия. Здесь пишется условия выполнения цикла, пока оно истинно – цикл будет выполняться.

Блок изменения. Здесь можно изменить переменные объявленные в первом блоке, а также переменные объявленные до цикла.

При это не обязательно писать что-либо в этих блоках, все 3 блока можно оставить пустыми, однако если оставить пустым блок условия, то получится вечный цикл.

    for (;;) эквивалентно for(;true;) while(true) while(1)

Пример:

    for (int i = 0; i < 5; ++i)

    {

              cout << i << "\n";

    }

Вывод:

    0

    1

    2

    3

    4

Это запись цикла равнозначна циклу while со следующей логикой:

    int i = 0;

    while (i < 5)

    {

              cout << i << "\n";

              ++i;

    }

Допустимы и записи вроде:

    for(int kkk = 0;; --kkk){}

 

    for(;;){}

 

    int i = 9;

    for(;;i%=3){}

    for (int i = 1, f = 1; f < 1000 && i < 100; f *= i, ++i){}

 

 

Статичные массивы

Массив — это структура данных, в которой храниться пронумерованные, однотипные данные (в памяти хранятся последовательно).

Статичные массивы, это массивы, размер которых не изменяется во время выполнения программы. Объявляются они также, как и обычные переменные за исключением квадратных скобок [ ] следующих за именем массива, в которых указывается размер массива.

int a[6], b; 

А – массив целых чисел размера 6, b – целочисленная переменная

Обратиться к элементу массива можно через [ ] скобки:

    a[0] = 0;

cin >> a[0];

    cout << a[0];

Массив можно инициализировать с помощью списка. При этом не обязательно указывать размер массива, но если он указан список должен соответствовать размеру массива:

int a[] = {3, 4, 5}, b[2] = {0, 1};

Для создания двумерного массива (добавления измерения) достаточно добавить ещё одни [ ] скобки:

    int a[2][3] = { {1, 2, 3}, {1, 2, 3} };

    a[1][1] = 0;

Однако в многомерном массиве необходимо указывать размер измерений. При инициализации, в данном случае, в один список было вложено два других списка.

Обрабатываются массивы зачастую с помощью циклов, к примеру ввод массива можно организовать следующем образом:

    int n;

    cin >> n;

    int a[100];

    for (int i = 0; i < n; ++i)

              cin >> a[i];

При этом, в данном примере нельзя было задать массиву а размер n.

 

Динамические массивы

В отличии от статичных массивов размер динамических массивов может изменяться. Одним из динамических массивов является std::vector< тип >. Для его использования необходимо подключить одноименную библиотеку vector. Для объявления вектора требуется написать ключевое слово vector, затем в < > скобках задать тип, хранимых в векторе переменных, после чего задать имя вектору.

    vector <int> a;     // вектор int-ов

В данном случае размер вектора равен нулю. При создании вектора в круглых скобках после его имени можно указать начальный размер вектора, второй необязательный аргумент в скобках указывает чем будут проинициализированы ячейки массива при создании. Для целых чисел ячейки по умолчанию инициализируются нулём.

    vector <int> a(5);          

// вектор int-ов с 5-ю элементами равными нулю { 0, 0, 0, 0, 0 }

vector <int> a(3, -2);     

// вектор int-ов с 3-мя элементами равными минус двум {-2,-2, -2}

Для инициализации вектора списком нужно добавить равно после имени вектора и записать его элементы через запятую в {} скобках.

    vector <int> a = {3, 0, -2}     

// вектор int-ов с 3-мя элементами { 3, 0, -2 }

Доступ к элементам вектора осуществляется также через [ ] скобки.

    a[1] = 5;

    cin >> a[i];

У вектора есть в том числе и методы (встроенные функции вектора), вызываемые через точку после имени вектора:

Push_back – добавляет элемент в конец ветора

Пример:

              vector <int> a;           // {}

              a.push_back(3);                 // { 3 }

              vector <int> a = {9, 0, 9}; // { 9, 0, 9 }

              a.push_back(-3);          // { 9, 0, 9, -3 }

Size – возвращает размер вектора

Пример:

    vector <int> a;           

    int n = a.size()              // n = 0

    vector <int> a = {9, 0, 9};  

    int n = a.size()              // n = 3

Resize – изменяет размер вектора, первым аргументом выступает новый размер вектора, вторым, необязательным, то чем будут инициализироваться новые ячейки при увеличении размера вектора (по умолчанию для чисел это 0)

Пример:

    vector <int> a;           // {}

    a.resize(3);                    // { 0, 0, 0 }

    vector <int> a = {9, 0, 9}; // { 9, 0, 9 }

    a. resize(3)              // { 9, 0, 9 }

vector <int> a = {9, 0, 9};     // { 9, 0, 9 }

    a. resize(2, 6)                // { 9, 0 }

vector <int> a = {9, 0, 9};     // { 9, 0, 9 }

    a. resize(6, 6)                // { 9, 0, 9, 6, 6, 6 }

 

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: