- •Конспект лекций по дисциплине «алгоритмизация и программирование»
- •Лекция № 1. Основные понятия
- •Использование ключевого слова using
- •2: Int main()
- •4: Using std::cout; // Вместо этих двух строк можно записать
- •5: Using std::endl; /* одну: using namespace std;*/
- •20: Return 0;
- •Комментарии
- •Функции
- •Переменные
- •Лекция № 3. Операторы
- •Математические операторы
- •Математические функции
- •Логические операторы
- •Операторы отношения
- •Операторы переходов по условию
- •Лекция № 4. Циклы
- •Оператор goto
- •Оператор цикла while
- •Операторы break и continue
- •Оператор цикла do..While
- •Оператор цикла for
- •Int main ()
- •Лекция № 5. Массивы
- •Одномерные массивы
- •Int main()
- •Многомерные массивы
- •Массивы символов (строки)
- •Int main()
- •Лекция № 6. Некоторые простые алгоритмы
- •Поиск максимального (или минимального) числа из выборки чисел
- •Int main()
- •Пузырьковая сортировка (bubble sort)
- •Void exch(double &a, double &b)
- •Лекция № 7. Численное решение уравнений
- •Теоретические основы
- •Метод простого перебора
- •Int RootSearch (double p[], int n, double a, double b, double dx);
- •Int main ()
- •Int RootSearch (double p[], int n, double a, double b, double dx)
- •Метод половинного деления
- •Метод Ньютона-Рафсона
- •Лекция № 8. Основы объектно-ориентированного программирования
- •Введение
- •Void Meow();
- •Закрытые и открытые члены класса
- •Void Meow();
- •Int main()
- •Void Meow();
- •Лекция № 9. Конструкторы и деструкторы
- •Определение
- •Int Weight;
- •Файлы заголовков
- •Встраиваемые функции
- •Лекция № 10. Классы, содержащие другие классы как данные-члены
- •Сложные классы
- •Структуры
-
Оператор цикла do..While
Рис. 4.2. Обозначение цикла do..while на блок-схеме алгоритма программы
Вполне возможен вариант, когда тело цикла while вовсе не будет выполнено. Оператор цикла while проверяет выражение условия цикла до того, как приступит к выполнению операторов тела цикла, и если условие ложно с самого начала, то тело цикла будет пропущено.
Цикл do..while сначала выполняет тело цикла, а условие продолжения проверяет потом. Это гарантирует выполнение операторов цикла, по крайней мере, один раз. Оператор do..while имеет следующий синтаксис:
do
оператор;
while (условие);
Пример:
// считать до 10
int x=0;
do
cout << “x: “ <<x++;
while (x<10);
-
Оператор цикла for
Рис. 4.3. Обозначение цикла c заданным числом повторений
Синтаксис этого оператора следующий:
for (инициализация; условие; приращение)
оператор;
Оператор инициализация устанавливает начальное значение счетчика. Следующий оператор: условие – это любое выражение языка С++, результат которого проверяется на каждом цикле. Если результат этого выражения является истинным, то выполняется тело цикла, а затем, после изменения счетчика на величину приращения (по умолчанию – увеличение на единицу), действия повторяются.
Пример:
// вывести Hello десять раз
for (int i=0; i<10; i++)
cout << “Hello! “;
Цикл, организованный в теле другого цикла, называется вложенным. В этом случае внутренний цикл полностью выполняется на каждой итерации внешнего. Листинг 4.3 демонстрирует заполнение элементов матрицы случайными числами с помощью вложенного цикла for.
Листинг 4.3. Вложенный цикл for
#include <iostream>
#define rnd (rand()/32768.0) /* директива #define задает переменную rnd,
которая изменяется случайным образом в диапазоне от 0 до 1 */
Int main ()
{
using std::cout;
using std::cin;
using std::endl;
int i, j, n, m;
float a[50][50];
cout<<"Input n: ";
cin>>n;
cout<<"Input m: ";
cin>>m;
cout<<endl;
cout<<"Random Array \n";
for (i=0; i<n; i++)
{
cout<<endl;
for (j=0; j<m; j++)
{
a[i][j]=rnd*10-5;
cout<<a[i][j]<<" \t";
}
}
char response;
cin>>response;
return 0;
}
Лекция № 5. Массивы
-
Одномерные массивы
Массив (array) – это набор элементов, способных хранить данные одного типа. Каждый элемент хранения называется элементом массива. Объявляя массив, необходимо сначала указать тип хранимых данных, а затем имя массива и его размер. Размером массива называется количество его элементов, указываемое в квадратных скобках.
Пример 5.1. long LongArray[25];
В примере 5.1. объявлен массив с именем LongArray из 25-ти элементов типа long. Поскольку каждой переменной типа long необходимы четыре байта, весь объявленный набор займет непрерывную область памяти размером 100 байт.
К каждому из элементов можно обратиться по его номеру, расположенному в квадратных скобках после имени массива. Номера элементов массива начинаются с нуля. Следовательно, первым элементом массива LongArray будет LongArray[0], вторым – LongArray[1], последним – LongArray[24].
При записи значения в элемент массива компилятор вычисляет необходимую область памяти на основании размера типа элемента и размера массива. Если необходимо записать значение в переменную LongArray[5], являющуюся шестым элементом массива, компилятор умножает индекс 5 на размер переменной (в данном случае 4 байта). Затем текущий указатель смещается на 20 байтов от начального адреса массива, и записывается новое значение.
Если попробовать записать значение в элемент LongArray[50], то компилятор, проигнорировав тот факт, что такого элемента не существует, вычислит смещение от начала массива (200 байт), а затем запишет значение по этому адресу. Здесь могут оказаться другие данные, и запись нового значения может иметь непредсказуемые последствия.
Небольшой массив переменных встроенных типов можно инициализировать при объявлении. Для этого после имени массива помещают знак равенства и заключенный в фигурные скобки список значений, отделяемых запятой. Например:
int IntegerArray[5] = {10, 20, 30, 40, 50};
Если размер массива не указан, но список значений присутствует, то будет создан и инициализирован массив достаточного размера, чтобы содержать все перечисленные значения. Таким образом, эта строка аналогична предыдущей:
int IntegerArray[ ] = {10, 20, 30, 40, 50};
Нельзя инициализировать количество элементов, превосходящее объявленный размер массива:
int IntegerArray[5] = {10, 20, 30, 40, 50, 60};
Такая строка приведет к ошибке во время компиляции, поскольку объявлен массив для пяти элементов, а инициализировать пытались шесть. Но следующая запись вполне допустима:
int IntegerArray[5] = {10, 20};
В данном случае объявлен массив из пяти элементов, а инициализированы только два: IntegerArray[0] и IntegerArray[1].
Массивы могут иметь любые имена, допустимые для переменных. Имена массивов и переменных не могут совпадать в пределах одной области видимости. При объявлении количества элементов можно использовать не только константу, но и перечисление. Такой подход облегчает контроль над количеством элементов всех массивов, позволяя указать их размеры в едином месте.
Листинг 5.1. Задание размера массива с помощью перечислений
#include <iostream>