Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции по С++.doc
Скачиваний:
34
Добавлен:
15.12.2018
Размер:
2.31 Mб
Скачать

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. Массивы

Математическим понятием, которое привело к появлению в языках программирования понятия «массив», являются матрица и ее частный случай – вектор. Таким образом, массив – совокупность элементов любого допустимого в языке программирования одного типа данных. Для объявления массива необходимо указать:

    1. тип элементов массива;

    2. имя массива;

    3. его размерность, т.е. число индексов, необходимое для обозначения конкретного элемента.

Каждый массив может разбиваться на несколько подмассивов, которые так же можно разбивать и т.д. Количество таких разбиений, или измерений, называется размерностью массива. Количество измерений массива не ограничено в языке С++. Это понятие необходимо отличать от понятия размера массива, определяемого как количество его элементов. При объявлении массива в каждом измерении указывается количество элементов этого измерения.

Объявление одномерного массива имеет вид

<тип_элементов_массива> <имя_массива> [<количество_элементов_в_массиве>];

Количество элементов в массиве указывается либо при помощи числовой константы, либо при помощи макроопределения, например:

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 обозначает номер текущего элемента массива. В программе количество элементов массива задается при помощи макропеременной.