Опубликован: 09.11.2006 | Уровень: для всех | Доступ: свободно
Лекция 8:

Данные, их типы, структуры и обработка

< Лекция 7 || Лекция 8: 123 || Лекция 9 >

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

Одномерный массив (вектор, ряд, линейная таблица) – это совокупность значений некоторого простого типа (целого, вещественного, символьного, текстового или логического типа), перенумерованных в каком-то порядке и имеющих общее имя. Для выделения конкретного элемента массива необходимо указать его порядковый номер в этом ряду.

Пример. Последовательность чисел 89, –65, 9, 0, –1.7 может образовывать одномерный вещественный массив размерности 5, например, с именем x вида: x[1] = 89, x[2] = –65, x[3] = 9, x[4] = 0, x[5] = –1.7.

Значение порядкового номера элемента массива называется индексом элемента.

Пример. Можно ссылаться на элемент х[4], элемент х[i], элемент x[4+j] массива х. При текущих значениях переменных i = 2 и j = 1 эти индексы определяют, соответственно, 4-й, 2-й и 5-й элементы массива.

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

Пример. В ШАЯ – это слово "таб", после которого приводится имя массива и в квадратных скобках его размерность, например, для одномерного массива – в виде [m:n], где m – номер первого элемента массива (часто 1), n – номер последнего элемента (шаг перебора элементов равен 1). На Паскале имеется соответствующее слово array. Вышеуказанная последовательность из пяти чисел описывается на ШАЯ в виде: вещ таб x[1:7], а на Паскале (в рамках рассматриваемого нами его ядра) необходимо указывать предельную величину размерности:

x: array [1..100] of real;.

Двумерный массив ( матрица, прямоугольная таблица) – совокупность одномерных векторов, рассматриваемых либо "горизонтально" (векторов-строк), либо "вертикально" (векторов-столбцов) и имеющих одинаковую размерность, одинаковый тип и общее имя.

Матрицы, как и векторы, должны быть в алгоритме описаны служебным словом (например, таб или array ), но в отличие от вектора, матрица имеет описание двух индексов, разделяемых запятыми: первый определяет начальное и конечное значение номеров строк, а второй – столбцов.

Пример. Если матрица x описана в виде

x: array [1..5, 1..3] of real; ,

то определяется таблица из 5 строк (от 1-й до 5-й строки) и 3 столбцов (от 1-го до 3-го столбца) вида:

(столбец 1) (столбец 2) (столбец 3)
x11 x12 х13 (строка 1)
x21 x22 х23 (строка 2)
х31 х32 х33 (строка 3)
х41 x42 х43 (строка 4)
х51 x52 х53 (строка 5)

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

Пример. Элемент х[3,2] – элемент на пересечении 3-й строки и 2-го столбца массива х.

Рассмотрим ряд задач, решаемых с помощью массивов.

Пример. Составим алгоритм (программу) нахождения суммы и произведения всех элементов одномерного массива. Метод решения: начиная с нулевого значения суммы, добавляем поочередно новый элемент ряда и находим значение искомой суммы; начиная с начального, единичного произведения, находим искомое произведение, умножая текущее значение произведения на очередной элемент ряда. Алгоритм (программа) имеет вид

Program SPM1;
Uses Crt;
Var x: array [1..100] of real;
	n, i: integer;
	s, р: real;
Begin
	ClrScr;
	WriteLn('Введите размерность массива :'); { приглашение к вводу входного параметра }
	ReadLn(n); { ввод входного параметра }
	WriteLn('Введите элементы массива:'); { приглашение к вводу массива }
	for i:=1 to n do { цикл ввода элементов массива }
		begin
			write('x[',i,']='); { приглашение к вводу текущего элемента массива}
			readln(x[i]) { ввод текущего элемента массива }
		end;
	s:=0; { начальное значение суммы – нуль }
	p:=1; { начальное значение произведение – единица [u1]}
	for i:=1 to n do { цикл вычисления суммы и произведения }
		begin
			s:=s+x[i]; { добавление к сумме очередного слагаемого }
			p:=p*x[i] { домножение произведения на очередной множитель }
		end;
	WriteLn('Полученная сумма равна ', s: 3:3); { вывод полученной суммы }
	WriteLn('Полученное произведение равно ', p: 3:3); { вывод полученного произведения }
End.

Пример. Составим алгоритм вычисления суммы бесконечного ряда чисел а[1], а[2], а[3], ... с точностью е, при условии, что точность всегда достигается для номера члена ряда не более 1000000 (это "неестественное" ограничение нужно для того, чтобы в Паскале было проще объявить размерность массива а ). Метод решения: сравниваем две суммы – одна сумма была получена на предыдущем шаге суммирования, а вторая – добавлением к ней очередного слагаемого (то есть их разность и равна очередному добавленному элементу ряда ); процесс суммирования продолжается до тех пор, пока разность по модулю не станет меньше точности суммирования. Алгоритм (программа) имеет вид

Program SumND;
Uses Crt;
Var a: array [1..1000000] of real;
	i: integer;
	e, p, s: real;
begin
	ClrScr;
	WriteLn('Введите точность :'); { приглашение к вводу входного параметра }
	ReadLn(e); { ввод входного параметра }
	i:=1; { начальный номер члена ряда }
	WriteLn(‘введите первые два элемента :’); { приглашение к вводу входных параметров }
	ReadLn(a[1], a[2]); { ввод входных параметров }
	р:=а[1]; { запоминаем начальную сумму – сумму одного элемента }
	s:=р+a[2]; { запоминаем начальную следующую сумму – сумму двух элементов }
	while (abs(s–p)>e) do { цикл суммирования, пока слагаемые влияют на сумму }
		begin
			i:=i+1; { переход к следующему элементу }
			p:=s; { "старую" сумму заменяем "новой", полученной добавлением еще одного }
			s:=s+а[i]; { вычисляем "новую" сумму }
			WriteLn(‘введите a[‘, i, ‘]=’); { приглашение к вводу очередного элемента ряда }
			ReadLn(a[i]); { ввод очередного элемента ряда }
		end;
	WriteLn('Полученная сумма равна ', s: 3:3); { вывод результата }
End.
< Лекция 7 || Лекция 8: 123 || Лекция 9 >
Ирина Рыбакова
Ирина Рыбакова
тест
Анастасия Тимофеева
Анастасия Тимофеева
Как посмотреть свои результаты тестов и экзамена после того, как получил сертификат по курсу.
Алексей Бойко
Алексей Бойко
Россия, Курган, Курганский государственный университет, 1999