- •Лекция 1 Создание консольного приложения
- •2. Консоль. Построение консольного проекта
- •3. Запуск приложения
- •4. Сохранение и редактирование проекта
- •Лекция 2
- •4. Функции форматированного ввода и вывода
- •4.1. Функция форматированного ввода с клавиатуры
- •4.2. Функция форматированного вывода на экран
- •5. Математические функции
- •Лекция 3 Линейные вычислительные процессы
- •1. Алгоритм. Управляющие структуры
- •2. Линейные вычислительные алгоритмы
- •2.1. Условный оператор if()
- •2.2. Условное выражение
- •2.3. Оператор выбора switch()
- •Лекция 5 Программирование разветвляющихся вычислительных процессов
- •Лекция 6 Циклические вычислительные процессы.
- •1. Типы циклов
- •3. Операторы безусловного перехода
- •Лекция 7 Вычисление последовательностей
- •4. Примеры вычисления последовательностей
- •5. Структура алгоритмов вычисления рекуррентных последовательностей
- •Лекция 8 Одномерные массивы
- •1. Массивы
- •1.1. Примеры программ обработки одномерных массивов
- •1.2. Сортировка выбором
- •1.3. Сортировка простыми вставками
- •Лекция 10 Двухмерные массивы
- •1. Двухмерные массивы
- •Лекция 11 Алгоритмы матричной алгебры
- •1. Алгоритмы матричной алгебры
- •Лекция 12 Динамические массивы
- •1. Память компьютера. Адресное пространство
- •2. Динамическая память
- •3. Адреса и указатели
- •4. Указатели и массивы. Динамические массивы
- •5. Проблемы, связанные с указателями
- •6. Поразрядные операции
- •1.2. Способы объявления и обращения к элементам двухмерных массивов
- •Лекция 14 Символы и строки
- •1. Символьный тип данных
- •2. Строки
- •Лекция 15 Структуры
- •1. Понятие структуры
- •2. Определение нового имени типа
- •3. Массивы структур. Указатели на структуры
- •3.1. Определение статического массива структур
- •3.1. Определение динамического массива из n структур
- •Лекция 16 Файлы
- •1. Потоковый ввод-вывод данных
- •3. Понятие файла. Функции работы с файлами
- •Лекция 17 Файлы
- •Лекция 18 Функции пользователя
- •I. Приёмы построения алгоритмов
- •2. Понятие функции
- •2.1. Определение функции
- •2.2. Область видимости переменных
- •2.3. Параметры функции
- •2.4. Описание функции
- •2.5. Организация вызова функции
- •2.5. Передача параметров в функцию
- •3. Рекурсия
- •Лекция 20 Нахождение приближенного значения корня нелинейного уравнения
- •На отрезке [a;b] с заданной точностью eps
- •1.1. Метод дихотомии (половинного деления)
- •1.2. Метод хорд
- •1.3. Метод касательных (Ньютона)
- •Лекция 22 Объектно-ориентированное программирование
- •Полиморфизм – это свойство класса, позволяющее определить одно и то же по имени, но разное по смыслу действие. Основные этапы ооп:
- •Уточнённое имя принадлежит классу (т.Е. Компонентной) функции
- •Лекция 23 Объектно-ориентированное программирование
- •1. Конструкторы и деструкторы
- •1.2. Определение компонентных функций
- •Лекция 25 Объектно-ориентированное программирование
- •1. Свойства классов
- •1.1. Наследование классов
- •1.2. Полиморфизм
- •Библиографический список
5. Структура алгоритмов вычисления рекуррентных последовательностей
Как видно из решения задач, приведенные алгоритмы имеют общую структуру. Алгоритмы решения задач на нахождение элементов и/или суммы элементов последовательности можно записать в следующем виде:
задать начальное значение номера элемента i = i0
задать начальное значение элемента a = a0
задать начальное значение суммы элементов s = a0
цикл <условие_продолжения_вычислений>
i =i+1
a = f(a,a0)
печать a (если нужно)
s = s+a (если нужно)
все_цикл
печать s
Здесь f(a,a0) – это функция, описывающая зависимость последующего элемента последовательности от предыдущего.
Лекция 8 Одномерные массивы
Цели:
-
познакомиться с понятием одномерного массива и способом его объявления;
-
освоить методику написания алгоритмов с использованием одномерных массивов, перевода этих алгоритмов на язык программирования С++ и разработки соответствующего проекта в среде Visual C++ 6.0;
-
познакомиться с некоторыми алгоритмами сортировки массивов.
1. Массивы
Математическим понятием, которое привело к появлению в языках программирования понятия «массив», являются матрица и ее частный случай – вектор. Таким образом, массив – совокупность элементов любого допустимого в языке программирования одного типа данных. Для объявления массива необходимо указать:
-
тип элементов массива;
-
имя массива;
-
его размерность, т.е. число индексов, необходимое для обозначения конкретного элемента.
Каждый массив может разбиваться на несколько подмассивов, которые так же можно разбивать и т.д. Количество таких разбиений, или измерений, называется размерностью массива. Количество измерений массива не ограничено в языке С++. Это понятие необходимо отличать от понятия размера массива, определяемого как количество его элементов. При объявлении массива в каждом измерении указывается количество элементов этого измерения.
Объявление одномерного массива имеет вид
<тип_элементов_массива> <имя_массива> [<количество_элементов_в_массиве>];
Количество элементов в массиве указывается либо при помощи числовой константы, либо при помощи макроопределения, например:
int a[4];
Здесь каждый элемент массива будет целым числом, a – имя массива, число в квадратных скобках указывает количество элементов массива. С точки зрения математики, массив a – вектор, имеющий четыре координаты.
При объявлении массива выделяется участок оперативной памяти, где будут располагаться элементы массива. В оперативной памяти элементы массива размещаются последовательно, друг за другом:
-
-15
98
1
0,56
Каждый элемент массива определяется именем массива и своим порядковым номером, который называется индексом и записывается после имени массива в квадратных скобках. Количество индексов, указанных после имени массива при обращении к элементам массива, должно быть равно количеству измерений в массиве. При объявлении массива выделяется участок оперативной памяти для размещения его элементов. Имя массива автоматически содержит адрес начала участка памяти, выделенной для размещения элементов массива, т.е. имя массива – это точка отсчета с точки зрения адресов элементов в памяти. За точку отсчета всегда принимают число 0, поэтому индексу первого элемента массива во внутреннем представлении соответствует число 0, индексу второго – число 1 и т.д. Индекс элемента массива определяет смещение (приращение) адреса заданного элемента массива относительно адреса нулевого элемента массива. Таким образом, нумерация элементов массива всегда начинается с нуля, т.е. индексы элементов изменяются от 0 до N-1, где N – количество элементов в данном измерении.
Размер массива при объявлении может не указываться в случае инициализации значений элементов, например,
float f[]={2.5,5,7.895,56};
Здесь создается массив из четырех элементов со значениями:
f[0]=2.5, f[1]=5, f[2]=7.895, f[3]=56
Шаблон программы, работающей с одномерным массивом можно записать следующим образом:
# include…
#define…
int main ( )
{
объявление переменных массива
заполнение массива (ввод или формирование по
заданному закону его элементов)
обработка массива
вывод результата
вывод массива
return 1;
}
В языке C++ операции над массивами не определены. Применить какую-либо библиотечную функцию для ввода или вывода всего массива нет возможности. Чтобы ввести или вывести массив, нужно вводить или выводить отдельно сначала первый элемент массива, затем второй, третий и т.д. Таким образом, получается, что ввод-вывод массива – процесс ввода-вывода отдельного элемента, который повторяется несколько раз и зависит от некоторой величины, которая является индексом элемента массива. Следовательно, для ввода-вывода массива кроме функций scanf() и printf() нужно использовать цикл с параметром for(). Из выше сказанного следует, что решение задач с использованием массивов предполагает использ-ование циклических структур.
В виде алгоритма и программы отдельно опишем ввод одномерного массива с клавиатуры и его вывод на экран:
Алгоритм |
Программа |
объявление вещ: а[4], цел: i // ввод массива для i=0 до 4-1 шаг 1 // в цикле изменяется номер i //элемента массива // затем этот элемент вводится с клавиатуры ввод а[i] все_для i
обработка массива //решение задачи … для i=0 до 4-1 шаг 1 // в цикле изменяется номер i // элемента массива // затем этот элемент выводится на экран вывод a[i] все_для i
|
#include "stdio.h" #define N 4 int main ( ) { float а[N]; int i; // ввод массива с клавиатуры for ( i=0; i<=N-1; i++ ) { printf ("A[%i]= " ,i ); scanf ("%f", &а[i]); } // обработка массива … // вывод массива на экран for (i=0; i<=N-1; i++) printf ("%.3f", а[i]); printf("\n"); return 1; } |
Примечание. В алгоритме и программе переменная i обозначает номер текущего элемента массива. В программе количество элементов массива задается при помощи макропеременной.