Министерство образования и науки
Российской Федерации
Воронежская государственная технологическая академия
Кафедра математического моделирования
информационных и технологических систем
Программирование на языке Паскаль: массивы
Учебные материалы по курсу «Информатика»
для студентов специальностей
Составители: И. И.Каширская, Н. Д.Писаренко, С. В.Глущенко
Воронеж
2006
Составители: доцент, к. т.н. Н. Д.Писаренко,
ассистент И. И.Каширская
к. т.н. С.В. Глущенко
УДК 681.3.06 (076.5)
Программирование на языке Паскаль: массивы: Учебные материалы по курсу «Информатика» для студентов спец. Сост. И. И.Каширская, Н. Д.Писаренко, С. В.Глущенко. Воронеж, Воронежская государственная технологическая академия, 2006. 28 с.
Массивы
Некоторое количество однотипных данных можно обрабатывать различными способами.
Например, первый способ: запрашивать данные по одному и обрабатывать. Недостаток: на текущий момент доступно только одно текущее значение, для повторной обработки придется запросить все данные повторно.
Второй способ: объявить столько переменных, сколько данных понадобится. Недостаток: обрабатывать все данные надо одинаково, и программа будет содержать повторяющийся набор однотипных действий, отличающихся только именем переменной, хранящей очередное значение.
Поэтому необходима структура, позволяющая хранить однотипные данные и одинаково их обрабатывать (например, описав действия по обработке данных в теле цикла, повторяющегося для всех данных). Такой структурой является массив.
Массив – это структура данных одинакового типа, упорядоченных по номерам. Массив характеризуется именем, размерностью и длиной. Каждому значению (элементу массива) соответствуют индексы, определяющие место элемента в общей последовательности. Ими могут быть значения целого или символьного типа. Размерность массива – количество этих индексов. Длина массива определяется количеством элементов.
Массив может быть одномерным или многомерным. Одномерный массив (линейный) соответствует в математике понятию вектора. Двумерный массив соответствует понятию матрицы. Трехмерный массив можно считать набором матриц или кубом. Массивы большей размерности на практике встречаются редко.
Описание массивов
Нижняя и верхняя границы индекса должны быть значениями или выражениями порядкового типа (целого или символьного).
При описании массива можно использовать:
· либо непосредственное описание типа-массива после имени переменной-массива;
· либо использовать свой идентификатор типа-массива, предварительно описав его в разделе описания типов (создать пользовательский тип).
Описание массива:


Одномерный массив
const N=10;
var A:array [1..N] of real;
или с использованием пользовательского типа:
const N=10;
type TArray= array [1..N] of real;
var A:TArray;
![]()


Двумерный массив
const N=10; M=6;
var A:array [1..M,1..N] of real;
или с использованием пользовательского типа:
const N=10; M=6;
type TArray= array [1..M,1..N] of real;
var A:TArray;


Работа с одномерными массивами
Заполнить массив значениями можно двумя основными способами: поместить в элементы массива заданные значения с помощью оператора присваивания или поместить в элементы массива введенные пользователем значения.
Пример 1
Создать линейный массив, заполнив его нечетными значениями натуральных чисел. Вывести на экран получившийся массив в виде строки.
Решение:
const N=10;
var A:array [1..N] of word;
begin
(* заполнить массив *)
for i:=1 to N do
a[i]:=2*i-1;
(* вывести массив строкой*)
for i:=1 to N do
write(a[i]:5);
writeln;
end.
В вышеприведенном решении заполнение массива и вывод массива на экран разделены. Такой способ и следует использовать при решении задач с массивами: создание массива, обработка массива (в данной задаче нет) и вывод массива.
Для данной конкретной задачи элементы массива можно было сразу заполнять значениями и выводить на экран:
begin
for i:=1 to N do begin
a[i]:=2*i-1;
write(a[i]:5);
end;
writeln;
end.
Пример 2
Создать линейный массив, заполнив его нечетными значениями натуральных чисел. Вывести на экран получившийся массив в виде строки.
Решение:
const N=10;
var A:array [1..N] of word;
begin
(* заполнить массив *)
for i:=1 to N do
a[i]:=2*i-1;
(* вывести массив строкой*)
for i:=1 to N do
write(a[i]:5);
writeln;
end.
Процедуры Break и Continue
Процедура Break досрочно завершает цикл for, while или repeat, в теле которого она вызывается.
Процедура Continue выполняет переход на новую итерацию (повторение) цикла for, while или repeat, в теле которого она вызывается.
Пример 147
Для заданного значения x рассчитать y:
Решение:
var i:integer; x, y, chisl, znam:real;
begin
write(’X= ’);
readln(x);
chisl:=1;
znam:=1;
for i:=1 to N do
if i mod 2 =0
then chisl:=chisl*(x-i)
else znam:=znam*(x+i);
y:=chisl/znam;
writeln(’Y = ’, y:10:2);
end.
Работа с двумерными массивами
Одномерный массив (вектор) имеет вид таблицы из одной строки, ячейки которой заполнены значениями. Рассматривая ДВУМЕРНЫЙ массив, можно провести аналогию с таблицей, имеющей несколько строк и столбцов. Если отдельный элемент одномерного массива мы обозначали именем массива с индексом (А[i]), то для обозначения элемента двумерного массива (матрицы) потребуются два индекса: один - для указания номера строки, другой - для указания номера столбца, на пересечении которых находится нужный элемент: А[i, j]. Двумерные массивы описываются сходно с массивами одномерными:
Const Str=4; |
Stolb=5; |
Var A:Array[1..Str,1..Stolb] of Real; |
Заполнение двумерных массивов данными и вывод данных из двумерного массива осуществляется с использованием двух циклов, один из которых вложен в другой. Внутренний цикл перебирает индексы столбцов, наружный - индексы строк:
FOR i:=1 TO Str DO |
FOR j:=1 TO Stlb DO Readln(A[i, j]); |
............... |
FOR i:=1 TO Str DO |
FOR j:=1 TO Stlb DO Writeln('A[',i,',',j,']=',A[i]:6:2); |
здесь Str - число строк, Stlb - число столбцов.
Контрольные задания
1. Ввести число 1 ≤ k ≤ 7 и поменять местами элементы k-й строки и k-го столбца матрицы А(7, 7).
2. Из тех элементов матрицы В(10, 10), чей остаток от деления на 7 равен 3, образовать одномерный массив и вывести его.
3. Найти максимальный и минимальный элементы матрицы А(7, 7), поменять их местами. Измененнную матрицу вывести.
4. Возвести в квадрат элементы главной и побочной диагоналей матрицы А(11, 11), находящихся ниже точки их пересечения.
5. Из четных и нечетных элементов матрицы А(9, 9) составить два одномерных массива: В – из четных, С – из нечетных.
6. Из элементов нечетных столбцов матрицы А(5, 5) составить одномерный массив и вывести его.
7. Подсчитать количество элементов матрицы А(5, 5), лежащих ниже побочной диагонали и попавших в интервал [-5, 5]
8. Посчитать количество нечетных элементов матрицы А(40, 40), лежащих в интервале [0, 122]
9. Найти среднее арифметическое элементов матрицы D (4, 4), не лежащих на побочной диагонали.
10. Посчитать количество элементов матрицы А(5, 5), без остатка делящихся на 9 и лежащих ниже главной диагонали.
11. Найти произведение элементов матрицы А(5, 5), без остатка делящихся на 3, и сумму четных элементов матрицы.
12. Найти максимальный элемент матрицы А(9, 9) из элементов, лежащих выше главной диагонали.
13. В матрице А(50, 50) поменять местами элементы главной и побочной диагонали.
14. Найти среднее арифметическое отрицательных элементов матрицы А(7, 7).
15. Если в матрице А(9, 9) на главной диагонали отсутствуют отрицательные элементы, то вывести побочную диагональ.
16. Элементы матрицы А(9, 9), лежащие выше главной и ниже побочной диагонали, обнулить, а элементы лежащие ниже главной и выше побочной диагонали вывести.
17. Найти максимальный элемент матрицы А(10, 10) и все элементы строки, в которой он находится, возвести в квадрат.
18. Посчитать в матрице А(20, 20) целого типа количество элементов без остатка делящихся на 3, лежащих ниже побочной диагонали.
19. Каждый элемент главной диагонали матрицы А(9, 9) (кроме элементов 1-й и 9-й строк) заменить произведением элементов той же строки, лежащих симметрично побочной диагонали.
20. Для матрицы А(9, 9) ввести целые числа 1 ≤ k ≤ 9 и 1 ≤ l ≤ 9 и скалярно умножить k-ю строку на l-й столбец. Результаты вывести.
21. Расставить по возрастанию элементы главной диагонали матрицы А(7, 7).
22. Дана матрица К(5,5). Упорядочить ее строки по неубыванию.
23. Дан вектор С(10). Выполнить сортировку элементов вектора, записав в него сначала положительные и нулевые элементы, а затем отрицательные. Порядок следования элементов в векторе сохранить.
24. Дана матрица А(5,5).Поделить каждую строку матрицы на ее первый элемент. Из первой строки вычесть каждую последующую. Результатами вычитания заменить элементы вычитаемой строки.
25. Дана целочисленная матрица Р(3,4).Определить количество элементов, каждый из которых больше суммы остальных элементов своего столбца.
26. Выполнить циклический сдвиг элементов вектора А(8) на три позиции вправо.
Библиографический список
1. И., А. Программирование в среде Turbo Pascal 7.0. – Киев: ВЕК+, 2000.
2. В. Turbo Pascal 7.0. Начальный курс. – М.: Нолидж, 2000.
3. В. Turbo Pascal 7.0. Практика программирования. – М.: Нолидж, 2001.
4. Б. Turbo Pascal для школьников. Финансы и статистика, 2004.
Оглавление
Массивы 3
Описание массивов 3
Одномерный массив 4
Двумерный массив 4
Работа с одномерными массивами 5
Процедуры Break и Continue 6
Работа с двумерными массивами 7
Контрольные задания 8
Библиографический список 10
Основные порталы (построено редакторами)
