П рограммирование на языке Pascal: обработка массивов
Лабораторная работа «Программирование на языке Pascal:
обработка массивов»
Цель работы: овладение практическими навыками работы с массивами, особенностями их ввода и вывода, приобретение дальнейших навыков по организации программ циклической структуры с использованием приемов программирования.
Теоретическая часть
ОДНОМЕРНЫЕ И ДВУМЕРНЫЕ МАССИВЫ (ТАБЛИЦЫ)
Массив - это пронумерованная последовательность величин одинакового типа, обозначаемая одним именем. Элементы массива располагаются в последовательных ячейках памяти, обозначаются именем массива и индексом. Каждое из значений, составляющих массив, называется его компонентой (или элементом массива).
Массив данных в программе рассматривается как переменная структурированного типа. Массиву присваивается имя, посредством которого можно ссылаться как на массив данных в целом, так и на любую из его компонент.
Переменные, представляющие компоненты массивов, называются переменными с индексами в отличие от простых переменных, представляющих в программе элементарные данные. Индекс в обозначении компонент массивов может быть константой, переменной или выражением порядкового типа.
Если за каждым элементом массива закреплен только один его порядковый номер, то такой массив называется линейным. Вообще количество индексов элементов массива определяет размерность массива. По этом признаку массивы делятся на одномерные (линейные), двумерные, трёхмерные и т.д.
Для размещения массива в памяти ЭВМ отводится поле памяти, размер которого определяется типом, длиной и количеством компонент массива. В языке Pascal эта информация задается в разделе описаний.
Массив описывается так:
имя массива : Array [начальное значение индекса .. конечное значение индекса] Of базовый тип;
Например,
Var B : Array [1..5] Of Real, R : Array [1..34] Of Char;
- описывается массив В, состоящий из 5 элементов и символьный массив R, состоящий из 34 элементов. Для массива В будет выделено 5*6=30 байт памяти, для массива R - 1*34=34 байта памяти.
Базовый тип элементов массива может быть любым, за исключением файлового.
Заполнить массив можно следующим образом:
с помощью оператора присваивания. Этот способ заполнения элементов массива особенно удобен, когда между элементами существует какая-либо зависимость, например, арифметическая или геометрическая прогрессии, или элементы связаны между собой реккурентным соотношением.
Пример 1. Заполнить одномерный массив с помощью датчика случайных чисел таким образом, чтобы все его элементы были различны.
Program Create;
Type Mas = Array[1..100] Of Integer;
Var A : Mas; I, J, N : Byte; Log : Boolean;
Begin
Write(''); ReadLn(N);
randomize; A[1] := -32768 + random(65535);
For I := 2 To N Do
Begin
Log := True;
Repeat
A[i] := -32768 + random(65535); J := 1;
While Log and (j <= i - 1) Do
begin Log := a[i] <> a[j]; j := j + 1 End
Until Log
End;
For i := 1 to N Do Write(a[i]:7); writeln
End.
2) ввод значений элементов массива с клавиатуры используется обычно тогда, когда между элементами не наблюдается никакой зависимости. Например, последовательность чисел 1, 2, -5, 6, -111, 0 может быть введена в память следующим образом:
Program Vvod;
Var N, I : Integer;
A : Array [1..20] Of Integer;
Begin
Write('Введите количество элементов массива ');
ReadLn(N);
FOR I := 1 TO N DO
Begin
Write('Введите A[', I, '] ');
ReadLn(A[I])
End;
End.
Над элементами массивами чаще всего выполняются такие действия, как
а) поиск значений;
б) сортировка элементов в порядке возрастания или убывания;
в) подсчет элементов в массиве, удовлетворяющих заданному условию.
Сумму элементов массива можно подсчитать по формуле S=S+A[I] первоначально задав S=0. Количество элементов массива можно подсчитать по формуле К=К+1, первоначально задав К=0. Произведение элементов массива можно подсчитать по формуле P = P * A[I], первоначально задав P = 1.
Если два массива являются массивами эквивалентных типов, то возможно присваивание одного массива другому. При этом все компоненты присваиваемого массива копируются в тот массив, которому присваивается значение. Типы массивов будут эквивалентными, если эти массивы описываются совместно или описываются идентификатором одного и того же типа. Например, в описании
Type Massiv = Array[1..10] Of Real;
Var A, B : Massiv; C, D : Array[1..10] Of Real; E : Array[1..10] Of Real;
типы переменных A, B эквивалентны, и поэтому данные переменные совместимы по присваиванию; тип переменных C, D также один и тот же, и поэтому данные переменные также совместны по присваиванию. Но тип переменных C, D не эквивалентен типам переменных A, B, E, поэтому, например, A и D не совместны по присваиванию. Эти особенности необходимо учитывать при работе с массивами.
При решении практических задач часто приходится иметь дело с различными таблицами данных, математическим эквивалентом которых служат матрицы. Такой способ организации данных, при котором каждый элемент определяется номером строки и номером столбца, на пересечении которых он расположен, называется двумерным массивом или таблицей.
Например, данные о планетах Солнечной системы представлены следующей таблицей:
Планета | Расст. До Солнца | Относ. обьем | Относ. масса |
Меркурий | 57.9 | 0.06 | 0.05 |
Венера | 108.2 | 0.92 | 0.81 |
Земля | 149.6 | 1.00 | 1.00 |
Марс | 227.9 | 0.15 | 0.11 |
Юпитер | 978.3 | 1345.00 | 318.40 |
Сатурн | 1429.3 | 767.00 | 95.20 |
Их можно занести в память компьютера, используя понятие двумерного массива. Положение элемента в массиве определяется двумя индексами. Они показывают номер строки и номер столбца. Индексы разделяются запятой. Например: A[7, 6], D[56, 47].
Заполняется двумерный массив аналогично одномерному: с клавиатуры, с помощью оператора присваивания.
При описании массива задается требуемый объем памяти под двумерный массив, указываются имя массива и в квадратных скобках диапазоны изменения индексов.
При выполнении инженерных и математических расчетов часто используются переменные более чем с двумя индексами. При решении задач на ЭВМ такие переменные представляются как компоненты соответственно трех-, четырехмерных массивов и т.д.
Однако описание массива в виде многомерной структуры делается лишь из соображений удобства программирования как результат стремления наиболее точно воспроизвести в программе объективно существующие связи между элементами данных решаемой задачи. Что же касается образа массива в памяти ЭВМ, то как одномерные, так и многомерные массивы хранятся в виде линейной последовательности своих компонент, и принципиальной разницы между одномерными и многомерными массивами в памяти ЭВМ нет. Однако порядок, в котором запоминаются элементы многомерных массивов, важно себе представлять. В большинстве алгоритмических языков реализуется общее правило, устанавливающее порядок хранения в памяти элементов массивов: элементы многомерных массивов хранятся в памяти в последовательности, соответствующей более частому изменению младших индексов.
Вопросы для самоконтроля.
Дать определение массива.
Каким образом описывают массивы?
Как происходит обращение к элементам массива?
Какие операции можно использовать при работе с символьными типами?
Ограниченно ли количество измерений массивов в языке Паскаль?
Укажите особенности ввода и вывода массивов?
Какие данные могут выступать в качестве индексов и элементов массива?
В чем состоит особенность использования приемов программирования при обработке массивов?
В чем состоит особенность организации цикла при обработке массива?
Укажите основные правила организации вложенных циклов.
Какие способы задания исходных значений элементам массивов вам известны?
Как организовать вывод матрицы прямоугольной таблицей?
Может ли левая граница индексов массива быть положительной?
Как осуществляется доступ к каждому элементу массива?
Может ли индекс быть выражением вещественного типа?
Какой массив называется п-мерным?
Существуют ли ограничения на размерность массива?
Практическая часть
1. Изучить:
способы описания массивов на языке программирования;
способы ввода и вывода массивов;
реализацию приемов программирования для накопления суммы, произведения, количества элементов, определения порядкового номера, нахождения наибольшего и наименьшего элемента в массиве, запоминания результатов.
2. Разработать алгоритм и схему решения в соответствии с заданием.
3. Составить программу решения задачи.
4. Подготовить тест для проверки программы.
Содержание отчета
1. Номер и тема лабораторной работы.
2. Цель выполнения работы.
3. Постановка задачи и схема алгоритма.
4. Программа на языке Паскаль.
5. Исходные данные и результаты вычислений.
6. Анализ полученных результатов и выводы по работе.
Задание №1. Работа с одномерными массивами
Пример программы: Найти сумму и количество четных чисел массива x1, x2, ... , xn, где n 30. Проверить правильность работы программы на тесте при n=3 и элементах массива 2, 5, 4.
Программа имеет вид:
PROGRAM PR 4_1;
VAR I, N, S, K: INTEGER;
X: ARRAY [ 1..30 ] OF INTEGER;
BEGIN
WRITELN(‘Введите N’);
READ(N);
WRITELN(‘Введите элемента массива’);
FOR I: =1 TO N DO READ(X[ I ]);
{Вычисление суммы и количества элементов}
S: =0; K: =0;
FOR I: =1 TO N DO
IF NOT ODD(X[ I ]) THEN
BEGIN
S: =S+X[ I ];
K: =K+1;
END;
WRITELN(‘S=’, S, ‘K=’, K);
READLN;
END.
Блок-схема алгоритма

Варианты задания №1.
В массиве из 15 целых чисел найти наибольший элемент и поменять его местами с первым элементом.
Вычислить сумму и количество элементов массива вещественных чисел.
Вывести на экран дисплея порядковые номера нечетных элементов массива целых чисел.
Вычислить среднее арифметическое массива вещественных чисел.
Найти минимальный элемент массива и его порядковый номер.
В массиве вещественных чисел найти количество отрицательных элементов.
Найти сумму чисел кратных трем в массиве целых чисел.
В массиве вещественных чисел найти произведение элементов, стоящих на четных позициях.
Найти количество отрицательных элементов массива А.
Найти порядковый номер максимального элемента массива вещественных чисел.
Вывести на экран дисплея положительные элементы массива и найти их количество.
Вывести на экран дисплея номера элементов массива, удовлетворяющих условию 0<xi<3,2.
Заменить четные элементы в массиве целых чисел нулями и вывести новый массив на экран дисплея.
Найти среднее арифметическое элементов массива целых чисел кратных пяти.
В массиве вещественных чисел найти минимальный элемент среди отрицательный элементов.
Найти сумму двузначных элементов в массиве целых чисел.
Найти количество и сумму положительных элементов в массиве вещественных чисел, удовлетворяющих условию 0<xi<5,7.
Заменить отрицательные элементы массива находящиеся на нечетных позициях единицей и вывести новый массив на экран дисплея.
Вывести на экран дисплея первый отрицательный элемент и его порядковый номер.
Найти сумму максимального и минимального элементов массива.
Найти произведение элементов находящихся на четных позициях в массиве.
Найти количество и порядковые номера элементов массива вещественных чисел, удовлетворяющих условию 2,1 xi 7.
Поменять местами в массиве вещественных чисел максимальный и минимальный элементы и вывести массив на экран дисплея.
Найти среднее геометрическое элементов массива вещественных чисел.
Найти порядковый номер максимального элемента среди четных значений массива целых чисел.
Задание №2. Обработка символьных массивов
Пример программы: Дан символьный массив заменить символы ‘:’, расположенные до первого двоеточия, символом ‘=’. Полученный массив вывести.
Программа имеет вид:
PROGRAM PR 4_2;
VAR I, P, N: INTEGER;
B: BOOLEAN;
C: ARRAY [ 1..30 ] OF CHAR;
BEGIN
WRITELN(‘Введите N’);
READ(N);
WRITELN(‘Введите элемента массива’);
FOR I:=1 TO N DO
READ(C[ I ]);
{Определение порядкового номера ‘:’}
B:=TRUE;
FOR I:=1 TO N DO
IF B AND (C[ I ]= ‘:’) THEN
BEGIN
B:=FALSE;
P:=I;
END;
{Замена одного символа на другой}
FOR I:=1 TO P DO
IF C[ I ]= ‘:’ THEN C[ I ]:= ‘=’;
{Вывод элементов преобразованного массива}
FOR I:=1 TO N DO
WRITE(C[ I ], ‘ ’)
END.
Варианты задания №2
В символьном массиве найти количество символов ‘!’ и количество символов ‘?’.
Вывести на экран дисплея все символы, находящиеся до первого двоеточия.
Найти общее количество символов ‘А’, ‘В’, ‘С’.
Определить порядковый номер символа‘D’, за которым следует символ тире.
Заменить в символьном массиве символы ‘;’ символом ‘2’ и вывести полученный массив на экран дисплея.
Определить в массиве количество пар, состоящих из символов точка, тире.
Найти в массиве последний символ ‘;’ и вывести все элементыы следующие за ним.
Определить порядковые номера символов ‘E’, ‘N’, ‘D’ в массиве.
Заменить первый символ ‘>’ в массиве на ‘=’ и вывести массив на экран дисплея.
В символьном массиве заменить все символы кроме ‘*’ , на восклицательный знак.
Поменять местами первый символ ‘А’ и последний символ ‘Y’, полученный массив вывести на экран дисплея.
Преобразовать символьный массив, заменив символы цифры символом ‘*’ и вывести массив на экран дисплея.
Вывести на экран дисплея элементы символьного массива, находящиеся между символами ‘D’ и ‘Z’.
Преобразовать и вывести на экран дисплея элементы символьного массива исключив из него все символы ‘А’ и ‘В’.
Указать порядковые номера символов, составляющих слово ‘Паскаль’, если таких символов нет – выдать сообщение об этом.
Поменять местами символы так, чтобы массив начинался словом END.
Преобразовать символьный массив, заменив все символы до первой запятой на символ ‘#’.
Подсчитать количество символов ‘+’, указав их позиции в массиве.
Определить порядковый номер последней запятой в массиве.
Преобразовать и вывести на экран дисплея символьный массив так, чтобы он начинался выражением а:=2.
Найти позиции и количество пар символов ‘А’, ‘А’.
Преобразовать массив, разделив его на два, в одном из которых были бы только буквы, в другом – остальные символы.
Преобразовать символьный массив, заменив символы цифры символом ‘Ж’ и вывести массив на экран дисплея.
Найти количество запятых в символьном массиве.
Определить порядковый номер символа ‘G’ и заменить его на символ ‘Q’.
Задание №3. Обработка матриц
Пример программы: Вычислить сумму элементов каждой строки матрицы А(6х5).
Программа имеет вид:
PROGRAM PR 4_3;
CONST N=6; M=5;
VAR I, J: INTEGER;
S: REAL;
A: ARRAY [ 1..N, 1..M ] OF REAL;
SUMSTR: ARRAY[ 1..N ] OF REAL;
BEGIN
{Заполнение матрицы случайным образом и вывод ее на экран дисплея в виде прямоугольной таблицы}
RANDOMIZE;
FOR I:=1 TO N DO
BEGIN
FOR J:=1 TO M DO
BEGIN
A[ I,J ]:=RANDOM*50-15;
WRITE(A[ I,J ]:6:2)
END;
WRITELN;
END;
{Вычисление суммы положительных элементов в строке}
FOR I:=1 TO N DO
BEGIN
S:=0;
FOR J:=1 TO M DO
IF A[ I,J ]>0 THEN S:=S+A[ I,J ];
SUMSTR[ I ]:=S;
END;
{Вывод значений сумм каждой строки}
FOR I:=1 TO N DO
WRITELN(I, ‘- ая строка : S=’, SUMSTR[ I ]:10:3);
READLN
END.
Схема алгоритма

Варианты задания №3
Вычислить и запомнить сумму и число положительных элементов каждого столбца матрицы А(8х7).
Вычислить сумму и число элементов матрицы А(10х10), находящихся под главной диагональю и над ней.
Вычислить сумму и число положительных элементов матрицы В(9х9), находящихся над главной диагональю.
Записать на место отрицательных элементов матрицы В(7х7) нули и вывести ее на печать.
Записать на место отрицательных элементов матрицы нули, а на место положительных – единицы. Вывести на печать нижнюю треугольную матрицу.
Найти в каждой строке матрицы А(8х10) максимальный и минимальный элементы. Матрицу вывести в виде таблицы.
Транспонировать матрицу В(8х8) и вывести ее таблицей.
Для каждой строки матрицы А(5х7) найти число элементов кратных пяти.
Найти максимальный элемент матрицы А(6х10) и его порядковый номер.
Найти в каждой строке матрицы В(8х8) наибольший элемент и поменять его местами с элементом главной диагонали. Вывести матрицу на экран дисплея.
Найти наибольший и наименьший элементы матрицы и поменять их местами.
Вычислить среднее арифметическое значений элементов каждой строки матрицы А(8х6).
Найти строку с наибольшей и наименьшей суммой элементов. Вывести на печать найденные строки и суммы их элементов для матрицы В(6х6).
Найти количество отрицательных элементов матрицы А(7х8).
Найти порядковый номер минимального элемента матрицы А(8х8).
Найти разность сумм первой и последней строк матрицы А(9х6).
Определить число четных элементов матрицы А(10х6).
Найти сумму элементов матрицы А(9х9) кратных четырем.
Поменять местами вторую и предпоследнюю строки матрицы В(8х8). Вывести ее на экран.
Найти количество элементов матрицы В(7х8) кратных пяти в третьем столбце.
Поменять местами первый и последний столбцы матрицы А(9х6) и вывести ее на экран.
Найти количество отрицательных элементов матрицы А(9х9).
Определить порядковый номер максимального элемента главной диагонали матрицы А(8х8).
Найти среднее арифметическое элементов матрицы А(7х9) больших девяти.
Определить минимальный элемент верхней треугольной матрицы для А(8х10).
Контрольные вопросы
Верно ли, что массив - это структурированный тип данных, состоящий из фиксированного числа элементов, имеющих один и тот же тип?
Какие типы данных не допустимы для компонентов массива? Почему?
В каком разделе (разделах) программы допустимо описание данных регулярного типа?
Где и как определяется общее число элементов массива?
Дайте определение индекса. Какие типы данных можно использовать при описании индекса?
Может ли левая граница индексов массива быть меньше правой?
Может ли левая граница индексов массива быть равной нулю?
Может ли левая граница индексов массива быть отрицательной?
Когда индекс элемента в массиве совпадает с порядковым номером этого элемента?
Что называется базовым типом?
Верно ли, что элементами массива могут быть данные любого типа, включая структурированные?
Может ли индекс быть выражением целого типа?
Может ли индекс быть выражением любого порядкового типа?
Какой массив называется одномерным?
Какой массив называется двумерным?
Верно ли, что одномерный массив соответствует понятию линейной таблицы (вектора)?
Верно ли, что двумерный массив соответствует понятию прямоугольной таблицы (матрице, набору векторов)?
Можно ли в описании массива использовать предварительно определенные константы?
Верно ли, что матрица расположена в памяти по строкам?
Всегда ли работа с массивом сводится к работе с его компонентами?
Обязательно ли количество элементов массива должно быть фиксированным, то есть определяться при трансляции программы?
Может ли процедура read(x) ввести весь массив х целиком?
Можно ли с помощью стандартной процедуры write(x) вывести весь массив х целиком?
Возможно ли следующее описание: var a: array[integer]
Предложите способы вывода элементов двумерного массива.
страница 1
скачать
Другие похожие работы: